fd272xts:sn号写入
authorluozheng <1732036298@qq.com>
Thu, 18 Dec 2025 02:57:56 +0000 (10:57 +0800)
committerluozheng <1732036298@qq.com>
Thu, 18 Dec 2025 02:57:56 +0000 (10:57 +0800)
code/sdk/application/wstp/at_service/app/app_cmd_manager.c
code/sdk/zhihui/services/battery/service/battery_service.cpp

index b73a973..15fc057 100644 (file)
@@ -33,6 +33,8 @@
 #include "diag_msg.h"\r
 #include "chip_io.h"\r
 #include "chip_exception_utils.h"\r
+#include <common.h>\r
+#include <key_id.h>\r
 \r
 #define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))\r
 \r
@@ -1126,6 +1128,130 @@ static uint32_t app_test_hard_fault_dog_error(uint8_t *para, uint32_t para_len,
     return ERRCODE_SUCC;\r
 }\r
 \r
+#define CUSTOM_UTILS_MAX_ARGC            8\r
+#define CUSTOM_UTILS_MAX_ARGV_LEN        256\r
+#define CUSTOM_UTILS_SUCCESS             0\r
+#define CUSTOM_UTILS_FAILED              (-1)\r
+static int ConvertCmdToParam(uint8_t *para, uint32_t paraLen,\r
+        uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN], uint32_t* argc)\r
+{\r
+    uint32_t pos = 0;\r
+    *argc = 0;\r
+\r
+    for (uint32_t i = 0; i < paraLen; i++) {\r
+        if ((para[i] == ' ' || para[i] == '\n') && pos != 0) {\r
+            argv[*argc][pos] = '\0';\r
+            *argc += 1;\r
+            pos = 0;\r
+            if (*argc >= CUSTOM_UTILS_MAX_ARGC) {\r
+                return CUSTOM_UTILS_FAILED;\r
+            }\r
+        } else {\r
+            argv[*argc][pos] = para[i];\r
+            pos++;\r
+            if (pos >= CUSTOM_UTILS_MAX_ARGV_LEN) {\r
+                return CUSTOM_UTILS_FAILED;\r
+            }\r
+        }\r
+    }\r
+    if (pos != 0) {\r
+        *argc += 1;\r
+    }\r
+\r
+    return CUSTOM_UTILS_SUCCESS;\r
+}\r
+\r
+static uint32_t zh_set_sn_(uint8_t *buf_sn, uint32_t len_sn)\r
+{\r
+    errcode_t nv_ret_value=0;\r
+// #ifdef SUPPORT_NV\r
+    if( buf_sn == NULL || len_sn == 0)\r
+        return ERRCODE_FAIL;\r
+\r
+    uint8_t *test_nv_value; /* 要写入的NV value保存在test_nv_value中 */ \r
+\r
+    uint16_t key_len=  sizeof(custom_key_sn_t); \r
+    uint8_t *write_value = malloc(key_len); \r
+    custom_key_sn_t *p_sn = (custom_key_sn_t*)write_value;\r
+    uint16_t len = 0;\r
+    if (len_sn > sizeof(p_sn->sn))\r
+    {\r
+        len = sizeof(p_sn->sn);\r
+    }else{\r
+        len = len_sn;\r
+    }\r
+    p_sn->size = len;\r
+    memcpy_s(p_sn->sn,sizeof(p_sn->sn),buf_sn,len); \r
+    nv_ret_value = uapi_nv_write(NV_ID_CUSTOM_KEY_SERIAL_NUM, write_value, key_len); \r
+    if (nv_ret_value != ERRCODE_SUCC) { \r
+        /* ERROR PROCESS */ \r
+        free(write_value); \r
+        return ERRCODE_FAIL; \r
+    } \r
+    /* APP PROCESS */ \r
+    free(write_value); \r
+\r
+// #endif\r
+    return nv_ret_value;\r
+\r
+}\r
+\r
+static uint32_t zh_get_sn_(uint8_t *buf_sn, uint32_t *len_sn)\r
+{\r
+\r
+// #ifdef SUPPORT_NV\r
+    if( buf_sn == NULL)\r
+        return ERRCODE_FAIL;\r
+    uint16_t len = 0;\r
+    custom_key_sn_t sn = {0};\r
+    errcode_t nvRet = uapi_nv_read(NV_ID_CUSTOM_KEY_SERIAL_NUM, sizeof(custom_key_sn_t), &len, &sn);\r
+    if (nvRet != ERRCODE_SUCC) {\r
+         *len_sn = 0;\r
+    }\r
+    memcpy_s(buf_sn,sizeof(sn.sn),sn.sn,sn.size);\r
+    *len_sn = sn.size;\r
+    //PRINT("get sn len %d, ret %d , %s\r\n",sn.size,nvRet,sn.sn);\r
+// #endif\r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+static uint32_t custom_utils_setsn(uint8_t *para, uint32_t paraLen, char *strCommonCmd)\r
+{\r
+    UNUSED(strCommonCmd);\r
+    uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };\r
+    uint32_t argc = 0;\r
+\r
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);\r
+    if (ret != CUSTOM_UTILS_SUCCESS) {\r
+        wstp_print("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+    if (argc != 1) {\r
+        wstp_print("CUSTOM_UTILSTEST ATCMD Set Parameter Failed argc %d\n",argc);\r
+        return ERRCODE_FAIL;\r
+    }\r
+    uint8_t *sn_buf = (uint8_t*)argv[0];\r
+    uint16_t len = strlen((const char*)sn_buf);\r
+    uint32_t rret = zh_set_sn_(sn_buf,len);\r
+    wstp_print("set sn = %s , len =  %d, ret 0x%X\r\n",sn_buf,len, rret);\r
+\r
+    return 0;\r
+}\r
+\r
+static uint32_t custom_utils_getsn(uint8_t *para, uint32_t paraLen, char *strCommonCmd)\r
+{\r
+    UNUSED(para);\r
+    UNUSED(paraLen);\r
+    UNUSED(strCommonCmd);\r
+    uint8_t sn_buf[CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };\r
+    uint32_t len = sizeof(sn_buf);\r
+    uint32_t rret = zh_get_sn_(sn_buf,&len);\r
+    wstp_print("get sn = %s , len =  %d, ret 0x%X\r\n",sn_buf,len, rret);\r
+    return 0;\r
+}\r
+\r
+\r
 static const at_cmd_table_t g_app_cmd[] = {\r
 /* 无参数无特殊处理AT命令 */\r
     { "AT^TESTMCUBUS",   app_test_mcu_bus_status,           "" }, //测试总线状态\r
@@ -1156,6 +1282,9 @@ static const at_cmd_table_t g_app_cmd[] = {
     { "AT^TIMESET",      app_time_set_handle,               "" },\r
     { "AT^TIMEGET",      app_time_get_handle,               "" },\r
 \r
+    { (char *)"AT^CUSTOM_SN",      custom_utils_setsn, (char *)"123456789ABCDEF2345678" },\r
+    { (char *)"AT^CUSTOM_SN_REQ",  custom_utils_getsn, (char *)" " },\r
+\r
     { "AT^MMCSWITCHCMD", parse_emmc_switch_handle,          "" }, // AT^MMCSWITCHCMD=0x031E0100\r
     { "AT^MMCGETECSD",   parse_emmc_get_ext_csd_handle,     "" }, // AT^MMCGETECSD\r
     { "AT^MMCGETCID",    parse_emmc_get_cid_handle,         "" }, // AT^MMCGETCID\r
index b740c61..f1671bf 100644 (file)
@@ -364,7 +364,7 @@ static void battery_check_chargement(void)
     batteryservice_get_battery_temp(&bat_temp);
 
     #ifdef DISABLE_VBUS_CHECK
-        PRINT("charging enable charge !  bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
+        // PRINT("charging enable charge !  bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
         /**
          * 如果充电过程中,电池温度>=BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE,则停止充电
          * 否则按正常流程充电
@@ -404,7 +404,7 @@ static void battery_check_chargement(void)
         if(get_charge_stat() == 1)
         {
             
-            PRINT("charging enable charge !  bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
+            // PRINT("charging enable charge !  bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
             /**
              * 如果充电过程中,电池温度>=BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE,则停止充电
              * 否则按正常流程充电