From: p15692025051 <846603105@qq.com> Date: Fri, 11 Apr 2025 02:40:26 +0000 (+0800) Subject: 按键结构加入 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=29d4aee31644c81f318830d372eb342200ea7a11;p=mirrors%2FFX01.git 按键结构加入 --- diff --git a/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c b/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c index 4298114..af2d686 100644 --- a/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c +++ b/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c @@ -23,6 +23,8 @@ #include "app_audio.h" #include "helios_ringbuf.h" #include "bk_websocket.h" +#include "AI_AMP_2_5.h" +#include "bk_key.h" #define ai_VC_task_priority 35 static aos_thread_id AI_AMP_task_id = 0; static aos_queue_ptr AI_AMP_task_queue = NULL; @@ -37,63 +39,11 @@ static aos_thread_id AI_VC_record_task_id = 0; static aos_queue_ptr AI_VC_record_tmp_queue = NULL; WebSocketClient *AI_client_VC = NULL; static u32 close_timerout = 0; -char *AI_TTS_str = NULL; +static char *AI_TTS_str = NULL; static aos_timer_ptr AI_VC_1S_timer = NULL; -typedef enum AI_AMP_MSG -{ - VC_START, - VC_PLAY_START, - VC_PLAY_END, - VC_RECORD_START, - VC_RECORD_END, - VC_Cancel,//打断取消 - VC_CLOSE, - VC_CONNECT_ERROR, -} AI_AMP_MSG_Type; -typedef struct -{ - char *data; - u32 len; - AI_AMP_MSG_Type MSG_Type; -}AI_AMP_MSG_queue_t; -typedef enum -{ - VC_State_None=0, - VC_State_Listening=1,//#听 - VC_State_SpeechStart=2,//#说开始 - VC_State_SpeechIng=3,//#正在说 - VC_State_SpeechEnd=4,//#说结束 - VC_State_RequestToRespond=5 ,//#TTS请求或者chat请求 - VC_State_Thinking=6,//#想(chat) - VC_State_Responding=7,//#音频播放 - VC_State_TTSStart=8, - VC_State_TTSData=9, - VC_State_TTSFinish=10, - VC_State_TTSEnd=11, - VC_State_TTSError=12, - VC_State_DialogError=13, - VC_State_End=14, -}VC_state_type; -VC_state_type VC_state = VC_State_None; -// #define APP_CFG_TASK_STK_SIZE (4096u) -// #define APP_CFG_TASK_COM_PRIO (35u) -// typedef int32_t (*srv_func_callback)(void *p_param, uint32_t size); // TODO: temp and common define this -typedef struct -{ - char *data; - u32 len; - u8 AIC_WEBSOCKET_OPCODE; -}AI_VC_send_queue_t; -typedef struct -{ - char *data; - u32 len; -}AI_VC_audio_queue_t; -static aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type); static void AI_VC_send_satrt(void); static aos_status AI_VC_send_data(char *data,u32 len,u8 AIC_WEBSOCKET_OPCODE); -void AI_VC_start(void); -void AI_VC_Close(void); + static void AI_VC_send_task(void *thread_input);//websocket 发送线程 static void AI_VC_read_task(void *thread_input);//websocket 读线程 static void AI_VC_put_play_data(char *data,u32 len);//音频数据入队播放 @@ -455,22 +405,7 @@ static void AI_VC_send_task(void *thread_input)//websocket 发送线程 { if(aos_recv_from_queue(AI_VC_send_queue,&AI_VC_send_queue_data,AOS_WAIT_FOREVER) == AOS_SUCCESS) { - // if(AI_VC_client_websocket_handle!=0 && AI_VC_send_queue_data.data) - // { - - // int ret = aic_websocket_send(AI_VC_client_websocket_handle,AI_VC_send_queue_data.data,AI_VC_send_queue_data.len,AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE, - // TRUE,AOS_WAIT_FOREVER); - // if(AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_TEXT_FRAME ) - // bk_printf("VCVC:send text ret=%d,len=%d,str=%s",ret,AI_VC_send_queue_data.len,AI_VC_send_queue_data.data); - // else if(AI_VC_send_queue_data.AIC_WEBSOCKET_OPCODE ==AIC_WEBSOCKET_OPCODE_BINARY_FRAME ) - // bk_printf("VCVC:send bin ret=%d,len=%d",ret,AI_VC_send_queue_data.len); - // aic_free(AI_VC_send_queue_data.data); - - // }else - // { - // bk_printf("AI_VC_send ERROR:AI_VC_client_websocket_handle = %d",AI_VC_client_websocket_handle); - // } - //bk_printf("AI_VC_send_task:send data len:%d",AI_VC_send_queue_data.len); + if(AI_client_VC && AI_VC_send_queue_data.data) { int ret = send_websocket_message(AI_client_VC,AI_VC_send_queue_data.data,AI_VC_send_queue_data.len, @@ -849,6 +784,23 @@ static void AI_VC_1S_timeout(void *param) } } } +void AI_key_press(void) +{ + bk_printf("AI_key_press"); + AI_VC_Close(); + VC_state = VC_State_None; + VC_record_Start() ; + AI_VC_start(); +} +void AI_key_release(void) +{ + bk_printf("AI_key_release"); +} +void AI_key_long_press(void) +{ + bk_printf("AI_key_long_press"); +} + void AI_VC_start(void) { int ret = 0; @@ -903,7 +855,7 @@ void AI_VC_Close(void) } close_timerout = 0; } -static aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type) +aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type) { AI_AMP_MSG_queue_t AI_AMP_MSG_queue_data = {0}; if(len >0) @@ -944,7 +896,7 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程 aos_sleep(1000); } char *tts_str = "你好!我是巴马四季甘泉的智能助手。我可以为你解答各种各样的问题,像是有关巴马四季甘泉知识库、中基长寿科学产品、卫斯曼院士国际先进医疗中心的问题,还有日常生活与工作、旅游信息、健康咨询、教育与学习、情感交流、全球资讯、世界文化等方面的问题哦。你有没有这方面的问题想要问我呀?"; - VC_TTS_Play(tts_str); + VC_TTS_Play(tts_str);//开启vc播放tts while (1) { aos_recv_from_queue(AI_AMP_task_queue,&AI_AMP_msg,AOS_WAIT_FOREVER) ; @@ -974,7 +926,16 @@ static void AI_AMP_2_5_task(void *thread_input)//做逻辑线程 AI_VC_Close(); break; - + case AI_KEY_PRESS: + AI_key_press(); + break; + + case AI_KEY_RELEASE: + AI_key_release(); + break; + case AI_KEY_LONG_PRESS: + AI_key_long_press(); + break; default: break; } @@ -1004,6 +965,7 @@ int AI_AMP_2_5_init(void) sizeof(AI_AMP_MSG_queue_t), 200); } + bk_key_init(); AI_AMP_task_id = aos_create_thread( "AI_AMP_2_5", AI_AMP_2_5_task, @@ -1011,7 +973,7 @@ int AI_AMP_2_5_init(void) 4096u, 0, NULL, - ai_VC_task_priority, + ai_VC_task_priority-3, AOS_AUTO_START); return AIC_SUCCESS; diff --git a/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.h b/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.h new file mode 100644 index 0000000..6d7a65d --- /dev/null +++ b/2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.h @@ -0,0 +1,60 @@ +#include "aic_osa.h" +typedef enum AI_AMP_MSG +{ + VC_START, + VC_PLAY_START, + VC_PLAY_END, + VC_RECORD_START, + VC_RECORD_END, + VC_Cancel,//打断取消 + VC_CLOSE, + VC_CONNECT_ERROR, + AI_KEY_PRESS,//AI键按下 + AI_KEY_RELEASE,//AI键释放 + AI_KEY_LONG_PRESS,//AI键长按 +} AI_AMP_MSG_Type; +typedef struct +{ + char *data; + u32 len; + AI_AMP_MSG_Type MSG_Type; +}AI_AMP_MSG_queue_t; +typedef enum +{ + VC_State_None=0, + VC_State_Listening=1,//#听 + VC_State_SpeechStart=2,//#说开始 + VC_State_SpeechIng=3,//#正在说 + VC_State_SpeechEnd=4,//#说结束 + VC_State_RequestToRespond=5 ,//#TTS请求或者chat请求 + VC_State_Thinking=6,//#想(chat) + VC_State_Responding=7,//#音频播放 + VC_State_TTSStart=8, + VC_State_TTSData=9, + VC_State_TTSFinish=10, + VC_State_TTSEnd=11, + VC_State_TTSError=12, + VC_State_DialogError=13, + VC_State_End=14, +}VC_state_type; +VC_state_type VC_state = VC_State_None; +// #define APP_CFG_TASK_STK_SIZE (4096u) +// #define APP_CFG_TASK_COM_PRIO (35u) +// typedef int32_t (*srv_func_callback)(void *p_param, uint32_t size); // TODO: temp and common define this +typedef struct +{ + char *data; + u32 len; + u8 AIC_WEBSOCKET_OPCODE; +}AI_VC_send_queue_t; +typedef struct +{ + char *data; + u32 len; +}AI_VC_audio_queue_t; + +void AI_VC_start(void); +void AI_VC_Close(void); +int bk_printf(const char *format, ...); +void bk_print_hex(u8 *data,int data_len); +aos_status AI_AMP_MSG_put(char *data,u32 len,AI_AMP_MSG_Type MSG_Type); \ No newline at end of file diff --git a/2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt b/2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt index 91b6602..d13ab5a 100644 --- a/2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt +++ b/2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt @@ -8,6 +8,7 @@ aic_library_sources_ifdef( ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/helios_ringbuf.c ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/stream_play.c ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/bk_websocket.c + ${AIC_SOURCE_ROOT}/app/AI_AMP_2_5/bk_key.c ) aic_library_include_directories_ifdef( diff --git a/2.code/aicos/app/AI_AMP_2_5/bk_key.c b/2.code/aicos/app/AI_AMP_2_5/bk_key.c new file mode 100644 index 0000000..cfa4773 --- /dev/null +++ b/2.code/aicos/app/AI_AMP_2_5/bk_key.c @@ -0,0 +1,6 @@ +void bk_key_init(void) +{ + +} + + diff --git a/2.code/aicos/app/AI_AMP_2_5/bk_key.h b/2.code/aicos/app/AI_AMP_2_5/bk_key.h new file mode 100644 index 0000000..a2f196c --- /dev/null +++ b/2.code/aicos/app/AI_AMP_2_5/bk_key.h @@ -0,0 +1,7 @@ +#ifndef __BK_KEY_H__ +#define __BK_KEY_H__ + + +void bk_key_init(void); +#endif +