优化蓝牙播放状态控制
authorhcj <1224667075@qq.com>
Thu, 8 Jan 2026 03:12:00 +0000 (11:12 +0800)
committerhcj <1224667075@qq.com>
Thu, 8 Jan 2026 03:12:00 +0000 (11:12 +0800)
code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c
code/sdk/zhihui/leiniao/imsl_ln/ln_websoket_api_ext.c

index 1039367..527294f 100644 (file)
@@ -95,7 +95,7 @@ typedef enum {
 static volatile int g_ws_connected = WS_STATE_DISCONNECTED;
 static volatile int g_ws_running = 0;
 static volatile unsigned int g_ws_reconnect_count = 0; /* 断线后递增,用于URL reconnect参数 */
-static ws_message_callback_t g_ws_message_callback = NULL; /* 消息处理回调函数 */
+ ws_message_callback_t g_ws_message_callback = NULL; /* 消息处理回调函数 */
 static volatile ws_close_status_t g_ws_close_status = WS_CLOSE_NOT_EXECUTED; /* WebSocket关闭状态标志位 */
 
 /* Base64数据缓存相关变量 */
@@ -228,7 +228,7 @@ static uint8_t g_audio_cache_buffer[AUDIO_CACHE_BUFFER_SIZE];
 static uint32_t g_audio_cache_pos = 0;  // 当前写入位置
 static uint32_t g_audio_cache_total = 0;  // 总写入数据量
 static bool g_audio_cache_wrapped = false;  // 是否已循环
-static uint32_t g_audio_playback_start_tick = 0;  // 音频播放开始时间tick
+ uint32_t g_audio_playback_start_tick = 0;  // 音频播放开始时间tick
 
 // VAD冷却时间相关变量
 static uint32_t g_vad_cooldown_start_tick = 0;  // VAD冷却开始时间tick
@@ -537,7 +537,14 @@ static void ln_ws_audio_write_callback(uint32_t size)
 
     // 更新最后一次音频写入tick
     g_last_audio_write_tick = osKernelGetTickCount();
-   g_audio_playback_active = true;
+    g_audio_playback_active = true;
+    extern bool a2dp_is_connect;
+    if(ln_get_A2dpSrcPlayingStat()!=1 && a2dp_is_connect)
+    {
+    int ret = a2dp_src_start_playing(ln_bt_get_last_conned_device_Addr());  // 设置耳机的状态为播放
+
+        LN_WS_DEBUG("a2dp_src_start_playing %d \n", ret);
+    }
 }
 
 // 发送音频数据到WebSocket
@@ -1328,7 +1335,7 @@ void vad_status_callback_ln_ws(int status)
 
 void ln_ws_audio_init(bool is_vad_server_enabled)
 {
-    // 检查是否已经初始化
+        // 检查是否已经初始化
     if (g_audio_initialized) {
         LN_WS_WARN("Audio already initialized, skipping duplicate initialization\n");
         return;
index 3890cb8..ccb6f7b 100644 (file)
@@ -11,6 +11,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include "wearable_log.h"
+#include "haisi_websocket.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -19,6 +20,10 @@ extern "C" {
 /* 下载服务初始化状态标志 */
 static uint8_t g_download_service_initialized = 0;
 
+extern ws_message_callback_t g_ws_message_callback; /* 消息处理回调函数 */
+
+extern  uint32_t g_audio_playback_start_tick ;  // 音频播放开始时间tick
+
 /* Python服务版本号声明 */
 extern uint8_t g_py_ver;  /* Python服务版本号 */
 
@@ -63,6 +68,26 @@ static int ln_http_download_data_callback(const uint8_t *data, uint32_t data_len
     }
 
     AI_SendAudioDataToQueue(data, data_len);
+
+     if (!g_audio_playback_active) {
+        g_audio_playback_start_tick = osKernelGetTickCount();
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Audio playback started at tick: %u\n", g_audio_playback_start_tick);
+        
+        // 触发音频播放开始事件
+        if (g_ws_message_callback != NULL) {
+            g_ws_message_callback(NULL, WS_CMD_AUDIO_PLAYBACK_START);
+        }
+      
+
+    }
+    extern bool a2dp_is_connect;
+    if(ln_get_A2dpSrcPlayingStat()!=1 && a2dp_is_connect)
+    {
+        int ret = a2dp_src_start_playing(ln_bt_get_last_conned_device_Addr());  // 设置耳机的状态为播放
+
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"a2dp_src_start_playing %d \n", ret);
+    }
+
     return 0;
 }