#endif
#include "bk_make_time.h"
-
+static aos_thread_id UI_UART_read_id = 0;
// #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 0
+#define IS_KWS 1
#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;
static aos_thread_id AI_VC_read_task_id = 0;
-
+static aos_thread_id AI_VC_read_IOT_id = 0;
volatile char AI_VC_read_task_flag = 0;
static aos_queue_ptr AI_VC_send_queue = NULL;
WebSocketClient *AI_client_VC = NULL;
+WebSocketClient *AI_client_IOT = NULL;
+static u8 issend_start_up=0;
static u32 close_timerout = 0;
+
+static u32 sleep_chumo_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, ...)
{
//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,"amp.raisound.com");//服务器地址
// strcpy(vc_cfg.server_ip,"115.190.94.208:22080");//服务器地址
+ strcpy(vc_cfg.server_ip,"118.145.158.207:22080");//服务器地址
+
vc_cfg.VC_mode =2;//对话模式
strcpy(vc_cfg.power_on_tone,"你好,请问您有什么需要我帮忙的吗?");//开机提示词
vc_cfg.VC_record_TYPE = VC_record_TYPE_PCM;//录音格式
vc_cfg.is_VAD = IS_VAD;//=1打开vad打断
vc_cfg.is_KWS = IS_KWS;//=1打开本地语言打断
vc_cfg.speech_rate = 0;//语速配置
- vc_cfg.vad_silence = 500;//vad断句时间 ms
+ vc_cfg.vad_silence = 800;//vad断句时间 ms 500
vc_cfg.VC_TTS_volume = 80;//音量
}
int init_VC_cfg(void)
u8 *save_temp_tts=NULL;
+int is_guanji=0;
+
+void aic_https_demotest();
+
int check_text(char *text,int ret_str_len)
{
//bk_printf("check_text:text:%s",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);
}
- // if(vc_cfg.VC_mode != 0)
+ // 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;
AI_AMP_MSG_put(tmp_data,tmp_data_len,VC_TTS_PLAY);
}
- //if(vc_cfg.VC_mode != 0)
+ // 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;
// 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;
+
+ // 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);
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,0x08,0x01,0x0a};
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x03,0x01,0x05};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
+ ret = 0;
+ goto RET;
+ }
+
+ if(strstr(text,"做一个卡通的表情"))
+ {
+
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x07,0x01,0x09};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
+ ret = 0;
+ goto RET;
+ }
+
+ if(strstr(text,"做一个花痴的表情"))
+ {
+
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x04,0x01,0x06};
+ uart_write(ui_uart_handle,cmd_ui, 7);
+ }
+
+ ret = 0;
+ goto RET;
+ }
+
+ if(strstr(text,"做一个惊喜的表情"))
+ {
+
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ if(ui_uart_handle){
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,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,"做一个哭泣的表情"))
+ {
+
+ AI_AMP_MSG_put("开始做表情了",strlen("开始做表情了"),VC_TTS_PLAY);
+
+ 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,"导出文件"))
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", TRUE);//是否播放提示词
+ cJSON_AddBoolToObject(greeting, "enabled", FALSE);//是否播放提示词
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", "ogg_opus");
+ cJSON_AddStringToObject(outbound_cfg, "format", "opus");//ogg_opus opus
+
+ // 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", 10);
+ cJSON_AddNumberToObject(outbound_cfg, "chunk_interval_ms", 50);
//cJSON_AddStringToObject(outbound_cfg, "voice", "7426720361733013513");
//cJSON_AddStringToObject(outbound_cfg, "voice", "ICL_zh_female_huoponvhai_tob");
// }
// }
-
-//Music.Start 开始发送音频
-static void AI_VC_send_music_start(char *urlpath)
+static void AI_VC_send_startup(void)
{
VC_state = VC_State_SpeechStart;//开始说
// 创建根对象
}
// 设置 "event" 字段
- cJSON_AddStringToObject(root, "event", "audio.convert");
+ cJSON_AddStringToObject(root, "event", "prompt");
// 创建 "payload" 对象
cJSON *payload = cJSON_CreateObject();
return ;
}
- cJSON *audio_convert_request = cJSON_CreateObject();
+
+
+ cJSON *promat = cJSON_CreateObject();
if (payload == NULL) {
bk_printf("Failed to create payload object.\n");
cJSON_Delete(root);
return ;
}
- cJSON_AddStringToObject(audio_convert_request, "audio_url", urlpath);
- cJSON_AddNumberToObject(audio_convert_request, "bit_depth", 16);
- cJSON_AddNumberToObject(audio_convert_request, "channels", 1);
- cJSON_AddNumberToObject(audio_convert_request, "sample_rate", 16000);
- if(outbound_attributes_format == attributes_format_OPUS)
- {
- cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");
- }else{
+ cJSON *interrupt_keywords = cJSON_CreateArray();
+ // cJSON_AddStringToObject(promat, "event", "startup");
- cJSON_AddStringToObject(audio_convert_request, "target_format", "pcm");
- }
+ //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("停止"));
+ //cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("打断"));
+ // cJSON_AddItemToArray(interrupt_keywords, cJSON_CreateString("等一下"));
+ cJSON *content = cJSON_CreateObject();
- cJSON_AddItemToObject(payload, "audio_convert_request", audio_convert_request);
+
+ cJSON_AddStringToObject(content, "role", "user");
+
+ cJSON_AddStringToObject(content, "content", "{\"event\":\"startup\"}");
+
+ cJSON_AddStringToObject(content, "content_type", "text");
+
+ cJSON_AddItemToArray(interrupt_keywords, content);
+
+
+ cJSON_AddItemToObject(payload, "prompt", interrupt_keywords);
+
+ //cJSON_AddItemToObject(inbound_attributes, "interrupt_options", interrupt_options);
+
+
+
+
+ // cJSON_AddItemToObject(payload, "prompt", promat);
// 将 "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);
}
-//Audio.Completed 结束发送音频
-static void AI_VC_send_audio_completed(void)
+//Music.Start 开始发送音频
+static void AI_VC_send_music_start(char *urlpath)
+{
+ VC_state = VC_State_SpeechStart;//开始说
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
+
+ // 设置 "event" 字段
+ cJSON_AddStringToObject(root, "event", "audio.convert");
+
+ // 创建 "payload" 对象
+ cJSON *payload = cJSON_CreateObject();
+ if (payload == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+
+ cJSON *audio_convert_request = cJSON_CreateObject();
+ if (payload == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+
+ cJSON_AddStringToObject(audio_convert_request, "audio_url", urlpath);
+ cJSON_AddNumberToObject(audio_convert_request, "bit_depth", 16);
+ cJSON_AddNumberToObject(audio_convert_request, "channels", 1);
+ cJSON_AddNumberToObject(audio_convert_request, "sample_rate", 16000);
+
+ if(outbound_attributes_format == attributes_format_OPUS)
+ {
+ cJSON_AddStringToObject(audio_convert_request, "target_format", "opus");
+ }else{
+
+ cJSON_AddStringToObject(audio_convert_request, "target_format", "pcm");
+ }
+
+
+ cJSON_AddItemToObject(payload, "audio_convert_request", audio_convert_request);
+
+ // 将 "payload" 对象添加到根对象中
+ cJSON_AddItemToObject(root, "payload", payload);
+
+ // 将 JSON 对象转换为字符串
+ char *json_str = cJSON_Print(root);
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
+ AI_VC_send_data(json_str,strlen(json_str),AIC_WEBSOCKET_OPCODE_TEXT_FRAME);//发送数据
+
+
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
+
+//Audio.Completed 结束发送音频
+static void AI_VC_send_audio_completed(void)
{
VC_state = VC_State_SpeechEnd;//说结束
// 创建根对象
//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)
+ 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 send_express_str_xinxinmao(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
+
+ // 淡定: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(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,"点头")){
+
+ 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)
{
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();
if(status>0)
{
- close_timerout = 60;
+
+
+ close_timerout = 300;
+
+ if(is_dialog_status==0){
+
+ sleep_chumo_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(strstr(recv_buff,"\"started\""))//开始
{
+
+ 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结果
}else if(strstr(recv_buff,"\"asr.completed\""))//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);
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);
+ 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);
+
+ }
+
bk_printf("vad间隔时间长,判断为两次对话:%s",AI_ASR_str);
}
#if BK_SOCKET_IOT
IOT_update_statu(1,"thinking","");
#endif
+
+
}
+
+
+ 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触发
{
// 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);
{
// str_tmp+=strlen("\"message\":\"");
// int count = strlen(str_tmp);
- 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);
+ AI_AMP_MSG_put("没å\90¬æ¸\85ï¼\8c请å\86\8d说ä¸\80é\81\8d",strlen("没å\90¬æ¸\85ï¼\8c请å\86\8d说ä¸\80é\81\8d"),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)
{
AI_VC_send_music_start(mp3_path);
}
+
+ if(str_tmp_motion){
+
+ char emotion_str[200];
+ memset(emotion_str,0,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,'\"');
+ //存asr结果
+
+ if(str_tmp_len>3){
+ memcpy(emotion_str,str_tmp1+15,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);
+
+ send_express_str(emotion_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...",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);
// if(fp_tts_save){
// bk_printf("save tts!!!");
if(AI_client_VC != NULL)
{
bk_printf("AI_VC_read_task:vc连接断开了");
- AI_AMP_MSG_put("vc连接断开了",strlen("vc连接断开了"),VC_CONNECT_ERROR);
+ AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),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((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播放时禁止打断,不输入语音
- continue;
- // 每次获得语音后调用, 语音长度最好小于100ms
- // wave为u8*或void*指针时需要 / 2
- //int vad_test_time = aos_get_tickcount();
- //bk_printf("run_vad vad_test_time:%d,data_len:%d",vad_test_time,ret);
- run_vad((int16_t *)vrecord_buf, ret / 2);
- //bk_printf("run_vad 用时:%d",aos_get_tickcount()-vad_test_time);
- vad_status_t = vad_detect();
- // bk_printf("VAD:vad_status_t:%d",vad_status_t);
- // audio_data(vrecord_buf,ret,23);
- if (vad_status_t == 2) {//说话停止
- vad_clear();
- if(VAD_status == 1)//清空buff
+ if(is_dialog_status==1){
+
+ if(vc_cfg.is_KWS)
{
- //VAD_timeout = aos_get_tickcount()-VAD_time;
- VAD_time = aos_get_tickcount();
- bk_rb_clear(VAD_rb_data);
+ 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);
+ }
+ }
+ continue;
+ }
+ // 每次获得语音后调用, 语音长度最好小于100ms
+ // wave为u8*或void*指针时需要 / 2
+ //int vad_test_time = aos_get_tickcount();
+ //bk_printf("run_vad vad_test_time:%d,data_len:%d",vad_test_time,ret);
+ run_vad((int16_t *)vrecord_buf, ret / 2);
+ //bk_printf("run_vad 用时:%d",aos_get_tickcount()-vad_test_time);
+ vad_status_t = vad_detect();
+ // bk_printf("VAD:vad_status_t:%d",vad_status_t);
+ // audio_data(vrecord_buf,ret,23);
+
+ if (vad_status_t == 2) {//说话停止
+ vad_clear();
+ if(VAD_status == 1)//清空buff
+ {
+ //VAD_timeout = aos_get_tickcount()-VAD_time;
+ VAD_time = aos_get_tickcount();
+ bk_rb_clear(VAD_rb_data);
if(inbound_attributes_format == attributes_format_OPUS)//填充更多数据,以免后面丢失
{
if(sizeof(vrecord_buf)>ret)
}
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);
- 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();
- }
- }
+ 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:发送打断对话");
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)
+ if(VC_state > VC_State_SpeechStart){
bk_printf("VAD:有数据还没发:VC_state:%d\r\n\r\n",VC_state);
- // AI_VC_send_audio_create();//发送开始音频
- // bk_printf("VAD:发送开始音频");
+
+ AI_AMP_MSG_put("没听清,请再说一遍",strlen("没听清,请再说一遍"),VC_CONNECT_ERROR);
+ }
+ // AI_VC_send_audio_create();//发送开始音频
+ // bk_printf("VAD:发送开始音频");
+
+ // char count_tmp = 200;
+
}
vad_end_flag = 1;
}else//没录音数据
}
- //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);
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);
+
+ // bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+
if(count_tmp <= 0 )//播放完了
{
- VC_END_play_timerout = 1;
+ bk_printf("VC_State_End:count_tmp = %d",count_tmp);
+ VC_END_play_timerout = 1;
}
}
continue;//正常有数据就不执行下面写0
}
+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);
+
+ //{"cmd":"emotion","msg":"AI指令:emotion","data":"Cute","ts":1764914695122,"targetDeviceId":"865530078570777"}
+
+ if(strstr(json_data,"action")){
+
+ 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,"emotion")){
+
+ bk_printf("emotion");
+
+ 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();
+
+ }
+
+ 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失败");
+ }
+ }
+ }
+
+
+}
+
+
+static void AI_IOT_read_task(void *thread_input)//websocket 读线程
+ {
+
+ int status;
+ static u8 *recv_buff = NULL;
+
+
+ if(recv_buff == NULL)
+ {
+ recv_buff = aic_malloc(recv_buff_mxa_len);
+ }
+ 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");
+
+ // aos_sleep(50);
+
+ // u32 timer_ms11 = aos_get_tickcount();
+
+ // bk_printf("IOT_read_task...... 12");
+
+ status = receive_websocket_message_V3(AI_client_IOT,recv_buff,recv_buff_mxa_len,&code);
+
+ if(AI_VC_stata==0)
+ {
+ aos_sleep(100);
+ continue;
+
+ }
+
+
+
+ // 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]);
+
+
+ // bk_printf("IOT_read_task...... 13");
+
+ if(code == WS_TEXT)//字符串
+ {
+ //bk_printf("AI_VC_read_task 3");
+ // bk_printf("read TEXT:status:%d,data:%s",status,recv_buff);
+
+ }else{
+
+
+ if(status>8){
+
+ // bk_printf("read TEXT:status:%d",status);
+
+ char jsonstr[500]={0};
+
+ memcpy(jsonstr,recv_buff+8,status-8);
+
+ // bk_printf("read json TEXT:status:%s",jsonstr);
+
+ deal_iot_receive(jsonstr);
+
+ }
+
+ }
+
+ if(status>0)
+ {
+
+
+ }else{
+
+ break;
+ }
+
+ aos_sleep(100);
+ }else{
+
+ break;
+ }
+
+ }
+
+ if(recv_buff)
+ {
+ aic_free(recv_buff);
+ recv_buff = NULL;
+ }
+
+ AI_client_IOT=NULL;
+
+ AI_VC_read_IOT_id=0;
+ bk_printf("AI_IOT_read_task exit\n");
+ // AI_VC_read_task_flag=3;
+
+ }
+
+void IOT_V3_heart()
+{
+
+ // 创建根对象
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ bk_printf("Failed to create root object.\n");
+ return ;
+ }
+
+ cJSON *cmd_data = cJSON_CreateObject();
+
+ if (cmd_data == NULL) {
+ bk_printf("Failed to create payload object.\n");
+ cJSON_Delete(root);
+ return ;
+ }
+ // 设置 "event"
+
+
+
+
+ // if(type==4){
+
+ struct psy_info psy_info;
+ get_psy_info(&psy_info);
+
+ long timestamp;
+
+ timestamp = time(NULL);
+ bk_printf("2时间戳: %ld\n", (long)timestamp);
+
+ cJSON_AddStringToObject(root, "cmd", "post_heart_beat");
+
+ cJSON_AddNumberToObject(root, "ts", timestamp);
+
+ cJSON_AddStringToObject(root, "msg", "心跳");
+
+ cJSON_AddNumberToObject(cmd_data, "battery", psy_info.bat_capacity);
+
+ // cJSON_AddStringToObject(cmd_data, "device_id", vc_cfg.dev_imei);
+
+ // }
+
+
+ cJSON_AddItemToObject(root, "data", cmd_data);
+
+
+
+ // 将 JSON 对象转换为字符串
+
+ //cJSON_PrintUnformatted
+
+ char *json_str = cJSON_PrintUnformatted(root); //cJSON_Print
+ if (json_str == NULL) {
+ bk_printf("Failed to print JSON object.\n");
+ cJSON_Delete(root);
+
+ }
+
+
+ bk_printf(json_str);
+
+
+ // if(type==4){
+
+ // bk_printf("SEND iot_v3 message");
+
+ unsigned char frame[500]={0};
+ 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);//发送数据
+
+ short temp=strlen(json_str);
+ // memcpy(frame+3,&temp,2);
+
+ frame[7]=temp;
+
+ memcpy(frame+8,json_str,strlen(json_str));
+
+ 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));
+
+ bk_printf("SEND iot_v3 success message: %d",ret);
+
+ // }else{
+
+
+
+ // }
+
+ // 释放内存
+ free(json_str);
+ cJSON_Delete(root);
+}
+
+#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)
ret = - 1;
goto CONNECT_RET;
}
+
+ //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());
else
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();
AI_client_VC = init_websocket_client(url,NULL);
+#ifdef IOT
+ if(AI_client_IOT==NULL){
+
+ bk_printf("create AI_client_IOT...\n");
+
+ 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 0
+ 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);
+
+ //创建读线程
+ 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_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);
+ }
+
+ aos_sleep(20);
+
+ // IOT_login(1);
+
+
+ IOT_V3_heart();
+
+
+ // send_iot_message(AI_client_IOT,iotmessage,strlen(iotmessage));
+
+ }
+ }
+ #endif
if(!AI_client_VC)
{
// 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,VC_CLOSE);
+ AI_AMP_MSG_put(0,0,CLOSE_IOT);
}
}
+
+ 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;
+
+ AI_client_VC_synthesis("你好,我要去休息了,唤醒请说你好小七");
+ }
+
+ }
+
+
if(VC_pingping_timerout>0)
{
VC_pingping_timerout--;
}
}
- else
- AI_AMP_MSG_put(0,0,VC_CLOSE);
+ else{
+
+ VAD_status = 0;
+ // 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);
}
}
// if(AI_VC_play_queue)
bk_printf("AI_key_press1");
- play_file_stream_data("C:/chenggong.pcm");
+ IOT_V3_heart();
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)//关闭服务
- AI_VC_Close();
+ {
+
+ if(is_dialog_status==0){
+
+ is_dialog_status=1;
+
+ AI_client_VC_synthesis("你好,我要去休息了,唤醒请说你好小七");
+
+ }
+
+ }
+ // 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_state = VC_State_None;
VC_record_Start();
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;
// 启用VAD时初始化
+
struct VadConfig conf;
conf.sil_threshold = 63;
- conf.energy_threshold = 10000;
+ conf.energy_threshold = 10000;//10000 2000;
conf.min_speech_length = 240;//240
conf.silence_detect_length = 300;
conf.rule1_min_tailing_silence = 480;
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) {
// aic_gpio_output(MOT_EN_REV,GPIO_OUTPUT_LVL_LOW);
// aic_gpio_output(GPIO_20,GPIO_OUTPUT_LVL_LOW );
#if SUPPORT_MOT
- MTO_stop();
+ // MTO_stop();
+
+ // MTO_restert();
+ // MTO_restert_tb();
+
#endif
+
bk_printf("AI_VC_Close!!!!!!!!!!!!");
websocket_deconnect_VC();//断开连接
//销毁录音线程
//app_logi("app_audio_stop2");
AI_VC_stata = 0;
AI_VC_Close_lock = 0;
+
+ // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
}
int MSG_Type_error = 0;
{
// AI_AMP_MSG_put(NULL,0,AI_TIMER_EVENT);
+ 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");
+
+ if(AI_client_IOT!=NULL&&close_timerout>0){
+ IOT_V3_heart();
+ }
+
+}
static void sys_10S_timeout_even(void)
{
play_audio_file_event(filename);
}
-// #define exptest
+
+//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)
+ {
+ AI_AMP_MSG_put(str_huashu[type][mode][index_temp],strlen(str_huashu[type][mode][index_temp]),VC_TTS_PLAY);
+
+ }
+
+ // 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;
+
+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 = 30;
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
+
play_audio_file_event("C:/R_POWER_1.mp3");
// play_audio_file("C:/R_POWER_1.mp3");
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);
+
+
while(count --)
{
// aos_sleep(5000);
+
+
ota_update_version();
// if(strlen(ota_url)>3){
if(sys_10S_timer == NULL)
{
- sys_10S_timer = aos_create_timer("AI_VC_1S_timer",
+ sys_10S_timer = aos_create_timer("AI_VC_10S_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
// if(AI_VC_60S_timer == NULL)
// {
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){
}
}else{
- play_audio_file_event("C:/xinhaoruo1.mp3");
+ play_audio_file_event("C:/xinhaoruo1.mp3");
}
if(auth_vad_status==0){
#ifdef exptest
- aos_sleep(5000);
+ aos_sleep(500);
ui_uart_handle = uart_open(2);
// uart_write(ui_uart_handle,"123", strlen("123"));
- u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x02,0x01,0x04};
+ u8 cmd_ui[7]={0xAA,0x55,0xFF,0x02,0x01,0x01,0x03};
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初始化
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 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_PRESS:
- bk_printf("AI_KEY2_PRESS");
- #if SUPPORT_MOT
- mot_nod(5);
- #endif
- 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:
#include "aic_srv_tele_sim.h"
#include <gpio_inc.h>
#include "aic_version.h"
-
+#include "eipu.h"
#include "dev_authentication.h"
#include "imsl_vad.h"
#include "efuse.h"
#include "gpo_inc.h"
#include "mot_dev.h"
-// #define MOT_EN_FWD_IO GPO_2 //马达驱动正反转,20脚 GPO2
-// #define MOT_EN_REV_IO GPIO_14 //马达驱动正反转,74脚 GPIO_14
+//点头
+ #define MOT_EN_FWD_IO GPO_2 //马达驱动正反转,20脚 GPO2
+ #define MOT_EN_REV_IO GPIO_14 //马达驱动正反转,74脚 GPIO_14
+ #define MOT_TOP_SITE_IO GPIO_1 //马达转到最上位置io,56脚
+ #define MOT_MIDDLE_SITE_IO GPIO_0 //马达转到最中位置io,81脚
+ #define MOT_BOOTOM_SITE_IO GPIO_7//马达转到最下位置io ,77脚
+//摇头
+#define MOT_LR_EN_FWD_IO GPO_13 //马达驱动正反转,20脚 GPO2 GPIO_AGPIO_1 GPO_13
+#define MOT_LR_EN_REV_IO GPIO_19 //马达驱动正反转,74脚 GPIO_14
+#define MOT_LR_TOP_SITE_IO GPIO_AGPIO_3 //马达转到最左位置io,85脚
+// #define MOT_LR_BOOTOM_SITE_IO GPO_8 //马达转到最中左右位置io,86脚
+#define MOT_LR_MIDDLE_SITE_IO GPIO_6//马达转到最中位置io ,80脚
+
// #define MOT_TOP_SITE_IO GPIO_1 //马达转到最上位置io,56脚
// #define MOT_MIDDLE_SITE_IO GPIO_26 //马达转到最中位置io,77脚
// #define MOT_BOOTOM_SITE_IO GPIO_7//马达转到最下位置io ,81脚
-// #define MOT_EN_LR_FWD_IO GPO_13 //马达驱动正反转,79脚 GPO2
-// #define MOT_EN_LR_REV_IO GPIO_19 //马达驱动正反转,75脚 GPIO_14
-// #define MOT_LR_TOP_SITE_IO GPIO_18 //马达转到最上位置io,85脚
-// #define MOT_LR_MIDDLE_SITE_IO GPIO_26 //马达转到最中位置io,86脚
-// #define MOT_LR_BOOTOM_SITE_IO GPIO_6//马达转到最下位置io ,80脚
-
-#define MOT_EN_FWD_IO GPO_13 //马达驱动正反转,20脚 GPO2
-#define MOT_EN_REV_IO GPIO_19 //马达驱动正反转,74脚 GPIO_14
-#define MOT_TOP_SITE_IO GPIO_18 //马达转到最左位置io,85脚
-#define MOT_BOOTOM_SITE_IO GPIO_26 //马达转到最中左右位置io,86脚
-#define MOT_MIDDLE_SITE_IO GPIO_6//马达转到最中位置io ,81脚
static unsigned char mot_nod_count = 0;//点头次数
static unsigned char mot_nod_state = 0;//当前点头方向,0向下,1向上
mot_state = 3;
}
- if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)
+ if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0)
{
mot_state = 1;
}
- else if(aic_gpio_level_get(MOT_MIDDLE_SITE_IO) == 0)
+ else if(aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO) == 0)
{
mot_state = 2;
}
- else if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)
+ else if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)
{
mot_state = 3;
}
}else
{
- aic_gpo_output(MOT_EN_FWD_IO,GPIO_OUTPUT_LVL_LOW );//停止马达
- aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPIO_OUTPUT_LVL_LOW);//停止马达
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_LOW);//马达
}
old_mot_state = mot_state;
}
+
static void mot_nod1(void);//点头处理;
static void mot_nod2(void);//点头处理;
static void mot_nod3(void);//点头处理3
+static void mot_nod5(void);//点头处理3
+
+static void mot_nothappy(void);
+
+static void mot_laugh(void);
+
+static void mot_cute(void);
+
+static void mot_angry(void);
+
static aos_thread_id mot_dev_task_id = 0;
static aos_queue_ptr mot_dev_task_queue = NULL;
aos_status mot_dev_MSG_put(const char *data,u32 len,mot_dev_MSG_Type MSG_Type)
{
mot_dev_MSG_queue_t mot_dev_MSG_queue_data = {0};
- //bk_msg_printf("mot_dev_MSG_put1 MSG_Type:%d",MSG_Type);
+ // bk_printf("mot_dev_MSG_put1 MSG_Type:%d",MSG_Type);
if(len >0)
{
mot_dev_MSG_queue_data.data = aic_malloc(len+1);
mot_dev_MSG_queue_data.MSG_Type=MSG_Type;
if(mot_dev_task_queue && AOS_SUCCESS!=aos_send_to_queue(mot_dev_task_queue,&mot_dev_MSG_queue_data,AOS_NO_WAIT))
{
- //bk_msg_printf("mot_dev_MSG_put :aos_send_to_queue ERROR MSG_Type:%d\n\n",MSG_Type);
+ // bk_printf("mot_dev_MSG_put :aos_send_to_queue ERROR MSG_Type:%d\n\n",MSG_Type);
if(!mot_dev_MSG_queue_data.data)
aic_free(mot_dev_MSG_queue_data.data);
return AOS_ERROR;
while (1) {
if(mot_dev_task_queue)
{
- aos_recv_from_queue(mot_dev_task_queue,&mot_dev_msg,AOS_WAIT_FOREVER) ;
+ aos_recv_from_queue(mot_dev_task_queue,&mot_dev_msg,AOS_WAIT_FOREVER);
+
+
+
aic_get_wakelock();
+
+ bk_printf("mot_dev_msg.MSG_Type112:%d",mot_dev_msg.MSG_Type);
switch (mot_dev_msg.MSG_Type)
{
- case MOT_NOD1://点头
+ case MOT_NOD1://摇头
mot_nod1();
break;
- case MOT_NOD2://点头
- mot_nod2();
+ case MOT_NOD2://抬头
+ mot_test_2();
+ break;
+ case MOT_NOD3://低头,哭泣
+ mot_test_3();
break;
- case MOT_NOD3://点头
- mot_nod3();
+ case MOT_NOD4://点头
+ mot_nod5();
break;
+ case MOT_NOD5://不满
+ mot_nothappy();
+ break;
+ case MOT_NOD6://坏笑
+ mot_laugh();
+ break;
+ case MOT_NOD7://生气
+ mot_angry();
+ break;
+ case MOT_NOD8://卖萌
+ mot_cute();
+ break;
+ case MOT_NOD9://开心
+ mot_nod5();
+ break;
+ case MOT_CM_0_0://开心
+ mot_chumo_0_0();
+ break;
+ case MOT_CM_0_1://开心
+ mot_chumo_0_1();
+ break;
+ case MOT_CM_1_0://开心
+ mot_chumo_1_0();
+ break;
+ case MOT_CM_1_1://开心
+ mot_chumo_1_1();
+ break;
+ case MOT_CM_2_0://开心
+ mot_chumo_2_0();
+ break;
+ case MOT_CM_2_1://开心
+ mot_chumo_2_1();
+ break;
+ case MOT_LEFT://开心
+ mot_test_4();
+ break;
+ case MOT_RIGHT://开心
+ mot_test_5();
+ break;
default:
break;
}
+
+ bk_printf("mot_dev_task_end...\n");
}
+
+
+
void mot_init(void)
{
bk_printf("mot_init:!!!!");
- aic_gpo_output(MOT_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
- aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
- // aic_gpo_output( GPO_2,GPO_OUTPUT_LOW );//马达
- // aic_gpio_output(GPIO_14,GPIO_OUTPUT_LVL_LOW );//马达
+
+ //return ;
+ // // EIPU_SetPol(NOSEC_MODE, EIPU_DBNC, 1, !pol);//配置为反转电平触发
+ // eipu_sample_init();
+
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
+
+ bk_printf("mot_init123:!!!!");
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+
bk_printf("mot_init:22!!!!");
- aic_gpio_input(MOT_TOP_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL);
- aic_gpio_input(MOT_MIDDLE_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL);
- aic_gpio_input(MOT_BOOTOM_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL);
+
+ aic_gpio_input(MOT_LR_TOP_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //56pin
+ aic_gpio_input(MOT_LR_MIDDLE_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //77pin
+ // aic_gpio_input(MOT_LR_BOOTOM_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //81pin
+
+ aic_gpo_output(GPO_2,GPO_OUTPUT_LOW );//马达
+ aic_gpio_output(GPIO_14,GPIO_OUTPUT_LVL_LOW );//马达
+
+ aic_gpio_input(MOT_BOOTOM_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //80pin
+ aic_gpio_input(MOT_TOP_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //87pin
+ aic_gpio_input(MOT_MIDDLE_SITE_IO, GPIO_INPUT_NOINT, NULL, NULL); //18pin eiu 4
+
+ // EIPU_SetPol(NOSEC_MODE, EIPU_DBNC, 4, 2);//配置为反转电平触发
+
+
+
//创建mot_dev_task队列
if(mot_dev_task_queue == NULL)
{
}
void head_drop(void)//低头
{
- bk_printf("head_drop");
+ //bk_printf("head_drop");
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPO_OUTPUT_HIGH );//马达
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+}
+void head_up(void)//抬头
+{
+ // bk_printf("head_up");
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_HIGH );//马达
+}
+
+void head_drop_tb(void)//低头
+{
+ // bk_printf("head_drop");
aic_gpo_output(MOT_EN_FWD_IO,GPO_OUTPUT_HIGH );//马达
aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
}
-void head_up(void)//抬头
+void head_up_tb(void)//抬头
{
- bk_printf("head_up");
+ // bk_printf("head_up");
aic_gpo_output(MOT_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_HIGH );//马达
}
+
+
void MTO_stop(void)
{
bk_printf("MTO_stop");
mot_nod_count=0;
mot_MIDDLE_flag = 0;
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+
aic_gpo_output(MOT_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+
+ // aic_gpio_output(GPIO_15,GPIO_OUTPUT_LVL_HIGH);
}
//马达归位
void MTO_restert(void)
{
- bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
- bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
- bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
// if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
// {
+ //EIPU_GetIndata(
+
+ //void EIU_Get_Level(u32 eiu_id)
// head_up();//抬头
// bk_printf("MTO_restert:向上归位");
// return;
// }else
// {
- // head_drop();//低头
+
+ bk_printf("the MTO_restert start ");
+ if(aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO) != 0)
+ head_up();//抬头
// }
- int count = 10000;
+ int count = 2000;
while (count--)
{
// bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
// bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
// bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
- if(aic_gpio_level_get(MOT_MIDDLE_SITE_IO) == 0)
- break;
- else if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ if(aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ else if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到低部
{
head_up();//抬头
- bk_printf("MTO_restert:向上归位");
+ // bk_printf("MTO_restert:向上归位");
- }else if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ }else if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0)//到顶部
{
- bk_printf("MTO_restert:向下归位");
+ // bk_printf("MTO_restert:向下归位");
head_drop();//低头
}
aos_sleep(1);
}
+
+ bk_printf("the MTO_restert count33 is %d ",count);
+
+ aos_sleep(50);
+ aic_gpo_output(MOT_LR_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
+ aic_gpio_output(MOT_LR_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
+}
+
+void MTO_restert_tb(void)
+{
+ // bk_printf("MTO_restert_tb:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert_tb:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert_tb:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ // if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ // {
+
+ bk_printf("the MTO_restert_tb start");
+
+ if(aic_gpio_level_get(MOT_MIDDLE_SITE_IO) != 0)
+ head_up_tb();//抬头
+
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_MIDDLE_SITE_IO) == 0){
+
+ bk_printf("MTO_restert_tb:检测到中间位置");
+ break;
+ }
+
+ else if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ {
+ head_up_tb();//抬头
+ // bk_printf("MTO_restert_tb:向上归位");
+
+ }else if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ {
+ // bk_printf("MTO_restert_tb:向下归位");
+ head_drop_tb();//低头
+ }
+ aos_sleep(1);
+ }
+
+ bk_printf("the MTO_restert_tb count33 is %d ",count);
+
aos_sleep(50);
aic_gpo_output(MOT_EN_FWD_IO,GPO_OUTPUT_LOW );//马达
aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_LOW );//马达
count = 10000;
while (count--)
{
- if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到顶部
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到顶部
break;
aos_sleep(1);
}
count = 10000;
while (count--)
{
- if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0)//到顶部
break;
aos_sleep(1);
}
}
static void mot_nod1(void)//点头处理
{
+
+
+ bk_printf("mot_nod1");
+ MTO_restert_tb();
+
+
head_drop();//直接低头
int count = 255;
while(count--)
{
- count = 10000;
+ count = 2000;
while (count--)
{
- if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ //EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4)
+ //if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到低部
break;
aos_sleep(1);
}
+ bk_printf("this is MOT_BOOTOM_SITE_IO count11 is %d...\n",count);
head_up();//抬头
- count = 10000;
+ count = 2000;
while (count--)
{
- if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0)//到顶部
break;
+
+ if(aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO) == 0){
+
+ bk_printf("mot_nod1检测到中间位置...\n");
+ }
+
aos_sleep(1);
}
+
+ bk_printf("this is MOT_TOP_SITE_IO count22 is %d...\n",count);
head_drop();
if(mot_nod_count>0)
mot_nod_count--;
if(mot_nod_count ==0)
break;
}
- MTO_restert();//回中间
+
+ MTO_restert();//回中间
+
+ bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO));
+ bk_printf("MTO_restert:底部IO:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+ bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
+
+ // bk_printf("MTO_restert:LR底部IO:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+}
+
+static void mot_nod5(void)//点头处理
+{
+
+
+ bk_printf("mot_nod5");
+ MTO_restert();
+
+ head_drop_tb();//直接低头
+
+ int count = 255;
+ while(count--)
+ {
+ count = 1200;
+ while (count--)
+ {
+ //EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4)
+ if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ //f(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到低部
+ break;
+ aos_sleep(1);
+ }
+ bk_printf("this is MOT_BOOTOM_SITE_IO count11 is %d...\n",count);
+ head_up_tb();//抬头
+ count = 1200;
+ while (count--)
+ {
+ if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ break;
+ aos_sleep(1);
+ }
+
+ bk_printf("this is MOT_TOP_SITE_IO count22 is %d...\n",count);
+ head_drop_tb();
+ if(mot_nod_count>0)
+ mot_nod_count--;
+ if(mot_nod_count ==0)
+ break;
+ }
+
+ MTO_restert_tb();//回中间
+
+ bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+
+ bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+
+
+}
+
+
+void mot_nod_status()
+{
+ //马达
+ bk_printf("MTO_restert:LR中间IO:%d",aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO));
+ bk_printf("MTO_restert:LR顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
+ bk_printf("MTO_restert:LR底部eiu 4IO:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+ bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ bk_printf("MTO_restert:底部:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ //触摸屏
+ // bk_printf("触摸屏 eiu4:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+ // bk_printf("触摸屏 eiu5:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 5));
+ // bk_printf("触摸屏 eiu7::%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 7));
+ // bk_printf("触摸屏 GPIO_AGPIO_1::%d",aic_gpio_level_get(GPIO_AGPIO_1));
+
+ // bk_printf("触摸屏 GPIO_15::%d",aic_gpio_level_get(GPIO_15));
+
+ // bk_printf("MTO_restert:LR底部IO:%d",aic_gpio_level_get(MOT_LR_BOOTOM_SITE_IO));
+
+}
+
+void mot_nod_diantou(unsigned char count){
+
+ static char nod_flag = 0;
+ nod_flag++;
+ mot_nod_count = count;
+ mot_MIDDLE_flag = 1;
+ mot_dev_MSG_put(NULL,0,MOT_NOD1);
+}
+
+void mot_nod_yaotou(unsigned char count){
+
+ static char nod_flag = 0;
+ nod_flag++;
+ mot_nod_count = count;
+ mot_MIDDLE_flag = 1;
+
+ bk_printf("mot_nod_yaotou");
+ mot_dev_MSG_put(NULL,0,MOT_NOD4);
+}
+
+void mot_nod_ditou(unsigned char count){
+
+ static char nod_flag = 0;
+ nod_flag++;
+ mot_nod_count = count;
+ mot_MIDDLE_flag = 1;
+ mot_dev_MSG_put(NULL,0,MOT_NOD2);
+}
+
+void mot_nod_taitou(unsigned char count){
+
+ static char nod_flag = 0;
+ nod_flag++;
+ mot_nod_count = count;
+ mot_MIDDLE_flag = 1;
+ mot_dev_MSG_put(NULL,0,MOT_NOD3);
+}
+
+void mot_nod_exp(unsigned char exp,unsigned char count){
+
+ static char nod_flag = 0;
+ nod_flag++;
+ mot_nod_count = count;
+ mot_MIDDLE_flag = 1;
+ mot_dev_MSG_put(NULL,0,exp);
+
}
void mot_nod(unsigned char count)
static char mot_test_flag = 0;
MTO_stop();
aos_sleep(20);
- for(int i =0;i<5;i++)
+ for(int i =0;i<2;i++)
{
- head_up();
- aos_sleep(1500);
+ head_up();
+ aos_sleep(1500);
- head_drop();
- aos_sleep(1500);
+
+ bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
+
+ head_drop();
+ aos_sleep(1500);
+
+
+ bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
}
MTO_stop();
// aic_gpio_output(MOT_EN_REV_IO,GPIO_OUTPUT_LVL_HIGH );//马达
// bk_printf("AI_KEY2_PRESS 1");
// }
+}
+
+void mot_test_2(void)
+{
+
+ MTO_restert();
+
+ static char mot_test_flag = 0;
+ MTO_stop();
+ aos_sleep(20);
+
+ head_up_tb();
+ //aos_sleep(1500);
+
+ int count = 800;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+
+
+ aos_sleep(1);
+ }
+
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_LR_MIDDLE_SITE_IO));
+
+ // bk_printf("MTO_restert:LR顶部IO:%d",aic_gpio_level_get(MOT_LR_TOP_SITE_IO));
+
+ // bk_printf("MTO_restert:eiu 4IO:%d",EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4));
+
+ MTO_stop();
+
+}
+void mot_test_3(void)
+{
+ MTO_restert();
+ static char mot_test_flag = 0;
+ MTO_stop();
+ aos_sleep(20);
+
+ head_drop_tb();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
+
+}
+
+void mot_test_4(void)
+{
+ MTO_restert_tb();
+ static char mot_test_flag = 0;
+ MTO_stop();
+ aos_sleep(20);
+
+ head_drop();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
+
+}
+
+void mot_test_5(void)
+{
+ MTO_restert_tb();
+ static char mot_test_flag = 0;
+ MTO_stop();
+ aos_sleep(20);
+
+ head_up();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
+
+}
+
+void mot_cute(void)
+{
+ bk_printf("mot_cute");
+ MTO_restert_tb();
+ MTO_restert();
+
+}
+
+
+void mot_chumo_0_0(){
+
+ bk_printf("mot_angry");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+
+ head_up_tb();
+
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
+
+}
+
+void mot_chumo_0_1(){
+
+ mot_nod5();
+
+}
+
+
+void mot_chumo_1_0(){
+
+ bk_printf("mot_chumo_1_0");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+
+ head_up();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+}
+
+void mot_chumo_1_1(){
+
+ mot_nod5();
+
+
+}
+
+
+void mot_chumo_2_0(){
+
+ bk_printf("mot_chumo_2_0");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+
+ head_drop();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到低部
+ break;
+ //if(aic_gpio_level_get(MOT_LR_TOP_SITE_IO) == 0){
+ //
+ // bk_printf("MTO_restert:检测到中间位置");
+ // break;
+ // }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+}
+
+void mot_chumo_2_1(){
+
+ mot_nod1();
+
+}
+
+
+void mot_angry(void)
+{
+
+ bk_printf("mot_angry");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+
+ head_drop();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+ head_drop_tb();
+
+ count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
+}
+
+void mot_laugh(void)
+{
+
+
+ bk_printf("mot_laugh");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+ head_drop();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+ //bk_printf("mot_nod5");
+ head_drop_tb();//直接低头
+ count = 255;
+ while(count--)
+ {
+ count = 1200;
+ while (count--)
+ {
+ //EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4)
+ if(aic_gpio_level_get(MOT_BOOTOM_SITE_IO) == 0)//到低部
+ //f(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0)//到低部
+ break;
+ aos_sleep(1);
+ }
+ bk_printf("this is MOT_BOOTOM_SITE_IO count11 is %d...\n",count);
+ head_up_tb();//抬头
+ count = 1200;
+ while (count--)
+ {
+ if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0)//到顶部
+ break;
+ aos_sleep(1);
+ }
+
+ bk_printf("this is MOT_TOP_SITE_IO count22 is %d...\n",count);
+ head_drop_tb();
+ if(mot_nod_count>0)
+ mot_nod_count--;
+ if(mot_nod_count ==0)
+ break;
+ }
+
+ MTO_restert_tb();//回中间
+}
+
+void mot_nothappy(void)
+{
+
+ bk_printf("mot_nothappy");
+ mot_cute();
+ MTO_stop();
+ aos_sleep(20);
+
+ head_drop();
+ int count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(EIPU_GetIndata(NOSEC_MODE, EIPU_DBNC, 4) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+ head_up_tb();
+
+ count = 2000;
+ while (count--)
+ {
+ // bk_printf("MTO_restert:中间IO:%d",aic_gpio_level_get(MOT_MIDDLE_SITE_IO));
+ // bk_printf("MTO_restert:底部IO:%d",aic_gpio_level_get(MOT_BOOTOM_SITE_IO));
+ // bk_printf("MTO_restert:顶部IO:%d",aic_gpio_level_get(MOT_TOP_SITE_IO));
+ if(aic_gpio_level_get(MOT_TOP_SITE_IO) == 0){
+
+ bk_printf("MTO_restert:检测到中间位置");
+ break;
+ }
+
+ aos_sleep(1);
+ }
+
+ MTO_stop();
+
}
\ No newline at end of file