#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
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
{ "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