From 7e9173b8f5dd129c6947d3ae1c2fb686b1dcdfe8 Mon Sep 17 00:00:00 2001 From: cheng Date: Tue, 16 Sep 2025 14:53:31 +0800 Subject: [PATCH] =?utf8?q?=E9=9B=B7=E9=B8=9F=EF=BC=9Acat1=E7=9B=B8?= =?utf8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E6=B7=BB=E5=8A=A0SUPPORT=5FCAT1=5FSE?= =?utf8?q?RVICE=E5=AE=8F=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/leiniao/imsl_ln/ln_api.c | 2 + .../leiniao/imsl_ln/ln_api_device_info.c | 10 +- code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c | 132 ++---------------- .../leiniao/imsl_ln/ln_api_speech_chat.c | 6 +- .../leiniao/imsl_ln/ln_api_story_choose.c | 6 +- .../leiniao/imsl_ln/ln_api_story_exit.c | 5 +- .../leiniao/imsl_ln/ln_api_story_finish.c | 6 +- .../leiniao/imsl_ln/ln_api_story_random.c | 6 +- .../sdk/zhihui/leiniao/imsl_ln/ln_api_token.c | 2 + 9 files changed, 41 insertions(+), 134 deletions(-) diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c index 59fcdb8e6..5c8c94151 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c @@ -833,12 +833,14 @@ static uint32_t ln_download_mp3_file_advanced(const char *audio_url, const char printf("[SSE] downloading MP3: %s -> %s\n", audio_url, save_path); + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 网络保活处理 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); cat1_api_disable_cat1_cmd(0); LOS_Msleep(300); + #endif HttpClient client = {0}; HttpClientData client_data = {0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_device_info.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_device_info.c index e89a96957..4d8e23322 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_device_info.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_device_info.c @@ -8,11 +8,14 @@ uint32_t ln_device_get_character_http(const char *device_id, if (!device_id || !device_token) return ERRCODE_FAIL; + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(200); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; @@ -75,11 +78,14 @@ uint32_t ln_device_get_user_id_http(const char *device_id, if (!device_id || !device_token) return ERRCODE_FAIL; + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(200); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c index b42263388..4824af86d 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c @@ -8,11 +8,14 @@ uint32_t ln_ota_get_task_http(const char *device_id, if (!device_id || !device_token || !source_version) return ERRCODE_FAIL; + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(200); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; @@ -85,127 +88,6 @@ end: return ERRCODE_SUCC; } -/* 分片下载:使用 Range 头按固定分片大小请求,边下边写并上报进度 */ -static int ln_download_file_to_path_range(const char *full_url, const char *save_path, int total_size) -{ - if (!full_url || !save_path || total_size <= 0) - { - printf("[OTA] range download: url=%s -> %s, total=%d\n", full_url, save_path, total_size); - return -1; - } - printf("[OTA] range download: url=%s -> %s, total=%d\n", full_url, save_path, total_size); - - /* CAT1 网络保活处理 */ - cat1_api_add_cat1_vote(); - cat1_api_wakeup_cat1(1); - cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); - - FILE *fp = fopen(save_path, "wb"); - if (!fp) - { - printf("[OTA] open file failed: %s\n", save_path); - return -1; - } - - const int chunk_size = 256 * 1024; /* 256KB 分片,兼顾内存与吞吐 */ - int64_t downloaded = 0; - - while (downloaded < total_size) - { - int start = (int)downloaded; - int remaining = total_size - start; - int this_chunk = remaining > chunk_size ? chunk_size : remaining; - int end = start + this_chunk - 1; - - HttpClient client = (HttpClient){0}; - HttpClientData clientData = (HttpClientData){0}; - - /* 判断协议 */ - bool is_https = (strstr(full_url, "https://") == full_url); - client.isHttp = is_https ? false : true; - client.remotePort = is_https ? 443 : 80; - - /* 自定义 Range 头 */ - char header_buf[256]; - int hdr = snprintf(header_buf, sizeof(header_buf), "Range: bytes=%d-%d\r\n", start, end); - if (hdr <= 0 || hdr >= (int)sizeof(header_buf)) - { - printf("[OTA] range header failed: %d\n", hdr); - fclose(fp); - return -1; - } - HttpClientSetCustomHeader(&client, header_buf); - - /* 预留足够的响应缓冲区(分片大小+余量)*/ - HTTPC_RESULT prep = ln_http_prepare_auto(&clientData, 2048, this_chunk + 16 * 1024); - if (prep != HTTP_SUCCESS) - { - printf("[OTA] range prepare failed: %d\n", prep); - fclose(fp); - return -1; - } - - HTTPC_RESULT res = HttpClientGetRequest(&client, full_url, &clientData); - if (res != HTTP_SUCCESS) - { - printf("[OTA] range request failed: %d\n", res); - HttpClientUnprepare(&clientData); - HttpClientClse(&client); - fclose(fp); - return -1; - } - - int code = HttpClientGetResponseCode(&client); - if (!(code == 206 || code == 200)) - { - printf("[OTA] range HTTP code=%d\n", code); - HttpClientUnprepare(&clientData); - HttpClientClse(&client); - fclose(fp); - return -1; - } - - if (clientData.responseBuf == NULL || clientData.responseBufLen <= 0) - { - printf("[OTA] range empty body\n"); - HttpClientUnprepare(&clientData); - HttpClientClse(&client); - fclose(fp); - return -1; - } - - int buf_len = clientData.responseContentLen > 0 ? clientData.responseContentLen : clientData.responseBufLen; - size_t written = fwrite(clientData.responseBuf, 1, (size_t)buf_len, fp); - if ((int)written != buf_len) - { - printf("[OTA] range fwrite failed\n"); - HttpClientUnprepare(&clientData); - HttpClientClse(&client); - fclose(fp); - return -1; - } - - downloaded += buf_len; - printf("[OTA] range downloaded: %d/%d\n", downloaded, total_size); - - /* 进度上报 */ - int percent = (int)((downloaded * 100) / total_size); - if (percent > 100) - percent = 100; - char prog[128]; - int pn = snprintf(prog, sizeof(prog), "{\"status\":%d,\"progress\":%d}", OTA_DOWNLOAD_STATUS_PROGRESS, percent); - if (pn > 0) - do_ln_http_server_recv_data(LN_HTTP_RECV_OTA_DOWNLOAD_MSG, prog, (uint32_t)pn); - - HttpClientUnprepare(&clientData); - HttpClientClse(&client); - } - - fclose(fp); - return 0; -} - /* 采用http_download风格实现的文件下载函数 * 功能:从指定URL下载文件到指定路径(已知总大小) * 参数:full_url - 完整下载URL @@ -225,12 +107,14 @@ static int ln_download_file_to_path(const char *full_url, const char *save_path, printf("[OTA] starting download: %s -> %s, total_size=%d bytes\n", full_url, save_path, total_size); + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 网络保活处理 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); - LOS_Msleep(300); // 等待模块就绪 + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(500); // 等待模块就绪 + #endif /* 初始化HTTP客户端(与http_download风格一致) */ HttpClient client = {0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_speech_chat.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_speech_chat.c index acb6e2f08..e693263be 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_speech_chat.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_speech_chat.c @@ -130,12 +130,14 @@ uint32_t ln_speech_chat_stream_http(const char *device_id, } free(audio_buf); + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); - LOS_Msleep(300); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(500); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_choose.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_choose.c index b6c364ec1..a767cbf48 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_choose.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_choose.c @@ -133,12 +133,14 @@ uint32_t ln_story_choose_http(const char *device_id, } free(audio_buf); + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 网络保活处理 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); - LOS_Msleep(300); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(500); + #endif HttpClient client = {0}; HttpClientData clientData = {0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_exit.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_exit.c index 9e3193fc4..6af2917ac 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_exit.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_exit.c @@ -6,11 +6,14 @@ uint32_t ln_story_exit_inquiry_http(const char *device_id, { if (!device_id || !device_token) return ERRCODE_FAIL; + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(200); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_finish.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_finish.c index f0006fd34..9f3e3e108 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_finish.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_finish.c @@ -6,11 +6,15 @@ uint32_t ln_story_finish_http(const char *device_id, { if (!device_id || !device_token) return ERRCODE_FAIL; + + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 保活 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(200); + #endif HttpClient client = (HttpClient){0}; HttpClientData clientData = (HttpClientData){0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c index 9bd775a7d..281bbab74 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c @@ -30,12 +30,14 @@ uint32_t ln_story_random_http(const char *device_id, return ERRCODE_FAIL; } + #ifdef SUPPORT_CAT1_SERVICE /* CAT1 网络保活处理 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); - cat1_api_disable_cat1_cmd(0); - LOS_Msleep(200); + cat1_api_disable_cat1_cmd(1); + LOS_Msleep(500); + #endif HttpClient client = {0}; HttpClientData clientData = {0}; diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_token.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_token.c index c98879cb9..a20bc7b1a 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_token.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_token.c @@ -111,12 +111,14 @@ uint32_t ln_get_device_token_http(const char *device_id, return ERRCODE_FAIL; } + #ifdef SUPPORT_CAT1_SERVICE /* 4. 保活CAT1,准备网络 */ cat1_api_add_cat1_vote(); cat1_api_wakeup_cat1(1); cat1_api_keep_wakeup(1); cat1_api_disable_cat1_cmd(1); LOS_Msleep(500); + #endif /* 5. 发起HTTPS GET */ HttpClient client = (HttpClient){0}; -- 2.17.1