From f7284a57dfbaf0bd8ae3b277b7c1b40aa3b79785 Mon Sep 17 00:00:00 2001 From: Xiaoxia Date: Sat, 31 Jan 2026 22:58:08 +0800 Subject: [PATCH] =?UTF-8?q?Enhance=20memory=20management=20in=20asset=20do?= =?UTF-8?q?wnload=20and=20OTA=20processes=20by=20repl=E2=80=A6=20(#1716)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- main/assets.cc | 14 ++++++- main/assets/locales/ar-SA/language.json | 6 ++- main/assets/locales/bg-BG/language.json | 8 ++-- main/assets/locales/ca-ES/language.json | 8 ++-- main/assets/locales/cs-CZ/language.json | 6 ++- main/assets/locales/da-DK/language.json | 8 ++-- main/assets/locales/de-DE/language.json | 6 ++- main/assets/locales/el-GR/language.json | 8 ++-- main/assets/locales/en-US/language.json | 2 + main/assets/locales/es-ES/language.json | 6 ++- main/assets/locales/fa-IR/language.json | 8 ++-- main/assets/locales/fi-FI/language.json | 6 ++- main/assets/locales/fil-PH/language.json | 8 ++-- main/assets/locales/fr-FR/language.json | 6 ++- main/assets/locales/he-IL/language.json | 8 ++-- main/assets/locales/hi-IN/language.json | 6 ++- main/assets/locales/hr-HR/language.json | 8 ++-- main/assets/locales/hu-HU/language.json | 8 ++-- main/assets/locales/id-ID/language.json | 6 ++- main/assets/locales/it-IT/language.json | 6 ++- main/assets/locales/ja-JP/language.json | 6 ++- main/assets/locales/ko-KR/language.json | 5 ++- main/assets/locales/ms-MY/language.json | 8 ++-- main/assets/locales/nb-NO/language.json | 8 ++-- main/assets/locales/nl-NL/language.json | 8 ++-- main/assets/locales/pl-PL/language.json | 6 ++- main/assets/locales/pt-PT/language.json | 6 ++- main/assets/locales/ro-RO/language.json | 6 ++- main/assets/locales/ru-RU/language.json | 6 ++- main/assets/locales/sk-SK/language.json | 8 ++-- main/assets/locales/sl-SI/language.json | 8 ++-- main/assets/locales/sr-RS/language.json | 8 ++-- main/assets/locales/sv-SE/language.json | 8 ++-- main/assets/locales/th-TH/language.json | 5 ++- main/assets/locales/tr-TR/language.json | 6 ++- main/assets/locales/uk-UA/language.json | 6 ++- main/assets/locales/vi-VN/language.json | 5 ++- main/assets/locales/zh-CN/language.json | 5 ++- main/assets/locales/zh-TW/language.json | 6 ++- main/boards/common/nt26_board.cc | 3 ++ main/display/lcd_display.cc | 24 ++++++------ main/display/lvgl_display/gif/gifdec.c | 4 +- main/idf_component.yml | 22 +++++------ main/ota.cc | 49 ++++++++++++++++-------- main/protocols/mqtt_protocol.cc | 21 ++++++---- main/protocols/mqtt_protocol.h | 2 +- main/protocols/protocol.h | 2 +- main/protocols/websocket_protocol.cc | 3 +- main/protocols/websocket_protocol.h | 2 +- sdkconfig.defaults.esp32s3 | 4 +- 50 files changed, 277 insertions(+), 125 deletions(-) diff --git a/main/assets.cc b/main/assets.cc index f363cae..ad61944 100644 --- a/main/assets.cc +++ b/main/assets.cc @@ -12,6 +12,7 @@ #include #include +#include #include @@ -464,16 +465,21 @@ bool Assets::Download(std::string url, std::functionRead(buffer, sizeof(buffer)); + int ret = http->Read(buffer, SECTOR_SIZE); if (ret < 0) { ESP_LOGE(TAG, "Failed to read HTTP data: %s", esp_err_to_name(ret)); + heap_caps_free(buffer); return false; } @@ -493,6 +499,7 @@ bool Assets::Download(std::string url, std::function partition_->size) { ESP_LOGE(TAG, "Sector end (%u) exceeds partition size (%lu)", sector_end, partition_->size); + heap_caps_free(buffer); return false; } @@ -500,6 +507,7 @@ bool Assets::Download(std::string url, std::functionClose(); + heap_caps_free(buffer); if (total_written != content_length) { ESP_LOGE(TAG, "Downloaded size (%u) does not match expected size (%u)", total_written, content_length); diff --git a/main/assets/locales/ar-SA/language.json b/main/assets/locales/ar-SA/language.json index 88263e4..31d3078 100644 --- a/main/assets/locales/ar-SA/language.json +++ b/main/assets/locales/ar-SA/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "جاري تحميل الموارد...", "PLEASE_WAIT": "يرجى الانتظار...", "FOUND_NEW_ASSETS": "تم العثور على موارد جديدة: %s", - "HELLO_MY_FRIEND": "مرحباً، صديقي!" + "HELLO_MY_FRIEND": "مرحباً، صديقي!", + "CONNECTION_SUCCESSFUL": "تم الاتصال بنجاح", + "FLIGHT_MODE_OFF": "وضع الطيران معطل", + "FLIGHT_MODE_ON": "وضع الطيران قيد التشغيل", + "MODEM_INIT_ERROR": "فشل تهيئة المودم" } } \ No newline at end of file diff --git a/main/assets/locales/bg-BG/language.json b/main/assets/locales/bg-BG/language.json index 9a6b05e..d222be6 100644 --- a/main/assets/locales/bg-BG/language.json +++ b/main/assets/locales/bg-BG/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Намерени нови ресурси: %s", "DOWNLOAD_ASSETS_FAILED": "Неуспешно изтегляне на ресурси", "LOADING_ASSETS": "Зареждане на ресурси...", - "HELLO_MY_FRIEND": "Здравей, мой приятел!" + "HELLO_MY_FRIEND": "Здравей, мой приятел!", + "FLIGHT_MODE_OFF": "Режим на самолет е изключен", + "FLIGHT_MODE_ON": "Режим на самолет е включен", + "MODEM_INIT_ERROR": "Неуспешна инициализация на модема" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/ca-ES/language.json b/main/assets/locales/ca-ES/language.json index 02337e3..566ceab 100644 --- a/main/assets/locales/ca-ES/language.json +++ b/main/assets/locales/ca-ES/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "S'han trobat nous recursos: %s", "DOWNLOAD_ASSETS_FAILED": "No s'han pogut descarregar els recursos", "LOADING_ASSETS": "Carregant recursos...", - "HELLO_MY_FRIEND": "Hola, amic meu!" + "HELLO_MY_FRIEND": "Hola, amic meu!", + "FLIGHT_MODE_OFF": "El mode avió està desactivat", + "FLIGHT_MODE_ON": "El mode avió està activat", + "MODEM_INIT_ERROR": "Error d'inicialització del mòdem" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/cs-CZ/language.json b/main/assets/locales/cs-CZ/language.json index 1e18a5c..7386fdf 100644 --- a/main/assets/locales/cs-CZ/language.json +++ b/main/assets/locales/cs-CZ/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Načítání prostředků...", "PLEASE_WAIT": "Prosím čekejte...", "FOUND_NEW_ASSETS": "Nalezeny nové prostředky: %s", - "HELLO_MY_FRIEND": "Ahoj, můj příteli!" + "HELLO_MY_FRIEND": "Ahoj, můj příteli!", + "CONNECTION_SUCCESSFUL": "Připojení úspěšné", + "FLIGHT_MODE_OFF": "Letecký režim je vypnutý", + "FLIGHT_MODE_ON": "Letecký režim je zapnutý", + "MODEM_INIT_ERROR": "Chyba inicializace modemu" } } \ No newline at end of file diff --git a/main/assets/locales/da-DK/language.json b/main/assets/locales/da-DK/language.json index 918598b..96c9d72 100644 --- a/main/assets/locales/da-DK/language.json +++ b/main/assets/locales/da-DK/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Fandt nye ressourcer: %s", "DOWNLOAD_ASSETS_FAILED": "Download af ressourcer mislykkedes", "LOADING_ASSETS": "Indlæser ressourcer...", - "HELLO_MY_FRIEND": "Hej, min ven!" + "HELLO_MY_FRIEND": "Hej, min ven!", + "FLIGHT_MODE_OFF": "Flytilstand er slukket", + "FLIGHT_MODE_ON": "Flytilstand er tændt", + "MODEM_INIT_ERROR": "Modeminitialisering mislykkedes" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/de-DE/language.json b/main/assets/locales/de-DE/language.json index 724e267..20dfbca 100644 --- a/main/assets/locales/de-DE/language.json +++ b/main/assets/locales/de-DE/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Ressourcen werden geladen...", "PLEASE_WAIT": "Bitte warten...", "FOUND_NEW_ASSETS": "Neue Ressourcen gefunden: %s", - "HELLO_MY_FRIEND": "Hallo, mein Freund!" + "HELLO_MY_FRIEND": "Hallo, mein Freund!", + "CONNECTION_SUCCESSFUL": "Verbindung erfolgreich", + "FLIGHT_MODE_OFF": "Flugmodus ist deaktiviert", + "FLIGHT_MODE_ON": "Flugmodus ist aktiviert", + "MODEM_INIT_ERROR": "Modem-Initialisierung fehlgeschlagen" } } \ No newline at end of file diff --git a/main/assets/locales/el-GR/language.json b/main/assets/locales/el-GR/language.json index ccbea53..287db5e 100644 --- a/main/assets/locales/el-GR/language.json +++ b/main/assets/locales/el-GR/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Βρέθηκαν νέοι πόροι: %s", "DOWNLOAD_ASSETS_FAILED": "Αποτυχία λήψης πόρων", "LOADING_ASSETS": "Φόρτωση πόρων...", - "HELLO_MY_FRIEND": "Γεια σου, φίλε μου!" + "HELLO_MY_FRIEND": "Γεια σου, φίλε μου!", + "FLIGHT_MODE_OFF": "Η λειτουργία πτήσης είναι απενεργοποιημένη", + "FLIGHT_MODE_ON": "Η λειτουργία πτήσης είναι ενεργή", + "MODEM_INIT_ERROR": "Αποτυχία αρχικοποίησης modem" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/en-US/language.json b/main/assets/locales/en-US/language.json index 426015e..8bb764a 100644 --- a/main/assets/locales/en-US/language.json +++ b/main/assets/locales/en-US/language.json @@ -13,6 +13,8 @@ "REG_ERROR": "Unable to access network, please check SIM card status", "MODEM_INIT_ERROR": "Modem initialization failed", "DETECTING_MODULE": "Detecting module...", + "FLIGHT_MODE_ON": "Flight mode is on", + "FLIGHT_MODE_OFF": "Flight mode is off", "REGISTERING_NETWORK": "Waiting for network...", "CHECKING_NEW_VERSION": "Checking for new version...", "CHECK_NEW_VERSION_FAILED": "Check for new version failed, will retry in %d seconds: %s", diff --git a/main/assets/locales/es-ES/language.json b/main/assets/locales/es-ES/language.json index e7f349b..9722fc4 100644 --- a/main/assets/locales/es-ES/language.json +++ b/main/assets/locales/es-ES/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Cargando recursos...", "PLEASE_WAIT": "Por favor espere...", "FOUND_NEW_ASSETS": "Encontrados nuevos recursos: %s", - "HELLO_MY_FRIEND": "¡Hola, mi amigo!" + "HELLO_MY_FRIEND": "¡Hola, mi amigo!", + "CONNECTION_SUCCESSFUL": "Conexión exitosa", + "FLIGHT_MODE_OFF": "El modo avión está desactivado", + "FLIGHT_MODE_ON": "El modo avión está activado", + "MODEM_INIT_ERROR": "Error de inicialización del módem" } } \ No newline at end of file diff --git a/main/assets/locales/fa-IR/language.json b/main/assets/locales/fa-IR/language.json index 784f6bd..597334e 100644 --- a/main/assets/locales/fa-IR/language.json +++ b/main/assets/locales/fa-IR/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "منابع جدید یافت شد: %s", "DOWNLOAD_ASSETS_FAILED": "دانلود منابع ناموفق بود", "LOADING_ASSETS": "بارگذاری منابع...", - "HELLO_MY_FRIEND": "سلام، دوست من!" + "HELLO_MY_FRIEND": "سلام، دوست من!", + "FLIGHT_MODE_OFF": "حالت پرواز خاموش است", + "FLIGHT_MODE_ON": "حالت پرواز روشن است", + "MODEM_INIT_ERROR": "خطا در راه‌اندازی مودم" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/fi-FI/language.json b/main/assets/locales/fi-FI/language.json index 2326ee4..7ca8db7 100644 --- a/main/assets/locales/fi-FI/language.json +++ b/main/assets/locales/fi-FI/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Ladataan resursseja...", "PLEASE_WAIT": "Odota hetki...", "FOUND_NEW_ASSETS": "Löydetty uusia resursseja: %s", - "HELLO_MY_FRIEND": "Hei, ystäväni!" + "HELLO_MY_FRIEND": "Hei, ystäväni!", + "CONNECTION_SUCCESSFUL": "Yhteys onnistui", + "FLIGHT_MODE_OFF": "Lentotila on pois päältä", + "FLIGHT_MODE_ON": "Lentotila on päällä", + "MODEM_INIT_ERROR": "Modeemin alustus epäonnistui" } } \ No newline at end of file diff --git a/main/assets/locales/fil-PH/language.json b/main/assets/locales/fil-PH/language.json index 2d35fc5..6907698 100644 --- a/main/assets/locales/fil-PH/language.json +++ b/main/assets/locales/fil-PH/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Nakahanap ng mga bagong assets: %s", "DOWNLOAD_ASSETS_FAILED": "Nabigo ang pag-download ng mga assets", "LOADING_ASSETS": "Nilo-load ang mga assets...", - "HELLO_MY_FRIEND": "Kumusta, kaibigan ko!" + "HELLO_MY_FRIEND": "Kumusta, kaibigan ko!", + "FLIGHT_MODE_OFF": "Naka-off ang flight mode", + "FLIGHT_MODE_ON": "Naka-on ang flight mode", + "MODEM_INIT_ERROR": "Nabigo ang pag-initialize ng modem" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/fr-FR/language.json b/main/assets/locales/fr-FR/language.json index 244cade..d1e16da 100644 --- a/main/assets/locales/fr-FR/language.json +++ b/main/assets/locales/fr-FR/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Chargement des ressources...", "PLEASE_WAIT": "Veuillez patienter...", "FOUND_NEW_ASSETS": "Nouvelles ressources trouvées: %s", - "HELLO_MY_FRIEND": "Bonjour, mon ami !" + "HELLO_MY_FRIEND": "Bonjour, mon ami !", + "CONNECTION_SUCCESSFUL": "Connexion réussie", + "FLIGHT_MODE_OFF": "Le mode avion est désactivé", + "FLIGHT_MODE_ON": "Le mode avion est activé", + "MODEM_INIT_ERROR": "Échec de l'initialisation du modem" } } \ No newline at end of file diff --git a/main/assets/locales/he-IL/language.json b/main/assets/locales/he-IL/language.json index e3570c0..cac29a4 100644 --- a/main/assets/locales/he-IL/language.json +++ b/main/assets/locales/he-IL/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "נמצאו משאבים חדשים: %s", "DOWNLOAD_ASSETS_FAILED": "הורדת משאבים נכשלה", "LOADING_ASSETS": "טוען משאבים...", - "HELLO_MY_FRIEND": "שלום, ידידי!" + "HELLO_MY_FRIEND": "שלום, ידידי!", + "FLIGHT_MODE_OFF": "מצב טיסה כבוי", + "FLIGHT_MODE_ON": "מצב טיסה מופעל", + "MODEM_INIT_ERROR": "אתחול המודם נכשל" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/hi-IN/language.json b/main/assets/locales/hi-IN/language.json index 732176e..25af4eb 100644 --- a/main/assets/locales/hi-IN/language.json +++ b/main/assets/locales/hi-IN/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "संसाधन लोड हो रहे हैं...", "PLEASE_WAIT": "कृपया प्रतीक्षा करें...", "FOUND_NEW_ASSETS": "नए संसाधन मिले: %s", - "HELLO_MY_FRIEND": "नमस्ते, मेरे दोस्त!" + "HELLO_MY_FRIEND": "नमस्ते, मेरे दोस्त!", + "CONNECTION_SUCCESSFUL": "कनेक्शन सफल", + "FLIGHT_MODE_OFF": "फ़्लाइट मोड बंद है", + "FLIGHT_MODE_ON": "फ़्लाइट मोड चालू है", + "MODEM_INIT_ERROR": "मॉडेम आरंभीकरण विफल" } } \ No newline at end of file diff --git a/main/assets/locales/hr-HR/language.json b/main/assets/locales/hr-HR/language.json index 12ce157..25e5821 100644 --- a/main/assets/locales/hr-HR/language.json +++ b/main/assets/locales/hr-HR/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Pronađeni novi resursi: %s", "DOWNLOAD_ASSETS_FAILED": "Preuzimanje resursa nije uspjelo", "LOADING_ASSETS": "Učitavanje resursa...", - "HELLO_MY_FRIEND": "Bok, moj prijatelju!" + "HELLO_MY_FRIEND": "Bok, moj prijatelju!", + "FLIGHT_MODE_OFF": "Način rada u zrakoplovu je isključen", + "FLIGHT_MODE_ON": "Način rada u zrakoplovu je uključen", + "MODEM_INIT_ERROR": "Neuspjela inicijalizacija modema" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/hu-HU/language.json b/main/assets/locales/hu-HU/language.json index 399de04..e6594ef 100644 --- a/main/assets/locales/hu-HU/language.json +++ b/main/assets/locales/hu-HU/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Új erőforrások találva: %s", "DOWNLOAD_ASSETS_FAILED": "Az erőforrások letöltése sikertelen", "LOADING_ASSETS": "Erőforrások betöltése...", - "HELLO_MY_FRIEND": "Helló, barátom!" + "HELLO_MY_FRIEND": "Helló, barátom!", + "FLIGHT_MODE_OFF": "A repülési mód ki van kapcsolva", + "FLIGHT_MODE_ON": "A repülési mód be van kapcsolva", + "MODEM_INIT_ERROR": "A modem inicializálása sikertelen" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/id-ID/language.json b/main/assets/locales/id-ID/language.json index 11224a6..012b1f5 100644 --- a/main/assets/locales/id-ID/language.json +++ b/main/assets/locales/id-ID/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Memuat aset...", "PLEASE_WAIT": "Mohon tunggu...", "FOUND_NEW_ASSETS": "Ditemukan aset baru: %s", - "HELLO_MY_FRIEND": "Halo, teman saya!" + "HELLO_MY_FRIEND": "Halo, teman saya!", + "CONNECTION_SUCCESSFUL": "Koneksi berhasil", + "FLIGHT_MODE_OFF": "Mode pesawat nonaktif", + "FLIGHT_MODE_ON": "Mode pesawat aktif", + "MODEM_INIT_ERROR": "Gagal menginisialisasi modem" } } \ No newline at end of file diff --git a/main/assets/locales/it-IT/language.json b/main/assets/locales/it-IT/language.json index 54cc9bc..f67c7ea 100644 --- a/main/assets/locales/it-IT/language.json +++ b/main/assets/locales/it-IT/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Caricamento risorse...", "PLEASE_WAIT": "Attendere prego...", "FOUND_NEW_ASSETS": "Trovate nuove risorse: %s", - "HELLO_MY_FRIEND": "Ciao, amico mio!" + "HELLO_MY_FRIEND": "Ciao, amico mio!", + "CONNECTION_SUCCESSFUL": "Connessione riuscita", + "FLIGHT_MODE_OFF": "La modalità aereo è disattivata", + "FLIGHT_MODE_ON": "La modalità aereo è attiva", + "MODEM_INIT_ERROR": "Inizializzazione modem non riuscita" } } \ No newline at end of file diff --git a/main/assets/locales/ja-JP/language.json b/main/assets/locales/ja-JP/language.json index 1c2bd82..20dbe5d 100644 --- a/main/assets/locales/ja-JP/language.json +++ b/main/assets/locales/ja-JP/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "アセットを読み込み中...", "PLEASE_WAIT": "お待ちください...", "FOUND_NEW_ASSETS": "新しいアセットが見つかりました: %s", - "HELLO_MY_FRIEND": "こんにちは、友達!" + "HELLO_MY_FRIEND": "こんにちは、友達!", + "CONNECTION_SUCCESSFUL": "接続成功", + "FLIGHT_MODE_OFF": "機内モードがオフです", + "FLIGHT_MODE_ON": "機内モードがオンです", + "MODEM_INIT_ERROR": "モデムの初期化に失敗しました" } } \ No newline at end of file diff --git a/main/assets/locales/ko-KR/language.json b/main/assets/locales/ko-KR/language.json index 1d65bfb..4ccc066 100644 --- a/main/assets/locales/ko-KR/language.json +++ b/main/assets/locales/ko-KR/language.json @@ -51,6 +51,9 @@ "LOADING_ASSETS": "에셋 로딩 중...", "PLEASE_WAIT": "잠시 기다려 주세요...", "FOUND_NEW_ASSETS": "새로운 에셋을 발견했습니다: %s", - "HELLO_MY_FRIEND": "안녕하세요, 친구!" + "HELLO_MY_FRIEND": "안녕하세요, 친구!", + "FLIGHT_MODE_OFF": "비행기 모드가 꺼져 있습니다", + "FLIGHT_MODE_ON": "비행기 모드가 켜져 있습니다", + "MODEM_INIT_ERROR": "모뎀 초기화 실패" } } \ No newline at end of file diff --git a/main/assets/locales/ms-MY/language.json b/main/assets/locales/ms-MY/language.json index 5a6fc0b..4797cfc 100644 --- a/main/assets/locales/ms-MY/language.json +++ b/main/assets/locales/ms-MY/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Menemui aset baharu: %s", "DOWNLOAD_ASSETS_FAILED": "Gagal memuat turun aset", "LOADING_ASSETS": "Memuatkan aset...", - "HELLO_MY_FRIEND": "Hai, kawan saya!" + "HELLO_MY_FRIEND": "Hai, kawan saya!", + "FLIGHT_MODE_OFF": "Mod penerbangan dimatikan", + "FLIGHT_MODE_ON": "Mod penerbangan dihidupkan", + "MODEM_INIT_ERROR": "Modem gagal dimulakan" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/nb-NO/language.json b/main/assets/locales/nb-NO/language.json index 71b0a57..4540e63 100644 --- a/main/assets/locales/nb-NO/language.json +++ b/main/assets/locales/nb-NO/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Fant nye ressurser: %s", "DOWNLOAD_ASSETS_FAILED": "Nedlasting av ressurser mislyktes", "LOADING_ASSETS": "Laster ressurser...", - "HELLO_MY_FRIEND": "Hei, min venn!" + "HELLO_MY_FRIEND": "Hei, min venn!", + "FLIGHT_MODE_OFF": "Flymodus er av", + "FLIGHT_MODE_ON": "Flymodus er på", + "MODEM_INIT_ERROR": "Modeminitialisering mislyktes" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/nl-NL/language.json b/main/assets/locales/nl-NL/language.json index 2c1a360..1863b71 100644 --- a/main/assets/locales/nl-NL/language.json +++ b/main/assets/locales/nl-NL/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Nieuwe bronnen gevonden: %s", "DOWNLOAD_ASSETS_FAILED": "Downloaden van bronnen mislukt", "LOADING_ASSETS": "Bronnen laden...", - "HELLO_MY_FRIEND": "Hallo, mijn vriend!" + "HELLO_MY_FRIEND": "Hallo, mijn vriend!", + "FLIGHT_MODE_OFF": "Vliegtuigmodus is uitgeschakeld", + "FLIGHT_MODE_ON": "Vliegtuigmodus is ingeschakeld", + "MODEM_INIT_ERROR": "Modeminitialisatie mislukt" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/pl-PL/language.json b/main/assets/locales/pl-PL/language.json index b54c292..ba02fb9 100644 --- a/main/assets/locales/pl-PL/language.json +++ b/main/assets/locales/pl-PL/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Ładowanie zasobów...", "PLEASE_WAIT": "Proszę czekać...", "FOUND_NEW_ASSETS": "Znaleziono nowe zasoby: %s", - "HELLO_MY_FRIEND": "Cześć, mój przyjacielu!" + "HELLO_MY_FRIEND": "Cześć, mój przyjacielu!", + "CONNECTION_SUCCESSFUL": "Połączenie udane", + "FLIGHT_MODE_OFF": "Tryb samolotowy jest wyłączony", + "FLIGHT_MODE_ON": "Tryb samolotowy jest włączony", + "MODEM_INIT_ERROR": "Inicjalizacja modemu nie powiodła się" } } \ No newline at end of file diff --git a/main/assets/locales/pt-PT/language.json b/main/assets/locales/pt-PT/language.json index da0e0e2..d2c125a 100644 --- a/main/assets/locales/pt-PT/language.json +++ b/main/assets/locales/pt-PT/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "A carregar recursos...", "PLEASE_WAIT": "Por favor aguarde...", "FOUND_NEW_ASSETS": "Encontrados novos recursos: %s", - "HELLO_MY_FRIEND": "Olá, meu amigo!" + "HELLO_MY_FRIEND": "Olá, meu amigo!", + "CONNECTION_SUCCESSFUL": "Ligação bem-sucedida", + "FLIGHT_MODE_OFF": "O modo avião está desativado", + "FLIGHT_MODE_ON": "O modo avião está ativado", + "MODEM_INIT_ERROR": "Falha na inicialização do modem" } } \ No newline at end of file diff --git a/main/assets/locales/ro-RO/language.json b/main/assets/locales/ro-RO/language.json index d8ec774..65ac52b 100644 --- a/main/assets/locales/ro-RO/language.json +++ b/main/assets/locales/ro-RO/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Se încarcă resursele...", "PLEASE_WAIT": "Vă rugăm să așteptați...", "FOUND_NEW_ASSETS": "S-au găsit resurse noi: %s", - "HELLO_MY_FRIEND": "Salut, prietenul meu!" + "HELLO_MY_FRIEND": "Salut, prietenul meu!", + "CONNECTION_SUCCESSFUL": "Conexiune reușită", + "FLIGHT_MODE_OFF": "Modul avion este dezactivat", + "FLIGHT_MODE_ON": "Modul avion este activat", + "MODEM_INIT_ERROR": "Inițializarea modemului a eșuat" } } \ No newline at end of file diff --git a/main/assets/locales/ru-RU/language.json b/main/assets/locales/ru-RU/language.json index ebac606..4fb278d 100644 --- a/main/assets/locales/ru-RU/language.json +++ b/main/assets/locales/ru-RU/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Загрузка ресурсов...", "PLEASE_WAIT": "Пожалуйста, подождите...", "FOUND_NEW_ASSETS": "Найдены новые ресурсы: %s", - "HELLO_MY_FRIEND": "Привет, мой друг!" + "HELLO_MY_FRIEND": "Привет, мой друг!", + "CONNECTION_SUCCESSFUL": "Подключение успешно", + "FLIGHT_MODE_OFF": "Режим полета выключен", + "FLIGHT_MODE_ON": "Режим полета включен", + "MODEM_INIT_ERROR": "Ошибка инициализации модема" } } \ No newline at end of file diff --git a/main/assets/locales/sk-SK/language.json b/main/assets/locales/sk-SK/language.json index 5c56f48..e7d029c 100644 --- a/main/assets/locales/sk-SK/language.json +++ b/main/assets/locales/sk-SK/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Nájdené nové zdroje: %s", "DOWNLOAD_ASSETS_FAILED": "Sťahovanie zdrojov zlyhalo", "LOADING_ASSETS": "Načítavanie zdrojov...", - "HELLO_MY_FRIEND": "Ahoj, môj priateľ!" + "HELLO_MY_FRIEND": "Ahoj, môj priateľ!", + "FLIGHT_MODE_OFF": "Letecký režim je vypnutý", + "FLIGHT_MODE_ON": "Letecký režim je zapnutý", + "MODEM_INIT_ERROR": "Chyba inicializácie modemu" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/sl-SI/language.json b/main/assets/locales/sl-SI/language.json index 0513a7d..8e5a45b 100644 --- a/main/assets/locales/sl-SI/language.json +++ b/main/assets/locales/sl-SI/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Najdeni novi viri: %s", "DOWNLOAD_ASSETS_FAILED": "Prenos virov ni uspel", "LOADING_ASSETS": "Nalaganje virov...", - "HELLO_MY_FRIEND": "Pozdravljeni, moj prijatelj!" + "HELLO_MY_FRIEND": "Pozdravljeni, moj prijatelj!", + "FLIGHT_MODE_OFF": "Način leta je izklopljen", + "FLIGHT_MODE_ON": "Način leta je vklopljen", + "MODEM_INIT_ERROR": "Inicializacija modema ni uspela" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/sr-RS/language.json b/main/assets/locales/sr-RS/language.json index b86bf0a..172d3fe 100644 --- a/main/assets/locales/sr-RS/language.json +++ b/main/assets/locales/sr-RS/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Пронађени нови ресурси: %s", "DOWNLOAD_ASSETS_FAILED": "Преузимање ресурса није успело", "LOADING_ASSETS": "Учитавање ресурса...", - "HELLO_MY_FRIEND": "Здраво, пријатељу!" + "HELLO_MY_FRIEND": "Здраво, пријатељу!", + "FLIGHT_MODE_OFF": "Режим лета је искључен", + "FLIGHT_MODE_ON": "Режим лета је укључен", + "MODEM_INIT_ERROR": "Иницијализација модема није успела" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/sv-SE/language.json b/main/assets/locales/sv-SE/language.json index 444cac9..d85fe5b 100644 --- a/main/assets/locales/sv-SE/language.json +++ b/main/assets/locales/sv-SE/language.json @@ -51,7 +51,9 @@ "FOUND_NEW_ASSETS": "Hittade nya resurser: %s", "DOWNLOAD_ASSETS_FAILED": "Nedladdning av resurser misslyckades", "LOADING_ASSETS": "Laddar resurser...", - "HELLO_MY_FRIEND": "Hej, min vän!" + "HELLO_MY_FRIEND": "Hej, min vän!", + "FLIGHT_MODE_OFF": "Flygläge är av", + "FLIGHT_MODE_ON": "Flygläge är på", + "MODEM_INIT_ERROR": "Modeminitiering misslyckades" } -} - +} \ No newline at end of file diff --git a/main/assets/locales/th-TH/language.json b/main/assets/locales/th-TH/language.json index e97fed1..6c05468 100644 --- a/main/assets/locales/th-TH/language.json +++ b/main/assets/locales/th-TH/language.json @@ -51,6 +51,9 @@ "LOADING_ASSETS": "กำลังโหลดทรัพยากร...", "PLEASE_WAIT": "กรุณารอสักครู่...", "FOUND_NEW_ASSETS": "พบทรัพยากรใหม่: %s", - "HELLO_MY_FRIEND": "สวัสดี เพื่อนของฉัน!" + "HELLO_MY_FRIEND": "สวัสดี เพื่อนของฉัน!", + "FLIGHT_MODE_OFF": "โหมดเครื่องบินปิดอยู่", + "FLIGHT_MODE_ON": "โหมดเครื่องบินเปิดอยู่", + "MODEM_INIT_ERROR": "การเริ่มต้นโมเด็มล้มเหลว" } } \ No newline at end of file diff --git a/main/assets/locales/tr-TR/language.json b/main/assets/locales/tr-TR/language.json index 4d0f70f..dacfa76 100644 --- a/main/assets/locales/tr-TR/language.json +++ b/main/assets/locales/tr-TR/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Varlıklar yükleniyor...", "PLEASE_WAIT": "Lütfen bekleyin...", "FOUND_NEW_ASSETS": "Yeni varlıklar bulundu: %s", - "HELLO_MY_FRIEND": "Merhaba, arkadaşım!" + "HELLO_MY_FRIEND": "Merhaba, arkadaşım!", + "CONNECTION_SUCCESSFUL": "Bağlantı başarılı", + "FLIGHT_MODE_OFF": "Uçak modu kapalı", + "FLIGHT_MODE_ON": "Uçak modu açık", + "MODEM_INIT_ERROR": "Modem başlatma hatası" } } \ No newline at end of file diff --git a/main/assets/locales/uk-UA/language.json b/main/assets/locales/uk-UA/language.json index d844a38..3f07c2a 100644 --- a/main/assets/locales/uk-UA/language.json +++ b/main/assets/locales/uk-UA/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "Завантаження ресурсів...", "PLEASE_WAIT": "Будь ласка, зачекайте...", "FOUND_NEW_ASSETS": "Знайдено нові ресурси: %s", - "HELLO_MY_FRIEND": "Привіт, мій друже!" + "HELLO_MY_FRIEND": "Привіт, мій друже!", + "CONNECTION_SUCCESSFUL": "Підключення успішне", + "FLIGHT_MODE_OFF": "Режим польоту вимкнено", + "FLIGHT_MODE_ON": "Режим польоту увімкнено", + "MODEM_INIT_ERROR": "Помилка ініціалізації модему" } } \ No newline at end of file diff --git a/main/assets/locales/vi-VN/language.json b/main/assets/locales/vi-VN/language.json index e010b7b..ece31d3 100644 --- a/main/assets/locales/vi-VN/language.json +++ b/main/assets/locales/vi-VN/language.json @@ -51,6 +51,9 @@ "LOADING_ASSETS": "Đang tải tài nguyên...", "PLEASE_WAIT": "Vui lòng đợi...", "FOUND_NEW_ASSETS": "Tìm thấy tài nguyên mới: %s", - "HELLO_MY_FRIEND": "Xin chào, bạn của tôi!" + "HELLO_MY_FRIEND": "Xin chào, bạn của tôi!", + "FLIGHT_MODE_OFF": "Chế độ máy bay đang tắt", + "FLIGHT_MODE_ON": "Chế độ máy bay đang bật", + "MODEM_INIT_ERROR": "Khởi tạo modem thất bại" } } \ No newline at end of file diff --git a/main/assets/locales/zh-CN/language.json b/main/assets/locales/zh-CN/language.json index 83ad54a..a21f51a 100644 --- a/main/assets/locales/zh-CN/language.json +++ b/main/assets/locales/zh-CN/language.json @@ -51,6 +51,9 @@ "LOADING_ASSETS": "加载资源...", "PLEASE_WAIT": "请稍候...", "FOUND_NEW_ASSETS": "发现新资源: %s", - "HELLO_MY_FRIEND": "你好,我的朋友!" + "HELLO_MY_FRIEND": "你好,我的朋友!", + "CONNECTION_SUCCESSFUL": "连接成功", + "FLIGHT_MODE_OFF": "飞行模式已关闭", + "FLIGHT_MODE_ON": "飞行模式已开启" } } \ No newline at end of file diff --git a/main/assets/locales/zh-TW/language.json b/main/assets/locales/zh-TW/language.json index f035b36..bbabcd9 100644 --- a/main/assets/locales/zh-TW/language.json +++ b/main/assets/locales/zh-TW/language.json @@ -50,6 +50,10 @@ "LOADING_ASSETS": "載入資源...", "PLEASE_WAIT": "請稍候...", "FOUND_NEW_ASSETS": "發現新資源: %s", - "HELLO_MY_FRIEND": "你好,我的朋友!" + "HELLO_MY_FRIEND": "你好,我的朋友!", + "CONNECTION_SUCCESSFUL": "連線成功", + "FLIGHT_MODE_OFF": "飛航模式已關閉", + "FLIGHT_MODE_ON": "飛航模式已開啟", + "MODEM_INIT_ERROR": "模組初始化失敗" } } \ No newline at end of file diff --git a/main/boards/common/nt26_board.cc b/main/boards/common/nt26_board.cc index 024d6a0..8ca55e5 100644 --- a/main/boards/common/nt26_board.cc +++ b/main/boards/common/nt26_board.cc @@ -107,6 +107,9 @@ void Nt26Board::StartNetwork() { ScheduleAsyncStop(); OnNetworkEvent(NetworkEvent::ModemErrorInitFailed); break; + case UartEthModem::UartEthModemEvent::InFlightMode: + ESP_LOGW(TAG, "Modem in flight mode"); + break; } }); diff --git a/main/display/lcd_display.cc b/main/display/lcd_display.cc index cb4f96d..03e1c84 100644 --- a/main/display/lcd_display.cc +++ b/main/display/lcd_display.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include "board.h" @@ -568,28 +569,25 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { lv_obj_t* msg_text = lv_label_create(msg_bubble); lv_label_set_text(msg_text, content); - // Calculate actual text width - lv_coord_t text_width = lv_txt_get_width(content, strlen(content), text_font, 0); - - // Calculate bubble width + // Calculate bubble width constraints lv_coord_t max_width = LV_HOR_RES * 85 / 100 - 16; // 85% of screen width lv_coord_t min_width = 20; - lv_coord_t bubble_width; + + // Let LVGL calculate the natural text width first + lv_obj_set_width(msg_text, LV_SIZE_CONTENT); + lv_obj_update_layout(msg_text); + lv_coord_t text_width = lv_obj_get_width(msg_text); // Ensure text width is not less than minimum width if (text_width < min_width) { text_width = min_width; } - // If text width is less than max width, use text width - if (text_width < max_width) { - bubble_width = text_width; - } else { - bubble_width = max_width; - } + // Constrain to max width + lv_coord_t bubble_width = (text_width < max_width) ? text_width : max_width; // Set message text width - lv_obj_set_width(msg_text, bubble_width); // Subtract padding + lv_obj_set_width(msg_text, bubble_width); lv_label_set_long_mode(msg_text, LV_LABEL_LONG_WRAP); // Set bubble width @@ -1113,7 +1111,7 @@ void LcdDisplay::SetTheme(Theme* theme) { if (lv_obj_get_child_cnt(obj) > 0) { // Might be a container, check if it's a user or system message container // User and system message containers are transparent - lv_opa_t bg_opa = lv_obj_get_style_bg_opa(obj, 0); + lv_opa_t bg_opa = lv_obj_get_style_bg_opa(obj, LV_PART_MAIN); if (bg_opa == LV_OPA_TRANSP) { // This is a user or system message container bubble = lv_obj_get_child(obj, 0); diff --git a/main/display/lvgl_display/gif/gifdec.c b/main/display/lvgl_display/gif/gifdec.c index 1e74aab..cab83b9 100644 --- a/main/display/lvgl_display/gif/gifdec.c +++ b/main/display/lvgl_display/gif/gifdec.c @@ -30,8 +30,8 @@ typedef struct Table { static gd_GIF * gif_open(gd_GIF * gif); static bool f_gif_open(gd_GIF * gif, const void * path, bool is_file); -static void f_gif_read(gd_GIF * gif, void * buf, size_t len); -static int f_gif_seek(gd_GIF * gif, size_t pos, int k); +static inline void f_gif_read(gd_GIF * gif, void * buf, size_t len); +static inline int f_gif_seek(gd_GIF * gif, size_t pos, int k); static void f_gif_close(gd_GIF * gif); #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM diff --git a/main/idf_component.yml b/main/idf_component.yml index 970771c..8c636c7 100644 --- a/main/idf_component.yml +++ b/main/idf_component.yml @@ -20,21 +20,21 @@ dependencies: espressif/esp_lcd_panel_io_additions: ^1.0.1 78/esp_lcd_nv3023: ~1.0.0 78/esp-wifi-connect: ~3.0.2 - espressif/esp_audio_effects: ~1.2.0 - espressif/esp_audio_codec: ~2.4.0 + espressif/esp_audio_effects: ~1.2.1 + espressif/esp_audio_codec: ~2.4.1 78/esp-ml307: ~3.5.3 78/uart-eth-modem: - version: ~0.1.3 + version: ~0.2.1 rules: - if: target not in [esp32] 78/xiaozhi-fonts: ~1.5.5 - espressif/led_strip: ~3.0.1 - espressif/esp_codec_dev: ~1.5 - espressif/esp-sr: ~2.2.0 - espressif/button: ~4.1.3 + espressif/led_strip: ~3.0.2 + espressif/esp_codec_dev: ~1.5.4 + espressif/esp-sr: ~2.3.0 + espressif/button: ~4.1.5 espressif/knob: ^1.0.0 espressif/esp32-camera: - version: ^2.0.15 + version: ^2.1.4 rules: - if: target in [esp32s3] espressif/esp_video: @@ -51,15 +51,15 @@ dependencies: espressif/esp_lcd_touch_gt1151: ^1 waveshare/esp_lcd_touch_cst9217: ^1.0.3 espressif/esp_lcd_touch_cst816s: ^1.0.6 - lvgl/lvgl: ~9.3.0 - esp_lvgl_port: ~2.6.0 + lvgl/lvgl: ~9.4.0 + esp_lvgl_port: ~2.7.0 espressif/esp_io_expander_tca95xx_16bit: ^2.0.0 espressif2022/image_player: ^1.1.1 espressif2022/esp_emote_expression: ^0.1.0 espressif/adc_mic: ^0.2.1 espressif/esp_mmap_assets: '>=1.2' txp666/otto-emoji-gif-component: - version: ^1.0.5 + version: ^1.1.1 rules: - if: target in [esp32s3] espressif/adc_battery_estimation: ^0.2.0 diff --git a/main/ota.cc b/main/ota.cc index 768ba66..bcc0dc5 100644 --- a/main/ota.cc +++ b/main/ota.cc @@ -3,6 +3,8 @@ #include "settings.h" #include "assets/lang_config.h" +#include +#include #include #include #include @@ -10,6 +12,7 @@ #include #include #include +#include #ifdef SOC_HMAC_SUPPORTED #include #endif @@ -292,19 +295,28 @@ bool Ota::Upgrade(const std::string& firmware_url, std::functionRead(buffer, sizeof(buffer)); + int ret = http->Read(buffer + buffer_offset, PAGE_SIZE - buffer_offset); if (ret < 0) { ESP_LOGE(TAG, "Failed to read HTTP data: %s", esp_err_to_name(ret)); + heap_caps_free(buffer); return false; } // Calculate speed and progress every second recent_read += ret; total_read += ret; + buffer_offset += ret; if (esp_timer_get_time() - last_calc_time >= 1000000 || ret == 0) { size_t progress = total_read * 100 / content_length; ESP_LOGI(TAG, "Progress: %u%% (%u/%u), Speed: %uB/s", progress, total_read, content_length, recent_read); @@ -315,22 +327,16 @@ bool Ota::Upgrade(const std::string& firmware_url, std::function= sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t) + sizeof(esp_app_desc_t)) { esp_app_desc_t new_app_info; memcpy(&new_app_info, image_header.data() + sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t), sizeof(esp_app_desc_t)); - - auto current_version = esp_app_get_description()->version; - ESP_LOGI(TAG, "Current version: %s, New version: %s", current_version, new_app_info.version); if (esp_ota_begin(update_partition, OTA_WITH_SEQUENTIAL_WRITES, &update_handle)) { esp_ota_abort(update_handle); ESP_LOGE(TAG, "Failed to begin OTA"); + heap_caps_free(buffer); return false; } @@ -338,14 +344,27 @@ bool Ota::Upgrade(const std::string& firmware_url, std::function 0)) { + auto err = esp_ota_write(update_handle, buffer, buffer_offset); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to write OTA data: %s", esp_err_to_name(err)); + esp_ota_abort(update_handle); + heap_caps_free(buffer); + return false; + } + + buffer_offset = 0; + } + + if (is_last_chunk) { + break; } } http->Close(); + heap_caps_free(buffer); esp_err_t err = esp_ota_end(update_handle); if (err != ESP_OK) { diff --git a/main/protocols/mqtt_protocol.cc b/main/protocols/mqtt_protocol.cc index e2dec43..94d9d12 100644 --- a/main/protocols/mqtt_protocol.cc +++ b/main/protocols/mqtt_protocol.cc @@ -119,7 +119,8 @@ bool MqttProtocol::StartMqttClient(bool report_error) { auto alive = alive_; // Capture alive flag Application::GetInstance().Schedule([this, alive]() { if (*alive) { - CloseAudioChannel(); + // Server initiated goodbye, don't send goodbye back to avoid ping-pong + CloseAudioChannel(false); } }); } @@ -188,17 +189,23 @@ bool MqttProtocol::SendAudio(std::unique_ptr packet) { return udp_->Send(encrypted) > 0; } -void MqttProtocol::CloseAudioChannel() { +void MqttProtocol::CloseAudioChannel(bool send_goodbye) { { std::lock_guard lock(channel_mutex_); udp_.reset(); } - std::string message = "{"; - message += "\"session_id\":\"" + session_id_ + "\","; - message += "\"type\":\"goodbye\""; - message += "}"; - SendText(message); + ESP_LOGI(TAG, "Closing audio channel, send_goodbye: %d", send_goodbye); + + // Only send goodbye when client initiates the close + // Don't send if server already sent goodbye (to avoid ping-pong) + if (send_goodbye) { + std::string message = "{"; + message += "\"session_id\":\"" + session_id_ + "\","; + message += "\"type\":\"goodbye\""; + message += "}"; + SendText(message); + } if (on_audio_channel_closed_ != nullptr) { on_audio_channel_closed_(); diff --git a/main/protocols/mqtt_protocol.h b/main/protocols/mqtt_protocol.h index aadb948..90963db 100644 --- a/main/protocols/mqtt_protocol.h +++ b/main/protocols/mqtt_protocol.h @@ -31,7 +31,7 @@ public: bool Start() override; bool SendAudio(std::unique_ptr packet) override; bool OpenAudioChannel() override; - void CloseAudioChannel() override; + void CloseAudioChannel(bool send_goodbye = true) override; bool IsAudioChannelOpened() const override; private: diff --git a/main/protocols/protocol.h b/main/protocols/protocol.h index 17ab315..28ef604 100644 --- a/main/protocols/protocol.h +++ b/main/protocols/protocol.h @@ -65,7 +65,7 @@ public: virtual bool Start() = 0; virtual bool OpenAudioChannel() = 0; - virtual void CloseAudioChannel() = 0; + virtual void CloseAudioChannel(bool send_goodbye = true) = 0; virtual bool IsAudioChannelOpened() const = 0; virtual bool SendAudio(std::unique_ptr packet) = 0; virtual void SendWakeWordDetected(const std::string& wake_word); diff --git a/main/protocols/websocket_protocol.cc b/main/protocols/websocket_protocol.cc index a8f8cf3..f0cc034 100644 --- a/main/protocols/websocket_protocol.cc +++ b/main/protocols/websocket_protocol.cc @@ -75,7 +75,8 @@ bool WebsocketProtocol::IsAudioChannelOpened() const { return websocket_ != nullptr && websocket_->IsConnected() && !error_occurred_ && !IsTimeout(); } -void WebsocketProtocol::CloseAudioChannel() { +void WebsocketProtocol::CloseAudioChannel(bool send_goodbye) { + (void)send_goodbye; // Websocket doesn't need to send goodbye message websocket_.reset(); } diff --git a/main/protocols/websocket_protocol.h b/main/protocols/websocket_protocol.h index 8c7dd65..48bbc00 100644 --- a/main/protocols/websocket_protocol.h +++ b/main/protocols/websocket_protocol.h @@ -18,7 +18,7 @@ public: bool Start() override; bool SendAudio(std::unique_ptr packet) override; bool OpenAudioChannel() override; - void CloseAudioChannel() override; + void CloseAudioChannel(bool send_goodbye = true) override; bool IsAudioChannelOpened() const override; private: diff --git a/sdkconfig.defaults.esp32s3 b/sdkconfig.defaults.esp32s3 index 761d220..0ac4880 100644 --- a/sdkconfig.defaults.esp32s3 +++ b/sdkconfig.defaults.esp32s3 @@ -7,8 +7,8 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y CONFIG_SPIRAM=y CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_SPEED_80M=y -CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=512 -CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536 +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=2048 +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=98304 CONFIG_SPIRAM_MEMTEST=n CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y