4G ota升级时,添加蓝牙版本作为查询参数。实现4G固定版本升级的能力 3380/1 3380/head 3381/target/1
author孙春阳 <snickersun@163.com>
Tue, 28 Apr 2026 02:36:55 +0000 (10:36 +0800)
committer孙春阳 <snickersun@163.com>
Tue, 28 Apr 2026 02:36:55 +0000 (10:36 +0800)
code/sdk/zhihui/leiniao/imsl_ln/ln_api_ota.c
code/sdk/zhihui/utils/custom_utils.c

index 6693d5f..9dc055e 100644 (file)
@@ -1535,14 +1535,17 @@ void ln_is_cat1_ota_upgrade_check(void)
         return;
     }
     
-    printf("[OTA] Modem固件版本: %s\n", version);
     
     // 构建版本字符串
+    uint8_t _major,_mid,_minor;
     char version1_str[64] = {0};
     char version2_str[64] = {0};
-    snprintf(version1_str, sizeof(version1_str), "%sV%d_1", version, uapi_get_py_ver());
-    snprintf(version2_str, sizeof(version2_str), "%sV%d_2", version, uapi_get_py_ver());
+    uapi_get_fw_version(&_major,&_mid,&_minor);
+    printf("[OTA] Modem固件版本: %s\n", version);
     
+    snprintf(version1_str, sizeof(version1_str), "%d%sV%d_1",_minor, version, uapi_get_py_ver());
+    snprintf(version2_str, sizeof(version2_str), "%d%sV%d_2",_minor, version, uapi_get_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) {
index 13a31b4..d26afa0 100644 (file)
@@ -2060,9 +2060,11 @@ errcode_t uapi_get_fw_version(uint8_t *_major, uint8_t *_mid,uint8_t *_minor)
         return ERRCODE_FAIL;
 
     const char* version = get_version_string();
+    printf("version: %s\n", version);
     uint8_t tmpverlen =  strlen(version);
     if (tmpverlen>20) return ERRCODE_FAIL;
-    char * tmpver = (char*) malloc(tmpverlen);
+    /* strtok_r/atoi 依赖 '\0' 结束符,必须多分配 1 字节并补齐结尾 */
+    char * tmpver = (char*) malloc((size_t)tmpverlen + 1);
     if (tmpver==NULL)
     {
         *_major = 1;
@@ -2070,7 +2072,8 @@ errcode_t uapi_get_fw_version(uint8_t *_major, uint8_t *_mid,uint8_t *_minor)
         *_minor = 0;
  
     }else{
-        memcpy_s(tmpver,tmpverlen,version,tmpverlen);
+        memcpy_s(tmpver, (size_t)tmpverlen + 1, version, tmpverlen);
+        tmpver[tmpverlen] = '\0';
         char *pchStrTmpIn = NULL;
         char *tokbuf=NULL;
         tokbuf=strtok_r(tmpver,".",&pchStrTmpIn);