char *uapi_ln_get_device_version(void)
{
char version_buf[128] = {0};
- uint32_t version_len = 128;
+ uint32_t version_len = sizeof(version_buf) - 1; // 预留1字节给字符串结束符
uapi_get_buildversion((uint8_t *)version_buf, version_len);
- strcpy(g_device_version, version_buf);
+
+ // 原始格式:V1.0.0_20250920_222554,目标:V1.0.0_20250920
+ // 步骤1:找到第一个下划线(分隔版本号和日期)
+ char *first_underline = strstr(version_buf, "_");
+ if (!first_underline) {
+ // 无下划线,直接使用原始版本号(异常情况处理)
+ snprintf(g_device_version, sizeof(g_device_version), "%s", version_buf);
+ printf("g_device_version (no underline): %s\n", g_device_version);
+ return g_device_version;
+ }
+
+ // 步骤2:找到第二个下划线(分隔日期和时间)
+ char *second_underline = strstr(first_underline + 1, "_");
+ if (!second_underline) {
+ // 只有一个下划线(如 "V1.0.0_20250920"),直接使用
+ snprintf(g_device_version, sizeof(g_device_version), "%s", version_buf);
+ printf("g_device_version (only one underline): %s\n", g_device_version);
+ return g_device_version;
+ }
+
+ // 步骤3:截断第二个下划线后的内容(保留版本号+日期)
+ size_t target_len = second_underline - version_buf; // 计算目标字符串长度(不含时间)
+ if (target_len >= sizeof(g_device_version)) {
+ // 防止缓冲区溢出,取最大可容纳长度
+ target_len = sizeof(g_device_version) - 1;
+ }
+
+ // 复制并构造目标格式字符串
+ strncpy(g_device_version, version_buf, target_len);
+ g_device_version[target_len] = '\0'; // 手动添加字符串结束符
+
printf("g_device_version: %s\n", g_device_version);
- return g_device_version;
+ return g_device_version;
}
/* 获取设备token: 优先读本地缓存,判断过期,否则刷新 */
char *uapi_ln_get_device_token(void)
return NULL;
}
- /* 没有,发出提示信息 */
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 请先激活设备获取 Token");
-
+ /* 没有,尝试获取 Token */
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 刷新 Token");
+ if(uapi_dev_runtime_get_cat1_networkstat())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 网络在线,刷新 Token");
+ if(uapi_ln_refresh_device_token() == ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 刷新 Token 成功");
+ return g_device_token;
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 刷新 Token 失败");
+ return NULL;
+ }
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[TOKEN] 网络离线,无法刷新 Token");
+ }
return NULL;
}
/* 清除设备token */
if (mail.cmd == LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN)
{
printf("LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN:获取雷鸟设备Token\n");
- uint32_t ret = ln_get_device_token_http(uapi_ln_get_device_id(), uapi_ln_get_device_iccid(), uapi_ln_get_device_model(), uapi_ln_get_device_version());
- if (ret == ERRCODE_SUCC)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVER_SEND_TASK] 获取雷鸟设备Token成功\n");
- ret = ln_ws_start(ln_ws_process_message);
- if (ret != 0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVER_SEND_TASK] 启动WebSocket失败: %d\n", ret);
- }
- }
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVER_SEND_TASK] 获取雷鸟设备Token失败\n");
- }
+ uapi_ln_get_device_token();
}
else if (mail.cmd == LN_HTTP_SERVICE_CMD_SPEECH_CHAT_STREAM)
{
printf("[LN_AUDIO] init failed in http server init\n");
/* 不中断HTTP服务,按需可返回失败 */
}
+ ln_ws_start(ln_ws_process_message);
return ERRCODE_SUCC;
}