#include "app_msg.h"
#include "aic_ogg.h"
#include "efuse.h"
-#if SUPPORT_MOT
-#include "mot_dev.h"
-#endif
-#include "bk_make_time.h"
-
-static aos_thread_id UI_UART_read_id = 0;
-
+// #include "bk_make_time.h"
// #include "opus/include/opus.h"
char FXH01_Version[100];
u8 current_card_id = 0;
-
-u8 chumo_exp_open = 1;
u8 VC_TTS_PLAY_EVENT = 0;
typedef enum
{
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 u32 close_timerout = 0;
-
-static u32 sleep_chumo_timerout = 0;
-
-static u32 tts_start_timerout = 0;
-
static u32 VC_pingping_timerout = 0;
static u32 VC_END_play_timerout = 0;
static char *AI_TTS_str = NULL;
static char *AI_ASR_str = NULL;
#define AI_ASR_STR_MAX_LEN 1024*2
static char *AI_ASR_str_tmp = NULL;
-
-static int has_tmp_result=0;
#define AI_ASR_STR_MAX_TMP_LEN 1024
static aos_timer_ptr AI_VC_1S_timer = NULL;
static aos_timer_ptr sys_10S_timer = NULL;
-static aos_timer_ptr AI_VC_60S_timer = NULL;
-
//static aos_timer_ptr AI_VC_60S_timer = NULL;
static int login_timer_count = 0;
static u8 uid[50];
static int uid_len =0;
-//int type_test=1;
-
//关闭录音
void VC_record_End(void);
//打开录音
}
+
+
#if (BK_LOG_CFG==BK_LOG_UART)
int bk_printf(const char *format, ...)
{
aic_free(vc_cfg_tmp);
return 0;
}
-
void reset_VC_cfg(void)
{
vc_cfg.start_flag = 0xaaaa;
//vc_cfg.dev_type = DEV_ADS;//奥德赛
vc_cfg.dev_type = DEV_JSWM;//金山完美
//vc_cfg.dev_type = DEV_ALY;//阿里云
-
strcpy(vc_cfg.server_ip,"amp.raisound.com");//服务器地址
- // strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
+ // strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//207 服务器地址
- // strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//服务器地址
+ // strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
- vc_cfg.VC_mode =2; //对话模式
+ vc_cfg.VC_mode =2;//对话模式
strcpy(vc_cfg.power_on_tone,"你好,请问您有什么需要我帮忙的吗?");//开机提示词
vc_cfg.VC_record_TYPE = VC_record_TYPE_PCM;//录音格式
vc_cfg.VC_play_TYPE = VC_play_TYPE_PCM;//播放格式
vc_cfg.VC_record_samplerate = 16000;//录音采样率
vc_cfg.VC_play_samplerate = 16000;//播放采样率
- vc_cfg.is_VAD = IS_VAD; //=1打开vad打断
- vc_cfg.is_KWS = IS_KWS; //=1打开本地语言打断
- vc_cfg.speech_rate = 0; //语速配置
- vc_cfg.vad_silence = 800; //vad断句时间 ms 500
- vc_cfg.VC_TTS_volume = 80; //音量
+ vc_cfg.is_VAD = IS_VAD;//=1打开vad打断
+ vc_cfg.is_KWS = IS_KWS;//=1打开本地语言打断
+ vc_cfg.speech_rate = 0;//语速配置
+ vc_cfg.vad_silence = 500;//vad断句时间 ms
+ vc_cfg.VC_TTS_volume = 80;//音量
}
-
int init_VC_cfg(void)
{
FILE *fp = NULL;
vc_cfg.VC_mode =2;//对话模式
- reset_VC_cfg();
return 0;
}
u8 *save_temp_tts=NULL;
-int is_guanji=0;
+void send_express_str(char *exp_str){
+
+ // texts = ["neutral","happy","laughing","funny","sad","angry",
+ // "crying","loving","embarrassed","surprised","shocked","thinking",
+ // "winking","cool","relaxed","","confused",""]
+ #if 0
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
+
+ if(strstr(exp_str,"不理解")||strstr(exp_str,"confused"))
+ {
+ cmd_ui[4]=0x01;
+ cmd_ui[6]=0x03;
+ }else
+ if(strstr(exp_str,"发怒")||strstr(exp_str,"angry"))
+ {
+ cmd_ui[4]=0x02;
+ cmd_ui[6]=0x04;
+ }else
+ if(strstr(exp_str,"搞怪")||strstr(exp_str,"cool"))
+ {
+ cmd_ui[4]=0x03;
+ cmd_ui[6]=0x05;
+ }else
+ if(strstr(exp_str,"花痴")||strstr(exp_str,"funny"))
+ {
+ cmd_ui[4]=0x04;
+ cmd_ui[6]=0x05;
+ }else
+ if(strstr(exp_str,"惊喜")||strstr(exp_str,"surprised"))
+ {
+ cmd_ui[4]=0x05;
+ cmd_ui[6]=0x07;
+ }else
+ if(strstr(exp_str,"惊讶")||strstr(exp_str,"shocked"))
+ {
+ cmd_ui[4]=0x06;
+ cmd_ui[6]=0x08;
+ }else
+ if(strstr(exp_str,"卡通")||strstr(exp_str,"relaxed"))
+ {
+ cmd_ui[4]=0x07;
+ cmd_ui[6]=0x09;
+ }else
+ if(strstr(exp_str,"开心")||strstr(exp_str,"微笑")||strstr(exp_str,"happy"))
+ {
+ cmd_ui[4]=0x08;
+ cmd_ui[6]=0x0a;
+ }else
+ if(strstr(exp_str,"生气")||strstr(exp_str,"sad"))
+ {
+ cmd_ui[4]=0x09;
+ cmd_ui[6]=0x0b;
+ }else
+ if(strstr(exp_str,"眨眼")||strstr(exp_str,"winking"))
+ {
+ cmd_ui[4]=0x0a;
+ cmd_ui[6]=0x0c;
+ }else
+ if(strstr(exp_str,"很开心"))
+ {
+ cmd_ui[4]=0x0b;
+ cmd_ui[6]=0x0d;
+ }else
+ if(strstr(exp_str,"中立")||strstr(exp_str,"neutral"))
+ {
+ cmd_ui[4]=0x0c;
+ cmd_ui[6]=0x0e;
+ }
+
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+ #else
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
+
+ if(strstr(exp_str,"伤心")||strstr(exp_str,"sad"))
+ {
+ cmd_ui[4]=0x01;
+ cmd_ui[6]=0x03;
+ }else
+ if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
+ {
+ cmd_ui[4]=0x03;
+ cmd_ui[6]=0x05;
+ }else
+ if(strstr(exp_str,"困惑")||strstr(exp_str,"confused")||strstr(exp_str,"embarrassed"))
+ {//embarrassed
+ cmd_ui[4]=0x06;
+ cmd_ui[6]=0x08;
+ }else
+ if(strstr(exp_str,"失望")||strstr(exp_str,"crying"))
+ {
+ cmd_ui[4]=0x08;
+ cmd_ui[6]=0x0a;
+ }else
+ if(strstr(exp_str,"开心")||strstr(exp_str,"happy")||strstr(exp_str,"loving")
+ ||strstr(exp_str,"funny")||strstr(exp_str,"laughing")||strstr(exp_str,"cool")) //laughing "funny loving
+ { //cool
+ cmd_ui[4]=0x0d;
+ cmd_ui[6]=0x0f;
+ }else
+ if(strstr(exp_str,"默认")||strstr(exp_str,"neutral")||strstr(exp_str,"thinking")
+ ||strstr(exp_str,"winking")||strstr(exp_str,"relaxed"))
+ {//thinking winking relaxed
+ cmd_ui[4]=0x0e;
+ cmd_ui[6]=0x10;
+ }else
+ if(strstr(exp_str,"惊恐")||strstr(exp_str,"surprised")||strstr(exp_str,"shocked"))
+ {//shocked
+ cmd_ui[4]=0x13;
+ cmd_ui[6]=0x15;
+ }
+
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
-int ddh_is_close_dialog=0;
+ #endif
-void aic_https_demotest();
+}
int check_text(char *text,int ret_str_len)
{
}
}
+ 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 if(vc_cfg.VC_mode == 1)
{
- AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
+ AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
app_audio_set_master_volume(15*80/100);
}else
{
- app_audio_set_master_volume(15*80/100);
- AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
+ app_audio_set_master_volume(15*80/100);
+ AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
}
is_save_VC_cfg = 1;
ret = 0;
- #if BK_SOCKET_IOT
+
IOT_update_statu(3,"","");
- #endif
goto RET;
}
// 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;
- }
-
- if(strstr(text,"做一个发怒的表情"))
{
AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+ send_express_str(text);
ret = 0;
goto RET;
}
- if(strstr(text,"做一个惊讶的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x06,0x01,0x08};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+
- ret = 0;
- goto RET;
- }
-
- if(strstr(text,"做一个搞怪的表情"))
- {
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ // if(strstr(text,"导出文件"))
+ // {
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+ // int len_daochu=0,sum_len=0;;
+ // FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","rb");
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个卡通的表情"))
- {
+ // if(fp_play_local){
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x07,0x01,0x09};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+ // while(1){
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个花痴的表情"))
- {
+ // len_daochu=fread(recv_get,1,1024,fp_play_local);
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x04,0x01,0x06};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+ // if(len_daochu>0){
+ // sum_len+=len_daochu;
+ // audio_data(recv_get,len_daochu,22);
- ret = 0;
- goto RET;
- }
+ // }else{
- if(strstr(text,"做一个惊喜的表情"))
- {
+ // break;
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+ // }
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
+
+ // }
- #if SUPPORT_MOT
- mot_nod_diantou(2);
- #endif
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个哭泣的表情"))
- {
+ // bk_printf("daochu len is %d ...",sum_len);
+ // fclose(fp_play_local);
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+ // }
+ // ret = 0;
+ // goto RET;
+ // }
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x05,0x01,0x07};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_ditou(2);
- #endif
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个不满的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x07,0x01,0x09};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_exp(4,2);
- #endif
- ret = 0;
- goto RET;
- }
-
- if(strstr(text,"做一个坏笑的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x06,0x01,0x08};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_exp(5,2);
- #endif
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个生气的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x04,0x01,0x06};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_exp(6,2);
- #endif
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个卖萌的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_exp(7,2);
- #endif
- ret = 0;
- goto RET;
- }
- if(strstr(text,"做一个开心的表情"))
- {
-
- AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #if SUPPORT_MOT
- mot_nod_exp(8,2);
- #endif
- ret = 0;
- goto RET;
- }
-
- if(strstr(text,"打开触摸动作"))
- {
-
- chumo_exp_open=1;
- AI_AMP_MSG_put("触摸动作已打开",strlen("触摸动作已打开"),VC_TTS_PLAY);
-
- ret = 0;
- goto RET;
-
- }
-
- if(strstr(text,"关闭触摸动作"))
- {
-
- chumo_exp_open=0;
- AI_AMP_MSG_put("触摸动作已关闭",strlen("触摸动作已关闭"),VC_TTS_PLAY);
-
- ret = 0;
- goto RET;
-
- }
-
- // if(strstr(text,"摇头"))
- // {
- // AI_AMP_MSG_put("开始摇头了",strlen("开始摇头了"),VC_TTS_PLAY);
-
- // if(ui_uart_handle){
- // u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
- // uart_write(ui_uart_handle,cmd_ui, 7);
- // }
-
- // bk_printf("摇头");
- // #if SUPPORT_MOT
- // mot_nod_diantou(2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
- // if(strstr(text,"点头"))
- // {
- // // AI_AMP_MSG_put("开始做动作了",strlen("开始做动作了"),VC_TTS_PLAY);
-
- // AI_AMP_MSG_put("开始点头了",strlen("开始点头了"),VC_TTS_PLAY);
-
- // // if(ui_uart_handle){
- // // u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
- // // uart_write(ui_uart_handle,cmd_ui, 7);
- // // }
- // bk_printf("点头");
- // #if SUPPORT_MOT
- // mot_nod_yaotou(2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
-
-
-
- // if(strstr(text,"抬头"))
- // {
- // AI_AMP_MSG_put("开始抬头了",strlen("开始抬头了"),VC_TTS_PLAY);
-
- // bk_printf("抬头");
- // #if SUPPORT_MOT
- // mot_nod_ditou(2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
- // if(strstr(text,"低头"))
- // {
- // AI_AMP_MSG_put("开始低头了",strlen("开始低头了"),VC_TTS_PLAY);
-
- // bk_printf("低头");
- // #if SUPPORT_MOT
- // mot_nod_taitou(2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
- // if(strstr(text,"向左转"))
- // {
- // AI_AMP_MSG_put("开始向左转",strlen("开始向左转"),VC_TTS_PLAY);
-
- // bk_printf("向左转");
- // #if SUPPORT_MOT
- // mot_nod_exp(15,2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
- // if(strstr(text,"向右转"))
- // {
- // AI_AMP_MSG_put("开始向右转",strlen("开始向右转"),VC_TTS_PLAY);
-
- // bk_printf("向右转");
- // #if SUPPORT_MOT
- // mot_nod_exp(16,2);
- // #endif
- // ret = 0;
- // goto RET;
-
- // }
-
-
-
- if(strstr(text,"查询马达状态"))
- {
- mot_nod_status();
-
- // aic_http_demotest();
-
- ret = 0;
- goto RET;
- }
-
-
- // if(strstr(text,"导出文件"))
- // {
-
- // int len_daochu=0,sum_len=0;;
- // FILE *fp_play_local=fopen("C:/cmd_local_301.pcm","rb");
-
-
- // if(fp_play_local){
-
-
- // while(1){
-
-
- // len_daochu=fread(recv_get,1,1024,fp_play_local);
-
-
- // if(len_daochu>0){
- // sum_len+=len_daochu;
- // audio_data(recv_get,len_daochu,22);
-
- // }else{
-
- // break;
-
- // }
-
-
- // }
-
-
- // bk_printf("daochu len is %d ...",sum_len);
- // fclose(fp_play_local);
-
- // }
- // ret = 0;
- // goto RET;
- // }
-
-
- if(strstr(text,"查询"))
+ if(strstr(text,"查询"))
{
if(strstr(text,"信号"))
{
}
if(ret_str_len<16 && (strstr(text,"再见") || strstr(text,"拜拜") || strstr(text,"关闭对话")))
{
- // tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"再见了,我会想你的。");
- // AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_CLOSE);
- is_dialog_status=1;
- ddh_is_close_dialog=1;
+ tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"再见了,我会想你的。");
+ AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_CLOSE);
}
if(ret_str_len<16 && (strstr(text,"关机") ))
{
tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"正在关机。");
-
- is_guanji=1;
-
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY_POWER_OFF);
}
if(ret_str_len<16 && (strstr(text,"重启") ))
// 创建 custom_variables 对象
cJSON *custom_variables = cJSON_CreateObject();
-
cJSON_AddStringToObject(custom_variables, "name", "食梦貘");
-
- // cJSON_AddStringToObject(custom_variables, "coze_current_time", "23:00");
-
- // cJSON_AddStringToObject(custom_variables, "coze_current_date", "2025-10-01");
-
cJSON_AddItemToObject(dialog_cfg, "custom_variables", custom_variables);
// 创建 greeting 对象
cJSON *greeting = cJSON_CreateObject();
if(is_greeting == 1)
{
- cJSON_AddBoolToObject(greeting, "enabled", FALSE);//是否播放提示词
+ cJSON_AddBoolToObject(greeting, "enabled", TRUE);//是否播放提示词
cJSON_AddStringToObject(greeting, "content", "你好");
cJSON_AddItemToObject(dialog_cfg, "greeting", greeting);
}else
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 *outbound_cfg = cJSON_CreateObject();
if(outbound_attributes_format == attributes_format_OPUS)
{
- cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus opus
+ cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus
+
+ cJSON_AddStringToObject(outbound_cfg, "codec", "raw");//ogg_opus//"codec": "raw",
+
- // if(codec_tts==1)
- cJSON_AddStringToObject(outbound_cfg, "codec", "raw");// ogg
- // else
- // cJSON_AddStringToObject(outbound_cfg, "codec", "ogg");// ogg
cJSON_AddNumberToObject(outbound_cfg, "compression_rate", 20);
}
else
cJSON_AddNumberToObject(outbound_cfg, "channel", 1);
cJSON_AddNumberToObject(outbound_cfg, "volume", 100);
cJSON_AddNumberToObject(outbound_cfg, "speech_rate", vc_cfg.speech_rate);
- cJSON_AddNumberToObject(outbound_cfg, "chunk_interval_ms", 50);
+ cJSON_AddNumberToObject(outbound_cfg, "chunk_interval_ms", 10);
//cJSON_AddStringToObject(outbound_cfg, "voice", "7426720361733013513");
//cJSON_AddStringToObject(outbound_cfg, "voice", "ICL_zh_female_huoponvhai_tob");
cJSON_Delete(root);
}
+//{"cmd":"renew_device"}
-//Audio.Create 开始发送音频
-static void AI_VC_send_audio_create(void)
+void deal_iot_receive(char *json_data)
{
- VC_state = VC_State_SpeechStart;//开始说
- // 创建根对象
- cJSON *root = cJSON_CreateObject();
- if (root == NULL) {
- bk_printf("Failed to create root object.\n");
- return ;
- }
- // 设置 "event" 字段
- cJSON_AddStringToObject(root, "event", "audio.create");
+ bk_printf(json_data);
- // 创建 "payload" 对象
- cJSON *payload = cJSON_CreateObject();
- if (payload == NULL) {
- bk_printf("Failed to create payload object.\n");
- cJSON_Delete(root);
- return ;
- }
- // 将 "payload" 对象添加到根对象中
- cJSON_AddItemToObject(root, "payload", payload);
+ // vc_cfg.VC_TTS_volume = 100;
+ // AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
- // 将 JSON 对象转换为字符串
- char *json_str = cJSON_Print(root);
- if (json_str == NULL) {
- bk_printf("Failed to print JSON object.\n");
- cJSON_Delete(root);
-
- }
- AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
-
+ if(strstr(json_data,"get_device_state")){
- // 释放内存
- free(json_str);
- cJSON_Delete(root);
-}
+ bk_printf("get_device_state");
+ IOT_update_statu(3,"","");
-// {
-// "event": "audio.convert",
-// "payload": {
-// "audio_convert_request": {
-// "audio_url": audio_url,
-// "bit_depth": 16,
-// "channels": 1,
-// "sample_rate": 16000,
-// "target_format": "pcm"
-// }
-// }
-// }
+ // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
-static void AI_VC_send_startup(void)
-{
- VC_state = VC_State_SpeechStart;//开始说
- // 创建根对象
- cJSON *root = cJSON_CreateObject();
- if (root == NULL) {
- bk_printf("Failed to create root object.\n");
- return ;
}
+
+ if(strstr(json_data,"find_device")){
- // 设置 "event" 字段
- cJSON_AddStringToObject(root, "event", "prompt");
-
- // 创建 "payload" 对象
- cJSON *payload = cJSON_CreateObject();
- if (payload == NULL) {
- bk_printf("Failed to create payload object.\n");
- cJSON_Delete(root);
- return ;
- }
+ bk_printf("find_device");
-
+ AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
- cJSON *promat = cJSON_CreateObject();
- if (payload == NULL) {
- bk_printf("Failed to create payload object.\n");
- cJSON_Delete(root);
- return ;
}
+ if(strstr(json_data,"renew_device")){
- cJSON *interrupt_keywords = cJSON_CreateArray();
- // cJSON_AddStringToObject(promat, "event", "startup");
+ bk_printf("renew_device");
- //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("停止"));
- //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("打断"));
- // cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("等一下"));
+ IOT_update_bargein();
- cJSON *content = cJSON_CreateObject();
+ if(vc_cfg.VC_mode == 0)
+ {
+ AI_AMP_MSG_put("已切换到连续对话模式。",strlen("已切换到连续对话模式。"),VC_TTS_PLAY);
+ //app_audio_set_master_volume(15*80/100);
+
+ }else if(vc_cfg.VC_mode == 1)
+ {
+ AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
+
+ // app_audio_set_master_volume(15*80/100);
+ }else
+ {
+ // app_audio_set_master_volume(15*80/100);
+ AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
+ }
- cJSON_AddStringToObject(content, "role", "user");
+ save_VC_cfg();
- cJSON_AddStringToObject(content, "content", "{\"event\":\"startup\"}");
+ }
- cJSON_AddStringToObject(content, "content_type", "text");
+ if(strstr(json_data,"switch_volume"))
+ {
- cJSON_AddItemToArray(interrupt_keywords, content);
+ // bk_printf("switch_volume");
+ char *str_tmp = NULL;
- cJSON_AddItemToObject(payload, "prompt", interrupt_keywords);
+ char volume_str[5]={0};
- //cJSON_AddItemToObject(inbound_attributes, "interrupt_options", interrupt_options);
+ str_tmp = strstr(json_data,"\"target\":\"");
+
+ //bk_printf("str_tmp:%p",str_tmp);
+ if(str_tmp)//解析password
+ {
+ str_tmp += strlen("\"target\":\"");
+ int count = str_count(str_tmp,'\"');
+ bk_printf("count:%d",count);
+ if(count < sizeof(volume_str))
+ {
-
+
+ memcpy(volume_str,str_tmp,count);
+ volume_str[count] = 0;
+ bk_printf("volume_str:%s",volume_str);
+
+ int temp_vol=atoi(volume_str);
+
+ if(temp_vol>=0&&temp_vol<=100)
+ {
+
+ vc_cfg.VC_TTS_volume = temp_vol;
+
+ app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+
+ char tts_temp[200]={0};
+
+
+ sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+
+ AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+
+
+ //is_save_VC_cfg = 1;
+
+ save_VC_cfg();
+ }
+
+
+
+ }
+ else
+ {
+ bk_printf("获取volume失败");
+ }
+ }
+ }
+
+
+}
+//Audio.Create 开始发送音频
+static void AI_VC_send_audio_create(void)
+{
+ VC_state = VC_State_SpeechStart;//开始说
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
+ // 设置 "event" 字段
+ cJSON_AddStringToObject(root, "event", "audio.create");
- // cJSON_AddItemToObject(payload, "prompt", promat);
+ // 创建 "payload" 对象
+ cJSON *payload = cJSON_CreateObject();
+ if (payload == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
// 将 "payload" 对象添加到根对象中
cJSON_AddItemToObject(root, "payload", payload);
+
// 将 JSON 对象转换为字符串
char *json_str = cJSON_Print(root);
if (json_str == NULL) {
}
AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+
// 释放内存
free(json_str);
cJSON_Delete(root);
}
+
+// {
+// "event": "audio.convert",
+// "payload": {
+// "audio_convert_request": {
+// "audio_url": audio_url,
+// "bit_depth": 16,
+// "channels": 1,
+// "sample_rate": 16000,
+// "target_format": "pcm"
+// }
+// }
+// }
+
+
//Music.Start 开始发送音频
static void AI_VC_send_music_start(char *urlpath)
{
//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_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;
-
-
- void send_express_str_chumo(int type,int mode){
-
-
- if(!ui_uart_handle)
- return ;
-
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
- if(type==1&&mode==0){
-
- #if SUPPORT_MOT
- mot_nod_exp(11,2);
- #endif
-
- // sleep
- cmd_ui[4]=0x07;
- cmd_ui[6]=0x09;
-
- }
-
- if(type==1&&mode==1){
-
- #if SUPPORT_MOT
- mot_nod_exp(12,2);
- #endif
-
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
-
- }
-
- if(type==2&&mode==0){
-
- #if SUPPORT_MOT
- mot_nod_exp(13,2);
- #endif
-
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
-
- }
-
- if(type==2&&mode==1){
-
- #if SUPPORT_MOT
- mot_nod_exp(14,2);
- #endif
-
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
-
- }
-
- if(type==0&&mode==0){
-
- #if SUPPORT_MOT
- mot_nod_exp(9,2);
- #endif
-
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
-
- }
-
- if(type==0&&mode==1){
-
- #if SUPPORT_MOT
- mot_nod_exp(10,2);
- #endif
-
- cmd_ui[4]=0x03;
- cmd_ui[6]=0x05;
-
- }
-
-
-
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
-
-void back_middle_statu_mot(){
-
- aos_sleep(1000);
- mot_nod_exp(7,2);
-
-}
-
-void random_statu_mot(){
-
- //aos_sleep(1000);
- u32 count_tmp = 0;
- aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
-
- bk_printf("random_statu_mot....\n");
-
- if(count_tmp<=0)
- return ;
- //VC_END_play_timerout = 1;
-
- if(random_mt_test%3==0)
- mot_nod_exp(8,2);
-
- if(random_mt_test%3==1)
- mot_nod_exp(15,2);
-
- if(random_mt_test%3==2)
- mot_nod_exp(16,2);
-
- random_mt_test++;
-
-
-}
-
-
-void send_express_str_xinxinmao(char *exp_str){
+ static void AI_VC_IOT_task(void *thread_input)//websocket 读线程
+ {
- #if 1
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-
- if(strstr(exp_str,"不理解"))
- {
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
- }else
- if(strstr(exp_str,"发怒"))
- {
- cmd_ui[4]=0x02;
- cmd_ui[6]=0x04;
- }else
- if(strstr(exp_str,"搞怪"))
- {
- cmd_ui[4]=0x03;
- cmd_ui[6]=0x05;
- }else
- if(strstr(exp_str,"花痴"))
- {
- cmd_ui[4]=0x04;
- cmd_ui[6]=0x05;
- }else
- if(strstr(exp_str,"惊喜"))
- {
- cmd_ui[4]=0x05;
- cmd_ui[6]=0x07;
- }else
- if(strstr(exp_str,"惊讶"))
- {
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
- }else
- if(strstr(exp_str,"卡通"))
- {
- cmd_ui[4]=0x07;
- cmd_ui[6]=0x09;
- }else
- if(strstr(exp_str,"开心")||strstr(exp_str,"微笑"))
- {
- cmd_ui[4]=0x08;
- cmd_ui[6]=0x0a;
- }else
- if(strstr(exp_str,"生气"))
- {
- cmd_ui[4]=0x09;
- cmd_ui[6]=0x0b;
- }else
- if(strstr(exp_str,"眨眼"))
- {
- cmd_ui[4]=0x0a;
- cmd_ui[6]=0x0c;
- }else
- if(strstr(exp_str,"很开心"))
- {
- cmd_ui[4]=0x0b;
- cmd_ui[6]=0x0d;
- }else
- if(strstr(exp_str,"中立"))
- {
- cmd_ui[4]=0x0c;
- cmd_ui[6]=0x0e;
- }
-
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
-
- #else
-
- // 淡定:Calm
- // 尴尬:Embarrass
- // 开心:Happy
- // 可爱:Cute
-
-
-
- // 孝豚
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-
- // if(strstr(exp_str,"Calm"))
- // {
- // cmd_ui[4]=0x01;
- // cmd_ui[6]=0x03;
- // }else
- // if(strstr(exp_str,"Embarrass"))
- // {
- // cmd_ui[4]=0x02;
- // cmd_ui[6]=0x04;
- // }else
- // if(strstr(exp_str,"Happy"))
- // {
- // cmd_ui[4]=0x03;
- // cmd_ui[6]=0x05;
- // }else
- // if(strstr(exp_str,"Cute"))
- // {
- // cmd_ui[4]=0x04;
- // cmd_ui[6]=0x06;
- // }
-
- // 01-Afraid 害怕-右
-// 02-Amused 有趣-右
-// 03-Angry 愤怒-右
-// 04-Bored 无聊-右
-// 05-Caring 关爱-右
-// 06-Confused 困惑-右
-// 07-Curious 惊喜-右
-// 08-Disgusted 厌恶-右
-// 09-dizzy 蚊香眼-右
-// 10-Doubtful 存疑-右
-// 11-Frowning 皱眉头-右
-// 12-Grimacing 苦着脸-右
-// 13-Happy 开心-右
-// 14-Neutral 中立-右
-// 15-Pensive 悲伤-右
-// 16-Relaxed 放松-右
-// 17-Sad 伤心-右
-// 18-Smiling 微笑-右
-// 19-Surprised 惊讶-右
-// 20-Tired 疲惫-右
-// 21-Winking 眨眼-右
-
-// 01-Afraid 害怕-右 01
-// 02-Amused 有趣-右 02
-// 03-Angry 愤怒-右 15
-// 04-Bored 无聊-右 16
-// 05-Caring 关爱-右 05
-// 06-Confused 困惑-右 17
-// 07-Curious 惊喜-右 19
-// 08-Disgusted 厌恶-右 20
-// 09-dizzy 蚊香眼-右 21
-// 10-Doubtful 存疑-右 18
-// 11-Frowning 皱眉头-右 03
-// 12-Grimacing 苦着脸-右 04
-// 13-Happy 开心-右 12
-// 14-Neutral 中立-右 06
-// 15-Pensive 悲伤-右 07
-// 16-Relaxed 放松-右 08
-// 17-Sad 伤心-右 09
-// 18-Smiling 微笑-右 10
-// 19-Surprised 惊讶-右 11
-// 20-Tired 疲惫-右 13
-// 21-Winking 眨眼-右 14
-
- bk_printf("send_express_str:text:%s",exp_str);
-
- if(strstr(exp_str,"Afraid")||strstr(exp_str,"害怕"))
- {
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
- }else
- if(strstr(exp_str,"Amused")||strstr(exp_str,"有趣"))
- {
- cmd_ui[4]=0x02;
- cmd_ui[6]=0x04;
- }else
- if(strstr(exp_str,"Angry")||strstr(exp_str,"愤怒"))
- {
- cmd_ui[4]=0x0f;
- cmd_ui[6]=0x11;
- }else
- if(strstr(exp_str,"Bored")||strstr(exp_str,"无聊"))
- {
- cmd_ui[4]=0x10;
- cmd_ui[6]=0x12;
- }else
- if(strstr(exp_str,"Caring")||strstr(exp_str,"关爱"))
- {
- cmd_ui[4]=0x05;
- cmd_ui[6]=0x07;
- }else
- if(strstr(exp_str,"Confused")||strstr(exp_str,"困惑"))
- {
- cmd_ui[4]=0x11;
- cmd_ui[6]=0x13;
- }else
- if(strstr(exp_str,"Curious")||strstr(exp_str,"惊喜"))
- {
- cmd_ui[4]=0x13;
- cmd_ui[6]=0x15;
- }else
- if(strstr(exp_str,"Disgusted")||strstr(exp_str,"厌恶"))
- {
- cmd_ui[4]=0x14;
- cmd_ui[6]=0x16;
- }else
- if(strstr(exp_str,"dizzy")||strstr(exp_str,"蚊香眼"))
- {
- cmd_ui[4]=0x15;
- cmd_ui[6]=0x17;
- }else
- if(strstr(exp_str,"Doubtful")||strstr(exp_str,"存疑"))
- {
- cmd_ui[4]=0x12;
- cmd_ui[6]=0x14;
- }else
- if(strstr(exp_str,"Frowning")||strstr(exp_str,"皱眉头"))
- {
- cmd_ui[4]=0x03;
- cmd_ui[6]=0x05;
- }else
- if(strstr(exp_str,"Grimacing")||strstr(exp_str,"苦着脸"))
- {
- cmd_ui[4]=0x04;
- cmd_ui[6]=0x06;
- }else
- if(strstr(exp_str,"Happy")||strstr(exp_str,"开心"))
- {
- cmd_ui[4]=0x0c;
- cmd_ui[6]=0x0e;
- }else
- if(strstr(exp_str,"Neutral")||strstr(exp_str,"中立"))
- {
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
- }else
- if(strstr(exp_str,"Pensive")||strstr(exp_str,"悲伤"))
- {
- cmd_ui[4]=0x07;
- cmd_ui[6]=0x09;
- }else
- if(strstr(exp_str,"Relaxed")||strstr(exp_str,"放松"))
- {
- cmd_ui[4]=0x08;
- cmd_ui[6]=0x0a;
- }else
- if(strstr(exp_str,"Sad")||strstr(exp_str,"伤心"))
- {
- cmd_ui[4]=0x09;
- cmd_ui[6]=0x0b;
- }else
- if(strstr(exp_str,"Smiling")||strstr(exp_str,"微笑"))
- {
- cmd_ui[4]=0x0a;
- cmd_ui[6]=0x0c;
- }else
- if(strstr(exp_str,"Surprised")||strstr(exp_str,"惊讶"))
- {
- cmd_ui[4]=0x0b;
- cmd_ui[6]=0x0d;
- }else
- if(strstr(exp_str,"Tired")||strstr(exp_str,"疲惫"))
- {
- cmd_ui[4]=0x0d;
- cmd_ui[6]=0x0f;
- }else
- if(strstr(exp_str,"Winking")||strstr(exp_str,"眨眼"))
- {
- cmd_ui[4]=0x0c;
- cmd_ui[6]=0x0e;
- }
-
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
-
-
- #endif
-
-
-}
-
-void send_express_str(char *exp_str){
-
- // texts = ["neutral","happy","laughing","funny","sad","angry",
- // "crying","loving","embarrassed","surprised","shocked","thinking",
- // "winking","cool","relaxed","","confused",""]
-
- /// happy 🙂
-//cue 😸
-//surprised 😲
-//angry 😠
-//crying 😭
-//smirk😏
-//dissatisfied😒
-
-// 001序列帧 开心002序列帧 卖萌003序列帧 惊喜004序列帧 生气004序列帧 右眼生气005序列帧 哭泣006序列帧 坏笑007序列帧 不满
- #if 1
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
-
- if(strstr(exp_str,"开心")||strstr(exp_str,"happy"))
- {
-
-
- #if SUPPORT_MOT
- mot_nod_exp(8,2);
- #endif
-
- // sleep
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
-
- }else
- if(strstr(exp_str,"卖萌")||strstr(exp_str,"cue"))
- {
-
- #if SUPPORT_MOT
- mot_nod_exp(5,2); // mot_nod_exp(7,2);
- #endif
- cmd_ui[4]=0x02;
- cmd_ui[6]=0x04;
- }else
- if(strstr(exp_str,"惊喜")||strstr(exp_str,"surprised"))
- {
- cmd_ui[4]=0x03;
- cmd_ui[6]=0x05;
-
- #if SUPPORT_MOT
- mot_nod_diantou(2);
- #endif
-
- }else
- if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
- {
- cmd_ui[4]=0x04;
- cmd_ui[6]=0x06;
- #if SUPPORT_MOT
- mot_nod_exp(6,2);
- #endif
-
- }else
- if(strstr(exp_str,"哭泣")||strstr(exp_str,"crying"))
- {
- cmd_ui[4]=0x05;
- cmd_ui[6]=0x07;
-
- #if SUPPORT_MOT
- mot_nod_taitou(2);
- #endif
-
- }else
- if(strstr(exp_str,"坏笑")||strstr(exp_str,"smirk"))
- {
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
-
- #if SUPPORT_MOT
- mot_nod_exp(5,2);
- #endif
- }else
- if(strstr(exp_str,"不满")||strstr(exp_str,"dissatisfied"))
- {
- cmd_ui[4]=0x07;
- cmd_ui[6]=0x09;
-
- #if SUPPORT_MOT
- mot_nod_exp(4,2);
- #endif
-
- }else if(strstr(exp_str,"点头")){
+ receive_iot_message(AI_client_IOT);
- mot_nod_yaotou(2);
-
- }else if(strstr(exp_str,"摇头")){
-
- mot_nod_diantou(2);
-
- }else if(strstr(exp_str,"抬头")){
-
-
- mot_nod_ditou(2);
-
- }else if(strstr(exp_str,"低头")){
-
- mot_nod_taitou(2);
-
- }else if(strstr(exp_str,"向左转")){
-
- mot_nod_exp(15,2);
-
-
- }else if(strstr(exp_str,"向右转")){
-
- mot_nod_exp(16,2);
-
-
- }
-
-
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
- #else
-
- if(ui_uart_handle){
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x08,0x01,0x0a};
-
- if(strstr(exp_str,"伤心")||strstr(exp_str,"sad"))
- {
- cmd_ui[4]=0x01;
- cmd_ui[6]=0x03;
- }else
- if(strstr(exp_str,"生气")||strstr(exp_str,"angry"))
- {
- cmd_ui[4]=0x03;
- cmd_ui[6]=0x05;
- }else
- if(strstr(exp_str,"困惑")||strstr(exp_str,"confused")||strstr(exp_str,"embarrassed"))
- {//embarrassed
- cmd_ui[4]=0x06;
- cmd_ui[6]=0x08;
- }else
- if(strstr(exp_str,"失望")||strstr(exp_str,"crying"))
- {
- cmd_ui[4]=0x08;
- cmd_ui[6]=0x0a;
- }else
- if(strstr(exp_str,"开心")||strstr(exp_str,"happy")||strstr(exp_str,"loving")
- ||strstr(exp_str,"funny")||strstr(exp_str,"laughing")||strstr(exp_str,"cool")) //laughing "funny loving
- { //cool
- cmd_ui[4]=0x0d;
- cmd_ui[6]=0x0f;
- }else
- if(strstr(exp_str,"默认")||strstr(exp_str,"neutral")||strstr(exp_str,"thinking")
- ||strstr(exp_str,"winking")||strstr(exp_str,"relaxed"))
- {//thinking winking relaxed
- cmd_ui[4]=0x0e;
- cmd_ui[6]=0x10;
- }else
- if(strstr(exp_str,"惊恐")||strstr(exp_str,"surprised")||strstr(exp_str,"shocked"))
- {//shocked
- cmd_ui[4]=0x13;
- cmd_ui[6]=0x15;
- }
-
- uart_write(ui_uart_handle,cmd_ui, 7);
- }
-
- #endif
-
-}
+ }
static void AI_VC_read_task(void *thread_input)//websocket 读线程
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 = 60;
if(code == WS_TEXT)//字符串
{
//bk_printf("AI_VC_read_task 3");
bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
if(strstr(recv_buff,"\"started\""))//开始
{
-
- tts_start_timerout=0;
- if(issend_start_up==0){
-
- issend_start_up=1;
-
- AI_VC_send_startup();
-
-
- }
-
if(AI_TTS_str)
{
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){
-
-
- // VC_state=VC_State_Listening;
-
- bk_printf("没有识别结果");
-
- AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
- }
if(strlen(AI_ASR_str) +strlen(AI_ASR_str_tmp)> AI_ASR_STR_MAX_LEN-1)//超出缓存长度,清零
{
}else//超时,不用拼接
{
- strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
-
- if(strlen(AI_ASR_str_tmp)==0){
-
- // VC_state=VC_State_Listening;
-
- bk_printf("没有识别结果");
-
- AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
- }
-
+ strncpy(AI_ASR_str,AI_ASR_str_tmp,AI_ASR_STR_MAX_LEN);
bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
}
- #if BK_SOCKET_IOT
- IOT_update_statu(1,"thinking","");
- #endif
-
+ IOT_update_statu(1,"thinking","");
+ play_file_stream_data("C:/vadend.pcm");
}
-
-
- bk_printf("002AI_ASR_str%s AI_ASR_str_tmp %s",AI_ASR_str,AI_ASR_str_tmp);
- bk_printf("play_file_stream_data:%d",VC_Play_flag);
-
- if(has_tmp_result==0)
- AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
- else
- if(VC_Play_flag==1&&strlen(AI_ASR_str_tmp)!=0)//VC_Play_flag==1&&
- play_file_stream_data("C:/vadend.pcm");
- //else{
-
-
- // if(strlen(AI_ASR_str_tmp)==0){
-
- // // VC_state=VC_State_Listening;
-
- // bk_printf("没有识别结果");
-
- // AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
-
- // }
- // play_audio_file("C:/vadend.mp3");
- // }
}
else if(strstr(recv_buff,"\"vad.active\""))//vad触发
{
VC_state = VC_State_TTSStart;
play_data_len = 0;
- #if BK_SOCKET_IOT
+
IOT_update_statu(1,"speaking","");
- #endif
+
one_receive_bin=0;
if(outbound_attributes_format == attributes_format_OPUS){
// 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);
// startsave_tts=one_receive_bin;
- VC_state = VC_State_End;
-
+
+
+
+
// if(fp_tts_save)
- // fclose(fp_tts_save);
+ // fclose(fp_tts_save);
- // fp_tts_save=NULL;
+ // fp_tts_save=NULL;
// aos_sleep(500);
// bk_printf("C:/cmd_local_301.pcm %d",getFileSize("C:/cmd_local_301.pcm"));
+ VC_state = VC_State_End;//
+
}
{
VC_state = VC_State_End;//
- if(vc_cfg.VC_mode==0&&strlen(AI_ASR_str_tmp)==0){
- u32 count_tmp = 0;
- aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
-
- bk_printf("连续对话模式没有语音....\n");
- if(count_tmp<=0)
- VC_END_play_timerout = 1;
-
+ u32 count_tmp = 0;
+
+ aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
+
+ // bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+
+ if(count_tmp <= 0 )//播放完了
+ {
+ // VC_END_play_timerout = 1;
+ VC_state = VC_State_Listening;//重新开始了
}
//AI_AMP_MSG_put(0,0,VC_RECORD_START);//打开录音
{
// 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);
}
}
bk_printf("the emotion text len is %s %d",emotion_str,str_tmp_len);
- send_express_str(emotion_str);
+ send_express_str(emotion_str);
- }
+ }
}
+
+
+ }else if(strstr(recv_buff,"\"event\":\"llm.completed\""))//接口报错了
+ {
+
+ // char *str_tmp = NULL;
+
+ bk_printf("the express_str exist1 \n");
+
+ // str_tmp = strstr(recv_buff,"\"param_json\"");
+ char *str_tmp = strstr(recv_buff,"(");
+
+ if(str_tmp)
+ {
+
+ bk_printf("the express_str exist2 \n");
+ char express_str[200];
+ memset(express_str,0,200);
+ //bk_printf("content!!");
+ // str_tmp += strlen("\"params_json")+6;
+
+ char *str_tmp1=strstr(recv_buff,")");
+ // int str_tmp_len = str_count(str_tmp+1,')');
+
+ int str_tmp_len = str_tmp1-str_tmp;
+ //存asr结果
+
+ memcpy(express_str,str_tmp+1,str_tmp_len);
+ // //AI_ASR_str_tmp[str_tmp_len] = 0;
+
+ bk_printf("the express_str3 is [%s]",express_str);
+
+ // AI_VC_send_music_start(mp3_path);
+
+ send_express_str(express_str);
+
+ }
+
}
}
// 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);
+ bk_printf("ogg_opus_decode_data %d...",status);
+
+ // bk_printf("sum_opus_decode_data %d...",one_receive_bin);
// memcpy(save_temp_tts);
// audio_data(recv_buff,status,26);
- //ogg_opus_decode_data(recv_buff,status);
+ // ogg_opus_decode_data(recv_buff,status);
+ my_opus_decode_data(recv_buff,status);
- my_opus_decode_data(recv_buff,status);
// if(fp_tts_save){
// bk_printf("save tts!!!");
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.is_KWS)
- {
- int KWS_time = aos_get_tickcount();
- // bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
- run_kws((int16_t *)vrecord_buf,ret/2);
- int kws_status = kws_detect();
- // bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
- if (kws_status == 1) {
-
- is_dialog_status=0;
- bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
- kws_clear();
-
- AI_AMP_MSG_put("我在呢。",strlen("我在呢。"),VC_TTS_PLAY);
- }
- }
+ if(vc_cfg.VC_mode == 2 && VC_state > VC_State_SpeechEnd )//按钮打断模式,tts播放时禁止打断,不输入语音
continue;
- }
// 每次获得语音后调用, 语音长度最好小于100ms
// wave为u8*或void*指针时需要 / 2
//int vad_test_time = aos_get_tickcount();
}
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();
- // }
- // }
- //bk_printf("VAD:检测到说话了");
+ AI_VC_put_record_data(vrecord_buf,ret);
+ // audio_data(vrecord_buf,ret,21);
+ if(vc_cfg.is_KWS)
+ {
+ int KWS_time = aos_get_tickcount();
+ bk_printf("run_kws1: KWS_time:%d,data_len:%d",KWS_time,ret);
+ run_kws((int16_t *)vrecord_buf,ret/2);
+ int kws_status = kws_detect();
+ bk_printf("run_kws2:end_time:%d ,kws_status:%d",aos_get_tickcount() - KWS_time,kws_status);
+ if (kws_status == 1) {
+ bk_printf("!!!!!!!!!!!!!!!!!!!!!!离线语音识别打断了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n");
+ kws_clear();
+ }
+ }
+ //bk_printf("VAD:检测到说话了");
}else if(vad_status_t == 0 )//m没有说话
{
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;
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)
{
ret = app_audio_write(APP_AUDIO_TYPE_STREAM_DUPLEX,
AI_VC_play_queue_data.data, AI_VC_play_queue_data.len, 2000);
- // bk_printf("app_audio_write len=%d\n", ret);
+ //bk_printf("app_audio_write len=%d\n", ret);
if (ret <= 0)
{
aos_sleep(1);
aos_get_queue_used_count(AI_VC_play_queue,&count_tmp);
- // bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+ // bk_printf("VC_State_End:count_tmp = %d",count_tmp);
if(count_tmp <= 0 )//播放完了
{
- bk_printf("VC_State_End:count_tmp = %d",count_tmp);
- VC_END_play_timerout = 1;
+ VC_END_play_timerout = 1;
+ VC_state = VC_State_Listening;//重新开始了
}
}
continue;//正常有数据就不执行下面写0
}
-void deal_iot_receive(char *json_data)
+//Music.Start 开始发送音频
+void IOT_update_statu(int type,char *type_str,char *content)
{
+ // VC_state = VC_State_SpeechStart;//开始说
- bk_printf(json_data);
-
- // vc_cfg.VC_TTS_volume = 100;
- // AI_AMP_MSG_put("音量已最大。",strlen("音量已最大。"),VC_TTS_PLAY);
-
- //{"cmd":"emotion","msg":"AI指令:emotion","data":"Cute","ts":1764914695122,"targetDeviceId":"865530078570777"}
-
- if(strstr(json_data,"action")){
-
- tts_start_timerout=0;
- bk_printf("action");
-
- char *str_tmp = NULL;
-
- char action_str[500]={0};
-
- str_tmp = strstr(json_data,"\"data\":\"");
-
- // bk_printf("str_tmp:%p",str_tmp);
-
- if(str_tmp)//解析password
- {
-
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(action_str))
- {
-
-
- memcpy(action_str,str_tmp,count);
- action_str[count] = 0;
- bk_printf("action_str:%s",action_str);
- if(is_guanji==0)
- send_express_str(action_str);
- }
-
- }
-
- }
-
- if(strstr(json_data,"set_vol")){
-
-
- char *str_tmp = NULL;
-
- char action_str[500]={0};
-
- str_tmp = strstr(json_data,"\"data\":\"");
-
- if(str_tmp)//解析password
- {
-
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(action_str))
- {
-
-
- memcpy(action_str,str_tmp,count);
- action_str[count] = 0;
- bk_printf("set_vol:%s",action_str);
-
- if(strstr(action_str,"+10")){
-
- if(vc_cfg.VC_TTS_volume<=90){
- vc_cfg.VC_TTS_volume+=10;
-
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
- }
-
- }else if(strstr(action_str,"-10")){
-
- if(vc_cfg.VC_TTS_volume>10){
- vc_cfg.VC_TTS_volume-=10;
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
- }
-
- }else{
-
- int temp_vol=atoi(action_str);
-
- if(temp_vol>0&&temp_vol<=100){
-
- bk_printf("temp_vol:%d",temp_vol);
- vc_cfg.VC_TTS_volume=temp_vol;
-
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-
-
- }
-
- }
- // if(is_guanji==0)
- // send_express_str(action_str);
- }
-
- }
-
- }
-
- if(strstr(json_data,"emotion")){
-
- bk_printf("emotion");
-
- tts_start_timerout=0;
-
- char *str_tmp = NULL;
-
- char emotion_str[500]={0};
-
- str_tmp = strstr(json_data,"\"data\":\"");
-
- // bk_printf("str_tmp:%p",str_tmp);
-
- if(str_tmp)//解析password
- {
-
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(emotion_str))
- {
-
-
- memcpy(emotion_str,str_tmp,count);
- emotion_str[count] = 0;
- bk_printf("emotion_str:%s",emotion_str);
-
- if(is_guanji==0)
- send_express_str(emotion_str);
- }
-
- }
-
- }
-
- if(strstr(json_data,"tts_audio_url")){
-
- bk_printf("tts_audio_url");
-
- char *str_tmp = NULL;
-
- char mp3_path_str[500]={0};
-
- str_tmp = strstr(json_data,"\"data\":\"");
-
- // bk_printf("str_tmp:%p",str_tmp);
-
- if(str_tmp)//解析password
- {
-
- str_tmp += strlen("\"data\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(mp3_path_str))
- {
-
-
- memcpy(mp3_path_str,str_tmp,count);
- mp3_path_str[count] = 0;
- bk_printf("mp3_path_str:%s",mp3_path_str);
-
- //is_music_status=1;
-
- // AI_AMP_MSG_put("请稍后,现在为你查找音乐",strlen("请稍后,现在为你查找音乐"),VC_TTS_PLAY);
-
- // aos_sleep(4000);
-
- AI_VC_send_music_start(mp3_path_str);
-
- }
- }
-
- // IOT_update_statu(3,"","");
-
- // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
-
- }
-
- if(strstr(json_data,"get_device_state")){
-
- bk_printf("get_device_state");
-
- // IOT_update_statu(3,"","");
-
- // AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
-
- }
-
- if(strstr(json_data,"find_device")){
-
- bk_printf("find_device");
-
- AI_AMP_MSG_put("正在查找设备。",strlen("正在查找设备。"),VC_TTS_PLAY);
-
- }
-
- if(strstr(json_data,"renew_device")){
-
- bk_printf("renew_device");
-
- IOT_update_bargein();
-
- if(vc_cfg.VC_mode == 0)
- {
- AI_AMP_MSG_put("已切换到连续对话模式。",strlen("已切换到连续对话模式。"),VC_TTS_PLAY);
-
- //app_audio_set_master_volume(15*80/100);
-
- }else if(vc_cfg.VC_mode == 1)
- {
- AI_AMP_MSG_put("已切换到单对话模式。长按按钮说话,说完松开即可。",strlen("已切换到单对话模式。长按按钮说话,说完松开即可。"),VC_TTS_PLAY);
-
- // app_audio_set_master_volume(15*80/100);
- }else
- {
-
- // app_audio_set_master_volume(15*80/100);
- AI_AMP_MSG_put("已切换到按键打断模式。我说话的时候需要短按按钮打断。",strlen("已切换到按键打断模式。我说话的时候需要短按按钮打断。"),VC_TTS_PLAY);
- }
-
- // IOT_V3_update_statu(3,"","");
- save_VC_cfg();
-
+
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
}
- if(strstr(json_data,"switch_volume"))
- {
-
- // bk_printf("switch_volume");
-
- char *str_tmp = NULL;
-
- char volume_str[5]={0};
-
- str_tmp = strstr(json_data,"\"target\":\"");
-
- //bk_printf("str_tmp:%p",str_tmp);
- if(str_tmp)//解析password
- {
- str_tmp += strlen("\"target\":\"");
- int count = str_count(str_tmp,'\"');
- bk_printf("count:%d",count);
- if(count < sizeof(volume_str))
- {
-
-
- memcpy(volume_str,str_tmp,count);
- volume_str[count] = 0;
- bk_printf("volume_str:%s",volume_str);
+ cJSON *cmd_data = cJSON_CreateObject();
- int temp_vol=atoi(volume_str);
-
- if(temp_vol>=0&&temp_vol<=100)
- {
+ if (cmd_data == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+ // 设置 "event"
+
+ if(type==1){
- vc_cfg.VC_TTS_volume = temp_vol;
-
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
+ cJSON_AddStringToObject(root, "cmd", "chat_state");
- char tts_temp[200]={0};
+ cJSON_AddStringToObject(cmd_data, "state", type_str);
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
- sprintf(tts_temp,"设置音量%d成功。",vc_cfg.VC_TTS_volume);
+ }
- AI_AMP_MSG_put(tts_temp,strlen(tts_temp),VC_TTS_PLAY);
+ if(type==2){
+ long timestamp;
- //is_save_VC_cfg = 1;
+ timestamp = time(NULL);
+ bk_printf("2时间戳: %ld\n", (long)timestamp);
+ long long timestamp_ms = (long long)timestamp * 1000;
+ char timestamp_str[20] ={0};
- save_VC_cfg();
- }
+ // 使用 sprintf 将 long long 类型的时间戳转换为字符串
+ int ret12 = sprintf(timestamp_str, "%lld", timestamp_ms);
+ timestamp_str[ret12] =0;
+ // 打印转换后的字符串形式的时间戳
+ bk_printf("2时间戳(ms 转换为字符串): %s\n", timestamp_str);
-
-
- }
- else
- {
- bk_printf("获取volume失败");
- }
- }
- }
+ cJSON_AddStringToObject(root, "cmd", "chat_text");
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
-}
+ cJSON_AddStringToObject(cmd_data, "type", type_str);
+ cJSON_AddStringToObject(cmd_data, "text", content);
-static void AI_IOT_read_task(void *thread_input)//websocket 读线程
- {
+ cJSON_AddStringToObject(cmd_data, "createTime", timestamp_str);
- int status;
- static u8 *recv_buff = NULL;
-
+
+ }
- if(recv_buff == NULL)
- {
- recv_buff = aic_malloc(recv_buff_mxa_len);
- }
- if(recv_buff == NULL)
- {
- bk_printf("AI_VC_read_task aic_malloc ERROR!!!!!!!!!!!!!!!!!!......");
- return;
- }
- WebSocketMessageType code;
- bk_printf("AI_IOT_read_task go......");
- // AI_VC_read_task_flag = 1;
- while (1) {
-
- if(AI_client_IOT)
- {
- memset(recv_buff,0,recv_buff_mxa_len);
- // status = aic_websocket_recv(AI_VC_client_websocket_handle, recv_buff, sizeof(recv_buff),
- // &code, AOS_WAIT_FOREVER,&result_val);
- // bk_printf("AI_VC_read_task 1");
+ if(type==3){
- // aos_sleep(50);
+ char tmp_bat[20]={0},tmp_sig[20]={0},tmp_vol[20]={0},tmp_bargein[20]={0};
- // u32 timer_ms11 = aos_get_tickcount();
+ cJSON_AddStringToObject(root, "cmd", "device_info");
- // bk_printf("IOT_read_task...... 12");
+ cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
- status = receive_websocket_message_V3(AI_client_IOT,recv_buff,recv_buff_mxa_len,&code);
+ ts_radio_signal_info_t p_signal_info;
+ int32_t ret = 0;
- if(AI_VC_stata==0)
- {
- aos_sleep(100);
- continue;
+ ret = aic_srv_tele_radio_get_signal_info_sync(current_card_id, &p_signal_info);
- }
-
-
+ // p_signal_info.signal_level_val
- // bk_printf("get iot message.................................");
- // bk_printf("bytes_received %02X %02X %02X %02X %02X %02X %02X %02X %02X ...\n",recv_buff[0],recv_buff[1],recv_buff[2],recv_buff[3],recv_buff[4],recv_buff[5],recv_buff[6],recv_buff[7],recv_buff[8]);
+ struct psy_info psy_info;
+ get_psy_info(&psy_info);
+ // psy_info.bat_capacity
- // bk_printf("IOT_read_task...... 13");
+ sprintf(tmp_bat,"%d",psy_info.bat_capacity);
- if(code == WS_TEXT)//字符串
- {
- //bk_printf("AI_VC_read_task 3");
- // bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
-
- }else{
+ sprintf(tmp_sig,"%d",p_signal_info.signal_level_val);
+ sprintf(tmp_vol,"%d",vc_cfg.VC_TTS_volume);
- if(status>8){
+ sprintf(tmp_bargein,"%d",vc_cfg.VC_mode);
- // bk_printf("read TEXT:status:%d",status);
+ cJSON_AddStringToObject(cmd_data, "battery", tmp_bat);
- char jsonstr[500]={0};
+ cJSON_AddStringToObject(cmd_data, "wifi_rssi", tmp_sig);
- memcpy(jsonstr,recv_buff+8,status-8);
+ cJSON_AddStringToObject(cmd_data, "volume", tmp_vol);
- // bk_printf("read json TEXT:status:%s",jsonstr);
+ cJSON_AddStringToObject(cmd_data, "current_role_name", "fx01");
- deal_iot_receive(jsonstr);
+ cJSON_AddStringToObject(cmd_data, "version", "V1.2");
- }
+ cJSON_AddStringToObject(cmd_data, "bargein", tmp_bargein);
- }
-
- if(status>0)
- {
+ // bargein
+
- }else{
+ }
+
+
+ // 将 "payload" 对象添加到根对象中
- break;
- }
+ cJSON_AddItemToObject(root, "data", cmd_data);
- aos_sleep(100);
- }else{
- break;
- }
- }
+ // 将 JSON 对象转换为字符串
- if(recv_buff)
- {
- aic_free(recv_buff);
- recv_buff = NULL;
- }
+ //cJSON_PrintUnformatted
- AI_client_IOT=NULL;
-
- AI_VC_read_IOT_id=0;
- bk_printf("AI_IOT_read_task exit\n");
- // AI_VC_read_task_flag=3;
+ char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
- }
-void IOT_V3_heart()
-{
-
- // 创建根对象
- cJSON *root = cJSON_CreateObject();
- if (root == NULL) {
- bk_printf("Failed to create root object.\n");
- return ;
- }
+ bk_printf(json_str);
- cJSON *cmd_data = cJSON_CreateObject();
+ unsigned char frame[500]={0};
- if (cmd_data == NULL) {
- bk_printf("Failed to create payload object.\n");
- cJSON_Delete(root);
- return ;
- }
- // 设置 "event"
-
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x03;
+ // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
-
+ short temp=strlen(json_str);
+ memcpy(frame+3,&temp,2);
- // if(type==4){
+ memcpy(frame+5,json_str,strlen(json_str));
- struct psy_info psy_info;
- get_psy_info(&psy_info);
+ uint16_t crc = modbus_crc16(json_str,strlen(json_str));
- long timestamp;
+ uint8_t crc_low = crc & 0xFF;
- timestamp = time(NULL);
- bk_printf("2时间戳: %ld\n", (long)timestamp);
+ uint8_t crc_high = (crc >> 8) & 0xFF;
- cJSON_AddStringToObject(root, "cmd", "post_heart_beat");
+ frame[5+strlen(json_str)]=crc_low;
- cJSON_AddNumberToObject(root, "ts", timestamp);
+ frame[6+strlen(json_str)]=crc_high;
- cJSON_AddStringToObject(root, "msg", "心跳");
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
- cJSON_AddNumberToObject(cmd_data, "battery", psy_info.bat_capacity);
+ bk_printf("the send str is %d ",7+strlen(json_str));
- // cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+ send_iot_message(AI_client_IOT,frame,7+strlen(json_str));
- // }
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
- cJSON_AddItemToObject(root, "data", cmd_data);
+void IOT_heart(){
+ unsigned char frame[10]={0};
+ frame[0]=0xFF;
+ frame[1]=0xFE;
+ frame[2]=0x02;
- // 将 JSON 对象转换为字符串
+ int ret=send_iot_message(AI_client_IOT,frame,3);
- //cJSON_PrintUnformatted
+ if(ret==-1&&AI_client_IOT!=NULL){
- char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
- if (json_str == NULL) {
- bk_printf("Failed to print JSON object.\n");
- cJSON_Delete(root);
-
- }
+ bk_printf("发送IOT消息失败");
+ close(AI_client_IOT->sockfd);
+ AI_client_IOT=NULL;
- bk_printf(json_str);
+ }
+}
- // if(type==4){
+// #include <stdio.h>
+// #include <stdint.h>
+
+// int main() {
+// uint8_t data[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01};
+// uint16_t length = sizeof(data) / sizeof(data[0]);
+// uint16_t crc = modbus_crc16(data, length);
+// uint8_t crc_low = crc & 0xFF;
+// uint8_t crc_high = (crc >> 8) & 0xFF;
+// printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
+// return 0;
+// }
- // bk_printf("SEND iot_v3 message");
+static void IOT_login(int type)
+{
+ unsigned char frame[200]={0};
- unsigned char frame[500]={0};
+ //0xFFFE
frame[0]=0xFF;
frame[1]=0xFE;
- frame[2]=0x01;
- frame[3]=0x03;
-
- // AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+ frame[2]=0x00;
- short temp=strlen(json_str);
- // memcpy(frame+3,&temp,2);
+ memcpy(frame+3,vc_cfg.dev_imei,strlen(vc_cfg.dev_imei));
- frame[7]=temp;
+ memcpy(frame+23,get_token(),strlen(get_token()));
- memcpy(frame+8,json_str,strlen(json_str));
+ uint16_t crc = modbus_crc16(get_token(),strlen(get_token()));
- int ret=send_websocket_message(AI_client_IOT,frame,strlen(json_str)+8,AIC_WEBSOCKET_OPCODE_BINARY_FRAME);
+ uint8_t crc_low = crc & 0xFF;
- // int ret=send_iot_message(AI_client_IOT,json_str,strlen(json_str));
+ uint8_t crc_high = (crc >> 8) & 0xFF;
- bk_printf("SEND iot_v3 success message: %d",ret);
+ frame[59]=crc_low;
- // }else{
+ frame[60]=crc_high;
-
+ bk_printf("CRC16 校验值(小端字节序): 0x%02X%02X\n", crc_low, crc_high);
- // }
+ send_iot_message(AI_client_IOT,frame,61);
- // 释放内存
- free(json_str);
- cJSON_Delete(root);
}
-#define IOT
+ #define IOT
//连接websocket
static int websocket_connect_VC(void)
{
char *url = NULL;
-
- char url_iot[200]={0};
int ret = 0;
//连接服务器
if(AI_client_VC == NULL)
goto CONNECT_RET;
}
- //provider=coze&
- //provider=coze&
+ //provider=coze&
+
+ //provider=coze&
if(vc_cfg.dev_type == DEV_JSWM)
url_len =snprintf(url,511,"ws://%s/vc/agent?is_auth=1&dt=%s",vc_cfg.server_ip,get_token());
url_len =snprintf(url,511,"ws://%s/vc/chat?is_auth=1&dt=%s",vc_cfg.server_ip,get_token());
url[url_len] = 0;
+
bk_printf("连接服务器 url:%s",url);
int ws_res_num = get_websocket_res_num();
bk_printf("WS资源剩余量:%d",ws_res_num);
-
if(ws_res_num<=0)//资源不够,要释放资源
{
free_all_websocket_res();
}
-
+ char *url_socket="iot.socket.thisiot.com:7777";
AI_client_VC = init_websocket_client(url,NULL);
#ifdef IOT
if(AI_client_IOT==NULL){
bk_printf("create AI_client_IOT...\n");
+ AI_client_IOT = init_websocket_IOT(url_socket,NULL);
- bk_printf(url_iot);
-
- // AI_client_IOT = init_websocket_IOT(url_socket,NULL);// socket_iot
-
- // wss://wsiot.raisound.com/iot-api/ws-hub/dev/v1?bz-dt=xxx
-
- // ws(s)://wsiot-nocdn.raisound.com/ws-hub/dev/v1?bz-dt=
-#if 1
- sprintf(url_iot,"ws://wsiot-nocdn.raisound.com/ws-hub/dev/v1?bz-dt=%s",get_token());
-#else
-
- sprintf(url_iot,"ws://dmp-dev.raisound.com/iot-api/ws-hub/dev/v1?bz-dt=%s",get_token());
-#endif
-
- AI_client_IOT = init_websocket_IOT_V3(url_iot,NULL);// ws_iot
-
- bk_printf("create AI_client_IOT SUCCESS...\n");
if(AI_client_IOT){
- bk_printf("IOT读线程 AI_VC_read_IOT_id:%d",AI_VC_read_IOT_id);
-
+ bk_printf("IOT读线程 AI_VC_read_task_id:%d",AI_VC_read_IOT_id);
//创建读线程
if(AI_VC_read_IOT_id == 0)
{
AI_VC_read_IOT_id = aos_create_thread(
"AI_VC_read",
- AI_IOT_read_task,// AI_VC_IOT_task //AI_IOT_read_task
+ AI_VC_IOT_task,
&AI_VC_read_IOT_id,
4096u,
0,
NULL,
ai_VC_task_priority,
AOS_AUTO_START);
- bk_printf("IOT读线程 AI_VC_read_IOT_id:%d",AI_VC_read_IOT_id);
+ bk_printf("IOT读线程 AI_VC_read_task_id:%d",AI_VC_read_IOT_id);
}
- aos_sleep(20);
+ aos_sleep(100);
- // IOT_login(1);
+ IOT_login(1);
-
- IOT_V3_heart();
+ // aos_sleep(200);
+
+ // char *iotmessage="{\"cmd\":\"get_bot\",\"data\":\"\"}";
+ // IOT_update_statu(1,"idle","");
+
+ // aos_sleep(200);
+ // IOT_update_statu(2,"res","12312312");
+
+ // aos_sleep(200);
+ // IOT_update_statu(3,"","");
+
+ aos_sleep(200);
+
+ IOT_heart();
// send_iot_message(AI_client_IOT,iotmessage,strlen(iotmessage));
// 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)
{
// 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;
-
+ 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--;
}
}
- else{
-
- if (VC_TTS_PLAY_EVENT == VC_TTS_PLAY_POWER_OFF)
- {
- AI_AMP_MSG_put(0,0,POWER_OFF);
- }else if (VC_TTS_PLAY_EVENT == VC_TTS_PLAY_RESET)
- {
- AI_AMP_MSG_put(0,0,POWER_RESET);
- }
- VAD_status = 0;
-
- ddh_is_close_dialog=0;
-
- // AI_AMP_MSG_put(0,0,VC_CLOSE);
- }
-
+ else
+ AI_AMP_MSG_put(0,0,VC_CLOSE);
//AI_AMP_MSG_put(0,0,VC_RECORD_START);//开启录音
-
- // AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
- bk_msg_printf("VC_END_play_timerout=%d",VC_END_play_timerout);
-
- AI_AMP_MSG_put(0,0,AI_MOT_BACK_MID);
+ bk_msg_printf("VC_END_play_timerout=%d",VC_END_play_timerout);
}
}
// if(AI_VC_play_queue)
// IOT_update_statu(3,"","");
- // IOT_heart();
+ IOT_heart();
bk_printf("AI_key_press1");
- IOT_V3_heart();
+ play_file_stream_data("C:/chenggong.pcm");
u64 timer_ms_tmp = aos_get_tickcount();
if(timer_ms_tmp-timer_ms<1000)//每次触发小于1000ms关闭对话
{
if(vc_cfg.VC_mode ==0 || vc_cfg.VC_mode == 2)//关闭服务
- {
-
- if(is_dialog_status==0){
-
- is_dialog_status=1;
-
- AI_client_VC_synthesis("你好,我要去休息了,唤醒请说你好小七");
-
- }
-
- }
- // AI_VC_Close();
+ AI_VC_Close();
return;
}
timer_ms = timer_ms_tmp;
-
-
- if(vc_cfg.VC_mode == 0&&AI_VC_stata==1&&is_dialog_status==0){
-
- return ;
- }else{
-
- is_dialog_status=0;
-
- }
-
- if(vc_cfg.VC_mode == 1)
- AI_key_long_flag = 1;
-
- play_file_stream_data("C:/chenggong.pcm");
-
bk_printf("AI_key_press");
-
AI_VC_Close();
-
+
VC_state = VC_State_None;
+
+
VC_record_Start();
if(AI_VC_start(0)==0)
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)
{
if(AI_VC_start_lock == 1)
goto AI_VC_start_RET;
AI_VC_start_lock = 1;
-
- //
+ // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
+
bk_printf("AI_VC_start !!!!!!!! ");
//play_file_stop();//先关闭一次本地文件音频播放
VC_state = VC_State_None;
// 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.energy_threshold = 10000;
conf.min_speech_length = 240;//240
conf.silence_detect_length = 300;
conf.rule1_min_tailing_silence = 480;
conf.rule2_min_tailing_silence = vc_cfg.vad_silence;
conf.rule3_min_tailing_silence = vc_cfg.vad_silence;
conf.vad_log_level = 0;
- int init_vad_ret = 0;
-
- conf.auth_info.server_addr=2;
-
+ int init_vad_ret = 0;
strcpy(conf.auth_info.dmp_token, get_token());
static int imsl_nn_init_flag = -1;
if (imsl_nn_init_flag != 0) {
}
- #if BK_SOCKET_IOT
- IOT_update_statu(1,"listening","");
- #endif
+
+ IOT_update_statu(1,"listening","");
net_status_count=0;
//aos_sleep(5);
AI_VC_send_satrt(is_greeting);//
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);
+ // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_LOW );//lcd close ldo
}
-int MSG_Type_error = 0;
+
aos_status AI_AMP_MSG_put(const char *data,u32 len,AI_AMP_MSG_Type MSG_Type)
{
AI_AMP_MSG_queue_t AI_AMP_MSG_queue_data = {0};
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;
}
{
// AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT);
- AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT_IOT);
+ if(AI_client_IOT!=NULL){
+ IOT_heart();
- //IOT_heart();
-
+ }
}
-static void sys_60S_timeout_even(void)
-{
-
- // bk_printf("sys_60S_timeout_even");
-
- if(AI_client_IOT!=NULL&&close_timerout>0){
- IOT_V3_heart();
- }
-
-}
static void sys_10S_timeout_even(void)
{
is_Low_power_warning =0;
}
chg_status_tmp = psy_info.bat_chg_status;
- bk_printf("电量查询:psy_name:%s bat_vol:%d bat_cap:%d chg_status%d chg_type:%d bat_min_voltage:%d bat_max_voltage:%d\n",
-
- psy_info.psy_name,
- psy_info.bat_current_voltage,
- psy_info.bat_capacity,
- psy_info.bat_chg_status,
- psy_info.bat_chg_type,
- psy_info.bat_min_voltage,
- psy_info.bat_max_voltage);
- // tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"当前电量为百分之%d。",psy_info.bat_capacity);
+ // bk_printf("电量查询:psy_name:%s bat_vol:%d bat_cap:%d chg_status%d chg_type:%d bat_min_voltage:%d bat_max_voltage:%d\n",
+
+ // psy_info.psy_name,
+ // psy_info.bat_current_voltage,
+ // psy_info.bat_capacity,
+ // psy_info.bat_chg_status,
+ // psy_info.bat_chg_type,
+ // psy_info.bat_min_voltage,
+ // psy_info.bat_max_voltage);
+ //tmp_data_len = snprintf(tmp_data,sizeof(tmp_data),"当前电量为百分之%d。",psy_info.bat_capacity);
}
// extern char *ota_url;
- //const char *bk_make_timer = "V1_2_250730_8";
+ const char *bk_make_timer = "V1_2_250735_2";
void play_tts_my_local(char *filename)
{
play_audio_file_event(filename);
}
-
-//void send_express_str(char *exp_str){
-
- // texts = ["neutral","happy","laughing","funny","sad","angry",
- // "crying","loving","embarrassed","surprised","shocked","thinking",
- // "winking","cool","relaxed","","confused",""]
-
- /// happy 🙂
-//cue 😸
-//surprised 😲
-//angry 😠
-//crying 😭
-//smirk😏
-//dissatisfied😒
-
-int random_mada=0;
-
-int chumo_tickcount=0;
-
-u8 count_chumo_index[3][2]={0,0,0,0,0,0};
-
-char *str_huashu[3][2][5]={
- {{"摸我的头干嘛,是不是觉得我很可爱呀?不过我可是很酷的哦!",
- "喂!摸我脑袋干嘛?小心我咬你哦~",
- "“嘿嘿,手感是不是很好?限时体验,不退不换~","",""},
- {"行吧行吧,就再让你摸3秒,多一秒都算我输!",
- "唔… 别摸啦,头发都要被你弄乱了!","","",""}},
-{{"干嘛?想搭讪啊?可惜本小七可不是这么容易被收买的~",
- "干嘛碰我肚子?痒死啦!","“扫描完成!结果是……你对我百分之百上瘾!","",""},
- {"喂喂喂,摸够了没?再摸我可要吐槽你了——你这手法比我奶揉面还粗糙!",
- "嗯… 舒服是舒服啦,但别一直摸嘛!","别以为我好哄~只是你刚好摸到舒服的点而已。",
- "嘘——别动,我在检测你的‘快乐值’。",""}},
-{{"偷袭?胆子挺肥啊!信不信我反手给你个‘暴击’(口头版)!",
- "再戳我一次,我就反击——用笑声攻击你!","","",""},
- {"别挠了别挠了!再挠我可要破功了…(小声)其实也还行啦","唔… 别摸我后背!我可是要去冒险的,别耽误我!","","",""}}
-};
-
-void random_chumo(int type,int mode){
-
- // mot_nod_status();
-
- // play_file_stream_data("C:/chumo.pcm");
- // return ;
-
-
-
- int currenttick=aos_get_tickcount();
-
- if(currenttick-chumo_tickcount<6000){
-
- bk_printf("太频繁.....\n");
-
- return ;
- }
- chumo_tickcount=currenttick;
-
- // is_dialog_status
-
- // is_dialog_status=0;
-
- // ||is_dialog_status==1
-
- //if((VC_state==VC_State_Listening&&VAD_status==0)||VC_state==VC_State_End) //||VC_state==VC_State_None
- // {
-
-
- bk_printf("VC_state11 %d.....\n",VC_state);
- // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-
- if(type==0&&mode==0)
- play_file_stream_data("C:/chumo.pcm");
-
-
- int index_temp=count_chumo_index[type][mode];
-
- if(index_temp<5)
- {
- app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
-
- AI_AMP_MSG_put(str_huashu[type][mode][index_temp],strlen(str_huashu[type][mode][index_temp]),VC_TTS_PLAY);
-
- is_dialog_status=0;
- }
-
- // AI_client_VC_synthesis(str_huashu[type][mode][index_temp]);
-
- count_chumo_index[type][mode]++;
-
- if(strlen(str_huashu[type][mode][index_temp+1])<5)
- count_chumo_index[type][mode]=0;
-
- // aic_free(AI_TTS_str);
- // AI_TTS_str = NULL;
- VC_state = VC_State_TTSStart;
- // play_audio_file("C:/chumo.mp3");
-
- // return ;
- // }else{
-
- // bk_printf("VC_state22 %d.....\n",VC_state);
-
- // return ;
- // }
-
- // if(VC_Play_flag!=1){
-
- // // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
- // play_audio_file("C:/chumo.mp3");
-
- // bk_printf("chumo.mp3.....\n");
-
-
- // }else{
-
- // // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
- // bk_printf("duihuazhong.....\n");
-
- // return ;
-
- // }
-
- send_express_str_chumo(type,mode);
-
- return ;
-
- // if(chumo_exp_open==1){
-
- // random_mada++;
-
- // if(random_mada==1){
- // send_express_str("happy");
- // }
- // if(random_mada==2){
- // send_express_str("cue");
- // }
- // if(random_mada==3){
- // send_express_str("surprised");
- // }
- // if(random_mada==4){
- // send_express_str("angry");
- // }
- // if(random_mada==5){
- // send_express_str("crying");
- // }
- // if(random_mada==6){
- // send_express_str("smirk");
- // }
- // if(random_mada==7){
- // send_express_str("dissatisfied");
- // }
-
- // if(random_mada==7)
- // random_mada=0;
-
- // }
-
- // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
-
-}
#define exptest
-
-void bk_task_suspend(void *p)
-{
- // bk_printf("idle cpu sleep");
-
- aic_gpio_input(GPIO_AGPIO_1, GPIO_INPUT_NOINT, NULL, NULL);
-
-}
-
-void bk_task_resume(void *p)
-{
-
- // bk_printf("cpu work");
-
-}
-
-
-extern imsl_nn_printf_func imsl_nn_printf;
-
int auth_vad_status=0;
-
-int auth_kws_status=0;
-
-static void uart_recv_UI_handel(void *thread_input)
-{
- size_t read;
- char buf_ui[20];
- //uart_data_t *data;
-
- /**
- * 1.Com number is aic_uart array index, aic_uart at aicos\projects\xxx\config\serial\serial_config.h;
- * 2.use aic_uart[index] parameter to set serial.
- */
- // serial_handle = uart_open(LOOPBACK_COM);
- // aic_assert(serial_handle);
- bk_printf("uart_recv_UI_handel start");
-
- if(!ui_uart_handle)
- return ;
-
- bk_printf("uart_recv_UI_handel start01");
- /* change baudrate */
- // uart_set_baud_rate(serial_handle, LOOPBACK_BANDRATE);
-
- while(1) {
- /* read data. */
- // buf = aic_malloc(20);
-
- read = uart_read(ui_uart_handle, buf_ui, 20);
-
- bk_printf("uart_recv_UI_handel start02 %d",read);
-
- bk_printf("uart_recv %02X %02X %02X %02X %02X %02X %02X ...\n",buf_ui[0],buf_ui[1],buf_ui[2],buf_ui[3],buf_ui[4],buf_ui[5],buf_ui[6]);
-
- if (read == 0 || read > 20) {
- // drv_logw("uart_recv: err size = (%d)!\n", read);
- // aic_dma_free(buf);
- // continue;
- }
-
- // drv_logi("uart_recv: read size = (%d)!\n", read);
-
- // data = aic_malloc(sizeof(*data));
- // data->addr = buf;
- // data->size = read;
- // aos_send_to_queue(uart_queue_id, (void*)&data, AOS_WAIT_FOREVER);
- }
-
-
- bk_printf("uart_recv_UI_handel close ");
-
- /* close uart. */
- // uart_close(ui_uart_handle);
-}
-
-
static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程
{
- char count = 20;
+ char count = 30;
boolean pdp_activated ;
AI_AMP_MSG_queue_t AI_AMP_msg = {0};
init_VC_cfg();
-
-
- imsl_nn_printf = bk_printf;
-
+
app_audio_set_master_volume(15*vc_cfg.VC_TTS_volume/100);
aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH );//lcd open ldo
- // GPIO_AGPIO_1
-
+ // aos_sleep(20000);
play_audio_file_event("C:/R_POWER_1.mp3");
+ // aos_sleep(20000);
// play_audio_file("C:/R_POWER_1.mp3");
// http://dmp-ota.tos-cn-guangzhou.volces.com/ota/2025_07_24/1948312805093978114gx306l_h3.diff
- bk_printf("FXH01_Version:%s",FXH01_Version);
- bk_printf("FXH01_Version:%s",FXH01_Version);
- bk_printf("FXH01_Version:%s",FXH01_Version);
-
- //slp_register_sleep_hook(bk_task_suspend, AIC_NULL,
- // bk_task_resume, AIC_NULL);
-
-
- // snd_soc_component_write(codec, ES8311_ADC_REG17, es8311->adc_volume);
- // snd_soc_component_write(codec, ES8311_DAC_REG32, es8311->dac_volume);
-
- // aos_sleep(1000);
-
- while(count --)
- {
- pdp_activated = aic_is_default_pdp_activated();
- if(pdp_activated == TRUE)
- break;
- bk_printf("AI_AMP_2_5_init 等待注网..... \n");
-
- // audio_play_tone(count%15,500);//播放提示音,测试用
- // audio_play_tone(3,500);//播放提示音,测试用
-
- aos_sleep(1000);
- }
-
+ bk_printf("FXH01_Version:%s",FXH01_Version);
+ bk_printf("FXH01_Version:%s",FXH01_Version);
+ bk_printf("FXH01_Version:%s",FXH01_Version);
- if(pdp_activated){
-
- bk_printf("AI_AMP_2_5_init 入网成功..... \n");
-
- }else{
-
- bk_printf("AI_AMP_2_5_init 第一次入网失败..... \n");
- aic_send_cfun_cmd(0);
- aos_sleep(500);
-
- aic_send_cfun_cmd(1);
-
- aos_sleep(500);
-
- count=20;
while(count --)
{
break;
bk_printf("AI_AMP_2_5_init 等待注网..... \n");
- // audio_play_tone(count%15,500);//播放提示音,测试用
- // audio_play_tone(3,500);//播放提示音,测试用
+ //audio_play_tone(count%15,500);//播放提示音,测试用
+ //audio_play_tone(3,500);//播放提示音,测试用
aos_sleep(1000);
- }
-
}
bk_websocket_demo();
// aos_sleep(5000);
-
-
ota_update_version();
// if(strlen(ota_url)>3){
dev_authentication_init();
+
count =50;
while(count --)
{
if(sys_10S_timer == NULL)
{
- sys_10S_timer = aos_create_timer("AI_VC_10S_timer",
+ sys_10S_timer = aos_create_timer("AI_VC_1S_timer",
sys_10S_timeout, &sys_10S_timer,
10000,
AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
aic_assert(sys_10S_timer);
}
- // AI_VC_60S_timer
- if(AI_VC_60S_timer == NULL)
- {
- AI_VC_60S_timer = aos_create_timer("AI_VC_60S_timer",
- sys_60S_timeout, &AI_VC_60S_timer,
- 50000,
- AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);
- aic_assert(AI_VC_60S_timer);
- }
-
-
- // AI_VC_60S_timer
+ // AI_VC_60S_timer
// if(AI_VC_60S_timer == NULL)
// {
// AI_VC_60S_timer = aos_create_timer("AI_VC_60S_timer",
bk_printf("auth_vad token0: %s..... \n",get_token());
struct AuthInfo auth_info;
- // dmp_log_level = 10086;
-
- // auth_info.server_addr=2;
-
strcpy(auth_info.dmp_token, get_token());
if(strlen(auth_info.dmp_token)>0){
- for(int i=0;i<40;i++){
-
+ for(int i=0;i<3;i++){
int ret=auth_vad(&auth_info);
if(ret==0){
- bk_printf("auth_vad fail token: %s..... \n",get_token());
+ bk_printf("auth_vad fail token: %s..... \n",get_token());
- }
- else
- {
+ }else{
- bk_printf("auth_vad success token: %s..... \n",get_token());
+ bk_printf("auth_vad success token: %s..... \n",get_token());
- auth_vad_status=1;
-
- break;
-
- }
-
- aos_sleep(100);
+ auth_vad_status=1;
+ break;
}
- for(int i=0;i<40;i++){
-
- int ret=auth_kws(&auth_info);
-
- if(ret==0){
-
- bk_printf("auth_kws fail token: %s..... \n",get_token());
-
- }
- else
- {
-
- bk_printf("auth_kws success token: %s..... \n",get_token());
-
- auth_kws_status=1;
-
- break;
-
- }
-
- aos_sleep(100);
-
}
+ }else{
- bk_printf("auth_vad_status: %d auth_kws_status %d..... \n",auth_vad_status,auth_kws_status);
-
- if(auth_vad_status==0||auth_kws_status==0)
- {
-
- // play_audio_file_event("C:/xinhaoruo1.mp3");
-
- // aos_sleep(500);
+ play_audio_file_event("C:/xinhaoruo1.mp3");
+ }
+ if(auth_vad_status==0){
- }
+ play_audio_file_event("C:/xinhaoruo1.mp3");
- }
- else
- {
+ aos_sleep(2000);
- // play_audio_file_event("C:/xinhaoruo1.mp3");
}
-
-
#ifdef exptest
- aos_sleep(500);
+ aos_sleep(5000);
ui_uart_handle = uart_open(2);
// 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);
}
- 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);
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);//打开声音
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:
- sys_60S_timeout_even();
- break;
case AI_PRINTF:
if(AI_AMP_msg.data)
uart_write(ai_uart_handle,AI_AMP_msg.data, AI_AMP_msg.len);
break;
- case AI_KEY2_RELEASE:
- // bk_printf("AI_KEY2_RELEASE");
-
- // mot_nod_status();
- if(AI_VC_stata==1)
- random_chumo(2,0);
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- break;
- case AI_KEY3_RELEASE:
- bk_printf("AI_KEY3_RELEASE");
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- if(AI_VC_stata==1)
- random_chumo(0,0);
- break;
- case AI_KEY4_RELEASE:
- bk_printf("AI_KEY4_RELEASE");
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- if(AI_VC_stata==1)
- random_chumo(1,0);
- break;
- case AI_KEY2_LONG_PRESS:
- bk_printf("AI_KEY2_LONG_PRESS");
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- if(AI_VC_stata==1)
- random_chumo(2,1);
-
- break;
- case AI_KEY3_LONG_PRESS:
- bk_printf("AI_KEY3_LONG_PRESS");
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- if(AI_VC_stata==1)
- random_chumo(0,1);
- break;
- case AI_KEY4_LONG_PRESS:
- bk_printf("AI_KEY4_LONG_PRESS");
- // #if SUPPORT_MOT
- // mot_nod(5);
- // #endif
- if(AI_VC_stata==1)
- random_chumo(1,1);
- break;
- case MOT_GPIO_HANDLE_CB:
-
- mot_gpio_handle_cb(AI_AMP_msg.data);
- break;
-
- case AI_MOT_BACK_MID:
-
- back_middle_statu_mot();
- break;
-
default:
break;
}
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;
}