static aos_thread_id AI_AMP_task_id = 0;
static aos_queue_ptr AI_AMP_task_queue = NULL;
static u32 AI_VC_client_websocket_handle = 0;
+
static u32* ai_uart_handle;
+
+static u32* ui_uart_handle=NULL;
+
+
static aos_thread_id AI_VC_send_task_id = 0;
char AI_VC_send_task_flag = 0;
static aos_thread_id AI_VC_read_task_id = 0;
+
+static aos_thread_id AI_VC_read_IOT_id = 0;
+
volatile char AI_VC_read_task_flag = 0;
static aos_queue_ptr AI_VC_send_queue = NULL;
static aos_thread_id AI_VC_play_task_id = 0;
WebSocketClient* websocket_res[WEBSOCKET_MAX_NUM] = {0};
WebSocketClient *AI_client_VC = NULL;
+
+WebSocketClient *AI_client_IOT = NULL;
+
+
static u32 close_timerout = 0;
static u32 VC_pingping_timerout = 0;
static u32 VC_END_play_timerout = 0;
static aos_timer_ptr AI_VC_1S_timer = NULL;
static aos_timer_ptr sys_10S_timer = NULL;
+
+ //static aos_timer_ptr AI_VC_60S_timer = NULL;
+
static int login_timer_count = 0;
static int power_off_count = 60*6*24;
}
+
+
#if (BK_LOG_CFG==BK_LOG_UART)
int bk_printf(const char *format, ...)
{
//vc_cfg.dev_type = DEV_ADS;//奥德赛
vc_cfg.dev_type = DEV_JSWM;//金山完美
//vc_cfg.dev_type = DEV_ALY;//阿里云
- // strcpy(vc_cfg.server_ip,"amp.raisound.com");//服务器地址
- strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
- vc_cfg.VC_mode =0;//对话模式
+ strcpy(vc_cfg.server_ip,"amp.raisound.com");//服务器地址
+
+ // strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
+
+ vc_cfg.VC_mode =2;//对话模式
strcpy(vc_cfg.power_on_tone,"你好,请问您有什么需要我帮忙的吗?");//开机提示词
vc_cfg.VC_record_TYPE = VC_record_TYPE_PCM;//录音格式
vc_cfg.VC_play_TYPE = VC_play_TYPE_PCM;//播放格式
vc_cfg.is_VAD = IS_VAD;//=1打开vad打断
vc_cfg.is_KWS = IS_KWS;//=1打开本地语言打断
vc_cfg.speech_rate = 0;//语速配置
- vc_cfg.vad_silence = 200;//vad断句时间 ms
+ vc_cfg.vad_silence = 500;//vad断句时间 ms
vc_cfg.VC_TTS_volume = 80;//音量
}
int init_VC_cfg(void)
memset(vc_cfg.dev_pass,0,sizeof(vc_cfg.dev_pass));
}
fclose(fp);
+
+
}
+
+ vc_cfg.VC_mode =2;//对话模式
+
+
return 0;
}
}
+
+int one_receive_bin=0;
int isneedsave=0;
int startsave_tts=0;
static int play_audio_file_event(char *file_name);
+u8 *save_temp_tts=NULL;
int check_text(char *text,int ret_str_len)
{
//bk_printf("check_text:text:%s",text);
+
if(ret_str_len >60)
return -1;
int ret = -1;
tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"配置成功,当前音量%d。",vc_cfg.VC_TTS_volume);
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY);
}
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+ // if(vc_cfg.VC_mode != 0)
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+
is_save_VC_cfg = 1;
ret = 0;
goto RET;
tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"配置成功,当前音量%d。",vc_cfg.VC_TTS_volume);
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY);
}
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+ //if(vc_cfg.VC_mode != 0)
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+
is_save_VC_cfg = 1;
ret = 0;
goto RET;
if(vc_cfg.VC_mode == 0)
{
AI_AMP_MSG_put("已切换到连续对话模式。",strlen("已切换到连续对话模式。"),VC_TTS_PLAY);
+
+ app_audio_set_master_volume(15*80/100);
}else if(vc_cfg.VC_mode == 1)
{
AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
+ app_audio_set_master_volume(15*80/100);
}else
{
+
+ app_audio_set_master_volume(15*80/100);
AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
}
is_save_VC_cfg = 1;
ret = 0;
+
+ IOT_update_statu(3,"","");
goto RET;
}
goto RET;
}
- if(strstr(text,"最新版本"))
+ if(strstr(text,"帮我生成语音文件"))
+ {
+
+ AI_AMP_MSG_put(text,strlen(text),VC_TTS_PLAY);
+
+ ret = 0;
+ goto RET;
+ }
+
+ //||strstr(text,"做一个惊讶的表情")||strstr(text,"做一个开心的表情")
+
+ if(strstr(text,"做一个发怒的表情"))
+ {
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
+ ret = 0;
+ goto RET;
+ }
+ if(strstr(text,"做一个惊讶的表情"))
{
- AI_AMP_MSG_put("当前版本是最新的",strlen("当前版本是最新的"),VC_TTS_PLAY);
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x06,0x01,0x08};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
ret = 0;
goto RET;
}
+ if(strstr(text,"做一个开心的表情"))
+ {
+
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
+ ret = 0;
+ goto RET;
+ }
+
+
+
+
+ // if(strstr(text,"导出文件"))
+ // {
+
+ // int len_daochu=0,sum_len=0;;
+ // FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","rb");
+
+
+ // if(fp_play_local){
+
+
+ // while(1){
+
+
+ // len_daochu=fread(recv_get,1,1024,fp_play_local);
+
+
+ // if(len_daochu>0){
+ // sum_len+=len_daochu;
+ // audio_data(recv_get,len_daochu,22);
+
+ // }else{
+
+ // break;
+
+ // }
+
+
+ // }
+
+
+ // bk_printf("daochu len is %d ...",sum_len);
+ // fclose(fp_play_local);
+
+ // }
+ // ret = 0;
+ // goto RET;
+ // }
if(strstr(text,"查询"))
// bk_printf("playshebei");
- isneedsave=isExist_file("C:/cmd_local_301.pcm");
+ // isneedsave=isExist_file("C:/cmd_local_301.pcm");
- if(isneedsave==0){
+ //isneedsave=0;
- bk_printf("exist");
+ // if(isneedsave==0){
- // play_audio_file_event("C:/R_POWER_1.mp3");
+ // bk_printf("exist");
- FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","r");
+ // // play_audio_file_event("C:/R_POWER_1.mp3");
+ // FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","r");
- if(fp_play_local){
+ // if(fp_play_local){
- while(fread(recv_get,1,1024,fp_play_local)>0){
- // fread(recv_get,1,1024,fp_play_local);
- // bk_printf("readttsfile");
+ // while(fread(recv_get,1,1024,fp_play_local)>0){
- AI_VC_put_play_data(recv_get,1024);
+ // // fread(recv_get,1,1024,fp_play_local);
+ // // bk_printf("readttsfile");
+
+ // AI_VC_put_play_data(recv_get,1024);
- }
+ // }
- fclose(fp_play_local);
- }
+ // fclose(fp_play_local);
+ // }
- }else{
+ // }else{
- bk_printf("needsave");
+ // bk_printf("needsave");
- fp_tts_save=fopen("C:/cmd_local_301.pcm","wb");
+ // fp_tts_save=fopen("C:/cmd_local_301.pcm","wb");
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY);
- startsave_tts=1;
+ // startsave_tts=1;
- }
+ // }
ret = 0;
cJSON_AddStringToObject(outbound_attributes, "provider", "CosyVoice");
}else
cJSON_AddStringToObject(outbound_attributes, "provider", "volcengine");
+
+ // cJSON_AddStringToObject(outbound_attributes, "provider", "test");
// 创建 outbound_attributes 下的 cfg 对象
cJSON *outbound_cfg = cJSON_CreateObject();
if(outbound_attributes_format == attributes_format_OPUS)
// 释放内存
cJSON_Delete(root);
}
+
+//{"cmd":"renew_device"}
+
+void deal_iot_receive(char *json_data)
+{
+
+ bk_printf(json_data);
+
+ // vc_cfg.VC_TTS_volume = 100;
+ // AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
+
+ if(strstr(json_data,"get_device_state")){
+
+ bk_printf("get_device_state");
+
+ IOT_update_statu(3,"","");
+
+ // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
+
+ }
+
+ if(strstr(json_data,"find_device")){
+
+ bk_printf("find_device");
+
+ AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
+
+ }
+
+ if(strstr(json_data,"renew_device")){
+
+ bk_printf("renew_device");
+
+ IOT_update_bargein();
+
+ if(vc_cfg.VC_mode == 0)
+ {
+ AI_AMP_MSG_put("已切换到连续对话模式。",strlen("已切换到连续对话模式。"),VC_TTS_PLAY);
+
+ //app_audio_set_master_volume(15*80/100);
+
+ }else if(vc_cfg.VC_mode == 1)
+ {
+ AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
+
+ // app_audio_set_master_volume(15*80/100);
+ }else
+ {
+
+ // app_audio_set_master_volume(15*80/100);
+ AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
+ }
+
+ save_VC_cfg();
+
+ }
+
+ if(strstr(json_data,"switch_volume"))
+ {
+
+ // bk_printf("switch_volume");
+
+ char *str_tmp = NULL;
+
+ char volume_str[5]={0};
+
+ str_tmp = strstr(json_data,"\"target\":\"");
+
+ //bk_printf("str_tmp:%p",str_tmp);
+ if(str_tmp)//解析password
+ {
+ str_tmp += strlen("\"target\":\"");
+ int count = str_count(str_tmp,'\"');
+ bk_printf("count:%d",count);
+ if(count < sizeof(volume_str))
+ {
+
+
+ memcpy(volume_str,str_tmp,count);
+ volume_str[count] = 0;
+ bk_printf("volume_str:%s",volume_str);
+
+ int temp_vol=atoi(volume_str);
+
+ if(temp_vol>=0&&temp_vol<=100)
+ {
+
+ vc_cfg.VC_TTS_volume = temp_vol;
+
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+ char tts_temp[200]={0};
+
+
+ sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+
+ AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+
+
+ //is_save_VC_cfg = 1;
+
+ save_VC_cfg();
+ }
+
+
+
+ }
+ else
+ {
+ bk_printf("获取volume失败");
+ }
+ }
+ }
+
+
+}
//Audio.Create 开始发送音频
static void AI_VC_send_audio_create(void)
{
free(json_str);
cJSON_Delete(root);
}
+
+
+// {
+// "event": "audio.convert",
+// "payload": {
+// "audio_convert_request": {
+// "audio_url": audio_url,
+// "bit_depth": 16,
+// "channels": 1,
+// "sample_rate": 16000,
+// "target_format": "pcm"
+// }
+// }
+// }
+
+
+//Music.Start 开始发送音频
+static void AI_VC_send_music_start(char *urlpath)
+{
+ VC_state = VC_State_SpeechStart;//开始说
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
+
+ // 设置 "event" 字段
+ cJSON_AddStringToObject(root, "event", "audio.convert");
+
+ // 创建 "payload" 对象
+ cJSON *payload = cJSON_CreateObject();
+ if (payload == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+
+ cJSON *audio_convert_request = cJSON_CreateObject();
+ if (payload == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+
+ cJSON_AddStringToObject(audio_convert_request, "audio_url", urlpath);
+ cJSON_AddNumberToObject(audio_convert_request, "bit_depth", 16);
+ cJSON_AddNumberToObject(audio_convert_request, "channels", 1);
+ cJSON_AddNumberToObject(audio_convert_request, "sample_rate", 16000);
+
+ if(outbound_attributes_format == attributes_format_OPUS)
+ {
+ cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");
+ }else{
+
+ cJSON_AddStringToObject(audio_convert_request, "target_format", "pcm");
+ }
+
+
+ cJSON_AddItemToObject(payload, "audio_convert_request", audio_convert_request);
+
+ // 将 "payload" 对象添加到根对象中
+ cJSON_AddItemToObject(root, "payload", payload);
+
+ // 将 JSON 对象转换为字符串
+ char *json_str = cJSON_Print(root);
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
+ AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+
+
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
+
//Audio.Completed 结束发送音频
static void AI_VC_send_audio_completed(void)
{
if(AI_client_VC && AI_VC_send_queue_data.data)
{
- VC_pingping_timerout = 4;
+ VC_pingping_timerout = 20;
if(inbound_attributes_format == attributes_format_OPUS&& AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_BINARY_FRAME )//转码opus
{
char *opus_data = aic_malloc(OPUS_ENCODER_PACK_MS*16);
// bk_printf("send_count_pcm: %d len: %d !",send_count_pcm,send_update);
-
-
-
// audio_data(AI_VC_send_queue_data.data,AI_VC_send_queue_data.len,25);
}
}
+
+int opus_encode_len=0,opus_decode_len=0;
+
+
+
+
+
+//#include <stdio.h>
+
+long getFileSize(char* filename) {
+ FILE* file = fopen(filename, "rb");
+ if (file == NULL) {
+ return -1; // 文件打开失败
+ }
+
+ fseek(file, 0, SEEK_END);
+ long fileSize = ftell(file);
+ fclose(file);
+
+ return fileSize;
+}
+
+
+
#define recv_buff_mxa_len 20*1024
+
+ u32 timer_ms21=0;
+
+ u32 timer_ms22=0;
+
+ static void AI_VC_IOT_task(void *thread_input)//websocket 读线程
+ {
+
+
+ receive_iot_message(AI_client_IOT);
+
+ }
+
+
static void AI_VC_read_task(void *thread_input)//websocket 读线程
{
int status;
static u8 *recv_buff = NULL;
+
if(recv_buff == NULL)
{
recv_buff = aic_malloc(recv_buff_mxa_len);
memset(recv_buff,0,recv_buff_mxa_len);
// status = aic_websocket_recv(AI_VC_client_websocket_handle, recv_buff, sizeof(recv_buff),
// &code, AOS_WAIT_FOREVER,&result_val);
- //bk_printf("AI_VC_read_task 1");
- status = receive_websocket_message(AI_client_VC,recv_buff,recv_buff_mxa_len,&code);
- //bk_printf("AI_VC_read_task 2");
+ // bk_printf("AI_VC_read_task 1");
+
+ // aos_sleep(50);
+
+ u32 timer_ms11 = aos_get_tickcount();
+
+ bk_printf("AI_VC_read_task 12");
+
+ status = receive_websocket_message(AI_client_VC,recv_buff,recv_buff_mxa_len,&code);
+
+ bk_printf("AI_VC_read_task 13");
+
+ u32 timer_ms22 = aos_get_tickcount();
+
+ int duration_temp=timer_ms22-timer_ms11;
+
+ aos_sleep(15);
+
+ if(duration_temp>500)
+ bk_printf("receive_websocket_message %d ms",timer_ms22-timer_ms11);
+
+
if(status>0)
{
close_timerout = 60;
memcpy(AI_ASR_str_tmp,str_tmp,str_tmp_len);
AI_ASR_str_tmp[str_tmp_len] = 0;
}
-
-
+
}
}else if(strstr(recv_buff,"\"asr.completed\""))//asr结束
{
int ret = check_text(AI_ASR_str_tmp,strlen(AI_ASR_str_tmp)) ;
//识别到有命令词,退出
- if(ret == 0)
+ if(ret == 0){
+
+ memset(AI_ASR_str_tmp,0,strlen(AI_ASR_str_tmp));
break;
+ }
+
if(VAD_time_count <= VAD_TIMEOUT )//时间间隔短,认为是一次对话,拼接内容
{
strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
}
+
+ IOT_update_statu(1,"thinking","");
}
}
else if(strstr(recv_buff,"\"vad.active\""))//vad触发
}
else if(strstr(recv_buff,"\"tts.started\""))//tts开始
{
+ if(AI_VC_play_queue != NULL)
+ {
+ char count_t= 200;
+ AI_VC_audio_queue_t AI_VC_play_queue_data_t;
+ while(count_t--)//清空队列数据
+ {
+ if(aos_recv_from_queue(AI_VC_play_queue,&AI_VC_play_queue_data_t,AOS_NO_WAIT) == AOS_SUCCESS)
+ {
+ if(AI_VC_play_queue_data_t.data)
+ aic_free(AI_VC_play_queue_data_t.data);
+ }
+ else{
+ break;
+ }
+ }
+
+ }
+
VC_state = VC_State_TTSStart;
play_data_len = 0;
+ IOT_update_statu(1,"speaking","");
+
+ one_receive_bin=0;
+
if(outbound_attributes_format == attributes_format_OPUS){
bk_printf("opus_clean tts.started....\n");
opus_clean();
+
+
+ opus_encode_len=0;
+
+ opus_decode_len=0;
+
+ // if(save_temp_tts==NULL){
+
+ // save_temp_tts=aic_malloc(900000);
+ // }
+
}
startsave_tts=0;
- if(fp_tts_save)
- fclose(fp_tts_save);
+ IOT_update_statu(1,"idle","");
+
+ // fp_tts_save=fopen("C:/cmd_local_301.pcm","wb");
+
+ // bk_printf("C:/cmd_local_301.pcm %d",one_receive_bin);
+
+ // fwrite(save_temp_tts,1,one_receive_bin,fp_tts_save);
+
+ // startsave_tts=one_receive_bin;
+
+
+
+
+
+ // if(fp_tts_save)
+ // fclose(fp_tts_save);
+
+ // fp_tts_save=NULL;
+
+ // aos_sleep(500);
+
+ // bk_printf("C:/cmd_local_301.pcm %d",getFileSize("C:/cmd_local_301.pcm"));
+
+
}
else if(strstr(recv_buff,"\"completed\""))//结束
}
+ }else if(strstr(recv_buff,"\"event\":\"command\""))//接口报错了
+ {
+ // char *str_tmp = NULL;
+
+ // str_tmp = strstr(recv_buff,"\"param_json\"");
+ char *str_tmp = strstr(recv_buff,"\"https");
+
+ if(str_tmp)
+ {
+
+ char mp3_path[200];
+ memset(mp3_path,0,200);
+ //bk_printf("content!!");
+ // str_tmp += strlen("\"params_json")+6;
+ int str_tmp_len = str_count(str_tmp+1,'\"');
+ //存asr结果
+
+ memcpy(mp3_path,str_tmp+1,str_tmp_len-3);
+ //AI_ASR_str_tmp[str_tmp_len] = 0;
+
+ bk_printf("the mp3_path is %s",mp3_path);
+
+ AI_VC_send_music_start(mp3_path);
+
+ }
+
+
}
}
else if(code == WS_BINARY)//二进制
{
-
- bk_printf("read BIN status:%d,code:%d!!!!!!",status,code);
- if(startsave_tts==1){
- if(fp_tts_save){
+ // if(one_receive_bin==0)
+ // timer_ms21=aos_get_tickcount();
- // bk_printf("save tts!!!");
- fwrite(recv_buff,1,status,fp_tts_save);
- }
- }
+ // one_receive_bin+=status;
+
+ // timer_ms22=aos_get_tickcount();
+
+ // u8 play_length_time=one_receive_bin/32;
+
+
+ // if((one_receive_bin/32)<(timer_ms22-timer_ms21))
+ // bk_printf("read BIN status:%d,code:%d!!!!!!",status,code);
+
+ // VC_pingping_timerout = 20;
+
+ // if(startsave_tts==1){
- // audio_data(recv_buff,status,29);
+ // if(fp_tts_save){
+ // bk_printf("save tts!!!");
+ // fwrite(recv_buff,1,status,fp_tts_save);
+ // }
+ // }
+
if(outbound_attributes_format == attributes_format_OPUS)
{
- bk_printf("ogg_opus_decode_data");
- ogg_opus_decode_data(recv_buff,status);
+
+
+ // if(one_receive_bin+status<900000)
+ // memcpy(save_temp_tts+one_receive_bin,recv_buff,status);
+
+ one_receive_bin+=status;
+
+ bk_printf("ogg_opus_decode_data %d...",one_receive_bin);
+
+ // memcpy(save_temp_tts);
+
+ // audio_data(recv_buff,status,26);
+
+ ogg_opus_decode_data(recv_buff,status);
+
+ // if(fp_tts_save){
+
+ // bk_printf("save tts!!!");
+ // fwrite(recv_buff,1,status,fp_tts_save);
+
+ // }
+
+
}else
{
- AI_VC_put_play_data(recv_buff,status);//
+
+ // audio_data(recv_buff,status,23);
+ AI_VC_put_play_data(recv_buff,status);
+
play_data_len+=status;
+
}
ret = app_audio_read(APP_AUDIO_TYPE_STREAM_DUPLEX,
vrecord_buf, 3200, 1010);
- // audio_data(vrecord_buf,ret,23);
+ // audio_data(vrecord_buf,ret,23);
+
// u32 timer_ms = aos_get_tickcount();
// bk_printf("%d:ret=%d",timer_ms,ret);
- // app_logi("AI_VC_record_task app_audio_read len = %d,VC_state = %d",ret,VC_state);
+ // app_logi("AI_VC_record_task app_audio_read len = %d,VC_state = %d",ret,VC_state);
+
if(ret<=0)
{
//bk_printf("AI_VC_record_task continue len = %d,VC_state = %d",ret,VC_state);
if(AI_VC_play_task_flag >=2)
break;
//app_logi("app_audio_write0!!\r\n");
+
+ // play_data_len>8*1024 ||
+
if((play_data_len>8*1024 || outbound_attributes_format == attributes_format_OPUS)&&VC_Play_flag ==1 && AI_VC_play_queue )
{
queue_ret = aos_recv_from_queue(AI_VC_play_queue,&AI_VC_play_queue_data,AOS_NO_WAIT);
}
return WEBSOCKET_MAX_NUM-num;
}
+
+
+uint16_t modbus_crc16(const uint8_t *data, uint16_t length) {
+ uint16_t crc = 0xFFFF;
+ for (uint16_t i = 0; i < length; i++) {
+ crc ^= (uint16_t)data[i];
+ for (uint8_t j = 0; j < 8; j++) {
+ if (crc & 0x0001) {
+ crc >>= 1;
+ crc ^= 0xA001;
+ } else {
+ crc >>= 1;
+ }
+ }
+ }
+ return crc;
+}
+
+
+//Music.Start 开始发送音频
+void IOT_update_statu(int type,char *type_str,char *content)
+{
+ // VC_state = VC_State_SpeechStart;//开始说
+
+
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
+
+ cJSON *cmd_data = cJSON_CreateObject();
+
+ if (cmd_data == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+ // 设置 "event"
+
+ if(type==1){
+
+ cJSON_AddStringToObject(root, "cmd", "chat_state");
+
+ cJSON_AddStringToObject(cmd_data, "state", type_str);
+
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+
+ }
+
+ if(type==2){
+
+ long timestamp;
+
+ timestamp = time(NULL);
+ bk_printf("2时间戳: %ld\n", (long)timestamp);
+ long long timestamp_ms = (long long)timestamp * 1000;
+ char timestamp_str[20] ={0};
+
+ // 使用 sprintf 将 long long 类型的时间戳转换为字符串
+ int ret12 = sprintf(timestamp_str, "%lld", timestamp_ms);
+ timestamp_str[ret12] =0;
+ // 打印转换后的字符串形式的时间戳
+ bk_printf("2时间戳(ms 转换为字符串): %s\n", timestamp_str);
+
+ cJSON_AddStringToObject(root, "cmd", "chat_text");
+
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+
+ cJSON_AddStringToObject(cmd_data, "type", type_str);
+
+ cJSON_AddStringToObject(cmd_data, "text", content);
+
+ cJSON_AddStringToObject(cmd_data, "createTime", timestamp_str);
+
+
+ }
+
+
+ if(type==3){
+
+ char tmp_bat[20]={0},tmp_sig[20]={0},tmp_vol[20]={0},tmp_bargein[20]={0};
+
+ cJSON_AddStringToObject(root, "cmd", "device_info");
+
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+
+ ts_radio_signal_info_t p_signal_info;
+ int32_t ret = 0;
+
+ ret = aic_srv_tele_radio_get_signal_info_sync(current_card_id, &p_signal_info);
+
+ // p_signal_info.signal_level_val
+
+ struct psy_info psy_info;
+ get_psy_info(&psy_info);
+
+ // psy_info.bat_capacity
+
+ sprintf(tmp_bat,"%d",psy_info.bat_capacity);
+
+ sprintf(tmp_sig,"%d",p_signal_info.signal_level_val);
+
+ sprintf(tmp_vol,"%d",vc_cfg.VC_TTS_volume);
+
+ sprintf(tmp_bargein,"%d",vc_cfg.VC_mode);
+
+ cJSON_AddStringToObject(cmd_data, "battery", tmp_bat);
+
+ cJSON_AddStringToObject(cmd_data, "wifi_rssi", tmp_sig);
+
+ cJSON_AddStringToObject(cmd_data, "volume", tmp_vol);
+
+ cJSON_AddStringToObject(cmd_data, "current_role_name", "fx01");
+
+ cJSON_AddStringToObject(cmd_data, "version", "V1.2");
+
+ cJSON_AddStringToObject(cmd_data, "bargein", tmp_bargein);
+
+ // bargein
+
+
+
+ }
+
+
+ // 将 "payload" 对象添加到根对象中
+
+ cJSON_AddItemToObject(root, "data", cmd_data);
+
+
+
+ // 将 JSON 对象转换为字符串
+
+ //cJSON_PrintUnformatted
+
+ char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
+
+
+ bk_printf(json_str);
+
+ unsigned char frame[500]={0};
+
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x03;
+ // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+
+ short temp=strlen(json_str);
+ memcpy(frame+3,&temp,2);
+
+ memcpy(frame+5,json_str,strlen(json_str));
+
+ uint16_t crc = modbus_crc16(json_str,strlen(json_str));
+
+ uint8_t crc_low = crc & 0xFF;
+
+ uint8_t crc_high = (crc >> 8) & 0xFF;
+
+ frame[5+strlen(json_str)]=crc_low;
+
+ frame[6+strlen(json_str)]=crc_high;
+
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+
+ bk_printf("the send str is %d ",7+strlen(json_str));
+
+ send_iot_message(AI_client_IOT,frame,7+strlen(json_str));
+
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
+
+
+void IOT_heart(){
+
+ unsigned char frame[10]={0};
+
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x02;
+
+ int ret=send_iot_message(AI_client_IOT,frame,3);
+
+ if(ret==-1&&AI_client_IOT!=NULL){
+
+ bk_printf("发送IOT消息失败");
+ close(AI_client_IOT->sockfd);
+
+ AI_client_IOT=NULL;
+
+ }
+
+}
+
+// #include <stdio.h>
+// #include <stdint.h>
+
+// int main() {
+// uint8_t data[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01};
+// uint16_t length = sizeof(data) / sizeof(data[0]);
+// uint16_t crc = modbus_crc16(data, length);
+// uint8_t crc_low = crc & 0xFF;
+// uint8_t crc_high = (crc >> 8) & 0xFF;
+// printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+// return 0;
+// }
+
+static void IOT_login(int type)
+{
+ unsigned char frame[200]={0};
+
+ //0xFFFE
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x00;
+
+ memcpy(frame+3,vc_cfg.dev_imei,strlen(vc_cfg.dev_imei));
+
+ memcpy(frame+23,get_token(),strlen(get_token()));
+
+ uint16_t crc = modbus_crc16(get_token(),strlen(get_token()));
+
+ uint8_t crc_low = crc & 0xFF;
+
+ uint8_t crc_high = (crc >> 8) & 0xFF;
+
+ frame[59]=crc_low;
+
+ frame[60]=crc_high;
+
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+
+ send_iot_message(AI_client_IOT,frame,61);
+
+}
+
+
+// #define IOT
//连接websocket
static int websocket_connect_VC(void)
{
free_all_websocket_res();
}
+
+ char *url_socket="iot.socket.thisiot.com:60501";
AI_client_VC = init_websocket_client(url,NULL);
+
+#ifdef IOT
+ if(AI_client_IOT==NULL){
+
+ bk_printf("create AI_client_IOT...\n");
+ AI_client_IOT = init_websocket_IOT(url_socket,NULL);
+
+
+
+ if(AI_client_IOT){
+ bk_printf("IOT读线程 AI_VC_read_task_id:%d",AI_VC_read_IOT_id);
+ //创建读线程
+ if(AI_VC_read_IOT_id == 0)
+ {
+ AI_VC_read_IOT_id = aos_create_thread(
+ "AI_VC_read",
+ AI_VC_IOT_task,
+ &AI_VC_read_IOT_id,
+ 4096u,
+ 0,
+ NULL,
+ ai_VC_task_priority,
+ AOS_AUTO_START);
+ bk_printf("IOT读线程 AI_VC_read_task_id:%d",AI_VC_read_IOT_id);
+ }
+
+ aos_sleep(100);
+
+ IOT_login(1);
+
+ aos_sleep(200);
+
+ // char *iotmessage="{\"cmd\":\"get_bot\",\"data\":\"\"}";
+
+ IOT_update_statu(1,"idle","");
+
+ aos_sleep(200);
+ IOT_update_statu(2,"res","12312312");
+
+ aos_sleep(200);
+ IOT_update_statu(3,"","");
+
+ aos_sleep(200);
+
+ IOT_heart();
+
+ // send_iot_message(AI_client_IOT,iotmessage,strlen(iotmessage));
+
+ }
+
+ }
+ #endif
if(!AI_client_VC)
{
if(AI_VC_play_queue == NULL)
return;
aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
- if(count_tmp>100)//大于100个缓存
+
+ bk_printf("AI_VC_put_play_data:count_tmp = %d",count_tmp);
+
+ if(count_tmp>150)//大于100个缓存
{
- //bk_printf("AI_VC_put_play_data:count_tmp = %d",count_tmp);
+ // bk_printf("AI_VC_put_play_data:count_tmp = %d",count_tmp);
aos_sleep(1);
}else
{
{
static u64 timer_ms = 0;
+ // IOT_update_statu(1);
+
+ // IOT_update_statu(3,"","");
+
+ // IOT_heart();
+
+ bk_printf("AI_key_press1");
+
+ play_file_stream_data("C:/chenggong.pcm");
+
u64 timer_ms_tmp = aos_get_tickcount();
if(timer_ms_tmp-timer_ms<1000)//每次触发小于1000ms关闭对话
{
AI_VC_Close();
VC_state = VC_State_None;
- VC_record_Start() ;
+
+
+
+ VC_record_Start();
if(AI_VC_start(0)==0)
{
- play_file_stream_data("C:/chenggong.pcm");
+
//audio_play_tone(3,300);//播放提示音,测试用,位置不能变,和双向流有冲突
//app_logi("audio_play_tone ret = %d\r\n",ret);
aos_sleep(1);
return 0;
}
char AI_VC_start_lock = 0;
+
+int net_status_count=0;
//is_greeting,是否播放开场白
int AI_VC_start(char is_greeting)
{
// aic_gpio_output(GPIO_GPO_8,GPIO_OUTPUT_LVL_HIGH );//马达
// aic_gpio_output(GPIO_GPO_1,GPIO_OUTPUT_LVL_LOW );//马达
// aic_gpio_output(GPIO_20,GPIO_OUTPUT_LVL_HIGH );//马达
- //app_audio_set_master_volume(8);
+ // app_audio_set_master_volume(8);
if(AI_VC_1S_timer == NULL)
{
AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
aic_assert(AI_VC_1S_timer);
}
+
+
if(inbound_attributes_format == attributes_format_OPUS ||outbound_attributes_format == attributes_format_OPUS)
{
if(opus_init()!= 0)
struct VadConfig conf;
conf.sil_threshold = 63;
conf.energy_threshold = 10000;
- conf.min_speech_length = 240;
+ conf.min_speech_length = 240;//240
conf.silence_detect_length = 300;
conf.rule1_min_tailing_silence = 480;
- conf.rule2_min_tailing_silence = vc_cfg.vad_silence ;
+ conf.rule2_min_tailing_silence = vc_cfg.vad_silence;
conf.rule3_min_tailing_silence = vc_cfg.vad_silence;
conf.vad_log_level = 0;
int init_vad_ret = 0;
imsl_nn_printf = bk_printf;
imsl_nn_init_flag = 0;
}
+
+
+
+
init_vad_ret = init_vad(&conf);
goto AI_VC_start_RET;
}
+
+
+ IOT_update_statu(1,"listening","");
+ net_status_count=0;
//aos_sleep(5);
AI_VC_send_satrt(is_greeting);//
close_timerout = 0;
if(ret != 0)
{
AI_VC_Close();
+ net_status_count++;
play_audio_file("C:/xinhaoruo1.mp3");
+
+ if(net_status_count>=3)
+ play_audio_file("C:/khye.mp3");
}else
AI_VC_stata = 1;
return ret;
{
AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT);
}
+
+static void sys_60S_timeout(void *param)
+{
+ // AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT);
+
+ if(AI_client_IOT!=NULL){
+
+ IOT_heart();
+
+ }
+}
+
+
static void sys_10S_timeout_even(void)
{
// if (sizeof(dev_pass) == 0)
// extern char *ota_url;
- const char *bk_make_timer = "V1_2_250730_1";
+ const char *bk_make_timer = "V1_2_250730_8";
+
+void play_tts_my_local(char *filename)
+{
+ play_audio_file_event(filename);
+}
+// #define exptest
+int auth_vad_status=0;
static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
{
- char count = 30;
- boolean pdp_activated ;
- AI_AMP_MSG_queue_t AI_AMP_msg = {0};
+ char count = 30;
+ boolean pdp_activated ;
+ AI_AMP_MSG_queue_t AI_AMP_msg = {0};
- init_VC_cfg();
+ init_VC_cfg();
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
play_audio_file_event("C:/R_POWER_1.mp3");
if(pdp_activated == TRUE)
break;
bk_printf("AI_AMP_2_5_init 等待注网..... \n");
+
//audio_play_tone(count%15,500);//播放提示音,测试用
//audio_play_tone(3,500);//播放提示音,测试用
+
aos_sleep(1000);
}
// play_audio_file_event("C:/local_tts_004.wav");
- ota_check_version();
+ ota_check_version();
+ // play_audio_file_event("C:/upgrade.mp3");
// AI_AMP_MSG_put("正常启动",4,VC_TTS_PLAY);
+ // aos_sleep(5000);
+
ota_update_version();
// if(strlen(ota_url)>3){
-
+ // play_audio_file_event("test12312.mp3");
dev_authentication_init();
+
+
count =50;
while(count --)
{
bk_printf("AI_AMP_2_5_init 等待鉴权..... \n");
aos_sleep(200);
}
+
if(sys_10S_timer == NULL)
{
sys_10S_timer = aos_create_timer("AI_VC_1S_timer",
AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
aic_assert(sys_10S_timer);
}
+
+ // AI_VC_60S_timer
+ // if(AI_VC_60S_timer == NULL)
+ // {
+ // AI_VC_60S_timer = aos_create_timer("AI_VC_60S_timer",
+ // sys_60S_timeout, &AI_VC_60S_timer,
+ // 60000,
+ // AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
+ // aic_assert(AI_VC_60S_timer);
+ // }
+
+ bk_printf("auth_vad token0: %s..... \n",get_token());
+ struct AuthInfo auth_info;
+
+ strcpy(auth_info.dmp_token, get_token());
+
+ if(strlen(auth_info.dmp_token)>0){
+
+ for(int i=0;i<3;i++){
+ int ret=auth_vad(&auth_info);
+
+ if(ret==0){
+
+ bk_printf("auth_vad fail token: %s..... \n",get_token());
+
+ }else{
+
+ bk_printf("auth_vad success token: %s..... \n",get_token());
+
+ auth_vad_status=1;
+ break;
+
+ }
+
+ }
+ }else{
+
+ play_audio_file_event("C:/xinhaoruo1.mp3");
+ }
+ if(auth_vad_status==0){
+
+ play_audio_file_event("C:/xinhaoruo1.mp3");
+
+ aos_sleep(2000);
+
+ }
+
+#ifdef exptest
+
+ aos_sleep(5000);
+
+ ui_uart_handle = uart_open(2);
+
+ if(ui_uart_handle){
+
+ uart_set_baud_rate(ui_uart_handle, 9600);
+
+ bk_printf("UART 2 SUCCESSS........................");
+
+ // uart_write(ui_uart_handle,"123", strlen("123"));
+
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
+
+ uart_write(ui_uart_handle,cmd_ui, 7);
+
+ }else{
+
+ bk_printf("UART 2 FAIL........................");
+
+ }
+
+#endif
+
+
aic_network_enable_pdp_nic_capdump();//打开网络调试log
// while(1)
#include <aic_net_api.h>
#include <aic_net_pdp_mgr.h>
#include <aic_websocket_client.h>
+#include "cJSON.h"
extern int bk_printf(const char *format, ...);
extern void bk_print_hex(u8 *data,int data_len);
#ifdef CONFIG_CRYPTO_MBEDTLS
return ret;
}
+
+// 发送 WebSocket 消息
+int send_iot_message(WebSocketClient *client, const unsigned char *message, size_t message_len)
+{
+ if(!client)
+ return -1;
+ unsigned char *frame=aic_zalloc(message_len + 50);
+ int offset = 0;
+ int ret = -1;
+ if(!frame)
+ {
+ bk_printf("send_websocket_message zalloc error");
+ return -1;
+ }
+
+ for (size_t i = 0; i < message_len; ++i) {
+ frame[offset + i] = message[i] ;
+ }
+ offset += message_len;
+
+ // audio_data(message,message_len,27);
+ // 发送帧
+ if (send(client->sockfd, frame, offset, 0) < 0) {
+ bk_printf("send message failed");
+ ret = -1;
+ goto send_websocket_message_ERROR;
+ }
+ bk_printf("send message success");
+
+ ret = 0;
+send_websocket_message_ERROR:
+ aic_free(frame);
+ bk_sleep(message_len/1000+1);
+ return ret;
+}
+
+
// 接收 WebSocket 消息,返回读到长度
// char websocket_tmp_b[8*1024] = {0};
// int websocket_tmp_b_len = 0;
// int frame_t_len = 0;
// int bytes_received_t_1 = 0;
// int bytes_received_t = 0;
+
+void deal_iot_receive(char *json);
+int receive_iot_message(WebSocketClient *client)
+ {
+
+ if(!client )
+ return -1;
+ unsigned char frame[200]={0};
+
+ unsigned char json_data[200]={0};
+ unsigned char masking_key[4];
+ int bytes_received = 0;
+ int recv_len = 0 ;
+ static u8 last_byte = 0;
+ static u32 error_count = 0;
+ // while(1)
+ // {
+ // recv_len = recv(client->sockfd, frame+bytes_received, 2-bytes_received, 0);
+ // bytes_received +=recv_len;
+ // if(bytes_received>=2)
+ // break;
+ // }
+
+ while(1)
+ {
+ bytes_received = recv(client->sockfd, frame, 200, 0);
+
+ if(bytes_received>0){
+
+ bk_printf("get iot message.................................");
+ bk_printf("bytes_received %02X %02X %02X %02X %02X %02X %02X %02X %02X ...\n",frame[0],frame[1],frame[2],frame[3],frame[4],frame[5],frame[6],frame[7],frame[8]);
+
+ if(frame[2]==0x03){
+
+ int length_data=frame[3];
+
+ memset(json_data,0,200);
+ memcpy(json_data,frame+5,length_data);
+ bk_printf("length %d,json_data %s ...\n",length_data,json_data);
+
+ // cJSON *root = cJSON_CreateString(json_data);
+
+ //cJSON *cmd_obj=cJSON_GetObjectItem(root,"cmd");
+
+ //bk_printf(cJSON_GetStringValue(cmd_obj));
+
+ //switch_volume
+
+
+
+ deal_iot_receive(json_data);
+
+
+
+ // cJSON_GetStringValue
+
+ }
+
+ }
+
+ if(bytes_received<0)
+ break;
+
+ memset(frame,0,200);
+ aos_sleep(200);
+
+ }
+
+ bk_printf("AI_VC_IOT_task exit...\n");
+
+}
+
+
int receive_websocket_message(WebSocketClient *client, unsigned char *buf,int len,WebSocketMessageType *code) {
//u64 timer_ms = aos_get_tickcount();
//bk_printf("receive_websocket_message 1 timer_ms=%d\n",timer_ms);
//bk_sleep(1);
while(1)//读主体内容
{
- //bk_sleep(recv_len/200+1);
+ // bk_sleep(recv_len/200+1);
+ // bk_printf("bytes_received %d %d",payload_len,bytes_received);
recv_len = recv(client->sockfd, buf+bytes_received, payload_len-bytes_received, 0);
+
+ // bk_printf("recv_len %d %d",payload_len,recv_len);
+
if (recv_len == 0) {
bk_printf("Connection closed by server.5\n\n\n\n\n");
return 0;
return NULL;
}
+
+WebSocketClient *init_websocket_IOT(const char *url, const char *headers) {
+ bk_printf("init_websocket_client 1\n");
+ // char *buffer = NULL;
+ WebSocketClient *client =NULL;
+ // BK_URL parsed_url = {0};
+ // parsed_url = parse_url(url);//解析url
+ //bk_printf("url: %s", url);
+ // if (parsed_url.error) {
+ // bk_printf("Error: %s", parsed_url.error_message);
+ // goto client_ERROR;
+ // } else {
+ // bk_printf("Protocol: %s", parsed_url.protocol);
+ // bk_printf("Host: %s", parsed_url.host);
+ // bk_printf("Port: %d", parsed_url.port);
+ // bk_printf("Path: %s", parsed_url.path);
+ // bk_printf("Query: %s", parsed_url.query);
+
+ // }
+
+
+ client = aic_zalloc(sizeof(WebSocketClient)) ;
+ if(!client)
+ {
+ bk_printf("init_websocket_IOT alloc error");
+ goto client_ERROR;
+ }
+
+ struct addrinfo hints, *addr_list, *cur;
+ hints.ai_family = AF_INET;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = IPPROTO_TCP;
+ //if(getaddrinfo( parsed_url.host, parsed_url.port_str, &hints, &addr_list ) != 0 )
+
+ //iot.socket.thisiot.com:60501
+
+ bk_printf("init_websocket_client 2\n");
+
+ if( getaddrinfo("iot.socket.thisiot.com", "7777", &hints, &addr_list ) != 0 )
+ {
+ bk_printf("init_websocket_IOT getaddrinfo error");
+ goto client_ERROR;
+ }
+
+ bk_printf("init_websocket_client 3\n");
+
+ for( cur = addr_list; cur != NULL; cur = cur->ai_next )
+ {
+ client->sockfd = (int) socket( cur->ai_family, cur->ai_socktype,
+ cur->ai_protocol );
+ if( client->sockfd < 0 )
+ {
+ continue;
+ }
+
+ bk_printf("init_websocket_client 31\n");
+ if(connect( client->sockfd , cur->ai_addr, (int)cur->ai_addrlen ) == 0 )
+ {
+
+ break;
+ }
+
+ bk_printf("init_websocket_client 32\n");
+ close( client->sockfd );
+
+
+ }
+
+ bk_printf("init_websocket_client 4\n");
+
+ freeaddrinfo(addr_list); // 释放资源
+ if(client->sockfd<0)
+ {
+ bk_printf("init_websocket_IOT connect error");
+ goto client_ERROR;
+ }
+
+ bk_printf("init_websocket_IOT connect ok,sockfd:%d",client->sockfd);
+
+
+// client->sockfd = socket(AF_INET, SOCK_STREAM, 0);
+// if (client->sockfd < 0) {
+// bk_printf("socket creation failed");
+// goto client_ERROR;
+// }
+
+// // bk_printf("init_websocket_client 3\n");
+// struct sockaddr_in server_addr;
+// server_addr.sin_family = AF_INET;
+// server_addr.sin_port = htons(parsed_url.port);
+// inet_pton(AF_INET, parsed_url.host, &server_addr.sin_addr);
+
+// if (connect(client->sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+// bk_printf("connection failed");
+// close(client->sockfd);
+// goto client_ERROR;
+// }
+
+
+
+ // aic_free(buffer);
+ // free_url(parsed_url);
+
+ bk_printf("init_websocket_client 5\n");
+ return client;
+client_ERROR:
+ //if(buffer)
+ // aic_free(buffer);
+ if(client)
+ aic_free(client);
+ // free_url(parsed_url);
+ return NULL;
+}
// 关闭 WebSocket 客户端
void close_websocket_client(WebSocketClient *client) {
if(client)
char timestamp_str[20] ={0};
// 使用 sprintf 将 long long 类型的时间戳转换为字符串
+
ret = sprintf(timestamp_str, "%lld", timestamp_ms);
timestamp_str[ret] =0;
// 打印转换后的字符串形式的时间戳
goto aut_active_return;
bk_printf("http put data update_iccid :%s",aut_buf);
-
- char *str_tmp = NULL;
- str_tmp = strstr(aut_buf,"\"password\":\"");
- //bk_printf("str_tmp:%p",str_tmp);
- if(str_tmp)//解析password
- {
- // str_tmp += strlen("\"password\":\"");
- // int count = str_count(str_tmp,'\"');
- // bk_printf("count:%d",count);
- // if(count < sizeof(dev_pass_base64))
- // {
- // memcpy(dev_pass_base64,str_tmp,count);
- // dev_pass_base64[count] = 0;
- // bk_printf("dev_pass_base64:%s",dev_pass_base64);
-
- // }else
- // {
- // bk_printf("激活获取base64失败");
- // }
- }
- str_tmp = NULL;
- str_tmp = strstr(aut_buf,"\"nonce\":\"");
- if(str_tmp)//nonce
- {
- // str_tmp += strlen("\"nonce\":\"");
- // int count = str_count(str_tmp,'\"');
- // if(count < sizeof(enc_iv))
- // {
- // if(count>=sizeof(enc_iv))
- // count = sizeof(enc_iv)-1;
- // memcpy(enc_iv,str_tmp,count);
- // enc_iv[count] = 0;
- // bk_printf("nonce:%s",enc_iv);
-
- //}
- // else
- // {
- // bk_printf("激活获取nonce失败");
- // }
- }
- int dev_pass_len = get_dev_pass_MAX_len();
- char *dev_pass = bk_malloc(dev_pass_len);
- if(dev_pass)
- {
- // memset(dev_pass,0,dev_pass_len);
- // if(strlen(enc_iv)>8 && strlen(dev_pass_base64)>8)
- // {
- // aes_cbc_pkcs5_decrypt(dev_pass_base64, dev_key, enc_iv,dev_pass,&dev_pass_len);//解密
- // dev_pass[dev_pass_len] = 0;
- // bk_printf("dev_pass:%s dev_pass_len:%d",dev_pass,dev_pass_len);
- // save_dev_pass(dev_pass);//保存设备密钥
- //}
- // bk_free(dev_pass);
-
- }else
- {
- bk_printf("dev_pass malloc error!!!!!!!!!!!");
- }
-
+
aut_active_return:
// 释放内存
return 0;
}
+void play_tts_my_local(char *filename);
+
+void IOT_update_bargein(void)//OTA更新
+{
+ int ret;
+ bk_printf("IOT_update_bargein");
+
+
+ AIC_HTTPS_CLIENT_INSTANCE *http_client;
+ char deviceId[30] = {0};
+ //char dev_pass_base64[100] ={0};
+
+ // http创建客户端句柄
+ u32 aut_active_http_handle = 0;
+ char *aut_buf =NULL;
+
+ //char *json_string =NULL;
+ //char form_data_string[200]={0};
+
+ char sign_url[200]={0};
+
+ cJSON *root = NULL;
+ aut_buf = bk_malloc(5*1024);
+ if(aut_buf)
+ memset(aut_buf , 0,5*1024);
+ else
+ goto aut_active_return;
+
+ bk_get_imei(deviceId);
+
+ //http://app-api.raisound.com/dev/device/info/simple/867686073050930
+
+ sprintf(sign_url,"http://app-api.raisound.com/dev/device/info/simple/%s",deviceId);
+
+ bk_printf(sign_url);
+
+ u32 response = 0;
+ //创建客户端实例
+ aut_active_http_handle = aic_http_client_create("HTTP_DEMO_CLIENT_NAME");
+ if (aut_active_http_handle == 0) {
+ bk_printf("Failed to create HTTP client instance\n");
+ goto aut_active_return;
+ }
+ int url_value = aic_process_https_url(aut_active_http_handle,sign_url,AIC_HTTP_HEAD);
+ bk_printf("url_value:%d",url_value);
+ http_client = (AIC_HTTPS_CLIENT_INSTANCE *)aut_active_http_handle;
+ http_client->login_info.server_port = 80;
+ aic_http_client_connect(aut_active_http_handle, 5000);
+
+ // 创建JSON对象
+ root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf( "Failed to create JSON object\n");
+ goto aut_active_return; ;
+ }
+
+ // 输出JSON
+ // bk_printf("JSON output: %s\n", json_string);
+
+ aic_https_client_request_initialize(aut_active_http_handle,AIC_HTTPS_METHOD_GET, 0,
+ 0, NULL,NULL, 10000);
+
+
+ response = nx_web_http_client_request_send(http_client->https_client,10 * 1000);
+
+ ret=0;
+ if (ret == 0) {
+ bk_printf("数据发送成功\n");
+
+ } else {
+ // 处理错误
+ bk_printf("数据发送失败,错误码: %d\n", ret);
+ goto aut_active_return;
+ }
+
+ long read_bytes = aic_https_client_response_data_get(aut_active_http_handle,aut_buf,5*1024,10000);
+
+ bk_printf("read_bytes :%d\n",read_bytes);
+
+ if(read_bytes<=0)
+ goto aut_active_return;
+
+ bk_printf("IOT_update_bargein :%s",aut_buf);
+
+
+ char *str_tmp = NULL;
+
+ str_tmp = strstr(aut_buf,"\"bargein\":\"");
+ //bk_printf("str_tmp:%p",str_tmp);
+ if(str_tmp)//解析password
+ {
+ str_tmp += strlen("\"bargein\":\"");
+ int count = str_count(str_tmp,'\"');
+ bk_printf("count:%d",count);
+ if(count < sizeof(ota_url))
+ {
+ memcpy(ota_url,str_tmp,count);
+ ota_url[count] = 0;
+ bk_printf("bargein:%s",ota_url);
+
+ int temp_bag=atoi(ota_url);
+ if(temp_bag>=0&&temp_bag<10){
+
+ vc_cfg.VC_mode=temp_bag;
+ }
+ // vc_cfg.VC_mode=
+
+ // vc_cfg.VC_TTS_volume
+
+
+
+ }
+ else
+ {
+ bk_printf("bargein");
+ }
+ }
+
+aut_active_return:
+ // 释放内存
+ if(aut_buf)
+ bk_free(aut_buf);
+ // if(json_string)
+ // cJSON_free(json_string);
+ if(root)
+ cJSON_Delete(root);
+ if(aut_active_http_handle)
+ aic_http_client_delete(aut_active_http_handle);
+}
void ota_check_version(void)//OTA更新
bk_printf("ota_check_version :%s",aut_buf);
- char *str_tmp = NULL;
+ char *str_tmp = NULL;
+
str_tmp = strstr(aut_buf,"\"url\":\"");
//bk_printf("str_tmp:%p",str_tmp);
if(str_tmp)//解析password
bk_printf("OTA need update 2222....\n");
-
+ // play_audio_file_event("test12313.mp3");
+
+ play_tts_my_local("C:/upgrade.mp3");
while(count_test--){
// fota_stop();
}else{
+ // play_audio_file_event("test12312.mp3");
+ // play_tts_my_local("C:/current_version.mp3");
+ // aos_sleep(3000);
}
}
+
void ota_download_version(void)//OTA更新
{
int ret;
bk_printf("http put data update_iccid :%s",aut_buf);
- char *str_tmp = NULL;
- str_tmp = strstr(aut_buf,"\"password\":\"");
- //bk_printf("str_tmp:%p",str_tmp);
- if(str_tmp)//解析password
- {
- // str_tmp += strlen("\"password\":\"");
- // int count = str_count(str_tmp,'\"');
- // bk_printf("count:%d",count);
- // if(count < sizeof(dev_pass_base64))
- // {
- // memcpy(dev_pass_base64,str_tmp,count);
- // dev_pass_base64[count] = 0;
- // bk_printf("dev_pass_base64:%s",dev_pass_base64);
-
- // }else
- // {
- // bk_printf("激活获取base64失败");
- // }
- }
-
aut_active_return:
// 释放内存
bk_printf("deviceId:%s password:%s nonce:%s,dev_pass:%s", deviceId, encrypt_data, enc_iv,dev_pass);
char *sign_url = "http://dmp.raisound.com/bz-api/dev/auth/sign_in"; // 登录地址
//char *headers_T = "\"Content-Type\":\"application/json\"";
+ bk_printf(sign_url);
u32 response = 0;
aut_login_http_handle = aic_http_client_create("HTTP_DEMO_CLIENT_NAME");
int url_value = aic_process_https_url(aut_login_http_handle,sign_url,AIC_HTTP_HEAD);
//aut_active();//激活
aut_login();
+
+ // if(strlen(get_token())<8)//20秒都没更新tokey
+ // {
+ // aut_active();
+ // aut_login();
+ // }
+
+
+
update_iccid();
//登录