extern uint8_t g_py_ver;
bool ThunderBirdModel::is_Cat1_OtaUpgrade()
{
- uint32_t ret = 0;
- char * text = cat1_api_runtime_get_cat1_modemver();
- char version[16] = {0};
- if (get_modem_fw_version(text, version) == 0)
- {
- printf("输入1:%s\n", text);
- printf("Modem固件版本1:%s\n", version); // 预期输出:EG8AK1022
- }
- string version1_str = std::string(version) + "V"+ std::to_string(g_py_ver) + "_1";
- ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1);
- if(ERRCODE_SUCC != ret)
- {
- ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1);
- }
-
- string version2_str = std::string(version) + "V"+ std::to_string(g_py_ver) + "_2";
- ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2);
- if(ERRCODE_SUCC != ret)
- {
- ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2);
- }
-
- // 检查cat1模组升级url是否为空
- if(strlen(g_ln_last_package_url_new1) == 0)
- {
- ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str.c_str(), g_ln_last_package_url_new1);
- }
- if(strlen(g_ln_last_package_url_new2) == 0)
- {
- ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str.c_str(), g_ln_last_package_url_new2);
- }
- // 检查cat1模组升级url是否为空
- if(strlen(g_ln_last_package_url_new1) == 0 || strlen(g_ln_last_package_url_new2) == 0)
- {
- return false;
- }
- return true;
+ // 发送命令到后台线程执行,避免阻塞UI线程
+ // 注意:此函数现在只发送命令,不返回实际结果
+ // 结果通过 push_ota_status 回调通知
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE, NULL, 0);
+ // 返回false表示异步处理中,实际结果通过回调通知
+ return false;
}
/**
// 需要是绑定状态才更新
// if(bind_status == true)
// {
- if(is_Cat1_OtaUpgrade())
- {
- // Cat1OtaUpgrade();
- push_ota_status(OTA_UI_STATUS_CAT1_START);
- }
- else
- {
- ota_update_boot();
- }
+ // OTA检查异步执行,避免阻塞状态回调(特别是在连网状态下,HTTP请求会阻塞)
+ // 直接发送命令到后台线程执行,结果通过 push_ota_status 回调通知
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE, NULL, 0);
+ // }
// }
//未绑定状态,联网隐藏网络断开提醒
// if(bind_status == false)
uapi_init_all_websocket_servers();
uapi_start_all_websocket_servers(0); // 连接服务器
#endif
- //VAD认证
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0);
+
//上报一次耳机状态
ln_bt_report_earphone_connection_status();//上报耳机状态
}
+ //VAD认证
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_VAD_AUTH, NULL, 0);
init_falg = true;
}
#define LN_HTTP_SERVICE_CMD_CHAT_SESSION_END 0x1017 /* 语音对话流结束 */
#define LN_HTTP_SERVICE_CMD_HTTP_DOWNLOAD 0x101A /* HTTP文件下载(队列异步调度) */
+/* 是否需要cat1模组升级*/
+#define LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE 0x101B /* 是否需要cat1模组升级 */
+
/* -------------------------------------------------------------------------- */
uint32_t ln_ota_get_task_http_CAT1(const char *device_id,
const char *device_token,
const char *source_version, char *url);
+/* 检查是否需要CAT1 OTA升级(在后台线程执行,避免阻塞UI线程) */
+void ln_is_cat1_ota_upgrade_check(void);
/* -------------------------------------------------------------------------- */
/* 下载文件相关结构体 */
void ln_parse_schedule_reminder(const char *json_str, int json_len);
/* 解析日程提醒配置 */
void ln_parse_schedule_reminder_config(const char *json_str, int json_len);
+/* 设置提醒音量为0(静音提醒音频,避免阻塞) */
+void ln_schedule_reminder_set_volume_zero(void);
/* 解析下载表情 */
void ln_parse_download_emoji(const char *json_str, int json_len);
/* 解析删除表情 */
#include "custom_utils.h"
#include "cJSON.h"
#include "http_file_download_client.h"
+#ifdef SUPPORT_CAT1_SERVICE
+#include "cat1_pub_api.h"
+#endif
+extern uint8_t g_py_ver; /* Python服务版本号 */
/* OTA下载状态枚举(对应时序图中的下载阶段)*/
typedef enum
cat1_api_remove_cat1_app_vote();
#endif
return ERRCODE_SUCC;
+}
+
+/* 提取modem固件版本号(前缀+最后4位) */
+static int get_modem_fw_version_c(const char* input_str, char* output_str)
+{
+ if (input_str == NULL || strlen(input_str) == 0 || output_str == NULL) {
+ return -1;
+ }
+
+ memset(output_str, 0, 16);
+
+ // 提取字符串最后4位
+ char suffix_4[5] = {0};
+ int input_len = strlen(input_str);
+ int suffix_start = (input_len >= 4) ? (input_len - 4) : 0;
+ strncpy(suffix_4, input_str + suffix_start, 4);
+ suffix_4[4] = '\0';
+
+ // 判断前缀并拼接版本号
+ if (strstr(input_str, "EG800AK") != NULL) {
+ strcpy(output_str, "EG8AK");
+ strcat(output_str, suffix_4);
+ } else if (strstr(input_str, "EG810") != NULL) {
+ strcpy(output_str, "EG810");
+ strcat(output_str, suffix_4);
+ } else {
+ return -1;
+ }
+ return 0;
+}
+
+/* 检查是否需要CAT1 OTA升级(在后台线程执行,避免阻塞UI线程) */
+void ln_is_cat1_ota_upgrade_check(void)
+{
+ printf("[OTA] ln_is_cat1_ota_upgrade_check: 开始检查CAT1 OTA升级\n");
+
+#ifdef SUPPORT_CAT1_SERVICE
+ uint32_t ret = 0;
+ // 直接获取CAT1 modem版本(如果版本还未获取,会在后续处理中处理)
+ char *text = cat1_api_runtime_get_cat1_modemver();
+ if (!text || strlen(text) == 0) {
+ printf("[OTA] cat1 modem版本为空,执行普通OTA升级\n");
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0);
+ return;
+ }
+
+ char version[16] = {0};
+ if (get_modem_fw_version_c(text, version) != 0) {
+ printf("[OTA] 无法解析modem版本,执行普通OTA升级\n");
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0);
+ return;
+ }
+
+ printf("[OTA] Modem固件版本: %s\n", version);
+
+ // 构建版本字符串
+ char version1_str[64] = {0};
+ char version2_str[64] = {0};
+ snprintf(version1_str, sizeof(version1_str), "%sV%d_1", version, g_py_ver);
+ snprintf(version2_str, sizeof(version2_str), "%sV%d_2", version, g_py_ver);
+
+ // 获取CAT1 OTA升级URL
+ ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1);
+ if(ERRCODE_SUCC != ret) {
+ ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1);
+ }
+
+ ret = ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2);
+ if(ERRCODE_SUCC != ret) {
+ ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2);
+ }
+
+ // 检查cat1模组升级url是否为空
+ if(strlen(g_ln_last_package_url_new1) == 0) {
+ ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version1_str, g_ln_last_package_url_new1);
+ }
+ if(strlen(g_ln_last_package_url_new2) == 0) {
+ ln_ota_get_task_http_CAT1(uapi_ln_get_device_id(), uapi_ln_get_device_token(), version2_str, g_ln_last_package_url_new2);
+ }
+
+ // 检查cat1模组升级url是否为空
+ if(strlen(g_ln_last_package_url_new1) == 0 || strlen(g_ln_last_package_url_new2) == 0) {
+ printf("[OTA] cat1模组升级url为空,执行普通OTA升级\n");
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0);
+ } else {
+ printf("[OTA] cat1模组升级url不为空,触发CAT1升级\n");
+ push_ota_status(OTA_UI_STATUS_CAT1_START);
+ }
+#else
+ // 不支持CAT1服务,直接执行普通OTA升级
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, NULL, 0);
+#endif
}
\ No newline at end of file