From f122e0f59b2aa4ac37f203458ac7d678901fdd84 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=83=A1=E4=BC=A0=E5=86=9B?= <1224667075@qq.com> Date: Fri, 14 Nov 2025 02:59:31 +0000 Subject: [PATCH] Merge #2695 into sdk650pathc0423 from refs/changes/2695/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 胡传军 * refs/changes/2695/head: (9 commits squashed) - 协议内容修改 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 - 650入库修改 - 650入库修改 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 - lnppp版本vad增加 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Merged-by: 薛文强 CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2695 --- .../brandy/brandy_standard/service_init.c | 11 +++ .../thunderbird/src/ThunderBirdModel.cpp | 2 +- .../config/target_config/brandy/config.py | 2 + .../4g/cat1Service/Service/cat1_server.c | 70 +++++++++++++++++-- .../ai_old/websocket_server_example.cpp | 4 ++ code/sdk/zhihui/config/include/ConfigModel.h | 5 +- code/sdk/zhihui/config/include/ConfigModelC.h | 13 ++++ code/sdk/zhihui/config/src/ConfigModel.cpp | 33 +++++++++ code/sdk/zhihui/dmp/dmp_dev_authentication.c | 27 +++++-- code/sdk/zhihui/imsl/CMakeLists.txt | 2 +- code/sdk/zhihui/imsl/src/vad_server.c | 30 ++++++++ .../zhihui/leiniao/imsl_ln/ln_api_websocket.c | 1 + .../ble_service/bleservice/bleEvent.c | 4 ++ code/sdk/zhihui/utils/custom_utils.c | 5 +- 14 files changed, 191 insertions(+), 18 deletions(-) diff --git a/code/sdk/application/brandy/brandy_standard/service_init.c b/code/sdk/application/brandy/brandy_standard/service_init.c index 0c7b0c804..6ed3503d3 100644 --- a/code/sdk/application/brandy/brandy_standard/service_init.c +++ b/code/sdk/application/brandy/brandy_standard/service_init.c @@ -117,6 +117,10 @@ #include "imsl_at_cmd.h" #endif +#ifdef SUPPORT_ZHIHUI_DMP +#include "dmp_api_at.h" +#endif + static void register_at_service(void) { #ifdef SUPPORT_AT_GRAPHIC @@ -279,6 +283,13 @@ static void register_at_service(void) at_cmd_add_moudle(imsl_vad_table, imsl_vad_cmd_count); #endif + +#ifdef SUPPORT_ZHIHUI_DMP + uint32_t dmp_api_cmd_count; + at_cmd_table_t *dmp_api_table = get_dmp_api_cmd_table(&dmp_api_cmd_count); + at_cmd_add_moudle(dmp_api_table, dmp_api_cmd_count); +#endif + } #ifdef CONFIG_OTA_UPDATE_SUPPORT diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index 151a06a66..339eca903 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -2506,7 +2506,7 @@ // 录音结束处理函数 void ThunderBirdModel::HandleAudioRecordingEnd() { - return ;//需要vad的时候在处理 + // return ;//需要vad的时候在处理 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingEnd: 录音结束"); // 获取当前视图状态 diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 2d342f615..40bd6a58e 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -1534,6 +1534,8 @@ target = { #VAD 相关配置 "imsl", "minimp3", + "dmp", + "nativeabilityfwk", "custom_utils", diff --git a/code/sdk/zhihui/4g/cat1Service/Service/cat1_server.c b/code/sdk/zhihui/4g/cat1Service/Service/cat1_server.c index 25328b69a..c1b819260 100644 --- a/code/sdk/zhihui/4g/cat1Service/Service/cat1_server.c +++ b/code/sdk/zhihui/4g/cat1Service/Service/cat1_server.c @@ -62,6 +62,7 @@ extern "C" { #include "cat1_utils.h" #include "cmsis_os.h" +#include "ConfigModelC.h" static uint8_t g_skip_cat1_service_udp_transfer = 0; static f_cat1_msg_callback g_cat1_msg_callback_func=NULL; #define PEER_IP "172.16.1.2" @@ -114,9 +115,13 @@ enum UDP_COMMAND_HEAD { UDP_MSG_WATCH_REPLY_ACK = 0xAC,// // UDP_MSG_WATCH_REPLY_HANGUP = 0x21,// }; + +void udp_send_msg_toCat1(uint8_t cmd,char *content); + /** 0: old format 1字节cmd, 1: new format 2字节cmd */ static uint8_t g_msg_format_type = 0; // void watch_replay_cat1_ANSWER(void); +void cat1_get_DEV_ID(void); static char ble_buffer[20] = {0}; @@ -137,6 +142,37 @@ void ble_get_cat1_at_msg(char *buffer,uint8_t len) memcpy_s(buffer,len,ble_buffer,strlen(ble_buffer)); } +void send_ble_mac_toCat1(void)//发送BLE mac地址 to CAT1 +{ + errcode_t ret = 0; + uint8_t btaddr[6] = {0}; + char btaddr_str[64] = {0}; + uint32_t len = 6; + ret = uapi_get_nv_btaddr((uint8_t *)btaddr, &len); + sprintf_s((char *)btaddr_str,64,"%02X:%02X:%02X:%02X:%02X:%02X", btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]); + udp_send_msg_toCat1(UDP_MSG_SEND_BLE_MAC_TO_CAT1,btaddr_str); +} +void send_dmp_factory_flag(void)//发送入库出厂标识 +{ + printf("send_dmp_factory_flag\r\n"); + char send_str[10] = {0}; + int state = Get_Dmp_Factory_Status(); + sprintf_s((char *)send_str,10, "%d", state); + udp_send_msg_toCat1(UDP_MSG_RECV_DMP_FACTORY,send_str);//发送和接收同一个指令 +} + + +void send_volte_switch_toCat1(void)//发送VOLTE->CAT1 +{ + bool Cat1_4G =cm_poweron_cat1_on_bootup_flag(); + if (Cat1_4G == 0) + return; + + bool volte = get_volte_switch(); + char send_str[5] = {0}; + sprintf_s((char *)send_str,5, "%d", volte); + udp_send_msg_toCat1(UDP_MSG_SEND_VOLTE_SWITCH,send_str); +} f_cat1_msg_callback g_msg_callback_func=NULL; @@ -306,6 +342,8 @@ static osTimerId_t g_timer_time_answer = NULL; static osTimerId_t g_timer_time_Dial = NULL; + + /**如果 * g_python_updated == 0 && * g_py_ver >= PY_SRV_VER_SUPORT_PY_OTA_MINI_VER && @@ -444,6 +482,16 @@ void udp_send_msg_toCat1(uint8_t cmd,char *content) } } +void get_software_version_toCat1(void)//发送固件版本到cat1 +{ + char version_buf[128] = {0}; + uint32_t version_len = 128; + uapi_get_buildversion((uint8_t *)version_buf, version_len); + printf("version_buf %s\r\n",version_buf); + udp_send_msg_toCat1(UDP_MSG_GET_SOFTWARE_VESION,version_buf); + return; +} + #define BOOTMSG_HEADER_STR "BOOTUP" #define BOOTMSG_HEADER_STR_LEN strlen(BOOTMSG_HEADER_STR) #define NETSTAT_HEADER_STR "imei:" @@ -1286,6 +1334,15 @@ void cat1_start_tcp_ota_init(void) } +void send_dmp_mode_toCat1(uint8_t on)//设置 +{ + cat1_print_dbg("set_telecom_dmp_switch_toCat1 on:%d\r\n",on); + char buf[10] ={0}; + sprintf_s(buf,10,"%d",on); + udp_send_msg_toCat1(UDP_MSG_SET_TELECON_DMP_SWITCH,buf);//1开启 0关闭 +} + + /** * @brief 发送指令给Cat1,输入 CMD_4G_T , cmd_buf 为指令所需参数. @@ -1373,10 +1430,10 @@ static int udp_packet_parse(char *rx_buffer, int len) switch (cmd) { case UDP_MSG_COMMING_CALL: - #ifdef SUPPORT_DMP + // #ifdef SUPPORT_DMP if (get_volte_switch() == false) //如果VOLTE开关没有开启则不接CAT1的来电功能 break; - #endif + // #endif index = cat1_handle_call_incomming(msg_buffer); // uapi_save_runtime_log(RUNTIME_LOG_CAT1_UDP_MSG_COMMING); break; @@ -1446,7 +1503,7 @@ static int udp_packet_parse(char *rx_buffer, int len) #endif if(g_msg_format_type == 0) break; //下面指令只有新格式才支持,因此返回 - #if 0 + #if 1 int stateOld = get_dmp_change_mode_old(); int stateNew = get_dmp_change_mode_toCat1();//0 stateOld = 0 0-1 if (stateNew == 0){//关闭入库功能 把恢复出厂标识清0 @@ -1466,12 +1523,11 @@ static int udp_packet_parse(char *rx_buffer, int len) }else { get_software_version_toCat1(); send_ble_mac_toCat1(); - send_dmp_cm_address_toCat1(); send_volte_switch_toCat1(); send_dmp_factory_flag(); } } - #endif + #endif } if(strstr(msg_buffer,"callanswer_success")!=NULL) @@ -1529,9 +1585,9 @@ static int udp_packet_parse(char *rx_buffer, int len) break; case UDP_MSG_RECV_DMP_FACTORY: // uapi_save_runtime_log(RUNTIME_LOG_CAT1_UDP_MSG_RECV_DMP); - #ifdef SUPPORT_DMP + // #ifdef SUPPORT_DMP set_dmp_china_mobile_factory_flag(msg_buffer); - #endif + // #endif break; case UDP_MSG_RECV_CAT1_SMS_CONTENT://接收单条短信内容 case UDP_MSG_SMS: diff --git a/code/sdk/zhihui/ai_old/websocket_server_example.cpp b/code/sdk/zhihui/ai_old/websocket_server_example.cpp index 1caf9c5df..fe325e68c 100644 --- a/code/sdk/zhihui/ai_old/websocket_server_example.cpp +++ b/code/sdk/zhihui/ai_old/websocket_server_example.cpp @@ -433,7 +433,11 @@ bool chat_url_callback(ws_server_type_t type, char *url_buf, uint32_t url_size, } else { char device_id[128] = {0}; get_cmai_dev_id(device_id); + #ifdef BOARD_N9 + char *product_id = "1980099696668815362"; + #else char *product_id = "1927646275585744898"; + #endif // 根据全局AI类型选择不同的URL if (g_chat_ai_type == 1) { // AI_TYPE_JIU diff --git a/code/sdk/zhihui/config/include/ConfigModel.h b/code/sdk/zhihui/config/include/ConfigModel.h index 81304430d..93a348a7e 100644 --- a/code/sdk/zhihui/config/include/ConfigModel.h +++ b/code/sdk/zhihui/config/include/ConfigModel.h @@ -323,7 +323,7 @@ namespace OHOS {ConfigDataType::DATATYPE_BOOL, "classicbt_service_on", "true" },// CONFIGMODEL_ITEM_CLASSIC_BT_SERVICE_ON, //关机前经典蓝牙服务状态,启动时仍然恢复其当时状态 {ConfigDataType::DATATYPE_INT, "screen_brightness", "155" },//CONFIGMODEL_ITEM_SCREEN_BRIGHTNESS_VALUE, //屏幕亮度 {ConfigDataType::DATATYPE_INT, "screenoff_timeout_value", "5000" },//CONFIGMODEL_ITEM_SCREEN_OFF_TIMEOUT_VALUE, //屏幕自动息屏时间 默认 5秒 5000ms - #if defined(SUPPORT_CHINA_MOBILE_DMP) || defined(SUPPORT_A5133_SERVICE) //移动入库软件要求默认开启4G + #if defined(SUPPORT_CHINA_MOBILE_DMP) || defined(SUPPORT_A5133_SERVICE) || defined(SUPPORT_CHINA_MOBILE_AI_REGULATION) //移动入库软件要求默认开启4G {ConfigDataType::DATATYPE_BOOL, "cat1_service_on", "true" },//CONFIGMODEL_ITEM_CAT1_SERVICE_ON, // 关机前Cat1 Service启动着,则重启仍然启动,反之亦然 #else {ConfigDataType::DATATYPE_BOOL, "cat1_service_on", "false" },//CONFIGMODEL_ITEM_CAT1_SERVICE_ON, // 关机前Cat1 Service启动着,则重启仍然启动,反之亦然 @@ -410,6 +410,9 @@ namespace OHOS #elif defined(SUPPORT_CHINA_MOBILE_DMP) //移动入库 {ConfigDataType::DATATYPE_INT, "dmp_change_mode", "2" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1 {ConfigDataType::DATATYPE_INT, "dmp_change_mode_old", "2" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致 + #elif defined(SUPPORT_CHINA_MOBILE_AI_REGULATION) //移动入库 + {ConfigDataType::DATATYPE_INT, "dmp_change_mode", "3" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1 + {ConfigDataType::DATATYPE_INT, "dmp_change_mode_old", "3" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致 #else //关闭入库功能 {ConfigDataType::DATATYPE_INT, "dmp_change_mode", "0" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1 {ConfigDataType::DATATYPE_INT, "dmp_change_mode_old", "0" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致 diff --git a/code/sdk/zhihui/config/include/ConfigModelC.h b/code/sdk/zhihui/config/include/ConfigModelC.h index 52ce2ba9c..c6dbc6d79 100644 --- a/code/sdk/zhihui/config/include/ConfigModelC.h +++ b/code/sdk/zhihui/config/include/ConfigModelC.h @@ -175,6 +175,19 @@ void cm_set_dmp_data_pass(const char *data_pass); size_t cm_get_dmp_data_pass(char *buf, size_t buf_size); +int get_dmp_change_mode_old(void); + +int get_dmp_change_mode_toCat1(void);//获取切换模式TO CAT1 + +void set_dmp_change_mode_old(uint8_t mode);//获取切换模式TO CAT1; + +void set_dmp_china_mobile_factory_flag(char *msg); + +int Get_Dmp_Factory_Status(void); + +bool get_volte_switch(void);// + +//设置factory状态 #ifdef __cplusplus #if __cplusplus } diff --git a/code/sdk/zhihui/config/src/ConfigModel.cpp b/code/sdk/zhihui/config/src/ConfigModel.cpp index 19822b979..c8e170681 100644 --- a/code/sdk/zhihui/config/src/ConfigModel.cpp +++ b/code/sdk/zhihui/config/src/ConfigModel.cpp @@ -1657,6 +1657,23 @@ void cm_set_A2DP_switch(bool value) OHOS::ConfigModel::GetInstance()->set_condigData_Bool(OHOS::ConfigModel::CONFIGMODEL_ITEM_A2DP,value); } +int get_dmp_change_mode_old(void)//获取切换模式TO CAT1 +{ + int state = OHOS::ConfigModel::GetInstance()->GetDmpChangeModeOld(); + return state; +} + +int get_dmp_change_mode_toCat1(void)//获取切换模式TO CAT1 +{ + int state = OHOS::ConfigModel::GetInstance()->GetDmpChangeMode(); + return state; +} + +void set_dmp_change_mode_old(uint8_t mode)//获取切换模式TO CAT1 +{ + OHOS::ConfigModel::GetInstance()->SetDmpChangeModeOld(mode); + return; +} // stop play music void mmi_stop_music_play(void) @@ -1729,7 +1746,23 @@ size_t cm_get_dmp_data_pass(char *buf, size_t buf_size) return copy_len; } +void set_dmp_china_mobile_factory_flag(char *msg)//设置factory状态 +{ + printf("set_dmp_china_mobile_factory_flag:%s\r\n",msg); + int state = atoi(msg); + OHOS::ConfigModel::GetInstance()->SetDmpFactoryStatus(state); +} +int Get_Dmp_Factory_Status(void)//设置factory状态 +{ + return OHOS::ConfigModel::GetInstance()->GetDmpFactoryStatus(); +} + +bool get_volte_switch(void)// +{ + bool volte = OHOS::ConfigModel::GetInstance()->GetVoLTE_Call(); + return volte; +} #ifdef __cplusplus #if __cplusplus diff --git a/code/sdk/zhihui/dmp/dmp_dev_authentication.c b/code/sdk/zhihui/dmp/dmp_dev_authentication.c index ec04cc572..c2734ab23 100644 --- a/code/sdk/zhihui/dmp/dmp_dev_authentication.c +++ b/code/sdk/zhihui/dmp/dmp_dev_authentication.c @@ -477,10 +477,17 @@ bool dmp_aut_active(void)//设备激活 if(ret==200) { dmp_read_dev_pass_save(out_buf); + cJSON_free(json_string); + return true; } + else + { + cJSON_free(json_string); + return false; - cJSON_free(json_string); - return true; + } + + } @@ -495,16 +502,22 @@ bool dmp_aut_login(void)//登录 time_t timestamp; timestamp = time(NULL); - if(timestamp - aut_login_time < 60 * 60 ) - { - return true; - } - char dev_pass[64]={0}; // 若内存中无 data_pass,则尝试从配置中加载 if (strlen(data_pass) == 0) { (void)cm_get_dmp_data_pass(data_pass, sizeof(data_pass)); } + if(strlen(data_pass) == 0) + { + if(dmp_aut_active())//设备激活 + { + (void)cm_get_dmp_data_pass(data_pass, sizeof(data_pass)); + } + else + { + return false; + } + } memcpy(dev_pass, data_pass, strlen(data_pass)); printf("dev_sign_in 2"); int count = 5; diff --git a/code/sdk/zhihui/imsl/CMakeLists.txt b/code/sdk/zhihui/imsl/CMakeLists.txt index 215df740b..d5521d382 100644 --- a/code/sdk/zhihui/imsl/CMakeLists.txt +++ b/code/sdk/zhihui/imsl/CMakeLists.txt @@ -20,7 +20,7 @@ set(PUBLIC_HEADER # 公共宏定义(可选) set(PUBLIC_DEFINES # 例如:IMSL_LN_ENABLE=1 - ENABLE_VAD_SERVER=0 + ENABLE_VAD_SERVER=1 ) # 根据 MINI_MP3 宏添加 MP3 解码支持 diff --git a/code/sdk/zhihui/imsl/src/vad_server.c b/code/sdk/zhihui/imsl/src/vad_server.c index 1b5e272cb..a9ef0ddca 100644 --- a/code/sdk/zhihui/imsl/src/vad_server.c +++ b/code/sdk/zhihui/imsl/src/vad_server.c @@ -127,6 +127,7 @@ static void vad_mp3_pcm_callback(const int16_t *pcm_data, int samples, int chann } #endif +static uint8_t dmp_auth=0; /** * @brief 处理 PCM 数据,直接送给 VAD(简化版) * @note VAD 库支持可变长度输入(推荐 < 100ms),无需固定切分 @@ -140,6 +141,35 @@ static errcode_t vad_process_pcm_data(const int16_t *pcm_data, size_t sample_cou } pcm_call_count++; + + LOGIN_SUCC: + + if(dmp_auth==0) + { + char dmp_token[64]; + if(dmp_read_dev_token(dmp_token)) + { + struct AuthInfo auth_info; + strcpy(auth_info.dmp_token, dmp_token); + int ret =auth_vad(&auth_info); + printf("vad_process_pcm_data %d\r\n",ret); + dmp_auth=1; + } + else + { + if(dmp_aut_login()) + { + goto LOGIN_SUCC; + } + else + { + return ERRCODE_FAIL; + } + } + } + + + /* 检查数据长度是否合理(VAD 推荐 < 100ms)*/ const size_t MAX_SAMPLES_PER_CALL = 1600; // 100ms @ 16kHz diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c index d3d362d21..8c5152815 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c @@ -857,6 +857,7 @@ static void ai_binary_message_handler(const uint8_t *raw_data, uint32_t timestam // 记录接收数据的时间 g_last_binary_data_tick = osKernelGetTickCount(); + g_vad_cooldown_active = false; if (!is_chat_id_matched() && g_audio_playback_active) { LN_WS_WARN("Chat ID not matched\n"); diff --git a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c index d2e8787b0..392909082 100644 --- a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c +++ b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c @@ -1195,7 +1195,11 @@ void Get_AI_DEV_ID_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalDat cJSON *dataJSON = cJSON_CreateObject(); cJSON_AddStringToObject(dataJSON,"device_id",device_id); + #ifdef BOARD_N9 + cJSON_AddStringToObject(dataJSON,"product_id","1980099696668815362"); + #else cJSON_AddStringToObject(dataJSON,"product_id","1927646275585744898"); + #endif char *json_format = cJSON_PrintUnformatted(dataJSON); cJSON_Delete(dataJSON); diff --git a/code/sdk/zhihui/utils/custom_utils.c b/code/sdk/zhihui/utils/custom_utils.c index 63b620239..1435c6945 100644 --- a/code/sdk/zhihui/utils/custom_utils.c +++ b/code/sdk/zhihui/utils/custom_utils.c @@ -2029,13 +2029,16 @@ errcode_t uapi_get_buildversion(uint8_t *para, uint32_t para_len) (void)sprintf_s(str, VER_STR_MAX, "V%s", get_version_string()); + #else #if defined(SUPPORT_TELECOM_DMP) #if defined(SUPPORT_CHINA_MOBILE_DMP) - #error SUPPORT_TELECOM_DMP SUPPORT_CHINA_MOBILE_DMP Cannot define at same time! + #error SUPPORT_TELECOM_DMP SUPPORT_CHINA_MOBILE_DMP SUPPORT_CHINA_MOBILE_AI_REGULATION Cannot define at same time! #endif (void)sprintf_s(str, VER_STR_MAX, "V%s_%s_CT", + #elif defined(SUPPORT_CHINA_MOBILE_AI_REGULATION) + (void)sprintf_s(str, VER_STR_MAX, "V%s_%s_CM_AI", #elif defined(SUPPORT_CHINA_MOBILE_DMP) (void)sprintf_s(str, VER_STR_MAX, "V%s_%s_CM", #else -- 2.17.1