增加音频初始化状态位判断,防止错误调用 2566/1 2566/head 2567/target/1
authorhcj <1224667075@qq.com>
Mon, 20 Oct 2025 07:36:13 +0000 (15:36 +0800)
committerhcj <1224667075@qq.com>
Mon, 20 Oct 2025 07:36:13 +0000 (15:36 +0800)
cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip [new file with mode: 0644]
code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c

diff --git a/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip b/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip
new file mode 100644 (file)
index 0000000..e00f692
Binary files /dev/null and b/cat1modem/n9/EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725_W9_20251020-1419.zip differ
index ad61576..4d893b9 100644 (file)
@@ -90,6 +90,9 @@ static bool g_base64_in_progress = false;   /* 是否正在进行Base64数据接
 /* 音频聊天命令类型 */
 static ln_audio_chat_command_t g_audio_chat_command_type = LN_AUDIO_CHAT_VOICE_CHAT_REQUEST;
 
+/* 音频初始化状态标志位 */
+static volatile bool g_audio_initialized = false;
+
 /* 回调函数结构体 */
 static ws_call_backs_t g_ws_callbacks = {0};
 
@@ -453,6 +456,12 @@ static void ln_ws_audio_write_callback(uint32_t size)
 // 发送音频数据到WebSocket
 int ln_ws_send_audio_data(const uint8_t *audio_data, uint32_t audio_size, bool finished)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     // 检查结束标志位,如果设置了结束标志,则finished必须为true
     if (g_audio_chat_ending && !finished) {
         LN_WS_WARN("Audio chat is ending, finished must be true\n");
@@ -610,6 +619,12 @@ int ln_ws_send_audio_data(const uint8_t *audio_data, uint32_t audio_size, bool f
 // 开始新的音频聊天
 int ln_ws_start_audio_chat(ln_audio_chat_command_t command_type)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     if(g_ws_connected != WS_STATE_CONNECTED)
     {
         LN_WS_WARN("g_ws_connected!=WS_STATE_CONNECTED");
@@ -648,6 +663,12 @@ int ln_ws_start_audio_chat(ln_audio_chat_command_t command_type)
 // 结束当前音频聊天
 int ln_ws_end_audio_chat(void)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     if (!g_audio_chat_ctx.is_active) {
         LN_WS_WARN("No active audio chat to end\n");
         return -1;
@@ -878,6 +899,12 @@ int ln_ws_start(ws_message_callback_t_ln callback, uint32_t audio_timeout_ticks)
 
 void ln_ws_audio_init(void)
 {
+    // 检查是否已经初始化
+    if (g_audio_initialized) {
+        LN_WS_WARN("Audio already initialized, skipping duplicate initialization\n");
+        return;
+    }
+    
     AIVoiceAudioParams audioParams_in = {
         .audioFormat = MP3,
         .channelCount = 1,
@@ -896,17 +923,37 @@ void ln_ws_audio_init(void)
     #endif
 
     old_Start_AIVoice(AIVoiceDataCallback_ln,NULL,&audioParams_in,&audioParams_out,false);
+    
+    // 设置初始化标志位
+    g_audio_initialized = true;
+    LN_WS_INFO("Audio initialization completed successfully\n");
 }
 
 
 void ln_ws_audio_deinit(void)
 {
+    // 检查是否已经反初始化
+    if (!g_audio_initialized) {
+        LN_WS_WARN("Audio not initialized, skipping duplicate deinitialization\n");
+        return;
+    }
+    
     StopAIVoice();
 
     #ifdef SUPPORT_CAT1_SERVICE
     cat1_api_keep_wakeup(0);
     cat1_api_wakeup_cat1(0);
     #endif
+    
+    // 清除初始化标志位
+    g_audio_initialized = false;
+    LN_WS_INFO("Audio deinitialization completed successfully\n");
+}
+
+/* 获取音频初始化状态 */
+bool ln_ws_is_audio_initialized(void)
+{
+    return g_audio_initialized;
 }
 
 
@@ -926,6 +973,12 @@ int ln_ws_send_text(const char *text)
 /* 发送随机故事请求 */
 int ln_ws_send_random_story_request(const char *story_theme)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     if (!story_theme) {
         LN_WS_ERROR("Invalid story theme parameter\n");
         return -1;
@@ -998,6 +1051,12 @@ int ln_ws_send_random_story_request(const char *story_theme)
 /* 发送语音聊天打断请求 */
 int ln_ws_send_voice_chat_interrupt(const char *reason)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     if (!reason) {
         LN_WS_ERROR("Invalid reason parameter\n");
         return -1;
@@ -2311,6 +2370,12 @@ static void ln_ws_audio_buffer_flush(void)
  */
 static int ln_ws_send_audio_data_direct(const uint8_t *audio_data, uint32_t audio_size, bool finished)
 {
+    // 检查音频是否已初始化
+    if (!g_audio_initialized) {
+        LN_WS_ERROR("Audio not initialized, please call ln_ws_audio_init() first\n");
+        return -1;
+    }
+    
     // 对于正常音频数据,必须有有效的数据
     if (!finished && (!audio_data || audio_size == 0)) {
         LN_WS_ERROR("Invalid audio data parameters\n");