#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 <time.h>
+
+// #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
{
}attributes_format_type;
attributes_format_type inbound_attributes_format = attributes_format_PCM;
attributes_format_type outbound_attributes_format = attributes_format_OPUS;
+
+
+u8 codec_tts=1;//1 opus 2 ogg
+
#define OPUS_ENCODER_PACK_MS 60 //多少ms一帧数据
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
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;
WebSocketClient *AI_client_IOT = NULL;
-
static u8 issend_start_up=0;
-static u8 random_mt_test=0;
+//static u8 issend_start_up=0;
-static u32 close_timerout = 0;
+ static u8 is_music_status=0;
-static u32 sleep_chumo_timerout = 0;
+static u8 is_newsession=true;
-static u32 tts_start_timerout = 0;
+static u8 delay_welcome=0;
+static u32 close_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 AI_VC_60S_timer = NULL;
- //static aos_timer_ptr AI_VC_60S_timer = NULL;
-
static int login_timer_count = 0;
-static int power_off_count = 60*6*24;
+static int power_off_count = 60*60*24;
+
+u8 is_need_tip=0;
static void play_file_stop(void);
static u8 uid[50];
static int uid_len =0;
-//int type_test=1;
-
//关闭录音
void VC_record_End(void);
//打开录音
//打开音频播放
void VC_Play_Start(void);
+
+
int bk_get_imei(char *imei)
{
if(imei == NULL)
}
+
+
#if (BK_LOG_CFG==BK_LOG_UART)
int bk_printf(const char *format, ...)
{
//vc_cfg.dev_type = DEV_FX1_H;//产品
//vc_cfg.dev_type = DEV_ADS;//奥德赛
vc_cfg.dev_type = DEV_JSWM;//金山完美
- //vc_cfg.dev_type = DEV_ALY;//阿里云
+ // vc_cfg.dev_type = DEV_ALY;//阿里云
- strcpy(vc_cfg.server_ip,"amp.raisound.com");//服务器地址
+ 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");//服务器地址
- // strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//服务器地址
+ // ws://118.145.159.222:30700
+
+ // 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;//音量
+
+ vc_cfg.alarm_count=0;
+}
int init_VC_cfg(void)
{
FILE *fp = NULL;
// }
reset_VC_cfg();
+
if(fp)
{
int fread_len ;
vc_cfg.VC_mode =2;//对话模式
reset_VC_cfg();
+ // strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//服务器地址
+
return 0;
}
u8 *save_temp_tts=NULL;
-int is_guanji=0;
+void send_express_str(char *exp_str){
+
+ #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
+
-int ddh_is_close_dialog=0;
+ #endif
+
+
+}
-void aic_https_demotest();
+static void AI_VC_send_music_start(char *urlpath);
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,"兑换模式"))
}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
+
+ // IOT_update_statu(3,"","");
+ IOT_V3_update_statu(3,"","");
goto RET;
}
// 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,"升级版本"))
{
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,"帮我生成语音文件"))
{
//||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;
- }
+ // 淡定:Calm
+ // 尴尬:Embarrass
+ // 开心:Happy
+ // 可爱:Cute
- if(strstr(text,"做一个发怒的表情"))
+ if(strstr(text,"做一个淡定的表情"))
{
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
uart_write(ui_uart_handle,cmd_ui, 7);
}
-
- ret = 0;
- goto RET;
+ ret = 0;
+ goto RET;
}
- if(strstr(text,"做一个惊讶的表情"))
+ if(strstr(text,"做一个尴尬的表情"))
{
-
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x06,0x01,0x08};
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
uart_write(ui_uart_handle,cmd_ui, 7);
}
-
- ret = 0;
- goto RET;
+ ret = 0;
+ goto RET;
}
-
-
- if(strstr(text,"做一个搞怪的表情"))
+ if(strstr(text,"做一个可爱的表情"))
{
-
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
if(ui_uart_handle){
u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
uart_write(ui_uart_handle,cmd_ui, 7);
}
-
- ret = 0;
- goto RET;
+ ret = 0;
+ goto RET;
}
-
- if(strstr(text,"做一个卡通的表情"))
+ if(strstr(text,"做一个淡定的表情"))
{
-
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x07,0x01,0x09};
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
uart_write(ui_uart_handle,cmd_ui, 7);
}
-
- ret = 0;
- goto RET;
+ 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);
- }
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个惊喜的表情"))
+ if(strstr(text,"做一个惊喜的表情"))
{
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
goto RET;
}
- if(strstr(text,"打开触摸动作"))
+ if(strstr(text,"做一个发怒的表情"))
{
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
- chumo_exp_open=1;
- AI_AMP_MSG_put("触摸动作已打开",strlen("触摸动作已打开"),VC_TTS_PLAY);
-
- ret = 0;
- goto RET;
+ send_express_str(text);
+ ret = 0;
+ goto RET;
}
-
- if(strstr(text,"关闭触摸动作"))
+ if(strstr(text,"做一个惊讶的表情"))
{
- chumo_exp_open=0;
- AI_AMP_MSG_put("触摸动作已关闭",strlen("触摸动作已关闭"),VC_TTS_PLAY);
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
- ret = 0;
- goto RET;
+ send_express_str(text);
+ ret = 0;
+ goto RET;
}
+ if(strstr(text,"做一个开心的表情"))
+ {
- // 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,0x01,0x01,0x03};
- // uart_write(ui_uart_handle,cmd_ui, 7);
- // }
+ send_express_str(text);
- // bk_printf("摇头");
- // #if SUPPORT_MOT
- // mot_nod_diantou(2);
- // #endif
- // ret = 0;
- // goto RET;
+ ret = 0;
+ goto RET;
+ }
- // }
- // if(strstr(text,"点头"))
- // {
- // // AI_AMP_MSG_put("开始做动作了",strlen("开始做动作了"),VC_TTS_PLAY);
+ // if(strstr(text,"播放音乐"))
+ // {
- // AI_AMP_MSG_put("开始点头了",strlen("开始点头了"),VC_TTS_PLAY);
+ // AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+ // send_express_str(text);浦幼绘本视频
+ // AI_VC_send_music_start("https://video.teacherasked.cn/Read_bank/read_xspy202504/%E6%B5%A6%E5%B9%BC%E7%BB%98%E6%9C%AC%E8%A7%86%E9%A2%91/a20f2c5d-e41c-414c-b407-92ca37d54391.opus");
- // // 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;
+ // AI_VC_send_music_start("");
+ // ret = 0;
+ // goto RET;
+ // }
- // }
+ if(strstr(text,"取消所有闹钟"))
+ {
-
+ AI_AMP_MSG_put("好的",strlen("好的"),VC_TTS_PLAY);
+ // send_express_str(text);浦幼绘本视频
+ // AI_VC_send_music_start("https://video.teacherasked.cn/Read_bank/read_xspy202504/%E6%B5%A6%E5%B9%BC%E7%BB%98%E6%9C%AC%E8%A7%86%E9%A2%91/a20f2c5d-e41c-414c-b407-92ca37d54391.opus");
+ vc_cfg.alarm_count=0;
+ save_VC_cfg();
- // if(strstr(text,"抬头"))
- // {
- // AI_AMP_MSG_put("开始抬头了",strlen("开始抬头了"),VC_TTS_PLAY);
+ // AI_VC_send_music_start("");
+ ret = 0;
+ goto RET;
+ }
- // bk_printf("抬头");
- // #if SUPPORT_MOT
- // mot_nod_ditou(2);
- // #endif
- // ret = 0;
- // goto RET;
- // }
+
+ // if(strstr(text,"导出文件"))
+ // {
- // if(strstr(text,"低头"))
- // {
- // AI_AMP_MSG_put("开始低头了",strlen("开始低头了"),VC_TTS_PLAY);
+ // int len_daochu=0,sum_len=0;;
+ // FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","rb");
- // 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){
+ // if(fp_play_local){
// while(1){
}
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,"关机") ))
+ if(ret_str_len<7 && (strstr(text,"关机") ))
{
+ bk_printf("the guanji strlen is %d...\n",strlen(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,"重启") ))
+ if(ret_str_len<7 && (strstr(text,"重启") ))
{
tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"正在重启。");
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_RESET);
static void AI_VC_send_satrt(char is_greeting)
{
// 创建根对象
+
+ is_music_status=0;
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "event", "start");
// 创建 payload 对象
cJSON *payload = cJSON_CreateObject();
cJSON_AddStringToObject(payload, "device_id", vc_cfg.dev_imei);
+
+ if(is_newsession)
+ cJSON_AddBoolToObject(payload, "is_new_session", TRUE);
+ else
+ cJSON_AddBoolToObject(payload, "is_new_session", FALSE);
+
+ is_newsession=false;
+
+
cJSON_AddStringToObject(payload, "user_agent", "AudioClient/1.0");
cJSON_AddBoolToObject(payload, "simple_response", FALSE);
if(AI_ASR_str && VAD_time_count !=0 && VAD_time_count <= VAD_TIMEOUT )//时间间隔短,认为是一次对话,加上上一次内容
// 创建 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();
+
+
+ // is_greeting=0;
+
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
}else
{
cJSON_AddBoolToObject(bot_option, "use_workflow", 1);
- cJSON_AddStringToObject(bot_option, "bot_id", "7491256313561825332");//食梦貘
+ cJSON_AddStringToObject(bot_option, "bot_id", "7491256313561825332");//食梦貘 7491256313561825332
+
+ //7574309992161886227 //7491256313561825332
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 对象
{
cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus opus
- // if(codec_tts==1)
+ 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
+ cJSON_AddStringToObject(outbound_cfg, "codec", "ogg");// ogg
+
+ cJSON_AddNumberToObject(outbound_cfg, "compression_rate", 20);
}
else
cJSON_AddStringToObject(outbound_cfg, "format", "pcm");
cJSON_Delete(root);
}
+//{"cmd":"renew_device"}
+
+void deal_iot_receive(char *json_data)
+{
+
+ bk_printf(json_data);
+
+ // vc_cfg.VC_TTS_volume = 100;
+ // AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
+
+ if(strstr(json_data,"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();
+
+ }
+
+ if(strstr(json_data,"switch_volume"))
+ {
+
+ // bk_printf("switch_volume");
+
+ char *str_tmp = NULL;
+
+ char volume_str[5]={0};
+
+ str_tmp = strstr(json_data,"\"target\":\"");
+
+ //bk_printf("str_tmp:%p",str_tmp);
+ if(str_tmp)//解析password
+ {
+ str_tmp += strlen("\"target\":\"");
+ int count = str_count(str_tmp,'\"');
+ bk_printf("count:%d",count);
+ if(count < sizeof(volume_str))
+ {
+
+
+ memcpy(volume_str,str_tmp,count);
+ volume_str[count] = 0;
+ bk_printf("volume_str:%s",volume_str);
+
+ int temp_vol=atoi(volume_str);
+
+ if(temp_vol>=0&&temp_vol<=100)
+ {
+
+ vc_cfg.VC_TTS_volume = temp_vol;
+
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+ char tts_temp[200]={0};
+
+
+ sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+
+ AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+
+
+ //is_save_VC_cfg = 1;
+
+ save_VC_cfg();
+ }
+
+
+
+ }
+ else
+ {
+ bk_printf("获取volume失败");
+ }
+ }
+ }
+
+}
//Audio.Create 开始发送音频
static void AI_VC_send_audio_create(void)
{
}
-// {
-// "event": "audio.convert",
-// "payload": {
-// "audio_convert_request": {
-// "audio_url": audio_url,
-// "bit_depth": 16,
-// "channels": 1,
-// "sample_rate": 16000,
-// "target_format": "pcm"
-// }
-// }
-// }
+// {
+// "event": "prompt",
+// "payload": {
+// "prompt": [
+// {
+// "role": "user",
+// "content": "今天是礼拜几?",
+// "content_type": "text", // 可以不提交
+// "type": "question" // 可以不提交
+// }
+// ]
+// }
+// }
+//Audio.Create 开机json {"event":"startup"}
static void AI_VC_send_startup(void)
{
VC_state = VC_State_SpeechStart;//开始说
cJSON_Delete(root);
}
+
+
+
+// {
+// "event": "audio.convert",
+// "payload": {
+// "audio_convert_request": {
+// "audio_url": audio_url,
+// "bit_depth": 16,
+// "channels": 1,
+// "sample_rate": 16000,
+// "target_format": "pcm"
+// }
+// }
+// }
+
+
+
+
+
//Music.Start 开始发送音频
static void AI_VC_send_music_start(char *urlpath)
{
- VC_state = VC_State_SpeechStart;//开始说
+ VC_state = VC_State_End;//开始说
// 创建根对象
cJSON *root = cJSON_CreateObject();
if (root == NULL) {
cJSON_AddNumberToObject(audio_convert_request, "channels", 1);
cJSON_AddNumberToObject(audio_convert_request, "sample_rate", 16000);
- if(outbound_attributes_format == attributes_format_OPUS)
- {
- cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");
- }else{
+ //if(outbound_attributes_format == attributes_format_OPUS)
+ // {
+ // cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");//opus//pcm
+ //}else{
- cJSON_AddStringToObject(audio_convert_request, "target_format", "pcm");
- }
+ cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");
+ // }
cJSON_AddItemToObject(payload, "audio_convert_request", audio_convert_request);
//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");
//pinpin发送
void AI_VC_send_ping_ping(void)
{
-
- // mot_nod_status();
AI_VC_send_data("ping",strlen("ping"),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
}
bk_printf("send ret=%d,len=%d,str=%s",ret,AI_VC_send_queue_data.len,AI_VC_send_queue_data.data);
else if(AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_BINARY_FRAME )
{
- bk_printf("send ret=%d,len=%d",ret,AI_VC_send_queue_data.len);
- // send_update+=AI_VC_send_queue_data.len;
+ send_update+=AI_VC_send_queue_data.len;
+
+ bk_printf("send ret=%d,len=%d,%d",ret,AI_VC_send_queue_data.len,send_update);
+
+
// send_count_pcm++;
// 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)
u32 timer_ms22=0;
+ static void AI_VC_IOT_task(void *thread_input)//websocket 读线程
+ {
+
+ receive_iot_message(AI_client_IOT);
- 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;
- }
+ static void AI_IOT_read_task(void *thread_input)//websocket 读线程
+ {
- 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){
+ int status;
+ static u8 *recv_buff = NULL;
- #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
+
+ 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)
+ {
-}
-
-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;
+ 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 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;
+ // aos_sleep(50);
- #if SUPPORT_MOT
- mot_nod_exp(4,2);
- #endif
+ // u32 timer_ms11 = aos_get_tickcount();
- }else if(strstr(exp_str,"点头")){
+ bk_printf("IOT_read_task...... 12");
- mot_nod_yaotou(2);
-
- }else if(strstr(exp_str,"摇头")){
+ status = receive_websocket_message_V3(AI_client_IOT,recv_buff,recv_buff_mxa_len,&code);
- mot_nod_diantou(2);
-
- }else if(strstr(exp_str,"抬头")){
+ 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]);
- mot_nod_ditou(2);
-
- }else if(strstr(exp_str,"低头")){
+ bk_printf("IOT_read_task...... 13");
- mot_nod_taitou(2);
-
- }else if(strstr(exp_str,"向左转")){
-
- mot_nod_exp(15,2);
+ if(code == WS_TEXT)//字符串
+ {
+ //bk_printf("AI_VC_read_task 3");
+ bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
+
+ }else{
-
- }else if(strstr(exp_str,"向右转")){
- mot_nod_exp(16,2);
+ if(status>8){
-
- }
-
+ bk_printf("read TEXT:status:%d",status);
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #else
+ char jsonstr[500]={0};
- 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;
- }
+ memcpy(jsonstr,recv_buff+8,status-8);
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+ bk_printf("read json TEXT:status:%s",jsonstr);
- #endif
+ deal_iot_receive(jsonstr);
-}
+ }
+
+ }
+
+ if(status>0)
+ {
+
+
+ }else{
+
+ break;
+ }
+
+ aos_sleep(100);
+ }else{
+
+ break;
+ }
+
+ }
+
+ if(recv_buff)
+ {
+ aic_free(recv_buff);
+ recv_buff = NULL;
+ }
+ // bk_printf("AI_VC_read_task exit\n");
+ // AI_VC_read_task_flag=3;
+ }
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)
{
// 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 = 180;
if(code == WS_TEXT)//字符串
{
//bk_printf("AI_VC_read_task 3");
- bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
+
+ if(status<200)
+ 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){
+
+ if(issend_start_up==0){
issend_start_up=1;
}
+ // if(is_need_tip){
+
+ // is_need_tip=0;
+
+ // if(vc_cfg.VC_mode == 0)
+ // {
+ // AI_AMP_MSG_put("当前为连续对话模式。",strlen("当前为连续对话模式。"),VC_TTS_PLAY);
+
+ // }else if(vc_cfg.VC_mode == 1)
+ // {
+ // AI_AMP_MSG_put("当前为单对话模式。",strlen("当前为单对话模式。"),VC_TTS_PLAY);
+
+ // }else
+ // {
+ // AI_AMP_MSG_put("当前为按键打断模式。",strlen("当前为按键打断模式。"),VC_TTS_PLAY);
+ // }
+
+ // //AI_AMP_MSG_put("提醒对话模式。",strlen("提醒对话模式。"),VC_TTS_PLAY);
+
+ // }
if(AI_TTS_str)
{
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\""))
if(str_tmp)
{
//bk_printf("content!!");
-
- has_tmp_result=1;
-
str_tmp += strlen("\"content\":\"");
int str_tmp_len = str_count(str_tmp,'\"');
//存asr结果
{
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)) ;
break;
}
- if(VAD_time_count <= VAD_TIMEOUT)//时间间隔短,认为是一次对话,拼接内容
+ if(VAD_time_count <= VAD_TIMEOUT )//时间间隔短,认为是一次对话,拼接内容
{
- if(strlen(AI_ASR_str_tmp)==0){
+ if(strlen(AI_ASR_str_tmp)==0){
- // VC_state=VC_State_Listening;
+ VC_state=VC_State_Listening;
- bk_printf("没有识别结果");
+ 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)//超出缓存长度,清零
{
bk_printf("vad间隔时间短拼接asr结果:%s",AI_ASR_str);
+
+ // IOT_V3_update_statu(1,"thinking","");
+ // play_file_stream_data("C:/vadend.pcm");
}else//超时,不用拼接
{
- strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
-
- if(strlen(AI_ASR_str_tmp)==0){
+ strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
- // VC_state=VC_State_Listening;
+ if(strlen(AI_ASR_str_tmp)==0){
- bk_printf("没有识别结果");
+ VC_state=VC_State_Listening;
- AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
+ bk_printf("没有识别结果");
}
-
- bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
+ bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
}
- #if BK_SOCKET_IOT
- IOT_update_statu(1,"thinking","");
- #endif
-
-
- }
+ IOT_V3_update_statu(1,"thinking","");
- 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&&
+ if(VC_Play_flag==1&&strlen(AI_ASR_str_tmp)!=0)
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{
// }
+ }
}
else if(strstr(recv_buff,"\"vad.active\""))//vad触发
{
}
else if(strstr(recv_buff,"\"tts.started\""))//tts开始
{
+
+
+
+ u32 timer_ms22 = aos_get_tickcount();
+
+ bk_printf("tts.started_vad:%d",timer_ms22);
+
if(AI_VC_play_queue != NULL)
{
char count_t= 200;
VC_state = VC_State_TTSStart;
play_data_len = 0;
- #if BK_SOCKET_IOT
- IOT_update_statu(1,"speaking","");
- #endif
+
+ issend_start_up=2;
+
+ IOT_V3_update_statu(1,"speaking","");
+
one_receive_bin=0;
if(outbound_attributes_format == attributes_format_OPUS){
opus_clean();
-
-
+
opus_encode_len=0;
opus_decode_len=0;
- // if(save_temp_tts==NULL){
+ // if(save_temp_tts==NULL){
- // save_temp_tts=aic_malloc(900000);
- // }
+ // save_temp_tts=aic_malloc(900000);
+ // }
}
// 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);
+ // IOT_V3_update_statu(1,"idle","");
- // fwrite(save_temp_tts,1,one_receive_bin,fp_tts_save);
+ // fp_tts_save=fopen("C:/cmd_local_301.pcm","wb");
- // startsave_tts=one_receive_bin;
+ // bk_printf("C:/cmd_local_301.pcm %d",one_receive_bin);
- VC_state = VC_State_End;
-
- // if(fp_tts_save)
- // fclose(fp_tts_save);
+ // fwrite(save_temp_tts,1,one_receive_bin,fp_tts_save);
+
+ // startsave_tts=one_receive_bin;
+
+
+
+
- // fp_tts_save=NULL;
+ // if(fp_tts_save)
+ // fclose(fp_tts_save);
+
+ // fp_tts_save=NULL;
// aos_sleep(500);
// bk_printf("C:/cmd_local_301.pcm %d",getFileSize("C:/cmd_local_301.pcm"));
-
+ VC_state = VC_State_End;
+
}
else if(strstr(recv_buff,"\"completed\""))//结束
{
- VC_state = VC_State_End;//
+ VC_state = VC_State_End;
+
+ if(issend_start_up==0){
+ issend_start_up=1;
- if(vc_cfg.VC_mode==0&&strlen(AI_ASR_str_tmp)==0){
+ AI_VC_send_startup();
- 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;
-
}
-
//AI_AMP_MSG_put(0,0,VC_RECORD_START);//打开录音
}else if(strstr(recv_buff,"\"event\":\"failed\""))//接口报错了
{
{
// 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);
}
}
// str_tmp = strstr(recv_buff,"\"param_json\"");
char *str_tmp = strstr(recv_buff,"\"https");
- char *str_tmp_motion = strstr(recv_buff,"\"emotion");
-
-
if(str_tmp)
{
bk_printf("the mp3_path is %s",mp3_path);
- AI_VC_send_music_start(mp3_path);
+ AI_VC_send_music_start("http://qipaiai-oss1.tos-cn-beijing.volces.com/qi_pai_ringtone/2025_11_07/774578468192129024default_ring.pcm");
}
- if(str_tmp_motion){
+ str_tmp = strstr(recv_buff,"\"alarm_timer");
+
+ if(str_tmp)
+ {
- char emotion_str[200];
- memset(emotion_str,0,200);
+ char mp3_path[200];
- char *str_tmp1 = strstr(recv_buff,"\"text");
- //bk_printf("content!!");
- // str_tmp += strlen("\"params_json")+6;
- int str_tmp_len = str_count(str_tmp1+15,'\"');
+ char alarm_content[200];
+ memset(mp3_path,0,200);
+
+ memset(alarm_content,0,200);
+ // bk_printf("content!!");
+ // str_tmp += strlen("\"params_json")+6;
+ int str_tmp_len = str_count(str_tmp+22,'\"');
//存asr结果
- if(str_tmp_len>3){
- memcpy(emotion_str,str_tmp1+15,str_tmp_len-3);
+ if(str_tmp_len>3)
+ memcpy(mp3_path,str_tmp+22,str_tmp_len-3);
//AI_ASR_str_tmp[str_tmp_len] = 0;
- bk_printf("the emotion text len is %s %d",emotion_str,str_tmp_len);
+
+ bk_printf("the alarm_timer is %s",mp3_path);
+
+ // vc_cfg.alarm_name[vc_cfg.alarm_count]={0};
+
+ str_tmp = strstr(recv_buff,"\"alarm_content");
+
+ str_tmp_len = str_count(str_tmp+24,'\"');
+ //存asr结果
+
+ if(str_tmp_len>3)
+ memcpy(alarm_content,str_tmp+24,str_tmp_len-3);
+
+ // AI_ASR_str_tmp[str_tmp_len] = 0;
+
+ bk_printf("the alarm_content is %s",alarm_content);
- send_express_str(emotion_str);
- }
+ if(vc_cfg.alarm_count<5){
+ memset(vc_cfg.alarm_name[vc_cfg.alarm_count],0,50);
+
+ memcpy(vc_cfg.alarm_name[vc_cfg.alarm_count],mp3_path,strlen(mp3_path));
+
+ memset(vc_cfg.alarm_content[vc_cfg.alarm_count],0,200);
+
+ memcpy(vc_cfg.alarm_content[vc_cfg.alarm_count],alarm_content,strlen(alarm_content));
+
+ vc_cfg.alarm_count++;
+
+ save_VC_cfg();
+
+ }
+
+
+
+ // memcpy();
+
+
+ play_file_stream_data("C:/alarm.pcm");
+
+ // alarm.pcm
+
+ // AI_VC_send_music_start("http://qipaiai-oss1.tos-cn-beijing.volces.com/qi_pai_ringtone/2025_11_07/774578468192129024default_ring.pcm");
+
}
+ }else if(strstr(recv_buff,"\"event\":\"llm.completed\""))//接口报错了
+ {
+
+ // char *str_tmp = NULL;
+
+ // bk_printf("the express_str exist1");
+
+ // 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);
+
+ // }
+
}
}
// 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;
one_receive_bin+=status;
- // bk_printf("ogg_opus_decode_data %d...",one_receive_bin);
+ // u32 timer_ms22 = aos_get_tickcount();
+
+ // bk_printf("ogg_opus_decode_data vad %d ...",timer_ms22);
+
+ // 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);
+
+ if(codec_tts==1)
+ my_opus_decode_data(recv_buff,status);
+ else
+ ogg_opus_decode_data(recv_buff,status);
- my_opus_decode_data(recv_buff,status);
// if(fp_tts_save){
// bk_printf("save tts!!!");
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:客户端主动断开连接了");
}
}
bk_printf("AI_VC_read_task exit\n");
AI_VC_read_task_flag=3;
-
- AI_VC_stata=0;
}
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);
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.VC_mode == 2 && VC_state > VC_State_SpeechEnd )//按钮打断模式,tts播放时禁止打断,不输入语音
+ continue;
- 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) {
+ if(is_music_status==1)
+ continue;
- is_dialog_status=0;
- bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
- kws_clear();
+ if(issend_start_up<2) {
- AI_AMP_MSG_put("我在呢。",strlen("我在呢。"),VC_TTS_PLAY);
- }
- }
continue;
- }
+ }
// 每次获得语音后调用, 语音长度最好小于100ms
// wave为u8*或void*指针时需要 / 2
//int vad_test_time = aos_get_tickcount();
// audio_data(vrecord_buf,ret,23);
if (vad_status_t == 2) {//说话停止
+
+ bk_printf("说话停止......");
vad_clear();
if(VAD_status == 1)//清空buff
{
}
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);
{
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
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();
- // }
- // }
+ 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没有说话
{
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 )//可以发数据了
{
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)
{
}
if(VC_state == VC_State_SpeechIng || vad_end_flag ==1)//开始说话,且没数据
{
+ vad_end_flag = 0;
+ // if(VC_Play_flag==1)
+ // play_file_stream_data("C:/vadend.pcm");
+
+ u32 timer_ms22 = aos_get_tickcount();
+
+ bk_printf("VAD:AI_VC_send_audio_completed:%d",timer_ms22);
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();
+
+
}
}
}
- // 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;
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)
break;
- //app_logi("app_audio_write0!!\r\n");
+ // app_logi("app_audio_write0!!\r\n");
// play_data_len>8*1024 ||
if((play_data_len>8*1024 || outbound_attributes_format == attributes_format_OPUS)&&VC_Play_flag ==1 && AI_VC_play_queue )
{
queue_ret = aos_recv_from_queue(AI_VC_play_queue,&AI_VC_play_queue_data,AOS_NO_WAIT);
+
+
if( queue_ret== AOS_SUCCESS)
{
+ // bk_printf("播放数据 %d!!!!!!!!!!!",AI_VC_play_queue_data.len);
+
if(AI_VC_play_queue_data.len> 32*1024)//数据太大,可能是出错了
{
bk_printf("AI_VC_play_queue 数据太大!!!!!!!!!!!");
}
if( AI_VC_play_queue_data.data)
{
+
+ // audio_data(AI_VC_play_queue_data.data,AI_VC_play_queue_data.len,36);
+
+ // u32 timer_ms22 = aos_get_tickcount();
+
+ // bk_printf("start_play:%d",timer_ms22);
+
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 error, ret=%d\n", ret);
}
-
if(AI_VC_play_queue_data.data)
aic_free(AI_VC_play_queue_data.data);
if(VC_state == VC_State_End)
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;
+
+ is_music_status=0;
+ IOT_V3_update_statu(1,"idle","");
+ VC_END_play_timerout = 1;
}
}
continue;//正常有数据就不执行下面写0
}
//没数据的时候也要写0x00
{
- //bk_printf("AI_VC_play_task no data ");
+ // bk_printf("AI_VC_play_task no data ");
memset(play_tmp_d,0,sizeof(play_tmp_d));
//app_logi("app_audio_write0:write 0");
+
+ // audio_data(play_tmp_d,sizeof(play_tmp_d),36);
+
ret = app_audio_write(APP_AUDIO_TYPE_STREAM_DUPLEX,
play_tmp_d, sizeof(play_tmp_d), AOS_WAIT_FOREVER);
if (ret <= 0)
}
-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);
+ return ;
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
- // vc_cfg.VC_TTS_volume = 100;
- // AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
+ cJSON *cmd_data = cJSON_CreateObject();
- //{"cmd":"emotion","msg":"AI指令:emotion","data":"Cute","ts":1764914695122,"targetDeviceId":"865530078570777"}
+ if (cmd_data == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+ // 设置 "event"
+
- if(strstr(json_data,"action")){
+ // {
+ // "cmd":"post_heart_beat",
+ // "ts":1738283829,
+ // "msg":"心跳",
+ // "data":{
+ // "battery": 20
+ // }
+ // }
- tts_start_timerout=0;
- bk_printf("action");
+ if(type==4){
- char *str_tmp = NULL;
+ cJSON_AddStringToObject(root, "cmd", "post_heart_beat");
- char action_str[500]={0};
+ cJSON_AddNumberToObject(root, "ts", 1738283829);
- str_tmp = strstr(json_data,"\"data\":\"");
-
- // bk_printf("str_tmp:%p",str_tmp);
+ cJSON_AddStringToObject(root, "msg", "心跳");
- if(str_tmp)//解析password
- {
+ cJSON_AddNumberToObject(cmd_data, "battery", 20);
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(action_str))
- {
+ // cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
-
- 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(type==1){
- if(strstr(json_data,"set_vol")){
+ cJSON_AddStringToObject(root, "cmd", "chat_state");
+ cJSON_AddStringToObject(cmd_data, "state", type_str);
- char *str_tmp = NULL;
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
- char action_str[500]={0};
+ }
- str_tmp = strstr(json_data,"\"data\":\"");
+ if(type==2){
- if(str_tmp)//解析password
- {
+ long timestamp;
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(action_str))
- {
+ timestamp = time(NULL);
+ bk_printf("2时间戳: %ld\n", (long)timestamp);
+ long long timestamp_ms = (long long)timestamp * 1000;
+ char timestamp_str[20] ={0};
-
- memcpy(action_str,str_tmp,count);
- action_str[count] = 0;
- bk_printf("set_vol:%s",action_str);
+ // 使用 sprintf 将 long long 类型的时间戳转换为字符串
+ int ret12 = sprintf(timestamp_str, "%lld", timestamp_ms);
+ timestamp_str[ret12] =0;
+ // 打印转换后的字符串形式的时间戳
+ bk_printf("2时间戳(ms 转换为字符串): %s\n", timestamp_str);
- if(strstr(action_str,"+10")){
+ cJSON_AddStringToObject(root, "cmd", "chat_text");
- if(vc_cfg.VC_TTS_volume<=90){
- vc_cfg.VC_TTS_volume+=10;
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
- }
+ cJSON_AddStringToObject(cmd_data, "type", type_str);
- }else if(strstr(action_str,"-10")){
+ cJSON_AddStringToObject(cmd_data, "text", content);
- 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);
- }
+ cJSON_AddStringToObject(cmd_data, "createTime", timestamp_str);
- }else{
+
+ }
+
- int temp_vol=atoi(action_str);
+ if(type==3){
- if(temp_vol>0&&temp_vol<=100){
+ char tmp_bat[20]={0},tmp_sig[20]={0},tmp_vol[20]={0},tmp_bargein[20]={0};
- bk_printf("temp_vol:%d",temp_vol);
- vc_cfg.VC_TTS_volume=temp_vol;
+ cJSON_AddStringToObject(root, "cmd", "device_info");
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+ ts_radio_signal_info_t p_signal_info;
+ int32_t ret = 0;
- }
+ ret = aic_srv_tele_radio_get_signal_info_sync(current_card_id, &p_signal_info);
- }
- // if(is_guanji==0)
- // send_express_str(action_str);
- }
+ // p_signal_info.signal_level_val
- }
+ struct psy_info psy_info;
+ get_psy_info(&psy_info);
- }
+ // psy_info.bat_capacity
- if(strstr(json_data,"emotion")){
+ sprintf(tmp_bat,"%d",psy_info.bat_capacity);
- bk_printf("emotion");
+ sprintf(tmp_sig,"%d",p_signal_info.signal_level_val);
- tts_start_timerout=0;
+ sprintf(tmp_vol,"%d",vc_cfg.VC_TTS_volume);
- char *str_tmp = NULL;
+ sprintf(tmp_bargein,"%d",vc_cfg.VC_mode);
- char emotion_str[500]={0};
+ cJSON_AddStringToObject(cmd_data, "battery", tmp_bat);
- str_tmp = strstr(json_data,"\"data\":\"");
-
- // bk_printf("str_tmp:%p",str_tmp);
+ cJSON_AddStringToObject(cmd_data, "wifi_rssi", tmp_sig);
- if(str_tmp)//解析password
- {
+ cJSON_AddStringToObject(cmd_data, "volume", tmp_vol);
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(emotion_str))
- {
+ cJSON_AddStringToObject(cmd_data, "current_role_name", "fx01");
-
- memcpy(emotion_str,str_tmp,count);
- emotion_str[count] = 0;
- bk_printf("emotion_str:%s",emotion_str);
+ cJSON_AddStringToObject(cmd_data, "version", "V1.2");
- if(is_guanji==0)
- send_express_str(emotion_str);
- }
+ cJSON_AddStringToObject(cmd_data, "bargein", tmp_bargein);
- }
+ // bargein
+
+
}
+
+
+ // 将 "payload" 对象添加到根对象中
- if(strstr(json_data,"tts_audio_url")){
+ cJSON_AddItemToObject(root, "data", cmd_data);
- bk_printf("tts_audio_url");
- char *str_tmp = NULL;
- char mp3_path_str[500]={0};
+ // 将 JSON 对象转换为字符串
+
+ //cJSON_PrintUnformatted
- str_tmp = strstr(json_data,"\"data\":\"");
+ 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("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))
- {
+ bk_printf(json_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;
+ if(type==4){
- // AI_AMP_MSG_put("请稍后,现在为你查找音乐",strlen("请稍后,现在为你查找音乐"),VC_TTS_PLAY);
+ bk_printf("SEND iot_v3 message");
- // aos_sleep(4000);
+ int ret=send_websocket_message(AI_client_IOT,json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);
- AI_VC_send_music_start(mp3_path_str);
+ bk_printf("SEND iot_v3 success message: %d",ret);
- }
- }
+ }else{
- // IOT_update_statu(3,"","");
+ unsigned char frame[500]={0};
- // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x03;
- }
+ // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
- if(strstr(json_data,"get_device_state")){
+ short temp=strlen(json_str);
+ memcpy(frame+3,&temp,2);
- bk_printf("get_device_state");
+ memcpy(frame+5,json_str,strlen(json_str));
- // IOT_update_statu(3,"","");
+ uint16_t crc = modbus_crc16(json_str,strlen(json_str));
- // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
+ uint8_t crc_low = crc & 0xFF;
+
+ uint8_t crc_high = (crc >> 8) & 0xFF;
+
+ frame[5+strlen(json_str)]=crc_low;
+
+ frame[6+strlen(json_str)]=crc_high;
+
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+
+ bk_printf("the send str is %d ",7+strlen(json_str));
+
+ send_iot_message(AI_client_IOT,frame,7+strlen(json_str));
}
-
- if(strstr(json_data,"find_device")){
- bk_printf("find_device");
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
- AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
+void IOT_V3_update_statu(int type,char *type_str,char *content)
+{
+
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
}
- if(strstr(json_data,"renew_device")){
+ cJSON *cmd_data = cJSON_CreateObject();
- bk_printf("renew_device");
+ if (cmd_data == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+ // 设置 "event"
+ long timestamp;
- IOT_update_bargein();
+ timestamp = time(NULL);
+ bk_printf("2时间戳: %ld\n", (long)timestamp);
+ long long timestamp_ms = (long long)timestamp * 1000;
+ char timestamp_str[20] ={0};
- if(vc_cfg.VC_mode == 0)
- {
- AI_AMP_MSG_put("已切换到连续对话模式。",strlen("已切换到连续对话模式。"),VC_TTS_PLAY);
+ // 使用 sprintf 将 long long 类型的时间戳转换为字符串
+ int ret12 = sprintf(timestamp_str, "%lld", timestamp_ms);
+ timestamp_str[ret12] =0;
- //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
- {
+ if(type==1){
- // app_audio_set_master_volume(15*80/100);
- AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
- }
+ cJSON_AddStringToObject(root, "cmd", "chat_state");
- // IOT_V3_update_statu(3,"","");
- save_VC_cfg();
+ cJSON_AddStringToObject(root, "msg", "当前服务状态上传");
- }
+ cJSON_AddNumberToObject(root, "ts", timestamp_ms);
- if(strstr(json_data,"switch_volume"))
- {
+ cJSON_AddStringToObject(cmd_data, "state", type_str);
- // bk_printf("switch_volume");
+ cJSON_AddStringToObject(cmd_data, "deviceId", vc_cfg.dev_imei);
- char *str_tmp = NULL;
+ // cJSON_AddStringToObject(cmd_data, "ts", timestamp_str);
- char volume_str[5]={0};
+ // cJSON_AddNumberToObject(cmd_data, "ts", timestamp_ms);
- 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);
+ if(type==2){
- int temp_vol=atoi(volume_str);
-
- if(temp_vol>=0&&temp_vol<=100)
- {
+
+ // 打印转换后的字符串形式的时间戳
+ bk_printf("2时间戳(ms 转换为字符串): %s\n", timestamp_str);
- vc_cfg.VC_TTS_volume = temp_vol;
-
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+ cJSON_AddStringToObject(root, "cmd", "chat_text");
- char tts_temp[200]={0};
+ cJSON_AddStringToObject(cmd_data, "deviceId", vc_cfg.dev_imei);
+ cJSON_AddStringToObject(cmd_data, "type", type_str);
- sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+ cJSON_AddStringToObject(cmd_data, "text", content);
- AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+ cJSON_AddStringToObject(cmd_data, "createTime", timestamp_str);
+
+ }
+
+ if(type==3){
- //is_save_VC_cfg = 1;
+ char tmp_bat[20]={0},tmp_sig[20]={0},tmp_vol[20]={0},tmp_bargein[20]={0},tmp_charge[20]={0};
- save_VC_cfg();
- }
+ cJSON_AddStringToObject(root, "cmd", "device_info");
-
-
- }
- else
- {
- bk_printf("获取volume失败");
- }
- }
- }
+ cJSON_AddNumberToObject(root, "ts", timestamp_ms);
+ cJSON_AddStringToObject(root, "msg", "上报设备信息");
-}
+ cJSON_AddStringToObject(cmd_data, "deviceId", vc_cfg.dev_imei);
+ ts_radio_signal_info_t p_signal_info;
+ int32_t ret = 0;
-static void AI_IOT_read_task(void *thread_input)//websocket 读线程
- {
+ ret = aic_srv_tele_radio_get_signal_info_sync(current_card_id, &p_signal_info);
- 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)
- {
+ // p_signal_info.signal_level_val
- 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");
+ struct psy_info psy_info;
+ get_psy_info(&psy_info);
- // aos_sleep(50);
+ // psy_info.bat_capacity
+
+ sprintf(tmp_bat,"%d",psy_info.bat_capacity);
+
+ sprintf(tmp_sig,"%d",p_signal_info.signal_level_val);
+
+ sprintf(tmp_vol,"%d",vc_cfg.VC_TTS_volume);
+
+ sprintf(tmp_bargein,"%d",vc_cfg.VC_mode);
+
+ sprintf(tmp_charge,"%d",psy_info.bat_chg_status);
+
+ cJSON_AddStringToObject(cmd_data, "battery", tmp_bat);
+
+ cJSON_AddStringToObject(cmd_data, "wifi_rssi", tmp_sig);
+
+ cJSON_AddStringToObject(cmd_data, "volume", tmp_vol);
+
+ // cJSON_AddStringToObject(cmd_data, "bargein", "1");
- // u32 timer_ms11 = aos_get_tickcount();
+ bk_printf("the vc_mode is %d",vc_cfg.VC_mode);
- // bk_printf("IOT_read_task...... 12");
+ if(vc_cfg.VC_mode==0)
+ cJSON_AddStringToObject(cmd_data, "bargein", "1");
+ else
+ cJSON_AddStringToObject(cmd_data, "bargein", "0");
- status = receive_websocket_message_V3(AI_client_IOT,recv_buff,recv_buff_mxa_len,&code);
- if(AI_VC_stata==0)
- {
- aos_sleep(100);
- continue;
+ cJSON_AddStringToObject(cmd_data, "currentRoleName", "fx01");
- }
-
-
+ cJSON_AddStringToObject(cmd_data, "version", "V1.2");
- // 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]);
+ cJSON_AddStringToObject(cmd_data, "charge", tmp_charge);
+
+ // bargein
- // bk_printf("IOT_read_task...... 13");
+ }
+
+
+ // 将 "payload" 对象添加到根对象中
- if(code == WS_TEXT)//字符串
- {
- //bk_printf("AI_VC_read_task 3");
- // bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
-
- }else{
+ cJSON_AddItemToObject(root, "data", cmd_data);
- if(status>8){
+ // 将 JSON 对象转换为字符串
- // bk_printf("read TEXT:status:%d",status);
+ // cJSON_PrintUnformatted
- char jsonstr[500]={0};
+ char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
- memcpy(jsonstr,recv_buff+8,status-8);
- // bk_printf("read json TEXT:status:%s",jsonstr);
+ bk_printf(json_str);
- deal_iot_receive(jsonstr);
- }
+ unsigned char frame[500]={0};
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x01;
+ frame[3]=0x03;
- }
-
- if(status>0)
- {
+ // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+ short temp=strlen(json_str);
+ // memcpy(frame+3,&temp,2);
- }else{
+ frame[7]=temp;
- break;
- }
+ memcpy(frame+8,json_str,strlen(json_str));
- aos_sleep(100);
- }else{
+ bk_printf("start SEND123 iot_v3 success message: %d",strlen(json_str));
- break;
- }
+ int ret=send_websocket_message(AI_client_IOT,frame,strlen(json_str)+8,AIC_WEBSOCKET_OPCODE_BINARY_FRAME);
- }
+ // int ret=send_iot_message(AI_client_IOT,json_str,strlen(json_str));
- if(recv_buff)
- {
- aic_free(recv_buff);
- recv_buff = NULL;
- }
+ bk_printf("SEND iot_v3 success message: %d",ret);
- AI_client_IOT=NULL;
-
- AI_VC_read_IOT_id=0;
- bk_printf("AI_IOT_read_task exit\n");
- // AI_VC_read_task_flag=3;
- }
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
void IOT_V3_heart()
{
// if(type==4){
- // bk_printf("SEND iot_v3 message");
+ bk_printf("SEND iot_v3 message");
unsigned char frame[500]={0};
frame[0]=0xFF;
cJSON_Delete(root);
}
-#define IOT
+void IOT_heart(){
+
+
+ return ;
+
+ unsigned char frame[10]={0};
+
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x02;
+
+ int ret=send_iot_message(AI_client_IOT,frame,3);
+
+ if(ret==-1&&AI_client_IOT!=NULL){
+
+ bk_printf("发送IOT消息失败");
+ close(AI_client_IOT->sockfd);
+
+ AI_client_IOT=NULL;
+
+ }
+
+}
+
+// #include <stdio.h>
+// #include <stdint.h>
+
+// int main() {
+// uint8_t data[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01};
+// uint16_t length = sizeof(data) / sizeof(data[0]);
+// uint16_t crc = modbus_crc16(data, length);
+// uint8_t crc_low = crc & 0xFF;
+// uint8_t crc_high = (crc >> 8) & 0xFF;
+// printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+// return 0;
+// }
+
+static void IOT_login(int type)
+{
+
+ return ;
+ unsigned char frame[200]={0};
+
+ //0xFFFE
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x00;
+
+ memcpy(frame+3,vc_cfg.dev_imei,strlen(vc_cfg.dev_imei));
+
+ memcpy(frame+23,get_token(),strlen(get_token()));
+
+ uint16_t crc = modbus_crc16(get_token(),strlen(get_token()));
+
+ uint8_t crc_low = crc & 0xFF;
+
+ uint8_t crc_high = (crc >> 8) & 0xFF;
+
+ frame[59]=crc_low;
+
+ frame[60]=crc_high;
+
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+
+ send_iot_message(AI_client_IOT,frame,61);
+
+}
+
+ #define IOT
//连接websocket
static int websocket_connect_VC(void)
{
goto CONNECT_RET;
}
- //provider=coze&
- //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());
free_all_websocket_res();
}
+ // ws://118.145.159.222:30700/ws-hub/dev/v1?bz-dt=%s
+
+ // char *url_socket="s是的";
+ // char *ws_iot_url="iot.socket.thisiot.com:60501";
+
+
-
AI_client_VC = init_websocket_client(url,NULL);
#ifdef IOT
{
AI_VC_read_IOT_id = aos_create_thread(
"AI_VC_read",
- AI_IOT_read_task,// AI_VC_IOT_task //AI_IOT_read_task
+ AI_IOT_read_task,// AI_VC_IOT_task,//AI_IOT_read_task
&AI_VC_read_IOT_id,
4096u,
0,
// IOT_login(1);
-
+ // aos_sleep(200);
+
+ // // char *iotmessage="{\"cmd\":\"get_bot\",\"data\":\"\"}";
+
+ // IOT_V3_update_statu(1,"idle","");
+
+ // aos_sleep(200);
+ // IOT_update_statu(2,"res","12312312");
+
+ // aos_sleep(200);
IOT_V3_heart();
+ // aos_sleep(200);
+ // IOT_V3_update_statu(1,"idle","");
+ // aos_sleep(200);
+
+ // IOT_heart();
// send_iot_message(AI_client_IOT,iotmessage,strlen(iotmessage));
// 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)
{
return;
aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
- // bk_printf("AI_VC_put_play_data:count_tmp = %d",count_tmp);
+ // bk_printf("AI_VC_put_play_data:count_tmp = %d",count_tmp);
if(count_tmp>150)//大于100个缓存
{
// 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)
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);
-
- }
-
}
void VC_record_Start(void)
{
bk_printf("VC_record_Start");
-
- // is_dialog_status=0;
//创建录音线程
if(AI_VC_record_task_id == 0)
{
}
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;
-
+ is_need_tip=1;
+ 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--;
if(VC_pingping_timerout <= 0)
{
+ issend_start_up=2;
AI_VC_send_ping_ping();
}
}
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);
- // 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)
// }
}
char AI_key_long_flag = 0;
+
+
void AI_key_press(void)
{
static u64 timer_ms = 0;
// IOT_update_statu(1);
- // IOT_update_statu(3,"","");
+ issend_start_up=2;
+
+ send_update=0;
+
+ IOT_V3_update_statu(3,"","");
+
+ IOT_V3_heart();
- // IOT_heart();
+ // IOT_V3_update_statu(4,"","");
bk_printf("AI_key_press1");
- IOT_V3_heart();
+ play_file_stream_data("C:/chenggong.pcm");
+
+ // is_need_tip=1;
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)
void AI_key_release(void)
{
-
- AI_key_long_flag = 0;
-
if(vc_cfg.VC_mode ==1)
{
AI_AMP_MSG_put("请您按住按钮讲话,讲完松开即可。",strlen("请您按住按钮讲话,讲完松开即可。"),VC_TTS_PLAY);
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)
{
goto AI_VC_start_RET;
AI_VC_start_lock = 1;
- //
-
bk_printf("AI_VC_start !!!!!!!! ");
//play_file_stop();//先关闭一次本地文件音频播放
VC_state = VC_State_None;
// 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);
// 启用VAD时初始化
-
struct VadConfig conf;
conf.sil_threshold = 63;
- conf.energy_threshold = 10000;//10000 2000;
- conf.min_speech_length = 240;//240
- conf.silence_detect_length = 300;
- conf.rule1_min_tailing_silence = 480;
+ conf.energy_threshold = 10000;
+ conf.min_speech_length = 240;//pre 240
+ conf.silence_detect_length = 300;//pre 300
+ conf.rule1_min_tailing_silence = 480;//pre 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;
-
strcpy(conf.auth_info.dmp_token, get_token());
static int imsl_nn_init_flag = -1;
if (imsl_nn_init_flag != 0) {
}
- #if BK_SOCKET_IOT
- IOT_update_statu(1,"listening","");
- #endif
+
+ IOT_V3_update_statu(1,"listening","");
+
net_status_count=0;
- //aos_sleep(5);
- AI_VC_send_satrt(is_greeting);//
+
+
+
+ //else{
+
+ // aos_sleep(50);
+ AI_VC_send_satrt(is_greeting);
+ // }
+
+ // aos_sleep(50);
+
+ // AI_VC_send_satrt(is_greeting);//
close_timerout = 0;
AI_VC_start_RET:
AI_VC_start_lock = 0;
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;
// 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();//断开连接
//销毁录音线程
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);
}
-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};
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;
}
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);
+ AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT_IOT);
-
- //IOT_heart();
-
+
}
-
static void sys_60S_timeout_even(void)
{
- // bk_printf("sys_60S_timeout_even");
+ bk_printf("sys_60S_timeout_even");
- if(AI_client_IOT!=NULL&&close_timerout>0){
+ if(AI_client_IOT!=NULL){
IOT_V3_heart();
}
-}
+}
+
+static void sys_10S_timeout_even(void)
+{
+ // if (sizeof(dev_pass) == 0)
+ // aut_active();//没有密钥走激活
+ // //每小时登录一次
+ // aut_login();
+ static u8 chg_status_tmp = 0;
+ static u8 is_Low_power_warning = 0;
+
+ char timeString[50]={0};
+ time_t currentTime;
+
+ login_timer_count++;
+
+ //time_t currentTime;
+ //time(¤tTime);
+
+ /* 将时间转换为可读性更好的字符串 */
+
+ // strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", localtime(¤tTime));
+
+ // time(¤tTime);
+
+ /* 将秒数转换为本地时间 */
+ // struct tm* localTime = localtime(¤tTime);
+
+ /* 打印日期和时间 */
+
+
+
+// if(vc_cfg.alarm_count>0){
+
+// aos_systime test;
+// aos_get_systime(&test);
+// sprintf(timeString,"%d:%02d",test.hour,test.minute);
+// //bk_printf("系统时间为:%s",timeString);
+// // bk_printf("闹钟个数为:%d",vc_cfg.alarm_count);
+// for(int i=0;i<vc_cfg.alarm_count;i++) {
+// // bk_printf("闹钟时间为:%s",vc_cfg.alarm_name[i]);
+
+// if(strstr(vc_cfg.alarm_name[i],timeString)&&strlen(vc_cfg.alarm_name[i])>0){
+// if(test.second<30){
+// char tipstr[300]={0};
+// // bk_printf("系统时间为:%d %d",test.hour,test.minute);
+// sprintf(tipstr,"%s时间到了,请安排好行程",vc_cfg.alarm_content[i]);
+// AI_AMP_MSG_put(tipstr,strlen(tipstr),VC_TTS_PLAY);
+// }
+// }
+// }
+// }
+
+ // if(test.hour==10&&test.minute==45&&test.second<20){
+
+ // bk_printf("系统时间为:%d %d",test.hour,test.minute);
+
+ // AI_AMP_MSG_put("闹钟时间到了,请安排好行程",strlen("闹钟时间到了,请安排好行程"),VC_TTS_PLAY);
+
+ // // if(play_f)
+ // // play_file_stream_data("C:/alarm.pcm");
+
+ // }
-static void sys_10S_timeout_even(void)
-{
- // if (sizeof(dev_pass) == 0)
- // aut_active();//没有密钥走激活
- // //每小时登录一次
- // aut_login();
- static u8 chg_status_tmp = 0;
- static u8 is_Low_power_warning = 0;
- login_timer_count++;
if(login_timer_count>60*6)
{
login_timer_count = 0;
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_250733_5";
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 = 150;
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");
+ // play_audio_file("C:/R_POWER_1.mp3");
// aic_get_version(FXH01_Version,sizeof(FXH01_Version));
// snprintf(FXH01_Version,sizeof(FXH01_Version),"FX01H_%s",bk_make_timer);
// 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);
+ bk_printf("FXH01_Version:%s",FXH01_Version);
+ bk_printf("FXH01_Version:%s",FXH01_Version);
+ bk_printf("FXH01_Version:%s",FXH01_Version);
- 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);
- }
-
-
- 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 --)
{
break;
bk_printf("AI_AMP_2_5_init 等待注网..... \n");
- // audio_play_tone(count%15,500);//播放提示音,测试用
- // audio_play_tone(3,500);//播放提示音,测试用
-
- aos_sleep(1000);
- }
+ //audio_play_tone(count%15,500);//播放提示音,测试用
+ //audio_play_tone(3,500);//播放提示音,测试用
+ aos_sleep(200);
}
bk_websocket_demo();
// aos_sleep(5000);
-
-
ota_update_version();
// if(strlen(ota_url)>3){
dev_authentication_init();
- count =50;
+ aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);//lcd open ldo
+
+ count =500;
while(count --)
{
if(strlen(get_token()) > 5)
break;
}
bk_printf("AI_AMP_2_5_init 等待鉴权..... \n");
- aos_sleep(200);
+ aos_sleep(20);
}
if(sys_10S_timer == NULL)
aic_assert(sys_10S_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",
sys_60S_timeout, &AI_VC_60S_timer,
- 50000,
+ 30000,
AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
aic_assert(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",
- // sys_60S_timeout, &AI_VC_60S_timer,
- // 60000,
- // AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
- // aic_assert(AI_VC_60S_timer);
- // }
bk_printf("auth_vad token0: %s..... \n",get_token());
struct AuthInfo auth_info;
- // dmp_log_level = 10086;
-
- // auth_info.server_addr=2;
+ // strcpy(auth_info.dmp_token, get_token());
- strcpy(auth_info.dmp_token, get_token());
-
- if(strlen(auth_info.dmp_token)>0){
+ // if(strlen(auth_info.dmp_token)>0){
- for(int i=0;i<40;i++){
-
- int ret=auth_vad(&auth_info);
-
- if(ret==0){
-
- bk_printf("auth_vad fail token: %s..... \n",get_token());
-
- }
- else
- {
-
- bk_printf("auth_vad success token: %s..... \n",get_token());
-
- auth_vad_status=1;
-
- break;
-
- }
-
- aos_sleep(100);
-
- }
-
- for(int i=0;i<40;i++){
+ // for(int i=0;i<3;i++){
+ // int ret=auth_vad(&auth_info);
- int ret=auth_kws(&auth_info);
+ // if(ret==0){
- if(ret==0){
+ // bk_printf("auth_vad fail token: %s..... \n",get_token());
- bk_printf("auth_kws fail token: %s..... \n",get_token());
-
- }
- else
- {
+ // }else{
- bk_printf("auth_kws success token: %s..... \n",get_token());
+ // bk_printf("auth_vad success token: %s..... \n",get_token());
- auth_kws_status=1;
-
- break;
-
- }
-
- aos_sleep(100);
-
- }
-
- 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)
- {
+ // auth_vad_status=1;
+ // break;
- // play_audio_file_event("C:/xinhaoruo1.mp3");
+ // }
- // aos_sleep(500);
+ // }
+ // }else{
- }
+ // play_audio_file_event("C:/xinhaoruo1.mp3");
+ // }
+ // if(auth_vad_status==0){
- }
- else
- {
+ // play_audio_file_event("C:/xinhaoruo1.mp3");
- // play_audio_file_event("C:/xinhaoruo1.mp3");
- }
+ // aos_sleep(2000);
-
+ // }
#ifdef exptest
- aos_sleep(500);
+ aos_sleep(50);
ui_uart_handle = uart_open(2);
// 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);
+ // uart_write(ui_uart_handle,cmd_ui, 7);
}else{
}
- 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);
+
+
+ AI_VC_start(0);
+
+
}
else{
VC_TTS_Play(vc_cfg.power_on_tone);//开启vc播放tts
}
-
-
-
while (1) {
if(AI_AMP_task_queue)
{
//发送打断
//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);//打开声音
+ 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);
break;
case AI_KEY_PRESS:
- // is_dialog_status=0;
-
AI_key_press();
break;
case AI_TIMER_EVENT:
sys_10S_timeout_even();
break;
- case AI_TIMER_EVENT_IOT:
+
+ case AI_TIMER_EVENT_IOT:
sys_60S_timeout_even();
break;
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;
}
aic_free(AI_AMP_msg.data);
}else
{
- aos_sleep(10);
+ aos_sleep(10);
}
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,
NULL,
ai_VC_task_priority,
AOS_AUTO_START);
- bk_key_init();
-
+
return AIC_SUCCESS;
}
char *request =aic_zalloc(BUFFER_SIZE);
if(headers!= NULL)
{
+
+ bk_printf("headers12");
snprintf(request, BUFFER_SIZE,
"GET /%s?%s HTTP/1.1\r\n"
"Host: %s:%d\r\n"
client->path,client->query ,client->host,client->port, accept_key,client->host,client->port,headers);
}else
{
+
+ bk_printf("headers13");
snprintf(request, BUFFER_SIZE,
"GET /%s?%s HTTP/1.1\r\n"
"Host: %s:%d\r\n"
}
+// 发送 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;
+ // }
+
+ bk_printf("receive_iot_message.................................");
+
+ 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) {
return payload_len;//parse_frame(buf, bytes_received, buf,code);
}
-// 初始化 WebSocket 客户端
-WebSocketClient *init_websocket_client(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 )
+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)
{
- bk_printf("init_websocket_client getaddrinfo error");
- goto client_ERROR;
- }
+ bytes_received = recv(client->sockfd, frame, 1, 0);
- 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("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( connect( client->sockfd , cur->ai_addr, (int)cur->ai_addrlen ) == 0 )
+ 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;
+
- close( client->sockfd );
-
+ 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;
}
- freeaddrinfo(addr_list); // 释放资源
- if(client->sockfd<0)
+ if(payload_len>len)
{
- bk_printf("init_websocket_client connect error");
- goto client_ERROR;
+ bk_printf("receive_websocket_message:len =%d ERROR",payload_len);
+ recv(client->sockfd, buf, len, 0);
+ return -1;
}
- 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;
- }
-
- buffer=aic_zalloc(BUFFER_SIZE);
- ssize_t bytes_received = recv(client->sockfd, buffer, BUFFER_SIZE - 1, 0);
- 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)
- {
+ // 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) {
- 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;
-}
+ 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;
+ }
-// 关闭 WebSocket 客户端
-void close_websocket_client(WebSocketClient *client) {
- if(client)
+ 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)
{
- soc_close(client->sockfd);
- aic_free(client);
+ for (size_t i = 0; i < payload_len; ++i) {
+ buf[i] = buf[i] ^ masking_key[i % 4];
+ }
}
-}
-int http_get_client(const char *url, const char *headers,const char *Content_Type,char* response,int response_len);
-int bk_websocket_demo(void) {
- // WebSocketClient *client;
- // client = init_websocket_client("ws://118.145.158.207:22086/vc/coze?is_auth=0",NULL);
- // if (client== NULL) {
- // return -1;
+ // 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);
// }
- // close_websocket_client(client);
- // aos_sleep(2);
- // char *response =aic_zalloc(BUFFER_SIZE);
- // //char *url = "http://dmp.raisound.com/sv/vad/auth/token?nonceStr=abc&sign=3470327e8eee163f00d5f54cc936d32595189b16d1e89c2b50155b80227c85d0×tamp=1750406765243&token=9542143a532adc10ec6ee530cd1824d53b";
- // char *url = "http://dmp.raisound.com/bz-mp-api/sv/vad/auth/token?nonceStr=abc&sign=3470327e8eee163f00d5f54cc936d32595189b16d1e89c2b50155b80227c85d0×tamp=1750406765243&token=9542143a532adc10ec6ee530cd1824d53b";
- // http_get_client(url,"bz-dt:9542143a532adc10ec6ee530cd1824d53b","application/x-www-form-urlencoded",response,BUFFER_SIZE);
- // bk_printf("http GET data:%s",response);
- // aic_free(response);
- return 0;
-}
-
-/************************http*********************************** */
+ // 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)
+ {
-// WebSocket 客户端结构体
-typedef struct {
- int sockfd;
- char host[128];
- char path[128];
- char query[512];
- int port;
-} httpClient;
-int send_http_get_handshake(httpClient *client,const char *headers,const char *Content_Type) {
- char key[WEBSOCKET_KEY_LEN];
- bk_printf("send_handshake1");
- generate_websocket_key(key);
- char accept_key[64];
- int ret = 0;
- generate_accept_key(key, accept_key);
- bk_printf("send_handshake2");
- char *request =aic_zalloc(BUFFER_SIZE);
- if(headers!= NULL)
+ }else if(*code == WS_BINARY)
{
- snprintf(request, BUFFER_SIZE,
- "GET /%s?%s HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
- "Content-Type: %s\r\n"
- "Connection: close\r\n"
- "%s\r\n"
- "\r\n",
- client->path,client->query ,client->host,client->port,Content_Type,headers);
- }else
+
+ }else if(*code == WS_CLOSE)
{
- snprintf(request, BUFFER_SIZE,
- "GET /%s?%s HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
- "Content-Type: %s\r\n"
- "Connection: close\r\n"
- "\r\n",
- client->path,client->query , client->host,client->port,Content_Type);
+ 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);
- bk_printf("send_handshake request:\r\n%s",request);
- if (send(client->sockfd, request, strlen(request), 0) < 0) {
- bk_printf("send handshake failed :sockfd:%d",client->sockfd);
-
- ret = -1;
- }
- bk_printf("send_handshake3");
- aic_free(request);
- return ret;
+
+ // 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);
}
-//http get 客户端
-int http_get_client(const char *url, const char *headers,const char *Content_Type,char* response,int response_len) {
- //bk_printf("init_websocket_client 1\n");
- httpClient *client =NULL;
+// 初始化 WebSocket 客户端
+WebSocketClient *init_websocket_client(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);
bk_printf("Query: %s", parsed_url.query);
}
- client = aic_zalloc(sizeof(httpClient)) ;
+ client = aic_zalloc(sizeof(WebSocketClient)) ;
if(!client)
{
- bk_printf("http_get_client alloc error");
+ bk_printf("init_websocket_client alloc error");
goto client_ERROR;
}
struct addrinfo hints, *addr_list, *cur;
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("getaddrinfo error");
+ bk_printf("init_websocket_client getaddrinfo error");
goto client_ERROR;
}
}
close( client->sockfd );
+
+
+ }
+ freeaddrinfo(addr_list); // 释放资源
+ if(client->sockfd<0)
+ {
+ bk_printf("init_websocket_client connect error");
goto client_ERROR;
- bk_printf("http_get_client connect error");
}
- freeaddrinfo(addr_list); // 释放资源
- bk_printf("http_get_client connect ok,sockfd:%d",client->sockfd);
+
+ 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_http_get_handshake(client,headers,Content_Type) < 0) { //发送头
+ if (send_handshake(client,headers) < 0) { //发送头
close(client->sockfd);
goto client_ERROR;
}
-
- ssize_t bytes_received = recv(client->sockfd, response, response_len-1, 0);
+ buffer=aic_zalloc(BUFFER_SIZE);
+ ssize_t bytes_received = recv(client->sockfd, buffer, BUFFER_SIZE - 1, 0);
if (bytes_received > 0) {
- response[bytes_received] = '\0';
- bk_printf("Received handshake response:\n%s\n", response);
- }else
- {
- bk_printf("recv error bytes_received %d", recv);
+ buffer[bytes_received] = '\0';
+ bk_printf("Received handshake response:\n%s\n", buffer);
}
- // if(strstr(buffer,"HTTP/1.1 101") == NULL)
- // {
+ if(strstr(buffer,"HTTP/1.1 101") == NULL)
+ {
- // goto client_ERROR;
- // }
- close(client->sockfd);
+ goto client_ERROR;
+ }
+ aic_free(buffer);
free_url(parsed_url);
- if(client)
- aic_free(client);
- return bytes_received;
+ return client;
client_ERROR:
-
+ if(buffer)
+ aic_free(buffer);
if(client)
aic_free(client);
free_url(parsed_url);
- return -1;
+ return NULL;
}
WebSocketClient *init_websocket_IOT_V3(const char *url, const char *headers)
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;
+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);
+
// }
-
- while(1)
+
+
+ client = aic_zalloc(sizeof(WebSocketClient)) ;
+ if(!client)
{
- bytes_received = recv(client->sockfd, frame, 1, 0);
+ bk_printf("init_websocket_IOT alloc error");
+ goto client_ERROR;
+ }
- // bk_printf("receive_websocket_message:frame:0x%x,bytes_received:%d",frame[0],bytes_received);
+ 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 (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)
+ //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 )
{
- 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);
+ continue;
+ }
- 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
+ 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("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;
+ bk_printf("init_websocket_client 4\n");
- 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;
+ freeaddrinfo(addr_list); // 释放资源
+ if(client->sockfd<0)
+ {
+ bk_printf("init_websocket_IOT connect error");
+ goto client_ERROR;
}
- if(payload_len>len)
+
+ 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)
{
- bk_printf("receive_websocket_message:len =%d ERROR",payload_len);
- recv(client->sockfd, buf, len, 0);
- return -1;
+ soc_close(client->sockfd);
+ aic_free(client);
}
- // bk_printf("receive_websocket_message :");
- // for(int i = 0;i<offset;i++)
- // {
- // bk_printf("%02X",frame[i]);
+}
+int http_get_client(const char *url, const char *headers,const char *Content_Type,char* response,int response_len);
+int bk_websocket_demo(void) {
+ // WebSocketClient *client;
+ // client = init_websocket_client("ws://118.145.158.207:22086/vc/coze?is_auth=0",NULL);
+ // if (client== NULL) {
+ // return -1;
// }
- // 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;
- }
+ // close_websocket_client(client);
+ // aos_sleep(2);
+ // char *response =aic_zalloc(BUFFER_SIZE);
+ // //char *url = "http://dmp.raisound.com/sv/vad/auth/token?nonceStr=abc&sign=3470327e8eee163f00d5f54cc936d32595189b16d1e89c2b50155b80227c85d0×tamp=1750406765243&token=9542143a532adc10ec6ee530cd1824d53b";
+ // char *url = "http://dmp.raisound.com/bz-mp-api/sv/vad/auth/token?nonceStr=abc&sign=3470327e8eee163f00d5f54cc936d32595189b16d1e89c2b50155b80227c85d0×tamp=1750406765243&token=9542143a532adc10ec6ee530cd1824d53b";
+ // http_get_client(url,"bz-dt:9542143a532adc10ec6ee530cd1824d53b","application/x-www-form-urlencoded",response,BUFFER_SIZE);
+ // bk_printf("http GET data:%s",response);
+ // aic_free(response);
+ return 0;
+}
-
- bytes_received = 0;
- // payload_len-=1;//少读一个字节,防止粘包
- //bk_sleep(1);
- while(1)//读主体内容
+/************************http*********************************** */
+
+// WebSocket 客户端结构体
+typedef struct {
+ int sockfd;
+ char host[128];
+ char path[128];
+ char query[512];
+ int port;
+} httpClient;
+int send_http_get_handshake(httpClient *client,const char *headers,const char *Content_Type) {
+ char key[WEBSOCKET_KEY_LEN];
+ bk_printf("send_handshake1");
+ generate_websocket_key(key);
+ char accept_key[64];
+ int ret = 0;
+ generate_accept_key(key, accept_key);
+ bk_printf("send_handshake2");
+ char *request =aic_zalloc(BUFFER_SIZE);
+ if(headers!= NULL)
{
- // 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);
+ snprintf(request, BUFFER_SIZE,
+ "GET /%s?%s HTTP/1.1\r\n"
+ "Host: %s:%d\r\n"
+ "Content-Type: %s\r\n"
+ "Connection: close\r\n"
+ "%s\r\n"
+ "\r\n",
+ client->path,client->query ,client->host,client->port,Content_Type,headers);
+ }else
+ {
+ snprintf(request, BUFFER_SIZE,
+ "GET /%s?%s HTTP/1.1\r\n"
+ "Host: %s:%d\r\n"
+ "Content-Type: %s\r\n"
+ "Connection: close\r\n"
+ "\r\n",
+ client->path,client->query , client->host,client->port,Content_Type);
+ }
+
+ bk_printf("send_handshake request:\r\n%s",request);
+ if (send(client->sockfd, request, strlen(request), 0) < 0) {
+ bk_printf("send handshake failed :sockfd:%d",client->sockfd);
+
+ ret = -1;
+ }
+ bk_printf("send_handshake3");
+ aic_free(request);
+ return ret;
+}
+//http get 客户端
+int http_get_client(const char *url, const char *headers,const char *Content_Type,char* response,int response_len) {
+ //bk_printf("init_websocket_client 1\n");
- // bk_printf("recv_len %d %d",payload_len,recv_len);
+ httpClient *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);
- 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;
+ }
+ client = aic_zalloc(sizeof(httpClient)) ;
+ if(!client)
+ {
+ bk_printf("http_get_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("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;
}
- bytes_received += recv_len;
-
- //bk_printf("receive_websocket_message:bytes_received=%d recv_len =%d",bytes_received,recv_len);
- if(bytes_received >= payload_len)
+ if( connect( client->sockfd , cur->ai_addr, (int)cur->ai_addrlen ) == 0 )
{
- //bk_printf("receive_websocket_message:payload_len=%d,bytes_received=%d",payload_len,bytes_received);
+
break;
}
-
+
+ close( client->sockfd );
+ goto client_ERROR;
+ bk_printf("http_get_client connect error");
}
- //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];
- }
+ freeaddrinfo(addr_list); // 释放资源
+ bk_printf("http_get_client connect ok,sockfd:%d",client->sockfd);
+
+
+
+ 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_http_get_handshake(client,headers,Content_Type) < 0) { //发送头
+ close(client->sockfd);
+ goto client_ERROR;
}
-
- // 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)
+ ssize_t bytes_received = recv(client->sockfd, response, response_len-1, 0);
+ if (bytes_received > 0) {
+ response[bytes_received] = '\0';
+ bk_printf("Received handshake response:\n%s\n", response);
+ }else
{
- //payload_len = 1;
+ bk_printf("recv error bytes_received %d", recv);
}
- 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))
+ // if(strstr(buffer,"HTTP/1.1 101") == NULL)
// {
- // frame_t_len=sizeof(frame_t);
+
+ // goto client_ERROR;
// }
- // memcpy(frame_t,frame,frame_t_len);
-
+ close(client->sockfd);
+ free_url(parsed_url);
+ if(client)
+ aic_free(client);
+ return bytes_received;
+client_ERROR:
- return payload_len;//parse_frame(buf, bytes_received, buf,code);
+ if(client)
+ aic_free(client);
+ free_url(parsed_url);
+ return -1;
}