mirror of
https://github.com/78/xiaozhi-esp32.git
synced 2026-02-16 17:08:07 +00:00
* Enhance memory management in asset download and OTA processes by replacing static buffer allocations with dynamic memory allocation using heap capabilities. Update SPIRAM configuration values for improved memory usage. Add logging for error handling in buffer allocation failures. Introduce a new parameter in CloseAudioChannel to control goodbye message sending in MQTT and WebSocket protocols. * Update component versions in idf_component.yml and refactor GIF decoder functions for improved performance. Bump versions for audio effects, audio codec, LED strip, and other dependencies. Change GIF read and seek functions to inline for optimization. * Update language files to include new phrases for flight mode and connection status across multiple locales. Added translations for "FLIGHT_MODE_ON", "FLIGHT_MODE_OFF", "CONNECTION_SUCCESSFUL", and "MODEM_INIT_ERROR" in various languages, enhancing user experience and localization support. * fix wechat display
66 lines
1.6 KiB
C++
66 lines
1.6 KiB
C++
#ifndef MQTT_PROTOCOL_H
|
|
#define MQTT_PROTOCOL_H
|
|
|
|
|
|
#include "protocol.h"
|
|
#include <mqtt.h>
|
|
#include <udp.h>
|
|
#include <cJSON.h>
|
|
#include <mbedtls/aes.h>
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/event_groups.h>
|
|
#include <esp_timer.h>
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <map>
|
|
#include <mutex>
|
|
#include <memory>
|
|
#include <atomic>
|
|
|
|
#define MQTT_PING_INTERVAL_SECONDS 90
|
|
#define MQTT_RECONNECT_INTERVAL_MS 60000
|
|
|
|
#define MQTT_PROTOCOL_SERVER_HELLO_EVENT (1 << 0)
|
|
|
|
class MqttProtocol : public Protocol {
|
|
public:
|
|
MqttProtocol();
|
|
~MqttProtocol();
|
|
|
|
bool Start() override;
|
|
bool SendAudio(std::unique_ptr<AudioStreamPacket> packet) override;
|
|
bool OpenAudioChannel() override;
|
|
void CloseAudioChannel(bool send_goodbye = true) override;
|
|
bool IsAudioChannelOpened() const override;
|
|
|
|
private:
|
|
// Alive flag for safe scheduled callbacks - set to false in destructor
|
|
std::shared_ptr<std::atomic<bool>> alive_ = std::make_shared<std::atomic<bool>>(true);
|
|
|
|
EventGroupHandle_t event_group_handle_;
|
|
|
|
std::string publish_topic_;
|
|
|
|
std::mutex channel_mutex_;
|
|
std::unique_ptr<Mqtt> mqtt_;
|
|
std::unique_ptr<Udp> udp_;
|
|
mbedtls_aes_context aes_ctx_;
|
|
std::string aes_nonce_;
|
|
std::string udp_server_;
|
|
int udp_port_;
|
|
uint32_t local_sequence_;
|
|
uint32_t remote_sequence_;
|
|
esp_timer_handle_t reconnect_timer_;
|
|
|
|
bool StartMqttClient(bool report_error=false);
|
|
void ParseServerHello(const cJSON* root);
|
|
std::string DecodeHexString(const std::string& hex_string);
|
|
|
|
bool SendText(const std::string& text) override;
|
|
std::string GetHelloMessage();
|
|
};
|
|
|
|
|
|
#endif // MQTT_PROTOCOL_H
|