雷鸟版本第一版本提交
authorcheng <chengyf@zhihuishixun.com>
Sun, 21 Sep 2025 18:06:56 +0000 (02:06 +0800)
committercheng <chengyf@zhihuishixun.com>
Sun, 21 Sep 2025 18:06:56 +0000 (02:06 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/set_ota/src/OTAPresenter.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/set_ota/src/OTAView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/settings/src/SettingPresenter.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/zhihui/ai/media/ai_media_service_ext.cpp
code/sdk/zhihui/ai_old/tts_websocket_server.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c

index a4e1703..a77f53f 100644 (file)
@@ -16,7 +16,7 @@
 \r
 namespace OHOS {\r
 \r
-//REGIST_SLICE(VIEW_SET_OTA, OTAView, OTAPresenter);\r
+REGIST_SLICE(VIEW_SET_OTA, OTAView, OTAPresenter);\r
 \r
 void OTAPresenter::OnStart()\r
 {\r
index 1161894..3c4684e 100644 (file)
 namespace OHOS {\r
 void OTAView::OnStart()\r
 {\r
-    InitMessageCtrl();\r
-    InitProgressCtrl();\r
-    InitUpdateCtrl();\r
-    AddCtrlToView();\r
+    // InitMessageCtrl();\r
+    // InitProgressCtrl();\r
+    // InitUpdateCtrl();\r
+    // AddCtrlToView();\r
 }\r
 void OTAView::InitMessageCtrl()\r
 {\r
index 60ac59c..fbf508e 100644 (file)
@@ -10,5 +10,5 @@
 #include "NativeRegisterManager.h"
 
 namespace OHOS {
-//REGIST_MENU(VIEW_SETTING, SettingView, SettingPresenter, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "设置");
+REGIST_MENU(VIEW_SETTING, SettingView, SettingPresenter, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "设置");
 }
index 446fb53..b4f10ff 100644 (file)
@@ -30,7 +30,8 @@
  #include "custom_runtime.h"
  #include "ln_api.h"
  #include "kv_store.h"
-
+#include "AppViewIDs.h"
+#include "NativeRegisterManager.h"
  #define JUHEPINGTAI 1
  #if JUHEPINGTAI
  #include "websocket_server_manager.h"
         // 更新状态检查
         if(status == 1)//OTA升级
         {
-            ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_NOW);
+            // ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_NOW);
+            NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);
         }
         else if(status == 2)//OTA升级失败
         {
-            ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_FAILED);
+            // ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_FAILED);
+            NativeAbility::GetInstance().ChangeSlice(VIEW_THUNDER_BIRD);
         }
         else if(status == 3)//OTA升级成功
         {
-            ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_SUCCESS);
+            // ThunderBirdMainView::GetInstance()->ChangeView(current_view, THUNDERBIRD_OTAVIEW, ThunderBirdOtaView::THUNDERBIRD_OTAVIEW_UPDATE_SUCCESS);
         }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入OTA界面");
      }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "init_all_callback\n");
         // ws_register_chat_filter_callback(ws_register_chat_filter_cb);
         // ws_register_ai_question_callback(ws_register_ai_question_cb);
-        ws_register_ai_answer_callback(ws_register_ai_answer_cb);
+        // ws_register_ai_answer_callback(ws_register_ai_answer_cb);
     }
 
  }
index b8611d8..2d2a31b 100644 (file)
@@ -871,7 +871,7 @@ int32_t AI_WriteAudioData(const uint8_t* data, uint32_t size)
     if (ret != 0) {
         // MEDIA_ERR_LOG("Failed to write audio data to output stream, ret=%d", ret);
         // return -1;
-        usleep(10000);
+        usleep(1000*500);
         goto AI_WRITE;
     }
     
index 2d16b39..c67e897 100644 (file)
@@ -969,7 +969,7 @@ bool uapi_start_tts_type_start(WebSocketClient *client)
     }
     
     // 添加payload字段
-    if (cJSON_AddStringToObject(payload, "voice", "xiaoyun") == NULL) {
+    if (cJSON_AddStringToObject(payload, "voice", "sitong") == NULL) {
         printf("Failed to add voice field\n");
         goto cleanup;
     }
index a42e262..7418d58 100644 (file)
@@ -399,10 +399,12 @@ static void ln_handle_ota_task_response(const char *json_buf, int json_len)
         /* 强制升级:直接触发下载 */
         printf("[OTA] force upgrade: trigger download(强制升级:直接触发下载)\n");
         push_ota_status(OTA_UI_STATUS_START);
+        do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_DOWNLOAD, NULL, 0);
     }
     else if (ut == 0)
     {
         printf("[OTA] optional upgrade: waiting for user confirmation(可选升级:等待用户确认)\n");
+        do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_DOWNLOAD, NULL, 0);
         push_ota_status(OTA_UI_STATUS_START);
     }
     else
@@ -482,6 +484,7 @@ static int ln_ota_is_md5_ok(const char *file_path, const char *expected_md5)
 }
 
 /* OTA下载消息处理(对接时序图中的后续流程)*/
+static int reset_cnt = 0;
 static void handle_ota_download_msg(const OtaDownloadMsg *msg)
 {
     if (!msg) return;
@@ -511,6 +514,10 @@ static void handle_ota_download_msg(const OtaDownloadMsg *msg)
             break;
         case OTA_DOWNLOAD_STATUS_FAILED:
             printf("[OTA_DOWNLOAD] 下载失败: %s\n", msg->error_msg);
+            reset_cnt++;
+            if(reset_cnt < 3){
+             do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_DOWNLOAD, NULL, 0);
+            }
             break;
         default:
             printf("[OTA_DOWNLOAD] 未知状态: %d\n", msg->status);
index 879a716..b70c22f 100644 (file)
@@ -48,6 +48,7 @@ typedef struct
 #define LN_DEVICE_GET_CHARACTER_URL LN_BASE_URL LN_DEVICE_GET_CHARACTER_PATH
 #define LN_DEVICE_GET_USER_ID_URL LN_BASE_URL LN_DEVICE_GET_USER_ID_PATH
 #define LN_OTA_GET_TASK_URL LN_BASE_URL LN_OTA_GET_TASK_PATH
+// #define LN_OTA_GET_TASK_URL "http://110.42.224.129:8089/leiniaoota.jsp"
 #define LN_EMOJI_REPORT_URL LN_BASE_URL LN_EMOJI_REPORT_PATH
 #define LN_EMOJI_REPORT_ALL_URL LN_BASE_URL LN_EMOJI_REPORT_ALL_PATH
 #define LN_SIGN_SECRET "vDdXVXgPUEUM6_piUjz5AEhMvYTSFzQdPaN-ogKnSus="
index 9afb1cd..c30b74a 100644 (file)
@@ -270,6 +270,8 @@ static int ln_download_file_to_path(const char *full_url, const char *save_path,
         printf("[OTA] download failed! response code: %d, ret=0x%x\n",
                client.responseCode, ret);
     }
+    printf("[OTA] received=%zu, expected=%d\n",
+                   total_written, total_size);
 
     // 资源清理(与http_download保持一致)
     fclose(fd);
@@ -312,11 +314,23 @@ uint32_t ln_ota_download_flow_http(const char *device_id,
     if (g_ln_last_saved_path)
         strcpy(g_ln_last_saved_path, save_path);
 
-    printf("[OTA] download only: version=%s, url=%s -> %s\n", g_ln_last_target_version, g_ln_last_package_url, save_path);
+    /* 规范化URL,修正可能的重复协议前缀 */
+    const char *raw_url = g_ln_last_package_url;
+    const char *fixed_url = raw_url;
+    if (raw_url) {
+        /* 修正常见错误:"http://http://" 或 "https://https://" */
+        if (strncasecmp(raw_url, "http://http://", 12) == 0) {
+            fixed_url = raw_url + 7; /* 跳过前一个 http:// */
+        } else if (strncasecmp(raw_url, "https://https://", 14) == 0) {
+            fixed_url = raw_url + 8; /* 跳过前一个 https:// */
+        }
+    }
+
+    printf("[OTA] download only: version=%s, url=%s -> %s\n", g_ln_last_target_version, fixed_url, save_path);
     int dres;
     if (g_ln_last_package_size > 0)
     {
-        dres = ln_download_file_to_path(g_ln_last_package_url, save_path, g_ln_last_package_size);
+        dres = ln_download_file_to_path(fixed_url, save_path, g_ln_last_package_size);
     }
     if (dres != 0)
     {