归芯柿宝玩具固件更新
authorcheng.chen <cheng.chen@raisound.com>
Wed, 10 Jun 2026 02:52:47 +0000 (10:52 +0800)
committercheng.chen <cheng.chen@raisound.com>
Wed, 10 Jun 2026 02:53:42 +0000 (10:53 +0800)
15 files changed:
2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c
2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.h
2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt
2.code/aicos/app/AI_AMP_2_5/bk_key.c
2.code/aicos/app/AI_AMP_2_5/bk_opus_coder.c
2.code/aicos/app/AI_AMP_2_5/bk_opus_coder.h
2.code/aicos/app/AI_AMP_2_5/bk_websocket.c
2.code/aicos/app/AI_AMP_2_5/bk_websocket.h
2.code/aicos/app/AI_AMP_2_5/dev_authentication.c
2.code/aicos/app/AI_AMP_2_5/dev_authentication.h
2.code/aicos/app/AI_AMP_2_5/imsl_kws.h
2.code/aicos/app/AI_AMP_2_5/imsl_vad.h
2.code/aicos/app/AI_AMP_2_5/libimslkws.a
2.code/aicos/app/AI_AMP_2_5/libimslnn.a
2.code/aicos/app/AI_AMP_2_5/libimslvad.a

index 3c233c4..2450e00 100644 (file)
 #include "app_msg.h"
 #include "aic_ogg.h"
 #include "efuse.h"
-#if SUPPORT_MOT
-#include "mot_dev.h"
-#endif
-#include "bk_make_time.h"
-
-static aos_thread_id UI_UART_read_id = 0;
-
+// #include "bk_make_time.h"
 // #include "opus/include/opus.h"
 char FXH01_Version[100];
 
 u8 current_card_id = 0;
-
-u8 chumo_exp_open = 1;
 u8 VC_TTS_PLAY_EVENT = 0;
 typedef enum
 {
@@ -65,7 +57,7 @@ volatile char AI_VC_stata = 0;//VC是否在运行
 volatile char app_audio_flag = 0;
 volatile char audio_stop_flag = 0;
 int32_t bk_audio_start_callback(void *p_param, uint32_t size);
-#define IS_KWS 1
+#define IS_KWS 0
 #define IS_VAD 1
 
 #define VAD_RB_LEN 32*1024
@@ -84,7 +76,6 @@ static u32* ai_uart_handle;
 
 static u32* ui_uart_handle=NULL;
 
-static u8  is_dialog_status=0;
 
 static aos_thread_id AI_VC_send_task_id = 0;
 char AI_VC_send_task_flag = 0;
@@ -118,31 +109,18 @@ WebSocketClient *AI_client_VC = NULL;
 WebSocketClient *AI_client_IOT = NULL;
 
 
-static u8  issend_start_up=0;
-
-static u8  random_mt_test=0;
-
 static u32 close_timerout = 0;
-
-static u32 sleep_chumo_timerout = 0;
-
-static u32 tts_start_timerout = 0;
-
 static u32 VC_pingping_timerout = 0;
 static u32 VC_END_play_timerout = 0;
 static char *AI_TTS_str = NULL;
 static char *AI_ASR_str = NULL;
 #define AI_ASR_STR_MAX_LEN 1024*2
 static char *AI_ASR_str_tmp = NULL;
-
-static int has_tmp_result=0;
 #define AI_ASR_STR_MAX_TMP_LEN 1024
 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 aos_timer_ptr AI_VC_60S_timer = NULL;
 
 static int login_timer_count = 0;
@@ -158,8 +136,6 @@ VC_state_type VC_state = VC_State_None;
 static u8 uid[50];
 static int uid_len =0;
 
-//int  type_test=1;
-
 //关闭录音
 void VC_record_End(void);
 //打开录音
@@ -193,6 +169,8 @@ int bk_get_iccid(char *iccid)
 }
 
 
+
+
 #if (BK_LOG_CFG==BK_LOG_UART)
 int bk_printf(const char *format, ...)
 {
@@ -323,7 +301,6 @@ int save_VC_cfg(void)
     aic_free(vc_cfg_tmp);
     return 0;
 }
-
 void reset_VC_cfg(void)
 {
     vc_cfg.start_flag = 0xaaaa;
@@ -332,26 +309,24 @@ void reset_VC_cfg(void)
     //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");//服务器地址
+  //  strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//207 服务器地址
 
-    //  strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//服务器地址
+    // strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
 
-    vc_cfg.VC_mode =2; //对话模式
+    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.VC_record_samplerate = 16000;//录音采样率
     vc_cfg.VC_play_samplerate = 16000;//播放采样率
-    vc_cfg.is_VAD = IS_VAD; //=1打开vad打断
-    vc_cfg.is_KWS = IS_KWS; //=1打开本地语言打断
-    vc_cfg.speech_rate = 0; //语速配置
-    vc_cfg.vad_silence = 800; //vad断句时间 ms  500 
-    vc_cfg.VC_TTS_volume = 80; //音量
+    vc_cfg.is_VAD = IS_VAD;//=1打开vad打断
+    vc_cfg.is_KWS = IS_KWS;//=1打开本地语言打断
+    vc_cfg.speech_rate = 0;//语速配置
+    vc_cfg.vad_silence = 500;//vad断句时间 ms
+    vc_cfg.VC_TTS_volume = 80;//音量
 }
-
 int init_VC_cfg(void)
 {
     FILE *fp = NULL;
@@ -391,7 +366,6 @@ int init_VC_cfg(void)
 
      vc_cfg.VC_mode =2;//对话模式
 
-     reset_VC_cfg();
     
     return 0;
 }
@@ -431,11 +405,127 @@ static int play_audio_file_event(char *file_name);
 
 u8  *save_temp_tts=NULL;
 
-int is_guanji=0;
+void  send_express_str(char *exp_str){
+
+  //  texts = ["neutral","happy","laughing","funny","sad","angry",
+  //                  "crying","loving","embarrassed","surprised","shocked","thinking",
+   //                 "winking","cool","relaxed","","confused",""]
+    #if 0
+       if(ui_uart_handle){
+           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
+            
+           if(strstr(exp_str,"不理解")||strstr(exp_str,"confused"))
+           {
+              cmd_ui[4]=0x01;
+              cmd_ui[6]=0x03;
+           }else
+            if(strstr(exp_str,"发怒")||strstr(exp_str,"angry"))
+           {
+              cmd_ui[4]=0x02;
+              cmd_ui[6]=0x04;
+           }else
+            if(strstr(exp_str,"搞怪")||strstr(exp_str,"cool"))
+           {
+              cmd_ui[4]=0x03;
+              cmd_ui[6]=0x05;
+           }else
+            if(strstr(exp_str,"花痴")||strstr(exp_str,"funny"))
+           {
+              cmd_ui[4]=0x04;
+              cmd_ui[6]=0x05;
+           }else
+            if(strstr(exp_str,"惊喜")||strstr(exp_str,"surprised"))
+           {
+              cmd_ui[4]=0x05;
+              cmd_ui[6]=0x07;
+           }else
+            if(strstr(exp_str,"惊讶")||strstr(exp_str,"shocked"))
+           {
+              cmd_ui[4]=0x06;
+              cmd_ui[6]=0x08;
+           }else
+            if(strstr(exp_str,"卡通")||strstr(exp_str,"relaxed"))
+           {
+              cmd_ui[4]=0x07;
+              cmd_ui[6]=0x09;
+           }else
+            if(strstr(exp_str,"开心")||strstr(exp_str,"微笑")||strstr(exp_str,"happy"))
+           {
+              cmd_ui[4]=0x08;
+              cmd_ui[6]=0x0a;
+           }else
+            if(strstr(exp_str,"生气")||strstr(exp_str,"sad"))
+           {
+              cmd_ui[4]=0x09;
+              cmd_ui[6]=0x0b;
+           }else
+            if(strstr(exp_str,"眨眼")||strstr(exp_str,"winking"))
+           {
+              cmd_ui[4]=0x0a;
+              cmd_ui[6]=0x0c;
+           }else
+            if(strstr(exp_str,"很开心"))
+           {
+              cmd_ui[4]=0x0b;
+              cmd_ui[6]=0x0d;
+           }else
+            if(strstr(exp_str,"中立")||strstr(exp_str,"neutral"))
+           {
+              cmd_ui[4]=0x0c;
+              cmd_ui[6]=0x0e;
+           }
+
+           uart_write(ui_uart_handle,cmd_ui, 7);
+        }
+    #else
+
+     if(ui_uart_handle){
+           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
+            
+           if(strstr(exp_str,"伤心")||strstr(exp_str,"sad"))
+           {
+              cmd_ui[4]=0x01;
+              cmd_ui[6]=0x03;
+           }else
+            if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
+           {
+              cmd_ui[4]=0x03;
+              cmd_ui[6]=0x05;
+           }else
+            if(strstr(exp_str,"困惑")||strstr(exp_str,"confused")||strstr(exp_str,"embarrassed"))
+           {//embarrassed
+              cmd_ui[4]=0x06;
+              cmd_ui[6]=0x08;
+           }else
+            if(strstr(exp_str,"失望")||strstr(exp_str,"crying"))
+           {
+              cmd_ui[4]=0x08;
+              cmd_ui[6]=0x0a;
+           }else
+            if(strstr(exp_str,"开心")||strstr(exp_str,"happy")||strstr(exp_str,"loving")
+            ||strstr(exp_str,"funny")||strstr(exp_str,"laughing")||strstr(exp_str,"cool"))  //laughing  "funny loving
+           {  //cool
+              cmd_ui[4]=0x0d;
+              cmd_ui[6]=0x0f;
+           }else
+            if(strstr(exp_str,"默认")||strstr(exp_str,"neutral")||strstr(exp_str,"thinking")
+            ||strstr(exp_str,"winking")||strstr(exp_str,"relaxed"))
+           {//thinking  winking relaxed
+              cmd_ui[4]=0x0e;
+              cmd_ui[6]=0x10;
+           }else
+            if(strstr(exp_str,"惊恐")||strstr(exp_str,"surprised")||strstr(exp_str,"shocked"))
+           {//shocked
+              cmd_ui[4]=0x13;
+              cmd_ui[6]=0x15;
+           }
+
+           uart_write(ui_uart_handle,cmd_ui, 7);
+        }
 
-int  ddh_is_close_dialog=0;
+    #endif
 
-void aic_https_demotest();
+}
 
 int check_text(char *text,int ret_str_len)
 {
@@ -454,81 +544,51 @@ int check_text(char *text,int ret_str_len)
 
         }
     }
+    if(strstr(text,"音量") || strstr(text,"声音"))
+    {
+        if(strstr(text,"加")||(strstr(text,"大")&&!strstr(text,"太")) || (strstr(text,"太小")))
+        {
+            vc_cfg.VC_TTS_volume +=10;
+            if(vc_cfg.VC_TTS_volume > 100)
+            {
+                vc_cfg.VC_TTS_volume = 100;
+                AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
+                //AI_TTS_str
+            }else{
 
-     if(strstr(text,"音量查询") || strstr(text,"查询音量"))
-     {
-
-        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);
-        ret = 0;
-        goto RET;
-     }
-    //     if(strstr(text,"加")||(strstr(text,"大")&&!strstr(text,"太")) || (strstr(text,"太小")))
-    //     {
-    //         vc_cfg.VC_TTS_volume +=10;
-    //         if(vc_cfg.VC_TTS_volume > 100)
-    //         {
-    //             vc_cfg.VC_TTS_volume = 100;
-    //             AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
-    //             //AI_TTS_str
-    //         }else{
-
-    //             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);
-    //         }
-    //       //  if(vc_cfg.VC_mode != 0)
-    //           app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-    //         // else{
-
-    //         //        if(vc_cfg.VC_TTS_volume > 80)
-    //         //         {
-
-    //         //             app_audio_set_master_volume(15*50/100);
-    //         //         }else{
-
-    //         //             app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-    //         //         }
-    //         // }
+                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);
+            }
+           // 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;
-    //     }else if(strstr(text,"减")||(strstr(text,"小")&&!strstr(text,"太")) || (strstr(text,"太大")))
-    //     {
-    //         vc_cfg.VC_TTS_volume -=10;
-    //         if(vc_cfg.VC_TTS_volume < 0)
-    //         {
-    //             vc_cfg.VC_TTS_volume = 0;
-    //             AI_AMP_MSG_put("音量已最小。",strlen("音量已最小。"),VC_TTS_PLAY);
-    //             //AI_TTS_str
-    //         }else{
-
-    //             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);
-    //         }
-
-    //       //  if(vc_cfg.VC_mode != 0)
-    //            app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-    //         // else{
-
-    //         //        if(vc_cfg.VC_TTS_volume > 80)
-    //         //         {
-
-    //         //             app_audio_set_master_volume(15*50/100);
-    //         //         }else{
-
-    //         //             app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-    //         //         }
-    //         // }
-
-    //         is_save_VC_cfg = 1;
-    //         ret = 0;
-    //         goto RET;
-    //     }
-   // }
+            is_save_VC_cfg = 1;
+            ret = 0;
+            goto RET;
+        }else if(strstr(text,"减")||(strstr(text,"小")&&!strstr(text,"太")) || (strstr(text,"太大")))
+        {
+            vc_cfg.VC_TTS_volume -=10;
+            if(vc_cfg.VC_TTS_volume < 0)
+            {
+                vc_cfg.VC_TTS_volume = 0;
+                AI_AMP_MSG_put("音量已最小。",strlen("音量已最小。"),VC_TTS_PLAY);
+                //AI_TTS_str
+            }else{
+
+                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);
+            }
+
+             //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(strstr(text,"切换"))
     {
         if(strstr(text,"对话模式") || strstr(text,"兑换模式"))
@@ -545,20 +605,19 @@ int check_text(char *text,int ret_str_len)
                 
             }else if(vc_cfg.VC_mode == 1)
             {
-                 AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
+                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);
+                app_audio_set_master_volume(15*80/100);
+                AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
             }
             is_save_VC_cfg = 1;
             ret = 0;
-            #if BK_SOCKET_IOT
+
             IOT_update_statu(3,"","");
-            #endif
             goto RET;
         }
         
@@ -567,27 +626,6 @@ int check_text(char *text,int ret_str_len)
 
     //  status
 
-    
-    if(strstr(text,"关闭显示屏"))
-    {
-
-        bk_printf("关闭显示屏");
-
-        aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_LOW );//lcd open ldo
-        ret = 0;
-        goto RET;
-    }
-
-     if(strstr(text,"打开显示屏"))
-    {
-
-        bk_printf("打开显示屏");
-
-        aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
-        ret = 0;
-        goto RET;
-    }
-
     if(strstr(text,"升级版本"))
     {
 
@@ -595,23 +633,6 @@ int check_text(char *text,int ret_str_len)
         ret = 0;
         goto RET;
     }
-//aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
-    if(strstr(text,"结束对话")||strstr(text,"关闭对话")||strstr(text,"退出对话"))
-    {
-
-       // AI_AMP_MSG_put("拜拜",strlen("拜拜"),VC_TTS_PLAY);
-
-       //  aos_sleep(1000);
-
-         is_dialog_status=1;
-
-         ddh_is_close_dialog=1;
-
-       // AI_AMP_MSG_put(0,0,VC_CLOSE);
-
-       // ret = 0;
-       // goto RET;
-    }
 
     if(strstr(text,"帮我生成语音文件"))
     {
@@ -625,363 +646,59 @@ int check_text(char *text,int ret_str_len)
     //||strstr(text,"做一个惊讶的表情")||strstr(text,"做一个开心的表情")
 
     if(strstr(text,"做一个")&&strstr(text,"表情"))
-    {
-         //  need_express_cmd=1;
-           AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
-           send_express_str(text);
-
-
-          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,0x02,0x01,0x04};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
+        send_express_str(text);
 
         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,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(strstr(text,"导出文件"))
+   // {
 
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
+                // int len_daochu=0,sum_len=0;;
+                //  FILE  *fp_play_local=fopen("C:/cmd_local_301.pcm","rb");
 
-        ret = 0;
-        goto RET;
-    }
 
-     if(strstr(text,"做一个卡通的表情"))
-    {
+                //    if(fp_play_local){
 
-        AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
 
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x07,0x01,0x09};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
+                //      while(1){
 
-        ret = 0;
-        goto RET;
-    }
 
-    if(strstr(text,"做一个花痴的表情"))
-    {
+                //         len_daochu=fread(recv_get,1,1024,fp_play_local);
 
-        AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
 
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x04,0x01,0x06};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
+                //         if(len_daochu>0){
+                //         sum_len+=len_daochu;
+                //         audio_data(recv_get,len_daochu,22);
 
-        ret = 0;
-        goto RET;
-    }
+                //         }else{
 
-    if(strstr(text,"做一个惊喜的表情"))
-    {
+                //             break;
 
-        AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+                //         }
 
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
+                                         
+                //      }
 
-          #if SUPPORT_MOT
-                mot_nod_diantou(2);
-            #endif
-          ret = 0;
-          goto RET;
-    }
 
-    if(strstr(text,"做一个哭泣的表情"))
-    {
+                //      bk_printf("daochu len  is  %d ...",sum_len);
+                //      fclose(fp_play_local);
 
-        AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+                //      }
+       // ret = 0;
+       // goto RET;
+   // }
 
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x05,0x01,0x07};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_ditou(2);
-            #endif
-        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,0x07,0x01,0x09};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_exp(4,2);
-            #endif
-        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,0x06,0x01,0x08};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_exp(5,2);
-            #endif
-        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,0x04,0x01,0x06};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_exp(6,2);
-            #endif
-        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,0x02,0x01,0x04};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_exp(7,2);
-            #endif
-        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,0x01,0x01,0x03};
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        } 
-           #if SUPPORT_MOT
-                mot_nod_exp(8,2);
-            #endif
-        ret = 0;
-        goto RET;
-    }
-
-    if(strstr(text,"打开触摸动作"))
-    {
-
-         chumo_exp_open=1;
-         AI_AMP_MSG_put("触摸动作已打开",strlen("触摸动作已打开"),VC_TTS_PLAY);
-
-         ret = 0;
-         goto RET;
-
-    }
-
-    if(strstr(text,"关闭触摸动作"))
-    {
-
-         chumo_exp_open=0;
-         AI_AMP_MSG_put("触摸动作已关闭",strlen("触摸动作已关闭"),VC_TTS_PLAY);
-
-         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,0x01,0x01,0x03};
-    //        uart_write(ui_uart_handle,cmd_ui, 7);
-    //     }
-
-    //      bk_printf("摇头");
-    //                 #if SUPPORT_MOT
-    //                 mot_nod_diantou(2);
-    //                 #endif
-    //     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,0x08,0x01,0x0a};
-    //    //    uart_write(ui_uart_handle,cmd_ui, 7);
-    //    // }
-    //      bk_printf("点头");
-    //         #if SUPPORT_MOT
-    //         mot_nod_yaotou(2);
-    //     #endif
-    //     ret = 0;
-    //     goto RET;
-
-    // }
-
-    
-
-
-    // if(strstr(text,"抬头"))
-    // {
-    //     AI_AMP_MSG_put("开始抬头了",strlen("开始抬头了"),VC_TTS_PLAY);
-
-    //      bk_printf("抬头");
-    //                 #if SUPPORT_MOT
-    //                 mot_nod_ditou(2);
-    //                 #endif
-    //     ret = 0;
-    //     goto RET;
-
-    // }
-
-    // if(strstr(text,"低头"))
-    // {
-    //     AI_AMP_MSG_put("开始低头了",strlen("开始低头了"),VC_TTS_PLAY);
-
-    //      bk_printf("低头");
-    //                 #if SUPPORT_MOT
-    //                 mot_nod_taitou(2);
-    //                 #endif
-    //     ret = 0;
-    //     goto RET;
-
-    // }
-
-    // if(strstr(text,"向左转"))
-    // {
-    //     AI_AMP_MSG_put("开始向左转",strlen("开始向左转"),VC_TTS_PLAY);
-
-    //      bk_printf("向左转");
-    //                 #if SUPPORT_MOT
-    //                 mot_nod_exp(15,2);
-    //                 #endif
-    //     ret = 0;
-    //     goto RET;
-
-    // }
-
-    // if(strstr(text,"向右转"))
-    // {
-    //     AI_AMP_MSG_put("开始向右转",strlen("开始向右转"),VC_TTS_PLAY);
-
-    //      bk_printf("向右转");
-    //                 #if SUPPORT_MOT
-    //                 mot_nod_exp(16,2);
-    //                 #endif
-    //     ret = 0;
-    //     goto RET;
-
-    // }
-
-
-
-    if(strstr(text,"查询马达状态"))
-    {
-         mot_nod_status();
-       
-        //  aic_http_demotest();
-
-        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,"查询"))
+    if(strstr(text,"查询"))
     {
         if(strstr(text,"信号"))
         {
@@ -1163,18 +880,13 @@ int check_text(char *text,int ret_str_len)
     }
     if(ret_str_len<16 && (strstr(text,"再见") || strstr(text,"拜拜") || strstr(text,"关闭对话")))
     {
-        //  tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"再见了,我会想你的。");
-        //  AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_CLOSE);
-        is_dialog_status=1;
-        ddh_is_close_dialog=1;
+        tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"再见了,我会想你的。");
+        AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_CLOSE);
 
     }
     if(ret_str_len<16 && (strstr(text,"关机") ))
     {
         tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"正在关机。");
-
-        is_guanji=1;
-
         AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_POWER_OFF);
     }
     if(ret_str_len<16 && (strstr(text,"重启") ))
@@ -1276,20 +988,14 @@ static void AI_VC_send_satrt(char is_greeting)
 
     // 创建 custom_variables 对象
     cJSON *custom_variables = cJSON_CreateObject();
-
     cJSON_AddStringToObject(custom_variables, "name", "食梦貘");
-
-   // cJSON_AddStringToObject(custom_variables, "coze_current_time", "23:00");
-
-  //  cJSON_AddStringToObject(custom_variables, "coze_current_date", "2025-10-01");
-
     cJSON_AddItemToObject(dialog_cfg, "custom_variables", custom_variables);
 
     // 创建 greeting 对象
     cJSON *greeting = cJSON_CreateObject();
     if(is_greeting == 1)
     {
-        cJSON_AddBoolToObject(greeting, "enabled", FALSE);//是否播放提示词
+        cJSON_AddBoolToObject(greeting, "enabled", TRUE);//是否播放提示词
         cJSON_AddStringToObject(greeting, "content", "你好");
         cJSON_AddItemToObject(dialog_cfg, "greeting", greeting);
     }else
@@ -1320,26 +1026,6 @@ static void AI_VC_send_satrt(char is_greeting)
         cJSON_AddStringToObject(bot_option, "workflow_id", "7508598451564150820");
     }
     cJSON_AddItemToObject(dialog_cfg, "bot_option", bot_option);
-
-        cJSON *dify_option = cJSON_CreateObject();
-
-        cJSON *inputs_option = cJSON_CreateObject();
-
-        cJSON_AddStringToObject(inputs_option, "devToken", get_token());//奥德赛
-        cJSON_AddStringToObject(inputs_option, "deviceId", vc_cfg.dev_imei);
-
-        // cJSON_AddStringToObject(custom_variables, "coze_current_time", "23:00");
-
-       //  cJSON_AddStringToObject(inputs_option, "coze_current_date", "2025-10-01");
-
-        if(is_greeting)
-          cJSON_AddBoolToObject(inputs_option, "start", true);// 是否在打断后拼接前后的ASR结果
-
-
-        cJSON_AddItemToObject(dify_option, "inputs", inputs_option);
-
-        cJSON_AddItemToObject(dialog_cfg, "dify_option", dify_option);
-
     if(vc_cfg.dev_type == DEV_ALY)
     {
         // 创建 dialog_attributes对象下cfg对象下 greeting 对象
@@ -1367,12 +1053,11 @@ static void AI_VC_send_satrt(char is_greeting)
     cJSON *outbound_cfg = cJSON_CreateObject();
     if(outbound_attributes_format == attributes_format_OPUS)
     {
-        cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus  opus
+        cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus
+
+        cJSON_AddStringToObject(outbound_cfg, "codec", "raw");//ogg_opus//"codec": "raw",
+
 
-       // if(codec_tts==1)
-          cJSON_AddStringToObject(outbound_cfg, "codec", "raw");// ogg
-       // else
-       //   cJSON_AddStringToObject(outbound_cfg, "codec", "ogg");// ogg
         cJSON_AddNumberToObject(outbound_cfg, "compression_rate", 20);
     }
     else
@@ -1382,7 +1067,7 @@ static void AI_VC_send_satrt(char is_greeting)
     cJSON_AddNumberToObject(outbound_cfg, "channel", 1);
     cJSON_AddNumberToObject(outbound_cfg, "volume", 100);
     cJSON_AddNumberToObject(outbound_cfg, "speech_rate", vc_cfg.speech_rate);
-    cJSON_AddNumberToObject(outbound_cfg, "chunk_interval_ms", 50);
+    cJSON_AddNumberToObject(outbound_cfg, "chunk_interval_ms", 10);
     //cJSON_AddStringToObject(outbound_cfg, "voice", "7426720361733013513");
     //cJSON_AddStringToObject(outbound_cfg, "voice", "ICL_zh_female_huoponvhai_tob");
 
@@ -1464,121 +1149,145 @@ static void AI_VC_send_satrt(char is_greeting)
     cJSON_Delete(root);
 }
 
+//{"cmd":"renew_device"}
 
-//Audio.Create 开始发送音频
-static void AI_VC_send_audio_create(void)
+void deal_iot_receive(char *json_data)
 {
-    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.create");
+     bk_printf(json_data);
 
-    // 创建 "payload" 对象
-    cJSON *payload = cJSON_CreateObject();
-    if (payload == NULL) {
-        bk_printf("Failed to create payload object.\n");
-        cJSON_Delete(root);
-        return ;
-    }
-    // 将 "payload" 对象添加到根对象中
-    cJSON_AddItemToObject(root, "payload", payload);
+     // vc_cfg.VC_TTS_volume = 100;
+     //  AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
 
-    // 将 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);//发送数据
-    
+      if(strstr(json_data,"get_device_state")){
 
-    // 释放内存
-    free(json_str);
-    cJSON_Delete(root);
-}
+        bk_printf("get_device_state");
 
+        IOT_update_statu(3,"","");
 
-//          {
-//                             "event": "audio.convert",
-//                             "payload": {
-//                                 "audio_convert_request": {
-//                                     "audio_url": audio_url,
-//                                     "bit_depth": 16,
-//                                     "channels": 1,
-//                                     "sample_rate": 16000,
-//                                     "target_format": "pcm"
-//                                 }
-//                             }
-//                         }
+        // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
 
-static void AI_VC_send_startup(void)
-{
-    VC_state = VC_State_SpeechStart;//开始说
-    // 创建根对象
-    cJSON *root = cJSON_CreateObject();
-    if (root == NULL) {
-        bk_printf("Failed to create root object.\n");
-        return ;
     }
+     
+     if(strstr(json_data,"find_device")){
 
-    // 设置 "event" 字段
-    cJSON_AddStringToObject(root, "event", "prompt");
-
-    // 创建 "payload" 对象
-    cJSON *payload = cJSON_CreateObject();
-    if (payload == NULL) {
-        bk_printf("Failed to create payload object.\n");
-        cJSON_Delete(root);
-        return ;
-    }
+        bk_printf("find_device");
 
-   
+        AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
 
-      cJSON *promat = cJSON_CreateObject();
-    if (payload == NULL) {
-        bk_printf("Failed to create payload object.\n");
-        cJSON_Delete(root);
-        return ;
     }
 
+    if(strstr(json_data,"renew_device")){
 
-     cJSON *interrupt_keywords = cJSON_CreateArray();
-   // cJSON_AddStringToObject(promat, "event", "startup");
+        bk_printf("renew_device");
 
-    //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("停止"));
-    //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("打断"));
-   // cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("等一下"));
+        IOT_update_bargein();
 
-    cJSON *content  = cJSON_CreateObject();
+        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);
+            }
 
-    cJSON_AddStringToObject(content, "role", "user");
+          save_VC_cfg();
 
-    cJSON_AddStringToObject(content, "content", "{\"event\":\"startup\"}");
+    }
 
-    cJSON_AddStringToObject(content, "content_type", "text");
+     if(strstr(json_data,"switch_volume"))
+     {
 
-    cJSON_AddItemToArray(interrupt_keywords, content);
+                   // bk_printf("switch_volume");
 
+        char *str_tmp = NULL;
 
-    cJSON_AddItemToObject(payload, "prompt", interrupt_keywords);
+        char volume_str[5]={0};
 
-    //cJSON_AddItemToObject(inbound_attributes, "interrupt_options", interrupt_options);
+        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)
+{
+    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.create");
 
-   // cJSON_AddItemToObject(payload, "prompt", promat);
+    // 创建 "payload" 对象
+    cJSON *payload = cJSON_CreateObject();
+    if (payload == NULL) {
+        bk_printf("Failed to create payload object.\n");
+        cJSON_Delete(root);
+        return ;
+    }
     // 将 "payload" 对象添加到根对象中
     cJSON_AddItemToObject(root, "payload", payload);
+
     // 将 JSON 对象转换为字符串
     char *json_str = cJSON_Print(root);
     if (json_str == NULL) {
@@ -1588,11 +1297,27 @@ static void AI_VC_send_startup(void)
     }
     AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
     
+
     // 释放内存
     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)
 {
@@ -1659,8 +1384,15 @@ static void AI_VC_send_music_start(char *urlpath)
 //Audio.Completed 结束发送音频
 static void AI_VC_send_audio_completed(void)
 {
+
+
+
     VC_state = VC_State_SpeechEnd;//说结束
     // 创建根对象
+
+   
+
+
     cJSON *root = cJSON_CreateObject();
     if (root == NULL) {
         bk_printf("Failed to create root object.\n");
@@ -1748,8 +1480,6 @@ static void VC_TTS_Play(const char *str)
 //pinpin发送
 void AI_VC_send_ping_ping(void)
 {
-
-   // mot_nod_status();
     AI_VC_send_data("ping",strlen("ping"),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
 }
 
@@ -1818,7 +1548,7 @@ static void AI_VC_send_task(void *thread_input)//websocket 发送线程
 
                    // 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);
+                  //  audio_data(AI_VC_send_queue_data.data,AI_VC_send_queue_data.len,25);
 
                 }
                 if(AI_VC_send_queue_data.data)    
@@ -1869,556 +1599,13 @@ long getFileSize(char* filename) {
 
  u32 timer_ms22=0;
 
-
-
- void  send_express_str_chumo(int type,int mode){
-
-
-    if(!ui_uart_handle)
-      return ;
-
-       u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-       if(type==1&&mode==0){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(11,2);
-                #endif
-
-                //  sleep
-               cmd_ui[4]=0x07;
-               cmd_ui[6]=0x09;
-
-      }
-
-        if(type==1&&mode==1){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(12,2);
-                #endif
-
-                cmd_ui[4]=0x06;
-                cmd_ui[6]=0x08;
-
-        }
-
-        if(type==2&&mode==0){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(13,2);
-                #endif
-
-                cmd_ui[4]=0x01;
-                cmd_ui[6]=0x03;
-
-        }
-
-        if(type==2&&mode==1){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(14,2);
-                #endif
-
-                 cmd_ui[4]=0x01;
-                 cmd_ui[6]=0x03;
-
-        }
-
-        if(type==0&&mode==0){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(9,2);
-                #endif
-
-                  cmd_ui[4]=0x06;
-                  cmd_ui[6]=0x08;
-
-        }
-
-        if(type==0&&mode==1){
-
-               #if SUPPORT_MOT
-                mot_nod_exp(10,2);
-                #endif
-
-                  cmd_ui[4]=0x03;
-                  cmd_ui[6]=0x05;
-
-        }
-
-
-
-         uart_write(ui_uart_handle,cmd_ui, 7);
- }
-
-void  back_middle_statu_mot(){
-
-     aos_sleep(1000);
-     mot_nod_exp(7,2);
-
-}
-
-void  random_statu_mot(){
-
-     //aos_sleep(1000);
-     u32 count_tmp = 0;                    
-     aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
-                  
-     bk_printf("random_statu_mot....\n");
-
-    if(count_tmp<=0)
-        return ;
-        //VC_END_play_timerout = 1;
-
-    if(random_mt_test%3==0)
-        mot_nod_exp(8,2);
-
-     if(random_mt_test%3==1)
-        mot_nod_exp(15,2);
-
-     if(random_mt_test%3==2)
-         mot_nod_exp(16,2);
-
-      random_mt_test++;
-
-
-}
-
-
-void  send_express_str_xinxinmao(char *exp_str){
+ static void AI_VC_IOT_task(void *thread_input)//websocket 读线程
+ {
     
-    #if 1
-       if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-            
-           if(strstr(exp_str,"不理解"))
-           {
-              cmd_ui[4]=0x01;
-              cmd_ui[6]=0x03;
-           }else
-            if(strstr(exp_str,"发怒"))
-           {
-              cmd_ui[4]=0x02;
-              cmd_ui[6]=0x04;
-           }else
-            if(strstr(exp_str,"搞怪"))
-           {
-              cmd_ui[4]=0x03;
-              cmd_ui[6]=0x05;
-           }else
-            if(strstr(exp_str,"花痴"))
-           {
-              cmd_ui[4]=0x04;
-              cmd_ui[6]=0x05;
-           }else
-            if(strstr(exp_str,"惊喜"))
-           {
-              cmd_ui[4]=0x05;
-              cmd_ui[6]=0x07;
-           }else
-            if(strstr(exp_str,"惊讶"))
-           {
-              cmd_ui[4]=0x06;
-              cmd_ui[6]=0x08;
-           }else
-            if(strstr(exp_str,"卡通"))
-           {
-              cmd_ui[4]=0x07;
-              cmd_ui[6]=0x09;
-           }else
-            if(strstr(exp_str,"开心")||strstr(exp_str,"微笑"))
-           {
-              cmd_ui[4]=0x08;
-              cmd_ui[6]=0x0a;
-           }else
-            if(strstr(exp_str,"生气"))
-           {
-              cmd_ui[4]=0x09;
-              cmd_ui[6]=0x0b;
-           }else
-            if(strstr(exp_str,"眨眼"))
-           {
-              cmd_ui[4]=0x0a;
-              cmd_ui[6]=0x0c;
-           }else
-            if(strstr(exp_str,"很开心"))
-           {
-              cmd_ui[4]=0x0b;
-              cmd_ui[6]=0x0d;
-           }else
-            if(strstr(exp_str,"中立"))
-           {
-              cmd_ui[4]=0x0c;
-              cmd_ui[6]=0x0e;
-           }
-
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
-
-        #else 
-
-       // 淡定:Calm
-       // 尴尬:Embarrass
-       // 开心:Happy
-       // 可爱:Cute
-
-
-       
-       // 孝豚
-        if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-            
-        //    if(strstr(exp_str,"Calm"))
-        //    {
-        //       cmd_ui[4]=0x01;
-        //       cmd_ui[6]=0x03;
-        //    }else
-        //     if(strstr(exp_str,"Embarrass"))
-        //    {
-        //       cmd_ui[4]=0x02;
-        //       cmd_ui[6]=0x04;
-        //    }else
-        //     if(strstr(exp_str,"Happy"))
-        //    {
-        //       cmd_ui[4]=0x03;
-        //       cmd_ui[6]=0x05;
-        //    }else
-        //     if(strstr(exp_str,"Cute"))
-        //    {
-        //       cmd_ui[4]=0x04;
-        //       cmd_ui[6]=0x06;
-        //    }
-
-        //        01-Afraid 害怕-右
-// 02-Amused 有趣-右
-// 03-Angry  愤怒-右
-// 04-Bored  无聊-右
-// 05-Caring  关爱-右
-// 06-Confused 困惑-右
-// 07-Curious  惊喜-右
-// 08-Disgusted 厌恶-右
-// 09-dizzy   蚊香眼-右
-// 10-Doubtful  存疑-右
-// 11-Frowning  皱眉头-右
-// 12-Grimacing  苦着脸-右
-// 13-Happy  开心-右
-// 14-Neutral  中立-右
-// 15-Pensive  悲伤-右
-// 16-Relaxed  放松-右
-// 17-Sad    伤心-右
-// 18-Smiling  微笑-右
-// 19-Surprised  惊讶-右
-// 20-Tired  疲惫-右
-// 21-Winking  眨眼-右
-
-//        01-Afraid 害怕-右  01
-// 02-Amused 有趣-右   02
-// 03-Angry  愤怒-右   15
-// 04-Bored  无聊-右   16
-// 05-Caring  关爱-右  05
-// 06-Confused 困惑-右  17
-// 07-Curious  惊喜-右    19
-// 08-Disgusted 厌恶-右   20
-// 09-dizzy   蚊香眼-右    21
-// 10-Doubtful  存疑-右    18
-// 11-Frowning  皱眉头-右   03
-// 12-Grimacing  苦着脸-右   04
-// 13-Happy  开心-右      12
-// 14-Neutral  中立-右    06
-// 15-Pensive  悲伤-右    07
-// 16-Relaxed  放松-右    08
-// 17-Sad    伤心-右    09
-// 18-Smiling  微笑-右   10
-// 19-Surprised  惊讶-右  11
-// 20-Tired  疲惫-右    13
-// 21-Winking  眨眼-右   14
-
-            bk_printf("send_express_str:text:%s",exp_str);
-
-           if(strstr(exp_str,"Afraid")||strstr(exp_str,"害怕"))
-           {
-              cmd_ui[4]=0x01;
-              cmd_ui[6]=0x03;
-           }else
-            if(strstr(exp_str,"Amused")||strstr(exp_str,"有趣"))
-           {
-              cmd_ui[4]=0x02;
-              cmd_ui[6]=0x04;
-           }else
-            if(strstr(exp_str,"Angry")||strstr(exp_str,"愤怒"))
-           {
-              cmd_ui[4]=0x0f;
-              cmd_ui[6]=0x11;
-           }else
-            if(strstr(exp_str,"Bored")||strstr(exp_str,"无聊"))
-           {
-              cmd_ui[4]=0x10;
-              cmd_ui[6]=0x12;
-           }else
-            if(strstr(exp_str,"Caring")||strstr(exp_str,"关爱"))
-           {
-              cmd_ui[4]=0x05;
-              cmd_ui[6]=0x07;
-           }else
-            if(strstr(exp_str,"Confused")||strstr(exp_str,"困惑"))
-           {
-              cmd_ui[4]=0x11;
-              cmd_ui[6]=0x13;
-           }else
-            if(strstr(exp_str,"Curious")||strstr(exp_str,"惊喜"))
-           {
-              cmd_ui[4]=0x13;
-              cmd_ui[6]=0x15;
-           }else
-            if(strstr(exp_str,"Disgusted")||strstr(exp_str,"厌恶"))
-           {
-              cmd_ui[4]=0x14;
-              cmd_ui[6]=0x16;
-           }else
-            if(strstr(exp_str,"dizzy")||strstr(exp_str,"蚊香眼"))
-           {
-              cmd_ui[4]=0x15;
-              cmd_ui[6]=0x17;
-           }else
-            if(strstr(exp_str,"Doubtful")||strstr(exp_str,"存疑"))
-           {
-              cmd_ui[4]=0x12;
-              cmd_ui[6]=0x14;
-           }else
-            if(strstr(exp_str,"Frowning")||strstr(exp_str,"皱眉头"))
-           {
-              cmd_ui[4]=0x03;
-              cmd_ui[6]=0x05;
-           }else
-            if(strstr(exp_str,"Grimacing")||strstr(exp_str,"苦着脸"))
-           {
-              cmd_ui[4]=0x04;
-              cmd_ui[6]=0x06;
-           }else
-            if(strstr(exp_str,"Happy")||strstr(exp_str,"开心"))
-           {
-              cmd_ui[4]=0x0c;
-              cmd_ui[6]=0x0e;
-           }else
-            if(strstr(exp_str,"Neutral")||strstr(exp_str,"中立"))
-           {
-              cmd_ui[4]=0x06;
-              cmd_ui[6]=0x08;
-           }else
-            if(strstr(exp_str,"Pensive")||strstr(exp_str,"悲伤"))
-           {
-              cmd_ui[4]=0x07;
-              cmd_ui[6]=0x09;
-           }else
-            if(strstr(exp_str,"Relaxed")||strstr(exp_str,"放松"))
-           {
-              cmd_ui[4]=0x08;
-              cmd_ui[6]=0x0a;
-           }else
-            if(strstr(exp_str,"Sad")||strstr(exp_str,"伤心"))
-           {
-              cmd_ui[4]=0x09;
-              cmd_ui[6]=0x0b;
-           }else
-            if(strstr(exp_str,"Smiling")||strstr(exp_str,"微笑"))
-           {
-              cmd_ui[4]=0x0a;
-              cmd_ui[6]=0x0c;
-           }else
-            if(strstr(exp_str,"Surprised")||strstr(exp_str,"惊讶"))
-           {
-              cmd_ui[4]=0x0b;
-              cmd_ui[6]=0x0d;
-           }else
-            if(strstr(exp_str,"Tired")||strstr(exp_str,"疲惫"))
-           {
-              cmd_ui[4]=0x0d;
-              cmd_ui[6]=0x0f;
-           }else
-            if(strstr(exp_str,"Winking")||strstr(exp_str,"眨眼"))
-           {
-              cmd_ui[4]=0x0c;
-              cmd_ui[6]=0x0e;
-           }
-
-           uart_write(ui_uart_handle,cmd_ui, 7);
-       }
-
-
-        #endif
-        
-
-}
-
-void  send_express_str(char *exp_str){
-
-   //  texts = ["neutral","happy","laughing","funny","sad","angry",
-   //                  "crying","loving","embarrassed","surprised","shocked","thinking",
-   //                 "winking","cool","relaxed","","confused",""]
-
- ///  happy 🙂
-//cue 😸
-//surprised 😲
-//angry 😠
-//crying 😭
-//smirk😏
-//dissatisfied😒
-
-// 001序列帧 开心002序列帧 卖萌003序列帧 惊喜004序列帧 生气004序列帧 右眼生气005序列帧 哭泣006序列帧 坏笑007序列帧 不满
-    #if 1
-       if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
-            
-           if(strstr(exp_str,"开心")||strstr(exp_str,"happy"))
-           {
-              
-
-                #if SUPPORT_MOT
-                mot_nod_exp(8,2);
-                #endif
-
-              //  sleep
-                cmd_ui[4]=0x01;
-                cmd_ui[6]=0x03;
-
-           }else
-            if(strstr(exp_str,"卖萌")||strstr(exp_str,"cue"))
-           {
-            
-              #if SUPPORT_MOT
-                mot_nod_exp(5,2);  //   mot_nod_exp(7,2);
-            #endif
 
-              cmd_ui[4]=0x02;
-              cmd_ui[6]=0x04;
-           }else
-            if(strstr(exp_str,"惊喜")||strstr(exp_str,"surprised"))
-           {
-              cmd_ui[4]=0x03;
-              cmd_ui[6]=0x05;
-
-              #if SUPPORT_MOT
-                mot_nod_diantou(2);
-              #endif
-
-           }else
-            if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
-           {
-              cmd_ui[4]=0x04;
-              cmd_ui[6]=0x06;
-               #if SUPPORT_MOT
-                mot_nod_exp(6,2);
-              #endif
-
-           }else
-            if(strstr(exp_str,"哭泣")||strstr(exp_str,"crying"))
-           {
-              cmd_ui[4]=0x05;
-              cmd_ui[6]=0x07;
-
-               #if SUPPORT_MOT
-                mot_nod_taitou(2);
-               #endif
-
-           }else
-            if(strstr(exp_str,"坏笑")||strstr(exp_str,"smirk"))
-           {
-              cmd_ui[4]=0x06;
-              cmd_ui[6]=0x08;
-
-               #if SUPPORT_MOT
-                mot_nod_exp(5,2);
-               #endif
-           }else
-            if(strstr(exp_str,"不满")||strstr(exp_str,"dissatisfied"))
-           {
-              cmd_ui[4]=0x07;
-              cmd_ui[6]=0x09;
-
-              #if SUPPORT_MOT
-                mot_nod_exp(4,2);
-              #endif
-
-           }else if(strstr(exp_str,"点头")){
+      receive_iot_message(AI_client_IOT);
 
-                   mot_nod_yaotou(2);
-            
-           }else if(strstr(exp_str,"摇头")){
-
-                   mot_nod_diantou(2);
-            
-           }else if(strstr(exp_str,"抬头")){
-
-
-                  mot_nod_ditou(2);
-            
-           }else if(strstr(exp_str,"低头")){
-
-                  mot_nod_taitou(2);
-            
-           }else if(strstr(exp_str,"向左转")){
-
-                mot_nod_exp(15,2);
-
-            
-           }else if(strstr(exp_str,"向右转")){
-
-                mot_nod_exp(16,2);
-
-            
-           }
-            
-
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
-    #else
-
-     if(ui_uart_handle){
-           u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-            
-           if(strstr(exp_str,"伤心")||strstr(exp_str,"sad"))
-           {
-              cmd_ui[4]=0x01;
-              cmd_ui[6]=0x03;
-           }else
-            if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
-           {
-              cmd_ui[4]=0x03;
-              cmd_ui[6]=0x05;
-           }else
-            if(strstr(exp_str,"困惑")||strstr(exp_str,"confused")||strstr(exp_str,"embarrassed"))
-           {//embarrassed
-              cmd_ui[4]=0x06;
-              cmd_ui[6]=0x08;
-           }else
-            if(strstr(exp_str,"失望")||strstr(exp_str,"crying"))
-           {
-              cmd_ui[4]=0x08;
-              cmd_ui[6]=0x0a;
-           }else
-            if(strstr(exp_str,"开心")||strstr(exp_str,"happy")||strstr(exp_str,"loving")
-            ||strstr(exp_str,"funny")||strstr(exp_str,"laughing")||strstr(exp_str,"cool"))  //laughing  "funny loving
-           {  //cool
-              cmd_ui[4]=0x0d;
-              cmd_ui[6]=0x0f;
-           }else
-            if(strstr(exp_str,"默认")||strstr(exp_str,"neutral")||strstr(exp_str,"thinking")
-            ||strstr(exp_str,"winking")||strstr(exp_str,"relaxed"))
-           {//thinking  winking relaxed
-              cmd_ui[4]=0x0e;
-              cmd_ui[6]=0x10;
-           }else
-            if(strstr(exp_str,"惊恐")||strstr(exp_str,"surprised")||strstr(exp_str,"shocked"))
-           {//shocked
-              cmd_ui[4]=0x13;
-              cmd_ui[6]=0x15;
-           }
-
-           uart_write(ui_uart_handle,cmd_ui, 7);
-        }
-
-    #endif
-
-}
+ }
 
 
 static void AI_VC_read_task(void *thread_input)//websocket 读线程
@@ -2426,7 +1613,6 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
     int status;
     static u8 *recv_buff = NULL;
     
-    AI_VC_stata=1;
     
     if(recv_buff == NULL)
     {
@@ -2454,64 +1640,33 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
 
             // aos_sleep(50);
 
-             u32 timer_ms11 = aos_get_tickcount();
+            // u32 timer_ms11 = aos_get_tickcount();
 
-             //bk_printf("AI_VC_read_task 12");
+             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");
+             bk_printf("AI_VC_read_task 13");
 
-             u32 timer_ms22 = aos_get_tickcount();
+            // u32 timer_ms22 = aos_get_tickcount();
             
-            int duration_temp=timer_ms22-timer_ms11;
+            // int duration_temp=timer_ms22-timer_ms11;
 
-             aos_sleep(15);
+            // aos_sleep(15);
 
-             if(duration_temp>500)
-              bk_printf("receive_websocket_message %d ms",timer_ms22-timer_ms11);
+           //  if(duration_temp>500)
+            //  bk_printf("receive_websocket_message %d ms",timer_ms22-timer_ms11);
 
 
             if(status>0)
             {  
-
-
-                 close_timerout = 305;
-
-                if(is_dialog_status==0){
-             
-                   sleep_chumo_timerout=300;
-
-                }else{
-
-                    if(vc_cfg.VC_mode==1){
-
-                        if(ddh_is_close_dialog==0)
-                           close_timerout=5;
-
-                       // else{
-                       // }
-
-                    }
-                }
-
+                close_timerout = 60;
                 if(code == WS_TEXT)//字符串
                 {
                     //bk_printf("AI_VC_read_task 3");
                     bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
                     if(strstr(recv_buff,"\"started\""))//开始
                     {
-
-                        tts_start_timerout=0;
-                        if(issend_start_up==0){
-                           
-                            issend_start_up=1;
-
-                            AI_VC_send_startup();
-
-                           
-                       }
-
                         
                         if(AI_TTS_str)
                         {
@@ -2529,21 +1684,10 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                                 VC_state = VC_State_Listening;
                             else if(vc_cfg.VC_mode == 2 )//连续对话模式,按键打断
                                 VC_state = VC_State_Listening;
-                            
-                            //  back_middle_statu_mot();
-
-                            //  AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
+                                
                         }
-
                     }else if(strstr(recv_buff,"\"asr.started\""))//asr开始
                     {
-
-                      //  if(AI_ASR_str_tmp)
-                      //  {
-                     //       memset(AI_ASR_str_tmp,0,AI_ASR_STR_MAX_LEN);
-                     //   }
-
-                         has_tmp_result=0;
                         if(vc_cfg.VC_mode == 1 || vc_cfg.is_VAD ==1)//长按模式,或开机本地vad模式
                             VC_state = VC_State_SpeechIng;
                     }else if(strstr(recv_buff,"\"asr.result\""))
@@ -2554,9 +1698,6 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                         if(str_tmp)
                         {
                             //bk_printf("content!!");
-
-                            has_tmp_result=1;
-
                             str_tmp += strlen("\"content\":\"");
                             int str_tmp_len = str_count(str_tmp,'\"');
                             //存asr结果
@@ -2574,7 +1715,7 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                     {
                         VC_state = VC_State_ASR_End;
 
-                        bk_printf("AI_ASR_str%s  AI_ASR_str_tmp %s",AI_ASR_str,AI_ASR_str_tmp);
+                        // play_file_stream_data("C:/vadend.pcm");
                         if(AI_ASR_str && AI_ASR_str_tmp)
                         {
                             int ret = check_text(AI_ASR_str_tmp,strlen(AI_ASR_str_tmp)) ;
@@ -2585,19 +1726,9 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                                 break;
                             }
                                 
-                            if(VAD_time_count <= VAD_TIMEOUT)//时间间隔短,认为是一次对话,拼接内容
+                            if(VAD_time_count <= VAD_TIMEOUT )//时间间隔短,认为是一次对话,拼接内容
                             {
                                 
-                                 if(strlen(AI_ASR_str_tmp)==0){
-
-
-                                     // VC_state=VC_State_Listening;
-
-                                     bk_printf("没有识别结果");
-
-                                     AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
-                                 }
                                 
                                     if(strlen(AI_ASR_str) +strlen(AI_ASR_str_tmp)> AI_ASR_STR_MAX_LEN-1)//超出缓存长度,清零
                                     {
@@ -2612,50 +1743,13 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                                 
                             }else//超时,不用拼接
                             {
-                                  strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
-
-                                  if(strlen(AI_ASR_str_tmp)==0){
-
-                                     //  VC_state=VC_State_Listening;
-
-                                     bk_printf("没有识别结果");
-
-                                     AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
-                                }
-
+                                strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
                                 bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
                             }
-                            #if BK_SOCKET_IOT
-                            IOT_update_statu(1,"thinking","");
-                            #endif
 
-                           
+                             IOT_update_statu(1,"thinking","");
+                             play_file_stream_data("C:/vadend.pcm");
                         }
-
-
-                             bk_printf("002AI_ASR_str%s  AI_ASR_str_tmp %s",AI_ASR_str,AI_ASR_str_tmp);
-                             bk_printf("play_file_stream_data:%d",VC_Play_flag);
-
-                             if(has_tmp_result==0)
-                               AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-                            else
-                            if(VC_Play_flag==1&&strlen(AI_ASR_str_tmp)!=0)//VC_Play_flag==1&&
-                               play_file_stream_data("C:/vadend.pcm");
-                            //else{
-
-                                      
-                            //     if(strlen(AI_ASR_str_tmp)==0){
-
-                            //     //  VC_state=VC_State_Listening;
-
-                            //     bk_printf("没有识别结果");
-
-                            //     AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
-                            //    }
-                                  // play_audio_file("C:/vadend.mp3");
-                           // }
                     }
                     else if(strstr(recv_buff,"\"vad.active\""))//vad触发
                     {
@@ -2687,9 +1781,9 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                         
                         VC_state = VC_State_TTSStart;
                         play_data_len = 0;
-                        #if BK_SOCKET_IOT
+
                         IOT_update_statu(1,"speaking","");
-                        #endif
+
                         one_receive_bin=0;
 
                         if(outbound_attributes_format == attributes_format_OPUS){
@@ -2721,9 +1815,9 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                         // AI_AMP_MSG_put(0,0,VC_PLAY_START);//打开声音
 
                         startsave_tts=0;
-                        #if BK_SOCKET_IOT
+
                         IOT_update_statu(1,"idle","");
-                        #endif
+
                        //  fp_tts_save=fopen("C:/cmd_local_301.pcm","wb");
 
                          // bk_printf("C:/cmd_local_301.pcm %d",one_receive_bin);
@@ -2732,17 +1826,21 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
 
                         //  startsave_tts=one_receive_bin;
 
-                       VC_state = VC_State_End;
-                    
+                       
+                        
+                        
+
                       //  if(fp_tts_save)
-                      //    fclose(fp_tts_save);
+                     //    fclose(fp_tts_save);
 
-                      //    fp_tts_save=NULL;
+                     //    fp_tts_save=NULL;
 
                         // aos_sleep(500);
 
                         // bk_printf("C:/cmd_local_301.pcm %d",getFileSize("C:/cmd_local_301.pcm"));
 
+                         VC_state = VC_State_End;//
+
                          
                         
                     }
@@ -2750,15 +1848,17 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                     {
                         VC_state = VC_State_End;//
 
-                        if(vc_cfg.VC_mode==0&&strlen(AI_ASR_str_tmp)==0){
 
-                             u32 count_tmp = 0;                    
-                             aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
-                  
-                             bk_printf("连续对话模式没有语音....\n");
-                              if(count_tmp<=0)
-                               VC_END_play_timerout = 1;
-                             
+                         u32 count_tmp = 0;
+                        
+                        aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
+
+                       // bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+
+                        if(count_tmp <= 0 )//播放完了
+                        {
+                           // VC_END_play_timerout = 1;
+                            VC_state = VC_State_Listening;//重新开始了
                         }
                         
                         //AI_AMP_MSG_put(0,0,VC_RECORD_START);//打开录音
@@ -2778,7 +1878,7 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                             {
                                 // str_tmp+=strlen("\"message\":\"");
                                 // int count = strlen(str_tmp);
-                                AI_AMP_MSG_put("没å\90¬æ¸\85ï¼\8c请å\86\8d说ä¸\80é\81\8d",strlen("没å\90¬æ¸\85ï¼\8c请å\86\8d说ä¸\80é\81\8d"),VC_CONNECT_ERROR);
+                                AI_AMP_MSG_put("æ\9c\8då\8a¡å¼\82常äº\86ï¼\8c请é\87\8dè¯\95",strlen("æ\9c\8då\8a¡å¼\82常äº\86ï¼\8c请é\87\8dè¯\95"),VC_CONNECT_ERROR);
                             }
                         }
                         
@@ -2829,13 +1929,51 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                           
                             bk_printf("the emotion text len is %s %d",emotion_str,str_tmp_len);
 
-                            send_express_str(emotion_str);
+                             send_express_str(emotion_str);
 
-                        }
+                            }
 
                         }
+
+
                         
                         
+                    }else if(strstr(recv_buff,"\"event\":\"llm.completed\""))//接口报错了
+                    {
+
+                        // char *str_tmp = NULL;
+
+                         bk_printf("the express_str exist1 \n");
+                        
+                        //  str_tmp = strstr(recv_buff,"\"param_json\"");
+                        char *str_tmp = strstr(recv_buff,"(");
+
+                        if(str_tmp)
+                        {
+
+                            bk_printf("the express_str exist2 \n");
+                            char  express_str[200];
+                            memset(express_str,0,200);
+                            //bk_printf("content!!");
+                            //  str_tmp += strlen("\"params_json")+6;
+
+                           char *str_tmp1=strstr(recv_buff,")");
+                           // int str_tmp_len = str_count(str_tmp+1,')');
+
+                            int str_tmp_len = str_tmp1-str_tmp;
+                            //存asr结果
+                          
+                            memcpy(express_str,str_tmp+1,str_tmp_len);
+                            //   //AI_ASR_str_tmp[str_tmp_len] = 0;
+                          
+                            bk_printf("the express_str3 is [%s]",express_str);
+                            
+                            // AI_VC_send_music_start(mp3_path);
+
+                            send_express_str(express_str);
+                            
+                        }
+
                     }
                      
                 }
@@ -2856,7 +1994,7 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
 
 
                     //   if((one_receive_bin/32)<(timer_ms22-timer_ms21))               
-                  //     bk_printf("read BIN  status:%d,code:%d!!!!!!",status,code);
+                   //    bk_printf("read BIN  status:%d,code:%d!!!!!!",status,code);
 
                   //    VC_pingping_timerout = 20;
 
@@ -2878,16 +2016,18 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
 
                         one_receive_bin+=status;
 
-                       // bk_printf("ogg_opus_decode_data  %d...",one_receive_bin);
+                        bk_printf("ogg_opus_decode_data  %d...",status);
+
+                      //  bk_printf("sum_opus_decode_data  %d...",one_receive_bin);
 
                          //  memcpy(save_temp_tts);
 
                          //  audio_data(recv_buff,status,26);
                           
-                         //ogg_opus_decode_data(recv_buff,status);
+                        // ogg_opus_decode_data(recv_buff,status);
 
+                         my_opus_decode_data(recv_buff,status);
 
-                        my_opus_decode_data(recv_buff,status);
                          // if(fp_tts_save){
 
                          //  bk_printf("save tts!!!");
@@ -2914,7 +2054,7 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
                 if(AI_client_VC != NULL)
                 {
                     bk_printf("AI_VC_read_task:vc连接断开了");
-                      AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
+                    AI_AMP_MSG_put("vc连接断开了",strlen("vc连接断开了"),VC_CONNECT_ERROR);
                 }else{
                     bk_printf("AI_VC_read_task:客户端主动断开连接了");
                 }
@@ -2937,8 +2077,6 @@ static void AI_VC_read_task(void *thread_input)//websocket 读线程
     }
     bk_printf("AI_VC_read_task exit\n");
     AI_VC_read_task_flag=3;
-
-    AI_VC_stata=0;
 }
 
 
@@ -2977,7 +2115,7 @@ static void AI_VC_record_task(void *thread_input)//录音线程
         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);
@@ -2989,54 +2127,11 @@ static void AI_VC_record_task(void *thread_input)//录音线程
             aos_sleep(1);
             continue;
         }
-
-        if(is_dialog_status==1){
-
-              if(vc_cfg.is_KWS)
-                {
-                    int KWS_time = aos_get_tickcount();
-                    //  bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
-                    run_kws((int16_t *)vrecord_buf,ret/2);
-                    int kws_status = kws_detect();
-                    //  bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
-                    if (kws_status == 1) {
-
-                        is_dialog_status=0;
-                        bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
-                        kws_clear();
-
-                        AI_AMP_MSG_put("我来了。",strlen("我来了。"),VC_TTS_PLAY);
-                    }
-                }
-                 continue;
-
-        }
-          
-
-
+        
         if((vc_cfg.VC_mode == 0 || vc_cfg.VC_mode == 2)&& vc_cfg.is_VAD == 1)//VAD逻辑:先判断有没有有效数据,触发了有效数据才发送
         {
-              if(vc_cfg.VC_mode == 2 &&  VC_state > VC_State_SpeechEnd )//按钮打断模式,tts播放时禁止打断,不输入语音
-               {
-
-                if(vc_cfg.is_KWS)
-                {
-                    int KWS_time = aos_get_tickcount();
-                    //  bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
-                    run_kws((int16_t *)vrecord_buf,ret/2);
-                    int kws_status = kws_detect();
-                    //  bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
-                    if (kws_status == 1) {
-
-                        is_dialog_status=0;
-                        bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
-                        kws_clear();
-
-                        AI_AMP_MSG_put("我在呢。",strlen("我在呢。"),VC_TTS_PLAY);
-                    }
-                }
+            if(vc_cfg.VC_mode == 2 &&  VC_state > VC_State_SpeechEnd )//按钮打断模式,tts播放时禁止打断,不输入语音
                 continue;
-               }
             // 每次获得语音后调用, 语音长度最好小于100ms
             // wave为u8*或void*指针时需要 / 2
             //int vad_test_time = aos_get_tickcount();
@@ -3062,9 +2157,7 @@ static void AI_VC_record_task(void *thread_input)//录音线程
                         }
                         ret =  sizeof(vrecord_buf);
                     }
-
-                  
-                      AI_VC_put_record_data(vrecord_buf,ret);
+                    AI_VC_put_record_data(vrecord_buf,ret);
                 }
                 VAD_status = 2;
               //  audio_data(vrecord_buf,ret,21);
@@ -3088,25 +2181,21 @@ static void AI_VC_record_task(void *thread_input)//录音线程
                         {
                             
                             unsigned int r_len =  bk_rb_read(VAD_rb_data,vad_r_tmp,2560);
-                            audio_data(vad_r_tmp,r_len,21);
+                         //   audio_data(vad_r_tmp,r_len,21);
                             //AI_VC_send_data(vad_r_tmp,r_len,AIC_WEBSOCKET_OPCODE_BINARY_FRAME);//发送缓冲数据
-                        
-                             AI_VC_put_record_data(vad_r_tmp,r_len);//入队缓冲数据
-
-                            // if(vc_cfg.is_KWS)
-                            // {
-                            //     int KWS_time = aos_get_tickcount();
-                            //     bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,r_len);
-                            //     run_kws((int16_t *)vad_r_tmp,r_len/2);
-                            //     int kws_status = kws_detect();
-                            //     bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
-                            //     if (kws_status == 1) {
-
-                                    
-                            //         bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
-                            //         kws_clear();
-                            //     }
-                            // }
+                            AI_VC_put_record_data(vad_r_tmp,r_len);//入队缓冲数据
+                            if(vc_cfg.is_KWS)
+                            {
+                                int KWS_time = aos_get_tickcount();
+                                bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,r_len);
+                                run_kws((int16_t *)vad_r_tmp,r_len/2);
+                                int kws_status = kws_detect();
+                                bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
+                                if (kws_status == 1) {
+                                    bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
+                                    kws_clear();
+                                }
+                            }
                             
                             
                         }else
@@ -3119,27 +2208,22 @@ static void AI_VC_record_task(void *thread_input)//录音线程
                     VAD_status = 1;
                 }
                 
-              
-                     AI_VC_put_record_data(vrecord_buf,ret);
-
-                     audio_data(vrecord_buf,ret,21);
-
-                // if(vc_cfg.is_KWS)
-                // {
-                //     int KWS_time = aos_get_tickcount();
-                //     bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
-                //     run_kws((int16_t *)vrecord_buf,ret/2);
-                //     int kws_status = kws_detect();
-                //     bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
-                //     if (kws_status == 1) {
-
-                      
-                //         bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
-                //         kws_clear();
-                //     }
-                // }
-                //bk_printf("VAD:检测到说话了"); 
 
+                AI_VC_put_record_data(vrecord_buf,ret);
+               // audio_data(vrecord_buf,ret,21);
+                if(vc_cfg.is_KWS)
+                {
+                    int KWS_time = aos_get_tickcount();
+                    bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
+                    run_kws((int16_t *)vrecord_buf,ret/2);
+                    int kws_status = kws_detect();
+                    bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
+                    if (kws_status == 1) {
+                        bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
+                        kws_clear();
+                    }
+                }
+                //bk_printf("VAD:检测到说话了"); 
             }else if(vad_status_t == 0 )//m没有说话
             {
                 
@@ -3170,36 +2254,12 @@ static void AI_VC_record_task(void *thread_input)//录音线程
             if(count_tmp>0)//有有效录音数据
             {
 
-                if(VC_state >= VC_State_TTSStart)
+                if(VC_state >= VC_State_TTSStart)//
                 {
-                    char count_tmp12 = count_tmp;
-
-                    bk_printf("count_tmp:%d,VC_state:%d",count_tmp,VC_state);
-
-                    while(count_tmp12 --)
-                    {
-
-                         if(count_tmp12<15)
-                            break;
-
-                        if(aos_recv_from_queue(AI_VC_record_tmp_queue,&AI_VC_play_record_data,AOS_NO_WAIT) == AOS_SUCCESS)//有有效录音数据
-                        {
-                          //  audio_data(AI_VC_play_record_data.data,AI_VC_play_record_data.len,22);
-                            
-                           // AI_VC_send_data(AI_VC_play_record_data.data,AI_VC_play_record_data.len,AIC_WEBSOCKET_OPCODE_BINARY_FRAME);
-                            if(AI_VC_play_record_data.data)
-                                aic_free(AI_VC_play_record_data.data);
-                        }else
-                            break;
-                    }
-
                     VC_state = VC_State_None;
-                    bk_printf("VAD:vad_status_t:%d",vad_status_t);
+                    bk_printf("VAD:vad_status_t:%d",vad_status_t); 
                     bk_printf("VAD:发送打断对话"); 
                     AI_AMP_MSG_put(0,0,VC_Cancel);//发送打断
-
-                    AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
-
                 }
                 else if(VC_state == VC_State_SpeechIng )//可以发数据了
                 {
@@ -3217,29 +2277,20 @@ static void AI_VC_record_task(void *thread_input)//录音线程
                             break;
                     }
                 }
-                else if(VC_state == VC_State_Listening) //|| (VC_state >= VC_State_ASR_End && VC_state < VC_State_TTSStart)
+                else if(VC_state == VC_State_Listening || (VC_state >= VC_State_ASR_End && VC_state < VC_State_TTSStart))
                 {
                     
                     AI_VC_send_audio_create();//发送开始音频
-
                     bk_printf("VAD:发送开始音频"); 
-
                 }else 
                 {
                     if(VC_state > VC_State_SpeechStart)
-                    {
                         bk_printf("VAD:有数据还没发:VC_state:%d\r\n\r\n",VC_state); 
-
-                        // AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-                    }
-                     //  AI_VC_send_audio_create();//发送开始音频
-                     //  bk_printf("VAD:发送开始音频"); 
-                     //  char count_tmp = 200;
-                  
+                    // AI_VC_send_audio_create();//发送开始音频
+                    // bk_printf("VAD:发送开始音频"); 
                 }
                 vad_end_flag = 1;
-            }
-            else//没录音数据
+            }else//没录音数据
             {
                 if(VAD_status)
                 {
@@ -3247,12 +2298,15 @@ static void AI_VC_record_task(void *thread_input)//录音线程
                 }
                 if(VC_state == VC_State_SpeechIng  || vad_end_flag ==1)//开始说话,且没数据
                 {
+                    vad_end_flag = 0;
                     AI_VC_send_audio_completed();//发送停止音频、、目前还是会有数据下发
                     bk_printf("VAD:发送停止音频"); 
                     bk_printf("VAD:vad_status_t:%d",vad_status_t); 
                     vad_end_flag = 0;
                     if(inbound_attributes_format == attributes_format_OPUS)
                         opus_clean();
+
+                   
                 }
                 
             }
@@ -3262,7 +2316,7 @@ static void AI_VC_record_task(void *thread_input)//录音线程
         }
 
         
-       // AI_VC_put_play_data(vrecord_buf,ret);//音频调试0
+        //AI_VC_put_play_data(vrecord_buf,ret);//音频调试0
         
         if(AI_VC_record_tmp_queue == NULL)
             continue;
@@ -3334,9 +2388,6 @@ static void AI_VC_play_task(void *thread_input)//音频播放线程
         bk_printf("app_audio_start ret=%d",ret);
         app_logi("AI_VC_play_task app_audio_start ret=%d",ret);
     }
-
-    aos_sleep(200);
-
     while(1)
     {
         if(AI_VC_play_task_flag >=2)
@@ -3359,7 +2410,7 @@ static void AI_VC_play_task(void *thread_input)//音频播放线程
                 {
                     ret = app_audio_write(APP_AUDIO_TYPE_STREAM_DUPLEX,
                         AI_VC_play_queue_data.data, AI_VC_play_queue_data.len, 2000);
-                    // bk_printf("app_audio_write  len=%d\n", ret);
+                    //bk_printf("app_audio_write  len=%d\n", ret);
                     if (ret <= 0)
                     {
                         aos_sleep(1);
@@ -3375,12 +2426,12 @@ static void AI_VC_play_task(void *thread_input)//音频播放线程
                         
                         aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
 
-                        //  bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+                     //   bk_printf("VC_State_End:count_tmp = %d",count_tmp);
 
                         if(count_tmp <= 0 )//播放完了
                         {
-                             bk_printf("VC_State_End:count_tmp = %d",count_tmp);
-                             VC_END_play_timerout = 1;
+                            VC_END_play_timerout = 1;
+                            VC_state = VC_State_Listening;//重新开始了
                         }
                     }
                     continue;//正常有数据就不执行下面写0
@@ -3497,513 +2548,237 @@ uint16_t modbus_crc16(const uint8_t *data, uint16_t length) {
 }
 
 
-void deal_iot_receive(char *json_data)
+//Music.Start 开始发送音频
+void IOT_update_statu(int type,char *type_str,char *content)
 {
+   // VC_state = VC_State_SpeechStart;//开始说
 
-     bk_printf(json_data);
-
-     // vc_cfg.VC_TTS_volume = 100;
-     //  AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
-
-     //{"cmd":"emotion","msg":"AI指令:emotion","data":"Cute","ts":1764914695122,"targetDeviceId":"865530078570777"}
-
-     if(strstr(json_data,"action")){
-
-        tts_start_timerout=0;
-         bk_printf("action");
-
-         char *str_tmp = NULL;
-
-         char action_str[500]={0};
-
-         str_tmp = strstr(json_data,"\"data\":\"");
-        
-         // bk_printf("str_tmp:%p",str_tmp);
-
-       if(str_tmp)//解析password
-       {
-
-           str_tmp += strlen("\"data\":\"");
-           int count = str_count(str_tmp,'\"');
-           bk_printf("count:%d",count);
-          if(count < sizeof(action_str))
-          {
-
-            
-             memcpy(action_str,str_tmp,count);
-             action_str[count] = 0;
-             bk_printf("action_str:%s",action_str);
-             if(is_guanji==0)
-               send_express_str(action_str);
-          }
-
-       }
-
-     }
-
-      if(strstr(json_data,"set_vol")){
-
-
-         char *str_tmp = NULL;
-
-         char action_str[500]={0};
-
-         str_tmp = strstr(json_data,"\"data\":\"");
-
-        if(str_tmp)//解析password
-       {
-
-           str_tmp += strlen("\"data\":\"");
-           int count = str_count(str_tmp,'\"');
-           bk_printf("count:%d",count);
-          if(count < sizeof(action_str))
-          {
-
-            
-             memcpy(action_str,str_tmp,count);
-             action_str[count] = 0;
-             bk_printf("set_vol:%s",action_str);
-
-            if(strstr(action_str,"+10")){
-
-                if(vc_cfg.VC_TTS_volume<=90){
-                   vc_cfg.VC_TTS_volume+=10;
-
-                   app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-                }
-
-            }else if(strstr(action_str,"-10")){
-
-                  if(vc_cfg.VC_TTS_volume>10){
-                     vc_cfg.VC_TTS_volume-=10;
-                     app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-                  }
-
-            }else{
-
-             int temp_vol=atoi(action_str);
-
-             if(temp_vol>0&&temp_vol<=100){
-
-               bk_printf("temp_vol:%d",temp_vol);
-               vc_cfg.VC_TTS_volume=temp_vol;
-
-               app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-
-
-             }
-
-             }
-               //  if(is_guanji==0)
-              //   send_express_str(action_str);
-          }
-
-       }
-
-      }
-
-     if(strstr(json_data,"emotion")){
-
-         bk_printf("emotion");
-
-          tts_start_timerout=0;
-
-         char *str_tmp = NULL;
-
-         char emotion_str[500]={0};
-
-         str_tmp = strstr(json_data,"\"data\":\"");
-        
-         // bk_printf("str_tmp:%p",str_tmp);
-
-       if(str_tmp)//解析password
-       {
-
-           str_tmp += strlen("\"data\":\"");
-           int count = str_count(str_tmp,'\"');
-           bk_printf("count:%d",count);
-          if(count < sizeof(emotion_str))
-          {
-
-            
-             memcpy(emotion_str,str_tmp,count);
-             emotion_str[count] = 0;
-             bk_printf("emotion_str:%s",emotion_str);
-
-            if(is_guanji==0)
-             send_express_str(emotion_str);
-          }
-
-       }
-
-     }
-
-     if(strstr(json_data,"tts_audio_url")){
-
-        bk_printf("tts_audio_url");
-
-         char *str_tmp = NULL;
-
-         char mp3_path_str[500]={0};
-
-         str_tmp = strstr(json_data,"\"data\":\"");
-        
-        // bk_printf("str_tmp:%p",str_tmp);
-
-       if(str_tmp)//解析password
-       {
-
-           str_tmp += strlen("\"data\":\"");
-           int count = str_count(str_tmp,'\"');
-           bk_printf("count:%d",count);
-          if(count < sizeof(mp3_path_str))
-          {
-
-            
-             memcpy(mp3_path_str,str_tmp,count);
-             mp3_path_str[count] = 0;
-             bk_printf("mp3_path_str:%s",mp3_path_str);
-
-             //is_music_status=1;
-
-            // AI_AMP_MSG_put("请稍后,现在为你查找音乐",strlen("请稍后,现在为你查找音乐"),VC_TTS_PLAY);
-
-            // aos_sleep(4000);
-
-             AI_VC_send_music_start(mp3_path_str);
-
-          }
-       }
-
-        //  IOT_update_statu(3,"","");
-
-        //  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);
-            }
-
-          // IOT_V3_update_statu(3,"","");
-           save_VC_cfg();
-
+   
+    // 创建根对象
+    cJSON *root = cJSON_CreateObject();
+    if (root == NULL) {
+        bk_printf("Failed to create root object.\n");
+        return ;
     }
 
-     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);
+     cJSON *cmd_data = cJSON_CreateObject();
 
-            int temp_vol=atoi(volume_str);
-            
-            if(temp_vol>=0&&temp_vol<=100)
-            {
+     if (cmd_data == NULL) {
+        bk_printf("Failed to create payload object.\n");
+        cJSON_Delete(root);
+        return ;
+    }
+    // 设置 "event" 
+    
+     if(type==1){
 
-                vc_cfg.VC_TTS_volume = temp_vol;
-               
-                app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+       cJSON_AddStringToObject(root, "cmd", "chat_state");
 
-                char tts_temp[200]={0};
+       cJSON_AddStringToObject(cmd_data, "state", type_str);
 
+       cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
 
-                sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+     }
 
-                 AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+     if(type==2){
 
+       long timestamp;
 
-                  //is_save_VC_cfg = 1;
+       timestamp = time(NULL);
+       bk_printf("2时间戳: %ld\n", (long)timestamp);
+       long long timestamp_ms = (long long)timestamp * 1000;
+       char timestamp_str[20] ={0};
 
-                  save_VC_cfg();
-            }
+       // 使用 sprintf 将 long long 类型的时间戳转换为字符串
+       int ret12 = sprintf(timestamp_str, "%lld", timestamp_ms);
+       timestamp_str[ret12] =0;
+       // 打印转换后的字符串形式的时间戳
+       bk_printf("2时间戳(ms 转换为字符串): %s\n", timestamp_str);
 
-            
-            
-           }
-          else
-          {
-            bk_printf("获取volume失败");
-           }
-        }
-       }
+       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);
 
-static void AI_IOT_read_task(void *thread_input)//websocket 读线程
- {
+       cJSON_AddStringToObject(cmd_data, "createTime", timestamp_str);
 
-    int status;
-    static u8 *recv_buff = NULL;
-    
+       
+     }
     
-    if(recv_buff == NULL)
-    {
-        recv_buff = aic_malloc(recv_buff_mxa_len);
-    }
-    if(recv_buff == NULL)
-    {
-        bk_printf("AI_VC_read_task aic_malloc ERROR!!!!!!!!!!!!!!!!!!......");
-        return;
-    }
-    WebSocketMessageType code;
-    bk_printf("AI_IOT_read_task go......");
-    // AI_VC_read_task_flag = 1;
-    while (1) {
-        
-         if(AI_client_IOT)
-         {
 
-             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");
+     if(type==3){
 
-             // aos_sleep(50);
+        char tmp_bat[20]={0},tmp_sig[20]={0},tmp_vol[20]={0},tmp_bargein[20]={0};
 
-             // u32 timer_ms11 = aos_get_tickcount();
+       cJSON_AddStringToObject(root, "cmd", "device_info");
 
-            //  bk_printf("IOT_read_task...... 12");
+       cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
 
-              status = receive_websocket_message_V3(AI_client_IOT,recv_buff,recv_buff_mxa_len,&code);
+        ts_radio_signal_info_t p_signal_info;
+        int32_t ret = 0;
 
-              if(AI_VC_stata==0)
-              {
-                    aos_sleep(100);
-                    continue;
+        ret = aic_srv_tele_radio_get_signal_info_sync(current_card_id, &p_signal_info);
 
-              }
-                 
-              
+        // p_signal_info.signal_level_val
 
-            //  bk_printf("get iot message.................................");
-            //  bk_printf("bytes_received %02X %02X %02X %02X %02X %02X %02X %02X %02X ...\n",recv_buff[0],recv_buff[1],recv_buff[2],recv_buff[3],recv_buff[4],recv_buff[5],recv_buff[6],recv_buff[7],recv_buff[8]);
+        struct psy_info psy_info;
+        get_psy_info(&psy_info);
 
+       // psy_info.bat_capacity
 
-            //  bk_printf("IOT_read_task...... 13");
+       sprintf(tmp_bat,"%d",psy_info.bat_capacity);
 
-                if(code == WS_TEXT)//字符串
-                {
-                    //bk_printf("AI_VC_read_task 3");
-                  //  bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
-                
-                }else{
+       sprintf(tmp_sig,"%d",p_signal_info.signal_level_val);
 
+       sprintf(tmp_vol,"%d",vc_cfg.VC_TTS_volume);
 
-                     if(status>8){
+       sprintf(tmp_bargein,"%d",vc_cfg.VC_mode);
 
-                    // bk_printf("read TEXT:status:%d",status);
+       cJSON_AddStringToObject(cmd_data, "battery", tmp_bat);
 
-                     char jsonstr[500]={0};
+       cJSON_AddStringToObject(cmd_data, "wifi_rssi", tmp_sig);
 
-                     memcpy(jsonstr,recv_buff+8,status-8);
+       cJSON_AddStringToObject(cmd_data, "volume", tmp_vol);
 
-                    // bk_printf("read json TEXT:status:%s",jsonstr);
+       cJSON_AddStringToObject(cmd_data, "current_role_name", "fx01");
 
-                     deal_iot_receive(jsonstr);
+       cJSON_AddStringToObject(cmd_data, "version", "V1.2");
 
-                     }
+       cJSON_AddStringToObject(cmd_data, "bargein", tmp_bargein);
 
-                }
-              
-              if(status>0)
-              { 
+       // bargein
 
+      
 
-              }else{
+     }
+    
+    
+     // 将 "payload" 对象添加到根对象中
 
-                 break;
-             }
+     cJSON_AddItemToObject(root, "data", cmd_data);
 
-            aos_sleep(100);
-         }else{
 
-            break;
-         }
 
-    }
+    // 将 JSON 对象转换为字符串
 
-    if(recv_buff)
-    {
-        aic_free(recv_buff);
-        recv_buff = NULL;
-    }
+    //cJSON_PrintUnformatted
 
-    AI_client_IOT=NULL;
-    
-    AI_VC_read_IOT_id=0;
-    bk_printf("AI_IOT_read_task exit\n");
-   // AI_VC_read_task_flag=3;
+    char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
+    if (json_str == NULL) {
+        bk_printf("Failed to print JSON object.\n");
+        cJSON_Delete(root);
+        
+    }
 
- }
 
-void IOT_V3_heart()
-{
-   
-    // 创建根对象
-    cJSON *root = cJSON_CreateObject();
-    if (root == NULL) {
-        bk_printf("Failed to create root object.\n");
-        return ;
-    }
+    bk_printf(json_str);
 
-     cJSON *cmd_data = cJSON_CreateObject();
+    unsigned char frame[500]={0};
 
-     if (cmd_data == NULL) {
-        bk_printf("Failed to create payload object.\n");
-        cJSON_Delete(root);
-        return ;
-    }
-    // 设置 "event" 
-    
+    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);
 
-    // if(type==4){
+    memcpy(frame+5,json_str,strlen(json_str));
 
-        struct psy_info psy_info;
-        get_psy_info(&psy_info);
+    uint16_t crc = modbus_crc16(json_str,strlen(json_str));
 
-       long timestamp;
+    uint8_t crc_low = crc & 0xFF;
 
-       timestamp = time(NULL);
-       bk_printf("2时间戳: %ld\n", (long)timestamp);
+    uint8_t crc_high = (crc >> 8) & 0xFF;
 
-       cJSON_AddStringToObject(root, "cmd", "post_heart_beat");
+    frame[5+strlen(json_str)]=crc_low;
 
-       cJSON_AddNumberToObject(root, "ts", timestamp);
+    frame[6+strlen(json_str)]=crc_high;
 
-       cJSON_AddStringToObject(root, "msg", "心跳");
+    bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
 
-       cJSON_AddNumberToObject(cmd_data, "battery", psy_info.bat_capacity);
+    bk_printf("the send str is %d ",7+strlen(json_str));
 
-       // cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+    send_iot_message(AI_client_IOT,frame,7+strlen(json_str));
 
-      // }
+    // 释放内存
+    free(json_str);
+    cJSON_Delete(root);
+}
 
 
-     cJSON_AddItemToObject(root, "data", cmd_data);
+void IOT_heart(){
 
+    unsigned char frame[10]={0};
 
+    frame[0]=0xFF;
+    frame[1]=0xFE;
+    frame[2]=0x02;
 
-    // 将 JSON 对象转换为字符串
+    int ret=send_iot_message(AI_client_IOT,frame,3);
 
-    //cJSON_PrintUnformatted
+    if(ret==-1&&AI_client_IOT!=NULL){
 
-    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("发送IOT消息失败");
+         close(AI_client_IOT->sockfd);
 
+         AI_client_IOT=NULL;
 
-    bk_printf(json_str);
+    }
 
+}
 
-   // if(type==4){
+// #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;
+// }
 
-  //  bk_printf("SEND iot_v3 message");
+static void IOT_login(int type)
+{
+   unsigned char frame[200]={0};
 
-    unsigned char frame[500]={0};
+    //0xFFFE
     frame[0]=0xFF;
     frame[1]=0xFE;
-    frame[2]=0x01;
-    frame[3]=0x03;
-
-     // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+    frame[2]=0x00;
 
-     short temp=strlen(json_str);
-    // memcpy(frame+3,&temp,2);
+    memcpy(frame+3,vc_cfg.dev_imei,strlen(vc_cfg.dev_imei));
 
-     frame[7]=temp;
+    memcpy(frame+23,get_token(),strlen(get_token()));
 
-     memcpy(frame+8,json_str,strlen(json_str));
+    uint16_t crc = modbus_crc16(get_token(),strlen(get_token()));
 
-     int ret=send_websocket_message(AI_client_IOT,frame,strlen(json_str)+8,AIC_WEBSOCKET_OPCODE_BINARY_FRAME);
+    uint8_t crc_low = crc & 0xFF;
 
-     // int  ret=send_iot_message(AI_client_IOT,json_str,strlen(json_str));
+    uint8_t crc_high = (crc >> 8) & 0xFF;
 
-     bk_printf("SEND iot_v3 success message: %d",ret);
+    frame[59]=crc_low;
 
-   // }else{
+    frame[60]=crc_high;
 
-    
+    bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
 
-   // }
+    send_iot_message(AI_client_IOT,frame,61);
 
-    // 释放内存
-    free(json_str);
-    cJSON_Delete(root);
 }
 
-#define IOT
 
+ #define IOT
 //连接websocket
 static int websocket_connect_VC(void)
 {
     char *url = NULL;
-
-    char url_iot[200]={0};
     int ret = 0;
     //连接服务器
     if(AI_client_VC == NULL)
@@ -4028,8 +2803,9 @@ static int websocket_connect_VC(void)
             goto CONNECT_RET;
         }
 
-         //provider=coze& 
-         //provider=coze&
+        //provider=coze&
+
+        //provider=coze&
 
         if(vc_cfg.dev_type == DEV_JSWM)
             url_len =snprintf(url,511,"ws://%s/vc/agent?is_auth=1&dt=%s",vc_cfg.server_ip,get_token());
@@ -4037,67 +2813,62 @@ static int websocket_connect_VC(void)
             url_len =snprintf(url,511,"ws://%s/vc/chat?is_auth=1&dt=%s",vc_cfg.server_ip,get_token());
         
         url[url_len] = 0;
+        
         bk_printf("连接服务器 url:%s",url);
         int ws_res_num = get_websocket_res_num();
         bk_printf("WS资源剩余量:%d",ws_res_num);
-
         if(ws_res_num<=0)//资源不够,要释放资源
         {
             free_all_websocket_res();
         }
         
 
-        
+        char *url_socket="iot.socket.thisiot.com:7777";
         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);
 
-            bk_printf(url_iot);
-
-            //  AI_client_IOT = init_websocket_IOT(url_socket,NULL);//  socket_iot
-
-            //  wss://wsiot.raisound.com/iot-api/ws-hub/dev/v1?bz-dt=xxx
-
-            //  ws(s)://wsiot-nocdn.raisound.com/ws-hub/dev/v1?bz-dt=
-#if 1
-            sprintf(url_iot,"ws://wsiot-nocdn.raisound.com/ws-hub/dev/v1?bz-dt=%s",get_token());
-#else
-
-            sprintf(url_iot,"ws://dmp-dev.raisound.com/iot-api/ws-hub/dev/v1?bz-dt=%s",get_token());
-#endif
-
-           AI_client_IOT = init_websocket_IOT_V3(url_iot,NULL);//  ws_iot
- 
-           bk_printf("create AI_client_IOT SUCCESS...\n");
 
            if(AI_client_IOT){
-             bk_printf("IOT读线程 AI_VC_read_IOT_id:%d",AI_VC_read_IOT_id);
-
+           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_IOT_read_task,// AI_VC_IOT_task //AI_IOT_read_task
+              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_IOT_id:%d",AI_VC_read_IOT_id);
+              bk_printf("IOT读线程 AI_VC_read_task_id:%d",AI_VC_read_IOT_id);
             }
             
-            aos_sleep(20);
+            aos_sleep(100);
 
-            // IOT_login(1);
+            IOT_login(1);
 
-           
-            IOT_V3_heart();
+            // 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));
 
@@ -4176,18 +2947,12 @@ static void websocket_deconnect_VC(void)
     //     aic_websocket_delete(AI_VC_client_websocket_handle,5000);
     //     AI_VC_client_websocket_handle = 0;
     // }
-
-    // AI_client_IOT
     if(AI_client_VC)//先断开再关闭读线程
     {
         delete_websocket_res(AI_client_VC);//删除该对象ws资源管控
         close_websocket_client(AI_client_VC);
         AI_client_VC = NULL;
-
-       // AI_client_IOT
     }
-
-  
     //销毁发送线程
     if(AI_VC_send_task_id != 0)
     {
@@ -4483,7 +3248,7 @@ void VC_Play_End(void)
         // AI_VC_play_queue = NULL;
     }
 
-        // app_audio_stop(APP_AUDIO_TYPE_STREAM_DUPLEX, NULL);
+    //app_audio_stop(APP_AUDIO_TYPE_STREAM_DUPLEX, NULL);
 }
 
 static void AI_VC_put_record_data(char *data,u32 len)
@@ -4516,14 +3281,9 @@ static void AI_VC_put_record_data(char *data,u32 len)
         
     return;
 PUT_RECORD_ERROR:
-    if(AI_VC_record_queue_data.data){
-
+    if(AI_VC_record_queue_data.data)
         aic_free(AI_VC_record_queue_data.data);
 
-     //   AI_AMP_MSG_put(0,0,VC_Cancel);
-
-    }
-
 }
 
 
@@ -4533,8 +3293,6 @@ PUT_RECORD_ERROR:
 void VC_record_Start(void)
 {
     bk_printf("VC_record_Start");
-
-    //  is_dialog_status=0;
     //创建录音线程
     if(AI_VC_record_task_id == 0)
     {
@@ -4587,57 +3345,15 @@ void VC_record_End(void)
 }
 static void AI_VC_1S_timeout(void *param)
 {
-  //  bk_msg_printf("AI_VC_1S_timeout 1!!!!!!!!!");
+    //bk_msg_printf("AI_VC_1S_timeout 1!!!!!!!!!");
     if(close_timerout>0)
     {
         close_timerout--;
         if(close_timerout<=0)
         {
-             AI_AMP_MSG_put(0,0,VC_CLOSE);
-             AI_AMP_MSG_put(0,0,CLOSE_IOT);
-        }
-
-        if(VC_state>=VC_State_TTSStart&&VC_state<VC_State_End){
-             
-            tts_start_timerout++;
-
-            if(tts_start_timerout==15)
-            {
-                tts_start_timerout=0;
-
-                AI_AMP_MSG_put(0,0,RANDOM_MT);
-            }
-        }else
-        {
-                 tts_start_timerout=0;
-
+            AI_AMP_MSG_put(0,0,VC_CLOSE);
         }
     }
-
-    if(sleep_chumo_timerout>0)
-    {
-           sleep_chumo_timerout--;
-
-           if(sleep_chumo_timerout<=0&&is_dialog_status==0)
-           {
-              is_dialog_status=1;
-
-              // VC_state = VC_State_End;
-              if(vc_cfg.VC_mode==0||vc_cfg.VC_mode==2)
-                AI_client_VC_synthesis("你好,我要去休息了,唤醒请说你好小七");
-              else{
-                 
-                  AI_AMP_MSG_put(0,0,VC_CLOSE);
-                  // AI_AMP_MSG_put(0,0,CLOSE_IOT);
-
-                  close_timerout=2;
-              }
-              // if()
-           }
-        
-    }
-
-
     if(VC_pingping_timerout>0)
     {
         VC_pingping_timerout--;
@@ -4671,28 +3387,10 @@ static void AI_VC_1S_timeout(void *param)
                 }
                 
             }
-            else{
-
-                if (VC_TTS_PLAY_EVENT == VC_TTS_PLAY_POWER_OFF)
-                {
-                    AI_AMP_MSG_put(0,0,POWER_OFF);
-                }else if (VC_TTS_PLAY_EVENT == VC_TTS_PLAY_RESET)
-                {
-                    AI_AMP_MSG_put(0,0,POWER_RESET);
-                }
-                    VAD_status = 0;
-
-                    ddh_is_close_dialog=0;
-
-                    // AI_AMP_MSG_put(0,0,VC_CLOSE);
-            }
-               
+            else
+                AI_AMP_MSG_put(0,0,VC_CLOSE);
             //AI_AMP_MSG_put(0,0,VC_RECORD_START);//开启录音
-
-           //  AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
-             bk_msg_printf("VC_END_play_timerout=%d",VC_END_play_timerout);
-
-             AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
+            bk_msg_printf("VC_END_play_timerout=%d",VC_END_play_timerout);
         }
     }
     // if(AI_VC_play_queue)
@@ -4711,54 +3409,28 @@ void AI_key_press(void)
 
     //  IOT_update_statu(3,"","");
 
-    //  IOT_heart();
+    IOT_heart();
      
     bk_printf("AI_key_press1");
 
-    IOT_V3_heart();
+    play_file_stream_data("C:/chenggong.pcm");
 
     u64 timer_ms_tmp = aos_get_tickcount();
     if(timer_ms_tmp-timer_ms<1000)//每次触发小于1000ms关闭对话
     {
         if(vc_cfg.VC_mode ==0 || vc_cfg.VC_mode == 2)//关闭服务
-          {
-
-            if(is_dialog_status==0){
-
-                is_dialog_status=1;
-
-                AI_client_VC_synthesis("你好,我要去休息了,唤醒请说你好小七");
-
-             }
-
-          }
-           // AI_VC_Close();
+            AI_VC_Close();
         return;
     }
         
     timer_ms = timer_ms_tmp;
-
-
-    if(vc_cfg.VC_mode == 0&&AI_VC_stata==1&&is_dialog_status==0){
-
-        return ;
-    }else{
-
-       is_dialog_status=0;
-
-    }
-
-    if(vc_cfg.VC_mode == 1)
-       AI_key_long_flag = 1;
-
-    play_file_stream_data("C:/chenggong.pcm");
-   
     bk_printf("AI_key_press");
-
     AI_VC_Close();
-
+   
     VC_state = VC_State_None;
 
+    
+
     VC_record_Start();
     
     if(AI_VC_start(0)==0)
@@ -4774,9 +3446,6 @@ void AI_key_press(void)
 void AI_key_release(void)
 {
 
-
-     AI_key_long_flag = 0;
-
     if(vc_cfg.VC_mode ==1)
     {
         AI_AMP_MSG_put("请您按住按钮讲话,讲完松开即可。",strlen("请您按住按钮讲话,讲完松开即可。"),VC_TTS_PLAY);
@@ -4847,9 +3516,6 @@ int32_t bk_audio_start_callback(void *p_param, uint32_t size)
 char AI_VC_start_lock = 0;
 
 int  net_status_count=0;
-
-extern int dmp_log_level;
-
 //is_greeting,是否播放开场白
 int AI_VC_start(char is_greeting)
 {
@@ -4858,9 +3524,9 @@ int AI_VC_start(char is_greeting)
     if(AI_VC_start_lock == 1)
         goto AI_VC_start_RET;
     AI_VC_start_lock = 1;
-    
-    // 
 
+   // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
+    
     bk_printf("AI_VC_start !!!!!!!! ");
     //play_file_stop();//先关闭一次本地文件音频播放
     VC_state = VC_State_None;
@@ -4893,8 +3559,8 @@ int AI_VC_start(char is_greeting)
     // aic_gpio_output(GPIO_25,GPIO_OUTPUT_LVL_HIGH );//led
     // aic_gpio_output(GPIO_30,GPIO_OUTPUT_LVL_HIGH );//led
     // aic_gpio_output(GPIO_31,GPIO_OUTPUT_LVL_HIGH );//led
-    
-    
+    // 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);
 
@@ -4924,20 +3590,16 @@ int AI_VC_start(char is_greeting)
         
 
         // 启用VAD时初始化
-
         struct VadConfig conf;
         conf.sil_threshold = 63;
-        conf.energy_threshold = 10000;//10000   2000;
+        conf.energy_threshold = 10000;
         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.rule3_min_tailing_silence = vc_cfg.vad_silence;
         conf.vad_log_level = 0;
-        int init_vad_ret = 0;
-
-        conf.auth_info.server_addr=2;
-        
+        int init_vad_ret = 0;
         strcpy(conf.auth_info.dmp_token, get_token());
         static int imsl_nn_init_flag = -1;
         if (imsl_nn_init_flag != 0) {
@@ -4989,9 +3651,8 @@ int AI_VC_start(char is_greeting)
 
     }
 
-    #if BK_SOCKET_IOT
-    IOT_update_statu(1,"listening","");
-    #endif
+
+     IOT_update_statu(1,"listening","");
     net_status_count=0;
     //aos_sleep(5);
     AI_VC_send_satrt(is_greeting);//
@@ -5004,15 +3665,10 @@ AI_VC_start_RET:
         net_status_count++;
         play_audio_file("C:/xinhaoruo1.mp3");
 
-        if(net_status_count>=3){
-
-            play_audio_file("C:/khye.mp3");
-            AI_AMP_MSG_put(0,0,POWER_RESET);
-
-        }
+        if(net_status_count>=3)
+           play_audio_file("C:/khye.mp3");
     }else
         AI_VC_stata = 1;
-        
     return ret;
 }
 char AI_VC_Close_lock = 0;
@@ -5025,17 +3681,10 @@ void AI_VC_Close(void)
     // aic_gpio_output(GPIO_25,GPIO_OUTPUT_LVL_LOW );
     // aic_gpio_output(GPIO_30,GPIO_OUTPUT_LVL_LOW );
     // aic_gpio_output(GPIO_31,GPIO_OUTPUT_LVL_LOW );
-    // aic_gpio_output(MOT_EN_FWD,GPIO_OUTPUT_LVL_LOW );
-    // aic_gpio_output(MOT_EN_REV,GPIO_OUTPUT_LVL_LOW);
+    // aic_gpio_output(GPIO_GPO_8,GPIO_OUTPUT_LVL_LOW );
+    // aic_gpio_output(GPIO_GPO_1,GPIO_OUTPUT_LVL_LOW);
     // aic_gpio_output(GPIO_20,GPIO_OUTPUT_LVL_LOW );
-    #if SUPPORT_MOT
-
-    // MTO_stop();
-    // MTO_restert();
-    // MTO_restert_tb();
-
-    #endif
-
+    
     bk_printf("AI_VC_Close!!!!!!!!!!!!");
     websocket_deconnect_VC();//断开连接
      //销毁录音线程
@@ -5206,15 +3855,13 @@ void AI_VC_Close(void)
         AI_ASR_str =NULL;
     }
     //app_logi("app_audio_stop2");
-
-    VC_state = VC_State_None;
     AI_VC_stata = 0;
     AI_VC_Close_lock = 0;
 
-   // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
+   // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_LOW );//lcd close ldo
     
 }
-int MSG_Type_error = 0; 
+
 aos_status AI_AMP_MSG_put(const char *data,u32 len,AI_AMP_MSG_Type MSG_Type)
 {
     AI_AMP_MSG_queue_t AI_AMP_MSG_queue_data = {0};
@@ -5235,18 +3882,11 @@ aos_status AI_AMP_MSG_put(const char *data,u32 len,AI_AMP_MSG_Type MSG_Type)
     AI_AMP_MSG_queue_data.MSG_Type=MSG_Type;
     if(AI_AMP_task_queue && AOS_SUCCESS!=aos_send_to_queue(AI_AMP_task_queue,&AI_AMP_MSG_queue_data,AOS_NO_WAIT))
     {
-        //bk_msg_printf("AI_AMP_MSG_put :aos_send_to_queue ERROR MSG_Type:%d\n\n",MSG_Type);
-        MSG_Type_error = MSG_Type;
+        bk_printf("AI_AMP_MSG_put :aos_send_to_queue ERROR\n\n");
        if(!AI_AMP_MSG_queue_data.data)
             aic_free(AI_AMP_MSG_queue_data.data);
         return AOS_ERROR;
     }
-    if(MSG_Type_error!=0)
-    {
-        bk_msg_printf("AI_AMP_MSG_put :aos_send_to_queue ERROR MSG_Type:%d\n\n",MSG_Type_error);
-        MSG_Type_error = 0;
-    }
-        
     //bk_msg_printf("AI_AMP_MSG_put2 MSG_Type:%d",MSG_Type);
     return AOS_SUCCESS;
 }
@@ -5262,23 +3902,13 @@ static void sys_60S_timeout(void *param)
 {
    // AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT);
 
-    AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT_IOT);
+   if(AI_client_IOT!=NULL){
 
+       IOT_heart();
 
-    //IOT_heart();
-   
+   }
 }
 
-static void sys_60S_timeout_even(void)
-{
-
-   // bk_printf("sys_60S_timeout_even");
-
-     if(AI_client_IOT!=NULL&&close_timerout>0){
-       IOT_V3_heart();
-     }
-
-}
 
 static void sys_10S_timeout_even(void)
 {
@@ -5330,21 +3960,21 @@ static void sys_10S_timeout_even(void)
         is_Low_power_warning =0;
     }
     chg_status_tmp = psy_info.bat_chg_status;
-    bk_printf("电量查询:psy_name:%s bat_vol:%d bat_cap:%d chg_status%d chg_type:%d bat_min_voltage:%d bat_max_voltage:%d\n",
-
-            psy_info.psy_name,
-            psy_info.bat_current_voltage,
-            psy_info.bat_capacity,
-            psy_info.bat_chg_status,
-            psy_info.bat_chg_type,
-            psy_info.bat_min_voltage,
-            psy_info.bat_max_voltage);
-   // tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"当前电量为百分之%d。",psy_info.bat_capacity);
+    // bk_printf("电量查询:psy_name:%s bat_vol:%d bat_cap:%d chg_status%d chg_type:%d bat_min_voltage:%d bat_max_voltage:%d\n",
+
+    //         psy_info.psy_name,
+    //         psy_info.bat_current_voltage,
+    //         psy_info.bat_capacity,
+    //         psy_info.bat_chg_status,
+    //         psy_info.bat_chg_type,
+    //         psy_info.bat_min_voltage,
+    //         psy_info.bat_max_voltage);
+    //tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"当前电量为百分之%d。",psy_info.bat_capacity);
 }
 
  // extern char *ota_url;
 
- //const char *bk_make_timer = "V1_2_250730_8";
+ const char *bk_make_timer = "V1_2_250735_2";
 
 void play_tts_my_local(char *filename)
 {
@@ -5352,261 +3982,24 @@ void play_tts_my_local(char *filename)
     play_audio_file_event(filename);
 }
 
-
-//void  send_express_str(char *exp_str){
-
-   //  texts = ["neutral","happy","laughing","funny","sad","angry",
-   //                  "crying","loving","embarrassed","surprised","shocked","thinking",
-   //                 "winking","cool","relaxed","","confused",""]
-
- ///  happy 🙂
-//cue 😸
-//surprised 😲
-//angry 😠
-//crying 😭
-//smirk😏
-//dissatisfied😒
-
-int random_mada=0;
-
-int chumo_tickcount=0;
-
-u8 count_chumo_index[3][2]={0,0,0,0,0,0};
-
-char  *str_huashu[3][2][5]={
-    {{"摸我的头干嘛,是不是觉得我很可爱呀?不过我可是很酷的哦!",
-        "喂!摸我脑袋干嘛?小心我咬你哦~",
-        "“嘿嘿,手感是不是很好?限时体验,不退不换~","",""},
-        {"行吧行吧,就再让你摸3秒,多一秒都算我输!",
-            "唔… 别摸啦,头发都要被你弄乱了!","","",""}},
-{{"干嘛?想搭讪啊?可惜本小七可不是这么容易被收买的~",
-    "干嘛碰我肚子?痒死啦!","“扫描完成!结果是……你对我百分之百上瘾!","",""},
-    {"喂喂喂,摸够了没?再摸我可要吐槽你了——你这手法比我奶揉面还粗糙!",
-        "嗯… 舒服是舒服啦,但别一直摸嘛!","别以为我好哄~只是你刚好摸到舒服的点而已。",
-        "嘘——别动,我在检测你的‘快乐值’。",""}},
-{{"偷袭?胆子挺肥啊!信不信我反手给你个‘暴击’(口头版)!",
-    "再戳我一次,我就反击——用笑声攻击你!","","",""},
-    {"别挠了别挠了!再挠我可要破功了…(小声)其实也还行啦","唔… 别摸我后背!我可是要去冒险的,别耽误我!","","",""}}
-};
-
-void random_chumo(int type,int mode){
-
-    // mot_nod_status();
-
-    // play_file_stream_data("C:/chumo.pcm");
-    // return ;
-
-
-
-    int currenttick=aos_get_tickcount();
-
-    if(currenttick-chumo_tickcount<6000){
-
-        bk_printf("太频繁.....\n");
-
-        return ;
-    }
-    chumo_tickcount=currenttick;
-
-     //  is_dialog_status
-
-     //  is_dialog_status=0;
-
-     // ||is_dialog_status==1
-    
-    //if((VC_state==VC_State_Listening&&VAD_status==0)||VC_state==VC_State_End)  //||VC_state==VC_State_None
-   // {
-
-
-         bk_printf("VC_state11 %d.....\n",VC_state);
-         // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-
-         if(type==0&&mode==0)
-           play_file_stream_data("C:/chumo.pcm");
-
-
-         int index_temp=count_chumo_index[type][mode];
-
-          if(index_temp<5)
-          {
-                 app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-
-                 AI_AMP_MSG_put(str_huashu[type][mode][index_temp],strlen(str_huashu[type][mode][index_temp]),VC_TTS_PLAY);
-
-                 is_dialog_status=0;
-          }
-
-         // AI_client_VC_synthesis(str_huashu[type][mode][index_temp]);
-
-          count_chumo_index[type][mode]++;
-
-          if(strlen(str_huashu[type][mode][index_temp+1])<5)
-              count_chumo_index[type][mode]=0;
-            
-                           // aic_free(AI_TTS_str);
-                          //  AI_TTS_str = NULL;
-          VC_state = VC_State_TTSStart;
-          //  play_audio_file("C:/chumo.mp3");
-
-         //  return ;
-   // }else{
-
-   //      bk_printf("VC_state22 %d.....\n",VC_state);
-
-   //      return ;
-  // }
-
-    // if(VC_Play_flag!=1){
-
-    //     // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-    //      play_audio_file("C:/chumo.mp3");
-
-    //      bk_printf("chumo.mp3.....\n");
-        
-
-    // }else{
-
-    //    // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-    //     bk_printf("duihuazhong.....\n");
-  
-    //      return ;
-
-    // }
-
-    send_express_str_chumo(type,mode);
-
-    return ;
-
-    // if(chumo_exp_open==1){
-
-    //    random_mada++;
-
-    // if(random_mada==1){
-    //    send_express_str("happy");
-    // }
-    // if(random_mada==2){
-    //    send_express_str("cue");
-    // }
-    // if(random_mada==3){
-    //    send_express_str("surprised");
-    // }
-    // if(random_mada==4){
-    //    send_express_str("angry");
-    // }
-    // if(random_mada==5){
-    //    send_express_str("crying");
-    // }
-    // if(random_mada==6){
-    //    send_express_str("smirk");
-    // }
-    // if(random_mada==7){
-    //    send_express_str("dissatisfied");
-    // }
-
-    // if(random_mada==7)
-    //    random_mada=0; 
-
-    // }
-
-    //  aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-
-}
  #define exptest
 
-
-void bk_task_suspend(void *p)
-{
-   // bk_printf("idle cpu sleep");
-
-   aic_gpio_input(GPIO_AGPIO_1, GPIO_INPUT_NOINT, NULL, NULL);
-
-}
-
-void bk_task_resume(void *p)
-{
-
-    // bk_printf("cpu work");
-
-}
-
-
-extern imsl_nn_printf_func imsl_nn_printf;
-
 int auth_vad_status=0;
-
-int auth_kws_status=0;
-
-static void uart_recv_UI_handel(void *thread_input)
-{
-     size_t read;
-     char buf_ui[20];
-    //uart_data_t *data;
-
-    /**
-     * 1.Com number is aic_uart array index, aic_uart at aicos\projects\xxx\config\serial\serial_config.h;
-     * 2.use aic_uart[index] parameter to set serial.
-       */
-     //  serial_handle = uart_open(LOOPBACK_COM);
-     //  aic_assert(serial_handle);
-     bk_printf("uart_recv_UI_handel start");
-
-    if(!ui_uart_handle)
-       return ;
-
-    bk_printf("uart_recv_UI_handel start01");
-    /* change baudrate */
-   //  uart_set_baud_rate(serial_handle, LOOPBACK_BANDRATE);
-
-    while(1) {
-        /* read data. */
-        // buf = aic_malloc(20);
-
-         read = uart_read(ui_uart_handle, buf_ui, 20);
-
-         bk_printf("uart_recv_UI_handel start02 %d",read);
-
-         bk_printf("uart_recv %02X %02X %02X %02X %02X %02X %02X ...\n",buf_ui[0],buf_ui[1],buf_ui[2],buf_ui[3],buf_ui[4],buf_ui[5],buf_ui[6]);
-
-         if (read == 0 || read > 20) {
-           // drv_logw("uart_recv: err size = (%d)!\n", read);
-          //  aic_dma_free(buf);
-           // continue;
-        }
-
-        //  drv_logi("uart_recv: read size = (%d)!\n", read);
-
-        //  data = aic_malloc(sizeof(*data));
-        //  data->addr = buf;
-        //  data->size = read;
-        //  aos_send_to_queue(uart_queue_id, (void*)&data, AOS_WAIT_FOREVER);
-    }
-
-
-        bk_printf("uart_recv_UI_handel close ");
-
-    /* close uart. */
-    // uart_close(ui_uart_handle);
-}
-
-
 static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 {
-     char count = 20;
+     char count = 30;
      boolean pdp_activated ;
      AI_AMP_MSG_queue_t AI_AMP_msg = {0};
     
      init_VC_cfg();
-
-
-     imsl_nn_printf = bk_printf;
-
+   
      app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
 
      aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
 
-     // GPIO_AGPIO_1
-
+  //  aos_sleep(20000);
      play_audio_file_event("C:/R_POWER_1.mp3");
+  //  aos_sleep(20000);
 
      // play_audio_file("C:/R_POWER_1.mp3");
 
@@ -5619,48 +4012,10 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
      // http://dmp-ota.tos-cn-guangzhou.volces.com/ota/2025_07_24/1948312805093978114gx306l_h3.diff
 
-      bk_printf("FXH01_Version:%s",FXH01_Version);
-      bk_printf("FXH01_Version:%s",FXH01_Version);
-      bk_printf("FXH01_Version:%s",FXH01_Version);
-
-    //slp_register_sleep_hook(bk_task_suspend, AIC_NULL,
-    //                        bk_task_resume, AIC_NULL);
-
-
-   // snd_soc_component_write(codec, ES8311_ADC_REG17, es8311->adc_volume);
-  //  snd_soc_component_write(codec, ES8311_DAC_REG32, es8311->dac_volume);
-
-   //  aos_sleep(1000);
-
-    while(count --)
-    {
-        pdp_activated = aic_is_default_pdp_activated();
-        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);
-    }
-
+    bk_printf("FXH01_Version:%s",FXH01_Version);
+    bk_printf("FXH01_Version:%s",FXH01_Version);
+    bk_printf("FXH01_Version:%s",FXH01_Version);
 
-    if(pdp_activated){
-
-        bk_printf("AI_AMP_2_5_init 入网成功..... \n");
-
-    }else{
-
-     bk_printf("AI_AMP_2_5_init 第一次入网失败..... \n");
-     aic_send_cfun_cmd(0);
-     aos_sleep(500);
-
-     aic_send_cfun_cmd(1);
-
-     aos_sleep(500);
-
-     count=20;
 
     while(count --)
     {
@@ -5669,12 +4024,10 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
             break;
         bk_printf("AI_AMP_2_5_init 等待注网..... \n");
 
-        // audio_play_tone(count%15,500);//播放提示音,测试用
-        // audio_play_tone(3,500);//播放提示音,测试用
+        //audio_play_tone(count%15,500);//播放提示音,测试用
+        //audio_play_tone(3,500);//播放提示音,测试用
 
         aos_sleep(1000);
-     }
-
     }
 
     bk_websocket_demo();
@@ -5700,8 +4053,6 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
     // aos_sleep(5000);
 
-   
-
     ota_update_version();
 
     // if(strlen(ota_url)>3){
@@ -5709,6 +4060,7 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
     dev_authentication_init();
 
+
     count =50;
     while(count --)
     {
@@ -5722,25 +4074,14 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
     if(sys_10S_timer == NULL)
     {
-        sys_10S_timer = aos_create_timer("AI_VC_10S_timer",
+        sys_10S_timer = aos_create_timer("AI_VC_1S_timer",
             sys_10S_timeout, &sys_10S_timer,
             10000,
             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,
-            50000,
-            AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
-        aic_assert(AI_VC_60S_timer);
-    }
-    
-
-    // AI_VC_60S_timer
+   // AI_VC_60S_timer
     // if(AI_VC_60S_timer == NULL)
     // {
     //     AI_VC_60S_timer = aos_create_timer("AI_VC_60S_timer",
@@ -5753,85 +4094,42 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
      bk_printf("auth_vad token0: %s..... \n",get_token());
      struct AuthInfo auth_info;
 
-     // dmp_log_level = 10086;
-
-     //  auth_info.server_addr=2;
-
      strcpy(auth_info.dmp_token, get_token());
 
     if(strlen(auth_info.dmp_token)>0){
     
-        for(int i=0;i<40;i++){
-
+        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());
+            bk_printf("auth_vad  fail token: %s..... \n",get_token());
 
-            }
-            else
-            {
+        }else{
 
-                bk_printf("auth_vad  success token: %s..... \n",get_token());
+            bk_printf("auth_vad  success token: %s..... \n",get_token());
             
-                auth_vad_status=1;          
-
-                break;
-
-           }
-
-              aos_sleep(100);
+            auth_vad_status=1;
+            break;
 
         }
 
-        for(int i=0;i<40;i++){
-
-            int ret=auth_kws(&auth_info);
-
-            if(ret==0){
-
-                bk_printf("auth_kws  fail token: %s..... \n",get_token());
-
-            }
-            else
-            {
-
-                bk_printf("auth_kws  success token: %s..... \n",get_token());
-            
-                auth_kws_status=1;          
-
-               break;
-
-           }
-
-              aos_sleep(100);
-
         }
+    }else{
 
-        bk_printf("auth_vad_status: %d auth_kws_status %d..... \n",auth_vad_status,auth_kws_status);
-
-        if(auth_vad_status==0||auth_kws_status==0)
-        {
-
-             // play_audio_file_event("C:/xinhaoruo1.mp3");
-
-             //   aos_sleep(500);
+        play_audio_file_event("C:/xinhaoruo1.mp3");
+    }
+    if(auth_vad_status==0){
 
-        }
+          play_audio_file_event("C:/xinhaoruo1.mp3");
 
-    }
-    else
-    {
+          aos_sleep(2000);
 
-            //   play_audio_file_event("C:/xinhaoruo1.mp3");
     }
 
-    
-
 #ifdef exptest
 
-     aos_sleep(500);
+     aos_sleep(5000);
 
      ui_uart_handle = uart_open(2);
 
@@ -5843,7 +4141,7 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
         // uart_write(ui_uart_handle,"123", strlen("123"));
 
-         u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
+         u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
 
          uart_write(ui_uart_handle,cmd_ui, 7);
 
@@ -5853,34 +4151,17 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
 
      }
 
-            if(UI_UART_read_id == 0)
-            {
-              UI_UART_read_id = aos_create_thread(
-              "UI_UART_read",
-              uart_recv_UI_handel,// AI_VC_IOT_task,//AI_IOT_read_task
-              &UI_UART_read_id,
-              4096u,
-              0,
-              NULL,
-              ai_VC_task_priority,
-              AOS_AUTO_START);
-              bk_printf("uart 读线程 UI_UART_read_id:%d",UI_UART_read_id);
-            }
-
-
-#endif
-#if BK_SOCKET_IOT
-    bk_iot_init();//iot初始化
 #endif
+  
+
     aic_network_enable_pdp_nic_capdump();//打开网络调试log
     
     // while(1)
     // {
-    //     aos_sleep(1000);
+        
     // }
- #if SUPPORT_MOT
-    mot_init();
-#endif
+ 
+
     if(vc_cfg.dev_type == DEV_JSWM)//金三完美使用dmp配置开场白
     {
         AI_VC_start(1);
@@ -5889,9 +4170,6 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
         VC_TTS_Play(vc_cfg.power_on_tone);//开启vc播放tts
     }
     
-
-   
-
     while (1) {
         if(AI_AMP_task_queue)
         {
@@ -5919,40 +4197,16 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
                     //发送打断
                     //AI_VC_send_cancel();//发送打断,发送完打断还有发开始音频
                     //app_logi("interruption!!!!!!!!!!!!!!!!!!!!!");
-
-                    is_dialog_status=0;
-
                     VC_Play_End();
                     VC_state = VC_State_None;
                     websocket_deconnect_VC();
                     websocket_connect_VC();//重连
                     AI_VC_send_satrt(0);//发送开始
-
-                    AI_AMP_MSG_put(0,0,VC_PLAY_START);//打开声音
                     
                     
                     break;
                 case VC_CLOSE:
                     AI_VC_Close();
-                    break;
-                case CLOSE_IOT:           
-
-                    if(AI_client_IOT)//先断开再关闭读线程
-                    {
-                      delete_websocket_res(AI_client_IOT);//删除该对象ws资源管控
-                      close_websocket_client(AI_client_IOT);
-                      AI_client_IOT = NULL;
-                      AI_VC_read_IOT_id=0;
-
-                      bk_printf("CLOSE_IOT");
-                       // AI_client_IOT
-                    }
-
-                    break;
-                case RANDOM_MT:           
-            
-                    random_statu_mot();
-
                     break;
                 case VC_START:
                     AI_VC_start(0);
@@ -6005,8 +4259,6 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
                     break;
                 case AI_KEY_PRESS:
                     
-                 //   is_dialog_status=0;
-
                     AI_key_press();
                     break;
 
@@ -6031,75 +4283,11 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
                 case AI_TIMER_EVENT:
                     sys_10S_timeout_even();
                     break;
-                case AI_TIMER_EVENT_IOT:
-                     sys_60S_timeout_even();
-                    break;
                     
                 case AI_PRINTF:
                     if(AI_AMP_msg.data)
                     uart_write(ai_uart_handle,AI_AMP_msg.data, AI_AMP_msg.len);
                     break;  
-                case AI_KEY2_RELEASE:
-                  //  bk_printf("AI_KEY2_RELEASE");
-
-                   // mot_nod_status();
-                    if(AI_VC_stata==1)
-                       random_chumo(2,0);
-                   // #if SUPPORT_MOT
-                   // mot_nod(5);
-                   // #endif
-                    break;
-                case AI_KEY3_RELEASE:
-                    bk_printf("AI_KEY3_RELEASE");
-                    // #if SUPPORT_MOT
-                    // mot_nod(5);
-                    // #endif
-                   if(AI_VC_stata==1)
-                     random_chumo(0,0);
-                   break;
-                case AI_KEY4_RELEASE:
-                    bk_printf("AI_KEY4_RELEASE");
-                   // #if SUPPORT_MOT
-                   // mot_nod(5);
-                  //  #endif
-                  if(AI_VC_stata==1)
-                     random_chumo(1,0);
-                   break;
-                case AI_KEY2_LONG_PRESS:
-                    bk_printf("AI_KEY2_LONG_PRESS");
-                   // #if SUPPORT_MOT
-                   // mot_nod(5);
-                   //  #endif
-                   if(AI_VC_stata==1)
-                      random_chumo(2,1);
-
-                    break;
-                case AI_KEY3_LONG_PRESS:
-                    bk_printf("AI_KEY3_LONG_PRESS");
-                   // #if SUPPORT_MOT
-                   // mot_nod(5);
-                  //  #endif
-                  if(AI_VC_stata==1)
-                   random_chumo(0,1);
-                   break;
-                case AI_KEY4_LONG_PRESS:
-                    bk_printf("AI_KEY4_LONG_PRESS");
-                    // #if SUPPORT_MOT
-                    // mot_nod(5);
-                    //  #endif
-                if(AI_VC_stata==1)
-                   random_chumo(1,1);
-                   break;  
-                case MOT_GPIO_HANDLE_CB:
-                    
-                    mot_gpio_handle_cb(AI_AMP_msg.data);
-                    break;
-                    
-             case AI_MOT_BACK_MID:
-                    
-                    back_middle_statu_mot();
-                    break;  
-                    
                 default:
                     break;
             }
@@ -6107,7 +4295,7 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
                 aic_free(AI_AMP_msg.data);
         }else
         {
-                aos_sleep(10);
+            aos_sleep(10);
         }
             
         
@@ -6135,7 +4323,7 @@ int AI_AMP_2_5_init(void)
             sizeof(AI_AMP_MSG_queue_t),
             200);
     }
-    
+    bk_key_init();
     AI_AMP_task_id = aos_create_thread(
         "AI_AMP_2_5",
         AI_AMP_2_5_task,
@@ -6145,8 +4333,7 @@ int AI_AMP_2_5_init(void)
         NULL,
         ai_VC_task_priority,
         AOS_AUTO_START);
-    bk_key_init();
-    
+
     return AIC_SUCCESS;
 }
  
index 1d08871..a4ac9e2 100644 (file)
@@ -1,16 +1,12 @@
 #include "aic_osa.h"
 
 #define SUPPORT_OPUS 1
-#define SUPPORT_MOT 1 //马达驱动
-#define BK_SOCKET_IOT 0
-
 #define  BK_LOG_NONE 0//不打印
 #define BK_LOG_UART 1//串口打印
 #define BK_LOG_USB 2//USB打印
 
-// 
 
-#define BK_LOG_CFG BK_LOG_USB
+  #define BK_LOG_CFG BK_LOG_USB
 
 typedef enum 
 {
@@ -79,25 +75,11 @@ typedef enum AI_AMP_MSG
     AI_KEY_RELEASE,//AI键释放
     AI_KEY_LONG_PRESS,//AI键长按
     AI_KEY_LONG_RELEASE,//AI键长按释放
-    AI_KEY2_PRESS,//KEY2
-    AI_KEY3_PRESS,//KEY2
-    AI_KEY4_PRESS,//KEY2
-    AI_KEY2_RELEASE,
-    AI_KEY3_RELEASE,
-    AI_KEY4_RELEASE,
-    AI_KEY2_LONG_PRESS,
-    AI_KEY3_LONG_PRESS,
-    AI_KEY4_LONG_PRESS,
     PWK_KEY_RELEASE,//侧键
     PLAY_AUDIO_FILE,//播放本地音频文件
     PLAY_FILE_STREAM_DATA,//播放本地文件,用音频流的方式
     AI_TIMER_EVENT,//定时器事件
-    MOT_GPIO_HANDLE_CB,
     AI_PRINTF,//打印
-    AI_TIMER_EVENT_IOT,//定时器事件
-    AI_MOT_BACK_MID,
-    CLOSE_IOT,
-    RANDOM_MT,
 } AI_AMP_MSG_Type;
 typedef struct
 {
@@ -139,7 +121,6 @@ typedef struct
     char *data;
     u32 len;
 }AI_VC_audio_queue_t;
-uint16_t modbus_crc16(const uint8_t *data, uint16_t length) ;
 
 int AI_VC_start(char is_greeting);
 void AI_VC_Close(void);
@@ -153,4 +134,6 @@ int save_VC_cfg(void);
 int play_audio_file(char *file_name);
 void AI_VC_put_play_data(char *data,u32 len);//音频数据入队播放
 
-int bk_get_iccid(char *iccid);
\ No newline at end of file
+void IOT_update_statu(int type,char *type_str,char *content);
+
+void IOT_heart();
\ No newline at end of file
index 27346ec..0ed5dfa 100644 (file)
@@ -11,8 +11,6 @@ aic_library_sources_ifdef(
     ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/bk_key.c
     ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/dev_authentication.c
     ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/bk_opus_coder.c
-    ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/bk_iot.c
-    ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/mot_dev.c
 
 
 )
index 9552a8a..203d896 100644 (file)
 #include "alog_api.h"  
 #include "pwr_key.h"
 #include "sysoff.h"
-#include "gpo_inc.h"
-#include <gpio_inc.h>
-#define TP_POWER_EN GPO_0
+
+
 #define LOG_MODULE    AMOD_KPC
 
 
 
+
+
+
 static int32_t bk_kpc_callback(void *p_param, uint32_t size)
 {
     kpc_key_array_t *key_arr = (kpc_key_array_t *)p_param;
@@ -26,81 +28,35 @@ static int32_t bk_kpc_callback(void *p_param, uint32_t size)
     }
 
     for (int i = 0; i < KPC_KEY_PRESSED_MAX_KEY_NUM; i++) {
-          //   bk_printf("bk_kpc_callback key[%d].key_value=%d",i,key_arr->key[i].key_value);
+        bk_printf("bk_kpc_callback key[%d].key_value=%d",i,key_arr->key[i].key_value);
         switch (key_arr->key[i].key_event) {
             case KPC_KEY_EVENT_PRESS://按下
-                
-                //    bk_printf("[%x]testkey123",key_arr->key[i].key_value);
-
-               //  bk_printf("[%x]testkey123",key_arr->key[i].);
-                if (key_arr->key[i].key_value == 0) {  //AI键
+                // bk_printf("[%d]AI_key_press",key_arr->key[i].key_value);
 
-                   //  bk_printf("00000000000");
+                if (key_arr->key[i].key_value == 0) {//AI键
                     AI_AMP_MSG_put(0, 0, AI_KEY_PRESS);
-                  //  bk_printf("[%d]AI_key_press",key_arr->key[i].key_value);           
-
                 }else if(key_arr->key[i].key_value == 1) {//AI键
-                   //  bk_printf("111111111");
+                    
                     AI_AMP_MSG_put(0, 0, AI_KEY_PRESS);
-                }else if(key_arr->key[i].key_value == 2) {//按键2键
-                    // bk_printf("222222");
-                    AI_AMP_MSG_put(0, 0, AI_KEY2_PRESS);
-                }else if(key_arr->key[i].key_value == 4) {//按键2键
-                   //  bk_printf("222222");
-                    AI_AMP_MSG_put(0, 0, AI_KEY2_PRESS);
-                }else if(key_arr->key[i].key_value == 5) {//按键2键
-                   //  bk_printf("222222");
-                    AI_AMP_MSG_put(0, 0, AI_KEY3_PRESS);
-                }else if(key_arr->key[i].key_value == 6) {//按键2键
-                    // bk_printf("222222");
-                    AI_AMP_MSG_put(0, 0, AI_KEY4_PRESS);
                 }
                 break;
             case KPC_KEY_EVENT_RELEASE://释放
-
-               //  bk_printf("KPC_KEY_EVENT_RELEASE");
-
                 if (key_arr->key[i].key_value == 0) {//AI键
                     AI_AMP_MSG_put(0, 0, AI_KEY_RELEASE);
                 }else if(key_arr->key[i].key_value == 1) {//AI键
                     
                     AI_AMP_MSG_put(0, 0, AI_KEY_RELEASE);
-                }else if(key_arr->key[i].key_value == 4) {//
-
-                     AI_AMP_MSG_put(0, 0, AI_KEY2_RELEASE);
+                }else if(key_arr->key[i].key_value == 2) {//
 
-                }else if(key_arr->key[i].key_value == 5) {//
-
-                     AI_AMP_MSG_put(0, 0, AI_KEY3_RELEASE);
-
-                }else if(key_arr->key[i].key_value == 6) {//
-
-                    AI_AMP_MSG_put(0, 0, AI_KEY4_RELEASE);
                 }
-
                 
                 break;
-
             case KPC_KEY_EVENT_LONGKEY://长按
-
-                bk_printf("KPC_KEY_EVENT_LONGKEY");
                 if (key_arr->key[i].key_value == 0) {//AI键
                     AI_AMP_MSG_put(0, 0, AI_KEY_LONG_PRESS);
                 }else if(key_arr->key[i].key_value == 1) {//AI键
                     
                     AI_AMP_MSG_put(0, 0, AI_KEY_LONG_PRESS);
-                }else if(key_arr->key[i].key_value == 5) {//AI键
-                    
-                      AI_AMP_MSG_put(0, 0, AI_KEY3_LONG_PRESS);
-                      
-                }
-                else if(key_arr->key[i].key_value == 6) {//AI键
-                    
-                      AI_AMP_MSG_put(0, 0, AI_KEY4_LONG_PRESS);
-
-                }else if(key_arr->key[i].key_value == 4) {//AI键
-                    
-                      AI_AMP_MSG_put(0, 0, AI_KEY2_LONG_PRESS);
                 }
                 break;
 
@@ -111,7 +67,7 @@ static int32_t bk_kpc_callback(void *p_param, uint32_t size)
                     AI_AMP_MSG_put(0, 0, AI_KEY_LONG_RELEASE);
                 }
                 else if(key_arr->key[i].key_value == 2) {//PWK键
-                    //AI_AMP_MSG_put(0, 0, PWK_KEY_RELEASE);
+                    AI_AMP_MSG_put(0, 0, PWK_KEY_RELEASE);
                 }
 
                 // bk_printf("[%d]AI_key_long_press",key_arr->key[i].key_value);
@@ -122,7 +78,7 @@ static int32_t bk_kpc_callback(void *p_param, uint32_t size)
                 break;
         }
     }
-   // bk_printf("\n");
+    bk_printf("\n");
  
     return 0;
 
@@ -160,8 +116,6 @@ void bk_to_ups_sync(void *ptr)
 {
     // gx_ups_phy_from_rtc();
     AI_AMP_MSG_put(0, 0, VC_CLOSE);
-    //aos_sleep(1000);
-    AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
     // gx_ups_phy_cnt_clr();
     play_audio_file("C:/zhengzaiguanji.mp3");
     bk_msg_printf("bk_to_ups_sync");
@@ -171,10 +125,7 @@ void bk_to_ups_sync(void *ptr)
 void bk_key_init(void)
 {
     // bk_printf("开始初始化按键模块\n"); 不注释掉就卡住没日志
-    aic_gpo_output(TP_POWER_EN,GPO_OUTPUT_HIGH );//tp电源
-
-   // aic_gpo_output(GPO_13,GPO_OUTPUT_LOW);//tp电源
-
+    
     int32_t handle = aic_srv_kpc_register("app", bk_kpc_callback);
     if (handle < 0) {
         alog_error("Failed to register KPC callback\n");  // 使用 alog_error 输出错误信息
index 26f663c..0764a00 100644 (file)
@@ -278,7 +278,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
             /**********1阶段判断头********** */
             if(ogg_hend_len==0)//没有剩余的头数据
             {
-              //  bk_printf("ogg_hend_len123:%d",ogg_hend_len);
+               // bk_printf("ogg_hend_len123:%d",ogg_hend_len);
 
               //  bk_printf("bk_rb_data_len:%d",bk_rb_data_len(OPUS_decoder_rb_data));
                
@@ -295,7 +295,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
             {
                 if(bk_rb_data_len(OPUS_decoder_rb_data)< seg_num)//判断可读数据够不够
                 {
-                  //  bk_printf("算页大小数据不够,退出当前解包:seg_num %d",seg_num);
+                    bk_printf("算页大小数据不够,退出当前解包:seg_num %d",seg_num);
                     break;
                 }
                     
@@ -327,11 +327,11 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
                 }
                 break;
             }
-          //  bk_printf("整页数据大小:%d",seg_size);
+           // bk_printf("整页数据大小:%d",seg_size);
             /************3阶段读完整包****************** */
             if(bk_rb_data_len(OPUS_decoder_rb_data)< seg_size)//判断可读数据够不够
             {
-                  //  bk_printf("读整页数据大小不够,退出当前解包:seg_size %d,ogg_hend_len:%d",seg_size,ogg_hend_len);
+                //    bk_printf("读整页数据大小不够,退出当前解包:seg_size %d,ogg_hend_len:%d",seg_size,ogg_hend_len);
 
                     break;
             }
@@ -370,7 +370,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
                             dec_inparam.outbuffer_size = 4096;
                             ret = aic_opus_decode(&dec_inparam);
                             
-                            // bk_printf("opus解码 输入大小:%d,输出大小:%d", frame_length,dec_inparam.outputfrms_size);
+                         //    bk_printf("opus解码 输入大小:%d,输出大小:%d", frame_length,dec_inparam.outputfrms_size);
 
                             opus_encode_len++;
 
@@ -390,7 +390,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
 
                             AI_VC_put_play_data(pcm_buf,dec_inparam.outputfrms_size);//发送数据到音频队列
 
-                           // audio_data(pcm_buf,dec_inparam.outputfrms_size,24);
+                            audio_data(pcm_buf,dec_inparam.outputfrms_size,24);
 
                             //aos_sleep(1);
                             aic_free(pcm_buf);
@@ -400,7 +400,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
 
                    // bk_printf("opus解码 输入大小:%d,输出大小:%d", frame_length,dec_inparam.outputfrms_size);
 
-               // bk_printf("ogg-opus解码 输入数据大小:%d,输出数据大小:%d,耗时:%d ms",input_tmp_len,ooutput_tmp_len,aos_get_tickcount()-timer_ms );
+             //   bk_printf("ogg-opus解码 输入数据大小:%d,输出数据大小:%d,耗时:%d ms",input_tmp_len,ooutput_tmp_len,aos_get_tickcount()-timer_ms );
 
                   
                 // opus_decode_len+=ooutput_tmp_len;
@@ -429,6 +429,7 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
     #endif
        return 0;
 }
+
 int my_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
 {
     int data_count = 0;
@@ -462,17 +463,17 @@ int my_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
                             dec_inparam.outbuffer_size = 1920;
                             ret = aic_opus_decode(&dec_inparam);
                             
-                            //  bk_printf("opus解码 输入大小:%d,输出大小:%d", in_ogg_data_len,dec_inparam.outputfrms_size);
+                            bk_printf("opus解码 输入大小:%d,输出大小:%d", in_ogg_data_len,dec_inparam.outputfrms_size);
 
                             opus_encode_len++;
 
                             if (ret == OPUS_RESULT_ERROR) {
                                 bk_printf("opus解码  error:%d", ret);
+                                //bk_printf("ogg data:");
 
-                                //  bk_printf("ogg data:");
-                                //  audio_data(ogg_buf,27+seg_num+seg_size,27);
-                                //  bk_print_hex(ogg_buf,27+seg_num+seg_size);
+                               //  audio_data(ogg_buf,27+seg_num+seg_size,27);
 
+                                //   bk_print_hex(ogg_buf,27+seg_num+seg_size);
                                 aic_free(pcm_buf);
                                // break;
                             }
@@ -482,7 +483,7 @@ int my_opus_decode_data(char *in_ogg_data,int in_ogg_data_len)
 
                             AI_VC_put_play_data(pcm_buf,dec_inparam.outputfrms_size);//发送数据到音频队列
 
-                           //  audio_data(pcm_buf,dec_inparam.outputfrms_size,24);
+                            // audio_data(pcm_buf,dec_inparam.outputfrms_size,24);
 
                             // aos_sleep(1);
 
index 4220e30..8fc76dd 100644 (file)
@@ -8,4 +8,5 @@ int ogg_opus_decode_data(char *in_ogg_data,int in_ogg_data_len);
 
 int my_opus_decode_data(char *in_ogg_data,int in_ogg_data_len);
 
+
 #endif
index 2dbcd22..93e3cd6 100644 (file)
@@ -429,10 +429,120 @@ send_websocket_message_ERROR:
 }
 
 
+// 发送 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;
+// char frame_t[20] = {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) {
@@ -783,7 +893,118 @@ client_ERROR:
 }
 
 
+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)
@@ -957,357 +1178,3 @@ client_ERROR:
     return -1;
 }
 
-WebSocketClient *init_websocket_IOT_V3(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_client 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 )
-    //if( getaddrinfo( "www.baidu.com", "80", &hints, &addr_list ) != 0 )
-    {
-        bk_printf("init_websocket_client getaddrinfo error");
-        goto client_ERROR;
-    }
-
-    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;
-        }
-
-        if( connect( client->sockfd , cur->ai_addr,  (int)cur->ai_addrlen ) == 0 )
-        {
-            
-            break;
-        }
-
-        close( client->sockfd  );
-        
-        
-    }
-    freeaddrinfo(addr_list);  // 释放资源
-    if(client->sockfd<0)
-    {
-        bk_printf("init_websocket_client connect error");
-        goto client_ERROR;
-    }
-    
-    bk_printf("init_websocket_client 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;
-//     }
-
-
-    strcpy(client->host, parsed_url.host);
-    strcpy(client->path, parsed_url.path);
-    strcpy(client->query, parsed_url.query);
-    client->port = parsed_url.port;
-    if (send_handshake(client,headers) < 0) { //发送头
-        close(client->sockfd);
-        goto client_ERROR;
-    }
-
-    bk_printf("Received handshake response11");
-    buffer=aic_zalloc(BUFFER_SIZE);
-    ssize_t bytes_received = recv(client->sockfd, buffer, BUFFER_SIZE - 1, 0);
-
-     bk_printf("Received handshake response22 %d,",bytes_received);
-    if (bytes_received > 0) {
-        buffer[bytes_received] = '\0';
-        bk_printf("Received handshake response:\n%s\n", buffer);
-    }
-    if(strstr(buffer,"HTTP/1.1 101") == NULL)
-    {
-        
-        goto client_ERROR;
-    }
-    aic_free(buffer);
-
-
-    free_url(parsed_url);
-    return client;
-client_ERROR:
-    if(buffer)
-        aic_free(buffer);
-    if(client)
-        aic_free(client);
-    free_url(parsed_url);
-    return NULL;
-}
-
-int  receive_websocket_message_V3(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);
-    if(!client )
-        return -1;
-    unsigned char frame[20]={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, 1, 0);
-
-       // bk_printf("receive_websocket_message:frame:0x%x,bytes_received:%d",frame[0],bytes_received);
-
-        if (bytes_received == 0) {
-            bk_printf("Connection closed by server.1\n\n\n\n");
-            return 0;
-        } else if(bytes_received<0){
-            bk_printf("receive message failed1\n\n\n\n");
-            return -1;
-        }
-        if(frame[0]!= 0x80 && frame[0]!= 0x81 && frame[0]!= 0x82 && frame[0]!= 0x88 && frame[0]!= 0x89 && frame[0]!= 0x8A)
-        {
-            error_count++;
-            bk_printf("receive_websocket_message:hend =0x%X,0x%X ,last_byte =0x%x error_count =%d ERROR!!!!!!!!!",frame[0],frame[1],last_byte,error_count);
-
-            if(last_byte!= 0x80 && last_byte!= 0x81 && last_byte!= 0x82 && last_byte!= 0x88 && last_byte!= 0x89 && last_byte!= 0x8A)
-            {
-                bk_printf("receive_websocket_message:hend =0x%X,0x%X ,last_byte =0x%x ERROR222222222!!!!!!!!!",frame[0],frame[1],last_byte);
-                continue;
-            }
-                
-        }else
-        {
-            
-            break;
-        }
-    }
-   //  bk_printf("websocket2 timer_ms=%d\n",timer_ms- aos_get_tickcount());
-    // timer_ms = aos_get_tickcount();
-    //bk_sleep(5);
-    bytes_received = recv(client->sockfd, frame+1, 1, 0);
-    if (bytes_received == 0) {
-        bk_printf("Connection closed by server.2\n\n\n\n");
-        return 0;
-    } else if(bytes_received<0){
-        bk_printf("receive message failed 2 \n\n\n\n");
-        return -1;
-    }
-    //unsigned char fin = (frame[0] & 0x80) >> 7;
-    *code = frame[0] & 0x0F;
-    unsigned char mask = (frame[1] & 0x80) >> 7;
-    unsigned int payload_len = frame[1] & 0x7F;
-    
-
-    size_t offset = 2;
-    if (payload_len == 126) {
-        unsigned short extended_payload_len;
-        bytes_received = 0;
-        while(1)
-        {
-            recv_len= recv(client->sockfd, frame+offset+bytes_received, 2-bytes_received, 0);
-            if (recv_len == 0) {
-                bk_printf("Connection closed by server 3.\n\n\n\n");
-                return 0;
-            } else if(recv_len<0){
-                bk_printf("receive message failed 3 \n\n\n\n");
-                return -1;
-            }
-            bytes_received +=recv_len;
-            if(bytes_received>=2)
-                break;
-            
-        }
-        
-        // bytes_received_t = bytes_received;
-        memcpy(&extended_payload_len, frame + 2, 2);
-        payload_len = ntohs(extended_payload_len);
-        //bk_printf("receive_websocket_message:payload_len=0x%X",extended_payload_len);
-        offset += 2;
-    } else if (payload_len == 127) {
-        u64 extended_payload_len;
-        bytes_received = 0;
-        while(1)
-        {
-            recv_len= recv(client->sockfd, frame+offset+bytes_received, 8-bytes_received, 0);
-            if (recv_len == 0) {
-                bk_printf("Connection closed by server 4.1\n\n\n\n");
-                return 0;
-            } else if(recv_len<0){
-                bk_printf("receive message failed 4\n\n\n\n");
-                return -1;
-            }
-            bytes_received +=recv_len;
-            if(bytes_received>=8)
-                break;
-            
-        }
-        memcpy(&extended_payload_len, frame + 2, 8);
-        payload_len = ntohll(extended_payload_len);
-        offset += 8;
-    }
-    if(payload_len>len)
-    {
-        bk_printf("receive_websocket_message:len =%d ERROR",payload_len);
-        recv(client->sockfd, buf, len, 0);
-        return -1;
-    }
-    
-    // bk_printf("receive_websocket_message :");
-    // for(int i = 0;i<offset;i++)
-    // {
-    //     bk_printf("%02X",frame[i]);
-    // }
-    // bk_printf("receive_websocket_message:payload_len=%d frame[0]&0x8E=%d",payload_len,frame[0]&0x8E);
-    if (mask) {
-        
-        bytes_received = recv(client->sockfd, frame+offset, 4, 0);
-        memcpy(masking_key, frame + offset, 4);
-        offset += 4;    
-    } 
-    
-        
-    bytes_received = 0;
-    // payload_len-=1;//少读一个字节,防止粘包
-    //bk_sleep(1);
-    while(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;
-        } else if(recv_len<0){
-            bk_printf("receive message failed 5\n\n\n\n");
-            return -1;
-        }
-
-        bytes_received += recv_len;
-        
-        //bk_printf("receive_websocket_message:bytes_received=%d recv_len =%d",bytes_received,recv_len);
-        if(bytes_received >=  payload_len)
-        {
-            //bk_printf("receive_websocket_message:payload_len=%d,bytes_received=%d",payload_len,bytes_received);
-            break;
-        }
-        
-    }
-    //bk_sleep(1);
-    // bk_printf("websocket 3 timer_ms=%d\n",timer_ms- aos_get_tickcount());
-    // timer_ms= aos_get_tickcount();
-    // bk_sleep(1);//等最后一字节返回,防止粘包
-    // recv(client->sockfd, buf+payload_len, 1, 0);//读最后一字节
-    // payload_len+=1;
-    if(mask)
-    {
-        for (size_t i = 0; i < payload_len; ++i) {
-            buf[i] = buf[i] ^ masking_key[i % 4];
-        }
-    }
-    
-    // if (*code == WS_TEXT) {
-    //     bk_printf("Received text message: %.*s\n", (int)payload_len, buf);
-    // } else if (*code == WS_BINARY) {
-    //     bk_printf("Received binary message of length %zu\n", payload_len);
-    // }
-    // if(error_count>0)
-    // {
-    //     bk_printf("WS ERROR!!!!!!last_byte:0x%x bytes_received_t_1:0x%x\r\n\n\n\n\n\n\n",last_byte,bytes_received_t_1);
-    //     bk_print_hex(frame_t,frame_t_len);
-    //     bk_print_hex(websocket_tmp_b,websocket_tmp_b_len);
-    //     bk_printf("WS ERROR!!!!!!\r\n\n\n\n\n\n\n");
-    //     bk_print_hex(frame,offset);
-    //     bk_print_hex(buf,payload_len);
-        
-    // }
-    // bytes_received_t_1 = bytes_received_t;
-    if (*code == WS_TEXT)
-    {
-
-    }else if(*code == WS_BINARY)
-    {
-
-    }else if(*code == WS_CLOSE)
-    {
-        payload_len = 0;
-    }else if(*code == WS_PONG)
-    {
-        //payload_len = 1;
-    }else if(*code == WS_PING)
-    {
-        send_websocket_message(client,buf,payload_len,WS_PONG);
-        //payload_len = 1;
-    }else if(*code == WS_CONT)
-    {
-        //payload_len = 1;
-    }
-    last_byte = buf[payload_len-1];
-    //timer_ms = aos_get_tickcount();
-    //bk_printf("receive_websocket_message 4 timer_ms=%d len = %d\n",timer_ms,payload_len);
-    error_count=0;
-    // websocket_tmp_b_len = payload_len;
-    // if(payload_len>sizeof(websocket_tmp_b))
-    // {
-    //     websocket_tmp_b_len=sizeof(websocket_tmp_b);
-    // }
-    // memcpy(websocket_tmp_b,buf,websocket_tmp_b_len);
-    
-
-    // frame_t_len = offset;
-    // if(frame_t_len>sizeof(frame_t))
-    // {
-    //     frame_t_len=sizeof(frame_t);
-    // }
-    // memcpy(frame_t,frame,frame_t_len);
-    
-
-    return payload_len;//parse_frame(buf, bytes_received, buf,code);
-}
-
index 35e673e..4bdf4b7 100644 (file)
@@ -24,9 +24,7 @@ typedef struct {
 // 初始化 WebSocket 客户端
 WebSocketClient *init_websocket_client(const char *url, const char *headers);
 
-WebSocketClient *init_websocket_IOT_V3(const char *url, const char *headers);
-
-int  receive_websocket_message_V3(WebSocketClient *client, unsigned char *buf,int len,WebSocketMessageType *code);
+WebSocketClient *init_websocket_IOT(const char *url, const char *headers);
 
 // 关闭 WebSocket 客户端
 void close_websocket_client(WebSocketClient *client) ;
@@ -39,6 +37,7 @@ int  receive_iot_message(WebSocketClient *client);
 // 发送 WebSocket 消息
 int send_websocket_message(WebSocketClient *client, const unsigned char *message, size_t message_len, WebSocketMessageType type) ;
 
+int send_iot_message(WebSocketClient *client, const unsigned char *message, size_t message_len);
 
 int bk_websocket_demo(void);
 #endif
index fe8a2da..96a5dc9 100644 (file)
@@ -24,9 +24,6 @@
 #include "aic_http_client.h"
 #include "aic_fota.h"
 
-
- // #define DMPTEST
- 
 #define bk_malloc aic_malloc
 #define bk_free aic_free
 int get_dev_pass_MAX_len(void)//获取设备密码最大长度,注意要防止内存越界
@@ -332,146 +329,6 @@ char * get_token(void)
 const char *dev_pid = "cqxJZi5CNgzjS3mX21Zw";//PID
 const char *dev_key = "uKLrChwrxA1LklgBc3VwawYjUkbT3BgX";//密钥
 
-#define HTTP_DEMO_CLIENT_NAME "HTTP Demo Client"
-#define HTTP_DEMO_URL "http://47.101.171.33/doc/download/10.txt"
-#define HTTPS_DEMO_URL "https://47.101.171.33/doc/download/CK8K.txt"
-
-#define HTTP_DEMO_WAIT_TIME (10 * 1000)
-#define HTTP_DEMO_SLEEP_TIME (60 *1000)
-
-static u32 http_demo_handle = 0;
-static u32 https_demo_handle = 0;
-static aos_thread_id http_demo_thread;
-static aos_thread_id https_demo_thread;
-
-void aic_http_demotest()
-{
-    u32 status = 0;
-    long lbytes = 0;
-    u8 *buff;
-    u32 bytes = 1500;
-    u32 total_length = 0;
-    u32 length_to_be_copied = 0;
-    u32 chunked_mode = 0;
-
-     bk_printf("aic_http_demotest1213...");
-
-    http_demo_handle = aic_http_client_create(HTTP_DEMO_CLIENT_NAME);
-    if (http_demo_handle == 0) {
-        return;
-    }
-    aicx_error(0x1132e2, "", "http demo start");
-
-     bk_printf("aic_http_demotest121312...");
-
-    /*wait pdp active,only for demo test.*/
-    //aos_sleep(HTTP_DEMO_SLEEP_TIME);
-
-    status = aic_http_client_get_start(http_demo_handle, HTTP_DEMO_URL, NULL,
-                                       NULL, 80, HTTP_DEMO_WAIT_TIME);
-    if (status != NX_SUCCESS) {
-        aic_http_client_delete(http_demo_handle);
-        return;
-    }
-
-    buff = aos_zalloc(bytes+2000);
-
-     bk_printf("aic_http_demotest1213121...");
-
-    do {
-
-        bk_printf("aic_http_demotest1213122...");
-        lbytes = aic_https_client_response_data_get(http_demo_handle, buff, bytes,
-                                                    HTTP_DEMO_WAIT_TIME);
-       bk_printf("aic_http_demotest1213123 lbytes %d...",lbytes);
-      //  aicx_error(0x18afe9, "d", "http get lbytes len is %d", lbytes);
-
-        if (lbytes <= 0) {
-            break;
-        } else {
-            chunked_mode = aic_http_client_chunked_mode_check(http_demo_handle);
-            length_to_be_copied = aic_https_client_total_receive_bytes_get(http_demo_handle);
-            if (!chunked_mode && length_to_be_copied) {
-                total_length += lbytes;
-            }
-
-              bk_printf("aic_http_demotest1213123...");
-        }
-
-    } while (total_length < length_to_be_copied || chunked_mode);
-
-   // aicx_error(0x1e6e26, "s", "http get data is %s", buff);
-
-     bk_printf("aic_http_demotest1213123 finish...");
-
-    aic_http_client_delete(http_demo_handle);
-
-    return;
-}
-
-
-void aic_https_demotest()
-{
-    u32 status = 0;
-    LONG lbytes = 0;
-    u8 *buff;
-    u32 bytes = 1500;
-    u32 total_length = 0;
-    u32 length_to_be_copied = 0;
-    u32 chunked_mode = 0;
-    AIC_HTTPS_CLIENT_INSTANCE *client_ptr;
-
-     bk_printf("aic_https_demotest1213...");
-
-    https_demo_handle = aic_https_client_create(HTTP_DEMO_CLIENT_NAME);
-    if (https_demo_handle == 0) {
-        return;
-    }
-
-     bk_printf("aic_https_demotest12131...");
-
-    /*for https test,set auth_type to 0, do not need certifica1*/
-    client_ptr = (AIC_HTTPS_CLIENT_INSTANCE *)https_demo_handle;
-    client_ptr->https_client->auth_type = 0;
-
-    /*wait pdp active,only for demo test.*/
-    aos_sleep(HTTP_DEMO_SLEEP_TIME);
-
-    status = aic_https_client_get_start(https_demo_handle, HTTPS_DEMO_URL, NULL,
-                                       NULL, 443, HTTP_DEMO_WAIT_TIME);
-    if (status != NX_SUCCESS) {
-        aic_https_client_delete(https_demo_handle);
-        return;
-    }
-
-    buff = aos_zalloc(bytes+2000);
-
-    do {
-        lbytes = aic_https_client_response_data_get(https_demo_handle, buff , bytes,
-                                                    HTTP_DEMO_WAIT_TIME);
-        if (lbytes <= 0) {
-            break;
-        } else {
-
-            bk_printf("https  get data %d ",lbytes);
-            chunked_mode = aic_http_client_chunked_mode_check(https_demo_handle);
-            length_to_be_copied = aic_https_client_total_receive_bytes_get(https_demo_handle);
-            if (!chunked_mode && length_to_be_copied) {
-                total_length += lbytes;
-            }
-        }
-
-    } while (total_length < length_to_be_copied || chunked_mode);
-
-    //  aicx_error(0x0f0971, "s", "https get data is %s", buff);
-
-    bk_printf("download123 finish...");
-
-    aic_https_client_delete(https_demo_handle);
-
-    return;
-}
-
 
 void aut_active(void)//设备激活
 {
@@ -518,16 +375,15 @@ void aut_active(void)//设备激活
 
     bk_printf("dev_id:%s timestamp:%s ",deviceId,timestamp_str);
 
+    //118.145.159.222:30400
+
+    //http://dmp.raisound.com/bz-api/dev/auth/active
 
-#ifdef DMPTEST
+    //https://dmp-dev.raisound.com/dmp-api/dev/auth/active
 
-    char *sign_url = "http://dmp-dev.raisound.com/dmp-api/dev/auth/active";
-    bk_printf("http://dmp-dev.raisound.com/dmp-api/dev/auth/active\n");
-#else
     char *sign_url = "http://dmp.raisound.com/bz-api/dev/auth/active";
-    bk_printf("http://dmp.raisound.com/bz-api/dev/auth/active\n");
 
-#endif
+    bk_printf("http://dmp.raisound.com/bz-api/dev/auth/active\n");
 
     u32 response = 0;
     //创建客户端实例
@@ -539,7 +395,7 @@ void aut_active(void)//设备激活
     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;
+    http_client->login_info.server_port = 80;//80
     aic_http_client_connect(aut_active_http_handle, 5000);
         
     // 创建JSON对象
@@ -674,7 +530,7 @@ void update_iccid(void)//设备激活
     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};
@@ -1274,12 +1130,13 @@ void ota_update_version(void)//OTA上报
     //char dev_pass_base64[100] ={0};
    // char enc_iv[65] = {0};
 
-
+    char dev_iccid[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};
@@ -1451,16 +1308,15 @@ void aut_login(void)//登录
     aes_cbc_pkcs5_encrypt(dev_pass, strlen(dev_pass), dev_key, enc_iv,encrypt_data,&encrypt_data_len);//加密
     
     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\"";
 
-#ifdef DMPTEST
-    char *sign_url = "http://dmp-dev.raisound.com/dmp-api/dev/auth/sign_in"; // 登录地址
-#else
+    // 118.145.159.222:30400
+
+    // http://dmp.raisound.com/bz-api/dev/auth/sign_in
 
-    char *sign_url = "http://dmp.raisound.com/bz-api/dev/auth/sign_in"; // 登录地址  
-#endif
+    //https://dmp-dev.raisound.com/dmp-api/dev/auth/active
+    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");
index af64ac4..024ca15 100644 (file)
@@ -24,5 +24,4 @@ typedef struct
     dev_authentication_MSG_Type MSG_Type;
 }dev_authentication_MSG_queue_t;
 aos_status dev_authentication_MSG_put(const char *data,u32 len,dev_authentication_MSG_Type MSG_Type);
-void IOT_update_bargein(void);//OTA更新
 #endif
\ No newline at end of file
index daa83b8..394e975 100644 (file)
@@ -2,7 +2,7 @@
  * Build Information
  * Git Commit: 66c47c389123d4d655eb5b1d63b5918355f15ce7
  * Branch: master
- * Build Date: 2025-12-17 16:12:17
+ * Build Date: 2025-09-29 18:13:29
  */
 
 #ifndef _IMSL_KWS_DLL
@@ -62,10 +62,9 @@ kws_conf.kws_log_level = 0;
 
 int kws_status = init_kws(&kws_conf);
 
-// æ\8e\88æ\9d\83é\83¨å\88\86ï¼\8cå\8f¯ä»¥å¿½ç\95?
-// struct AuthInfo auth_info;
-// strcpy(auth_info.dmp_token, dmp_token);
-// auth_kws(&auth_info);
+struct AuthInfo auth_info;
+strcpy(auth_info.dmp_token, dmp_token);
+auth_kws(&auth_info);
 
 // å\9c¨æ¯\8f次æ\8e¥æ\94¶è¯­é\9f³æ\97¶è°\83ç\94¨  æ³¨æ\84\8f å¦\82æ\9e\9cæ\98¯void* æ\88?int8* ç\9a\84æ\8c\87é\92\88ï¼\8cé\95¿åº¦ / 2
 // è¿\90è¡\8cç»\93æ\9d\9få\90\8eè\8e·å\8f\96kwsç\8a¶æ\80?
@@ -81,24 +80,7 @@ free_kws();
 */
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* example 2 配合vad使用  废弃方案
+/* example 2 配合vad使用
 // å\88\9då§\8bå\8c?
 
 
index 407f713..b95741f 100644 (file)
@@ -2,7 +2,7 @@
  * Build Information
  * Git Commit: 66c47c389123d4d655eb5b1d63b5918355f15ce7
  * Branch: master
- * Build Date: 2025-12-17 16:12:18
+ * Build Date: 2025-09-29 18:13:30
  */
 
 #ifndef _IMSL_VAD_DLL
@@ -16,7 +16,6 @@ typedef int (*imsl_nn_printf_func)(const char *format, ...);
 struct AuthInfo
 {
     char dmp_token[64];
-    int server_addr;
 };
 #endif
 
@@ -95,7 +94,6 @@ void free_vad();
     init_vad(&conf);
 
     struct AuthInfo auth_info;
-    auth_info.server_addr = 0;   // 0 表示 国内  1 表示 海外
     strcpy(auth_info.dmp_token, dmp_token);
     auth_vad(&auth_info);
 
index fde1017..5610ab3 100644 (file)
Binary files a/2.code/aicos/app/AI_AMP_2_5/libimslkws.a and b/2.code/aicos/app/AI_AMP_2_5/libimslkws.a differ
index 9ce432c..9e25eca 100644 (file)
Binary files a/2.code/aicos/app/AI_AMP_2_5/libimslnn.a and b/2.code/aicos/app/AI_AMP_2_5/libimslnn.a differ
index 2a72056..b8bf999 100644 (file)
Binary files a/2.code/aicos/app/AI_AMP_2_5/libimslvad.a and b/2.code/aicos/app/AI_AMP_2_5/libimslvad.a differ