按键结构加入
authorp15692025051 <846603105@qq.com>
Fri, 11 Apr 2025 02:40:26 +0000 (10:40 +0800)
committerp15692025051 <846603105@qq.com>
Fri, 11 Apr 2025 02:40:26 +0000 (10:40 +0800)
2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.c
2.code/aicos/app/AI_AMP_2_5/AI_AMP_2_5.h [new file with mode: 0644]
2.code/aicos/app/AI_AMP_2_5/CMakeLists.txt
2.code/aicos/app/AI_AMP_2_5/bk_key.c [new file with mode: 0644]
2.code/aicos/app/AI_AMP_2_5/bk_key.h [new file with mode: 0644]

index 4298114..af2d686 100644 (file)
@@ -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 (file)
index 0000000..6d7a65d
--- /dev/null
@@ -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
index 91b6602..d13ab5a 100644 (file)
@@ -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 (file)
index 0000000..cfa4773
--- /dev/null
@@ -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 (file)
index 0000000..a2f196c
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef __BK_KEY_H__
+#define __BK_KEY_H__
+
+
+void bk_key_init(void);
+#endif
+