#include "imsl_at_cmd.h"\r
#endif\r
\r
+#ifdef SUPPORT_ZHIHUI_DMP\r
+#include "dmp_api_at.h"\r
+#endif\r
+\r
static void register_at_service(void)\r
{\r
#ifdef SUPPORT_AT_GRAPHIC\r
at_cmd_add_moudle(imsl_vad_table, imsl_vad_cmd_count);\r
#endif\r
\r
+\r
+#ifdef SUPPORT_ZHIHUI_DMP\r
+ uint32_t dmp_api_cmd_count;\r
+ at_cmd_table_t *dmp_api_table = get_dmp_api_cmd_table(&dmp_api_cmd_count);\r
+ at_cmd_add_moudle(dmp_api_table, dmp_api_cmd_count);\r
+#endif\r
+\r
}\r
\r
#ifdef CONFIG_OTA_UPDATE_SUPPORT\r
// 录音结束处理函数
void ThunderBirdModel::HandleAudioRecordingEnd()
{
- return ;//需要vad的时候在处理
+ // return ;//需要vad的时候在处理
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingEnd: 录音结束");
// 获取当前视图状态
#VAD 相关配置
"imsl",
"minimp3",
+ "dmp",
+
"nativeabilityfwk",
"custom_utils",
#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"
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};
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;
static osTimerId_t g_timer_time_Dial = NULL;
+
+
/**如果
* g_python_updated == 0 &&
* g_py_ver >= PY_SRV_VER_SUPORT_PY_OTA_MINI_VER &&
}
}
+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:"
}
+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 为指令所需参数.
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;
#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
}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)
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:
} 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
{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启动着,则重启仍然启动,反之亦然
#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 要和新默认值一致
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
}
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)
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
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;
+ }
+
+
}
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;
# 公共宏定义(可选)
set(PUBLIC_DEFINES
# 例如:IMSL_LN_ENABLE=1
- ENABLE_VAD_SERVER=0
+ ENABLE_VAD_SERVER=1
)
# 根据 MINI_MP3 宏添加 MP3 解码支持
}
#endif
+static uint8_t dmp_auth=0;
/**
* @brief 处理 PCM 数据,直接送给 VAD(简化版)
* @note VAD 库支持可变长度输入(推荐 < 100ms),无需固定切分
}
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
// 记录接收数据的时间
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");
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);
(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