From 98c94ac3a0944e94dbac8fc08dd99fe78dbb0cb8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=83=A1=E4=BC=A0=E5=86=9B?= <1224667075@qq.com> Date: Wed, 15 Oct 2025 03:29:10 +0000 Subject: [PATCH] Merge #2508 into sdk650pathc0423 from refs/changes/2508/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 胡传军 * refs/changes/2508/head: (2 commits squashed) - 修改ws间隔,支持参数传入,方便业务扩展 - Merge branch 'sdk650pathc0423' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2508 --- .../zhihui/leiniao/imsl_ln/ln_api_websocket.c | 17 ++++++++--- .../zhihui/websocket/os_ws/haisi_websocket.c | 28 +++++++++++++++---- .../zhihui/websocket/os_ws/haisi_websocket.h | 2 ++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c index afd44bebd..0bf23ad32 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c @@ -15,6 +15,15 @@ // 功能开关宏定义 #define ENABLE_BINARY_DATA_INTERRUPT_CHECK 1 // 启用二进制数据间隔检查 +// 主线程循环间隔时长(毫秒) +#define LN_WS_MAIN_THREAD_INTERVAL_MS 500 + +// 心跳间隔(秒) +#define LN_WS_HEARTBEAT_INTERVAL_SEC 30 + +// 心跳间隔计数器阈值(基于主线程间隔计算) +#define LN_WS_HEARTBEAT_COUNTER_THRESHOLD ((LN_WS_HEARTBEAT_INTERVAL_SEC * 1000) / LN_WS_MAIN_THREAD_INTERVAL_MS) + // 打印等级定义 typedef enum { LN_WS_LOG_ERROR = 0, // 错误信息 @@ -307,8 +316,10 @@ static int ln_ws_heartbeat_callback(void) check_playback_completion_by_timeout(); } - if (heartbeat_counter >= 30) { // 30秒 = 30次 * 1秒 + if (heartbeat_counter >= LN_WS_HEARTBEAT_COUNTER_THRESHOLD) { // 30秒心跳间隔 heartbeat_counter = 0; + LN_WS_DEBUG("Sending heartbeat (interval: %u ms, threshold: %u)\n", + LN_WS_MAIN_THREAD_INTERVAL_MS, LN_WS_HEARTBEAT_COUNTER_THRESHOLD); ln_ws_send_ping(); return 1; // 需要发送心跳 } @@ -847,6 +858,7 @@ int ln_ws_start(ws_message_callback_t_ln callback, uint32_t audio_timeout_ticks) g_ws_callbacks.binary_callback = ai_binary_message_handler; g_ws_callbacks.incomplete_callback= ln_ws_incomplete_callback; g_ws_callbacks.reconnect_success_callback = ln_ws_reconnect_success_callback; + g_ws_callbacks.main_thread_interval_ms = LN_WS_MAIN_THREAD_INTERVAL_MS; // 启动WebSocket服务 int ret = uapi_ws_start(&g_ws_callbacks); if (ret != 0) { @@ -1497,8 +1509,6 @@ static void ln_ws_default_message_handler(const ws_data_msg_t *data_msg, ws_comm LN_WS_DEBUG("Default: Processing Audio Playback End event\n"); break; case WS_CMD_SENTENCE_PLAYBACK_COMPLETE: - //推送文本到UI - push_audio_playback_start_notification(); LN_WS_DEBUG("Default: Processing Sentence Playback Complete event\n"); break; case WS_CMD_AUDIO_RECORDING_START: @@ -2522,7 +2532,6 @@ static bool check_playback_completion_by_duration(void) // 触发单句语音播放完成事件 if (g_ws_message_callback != NULL) { - push_audio_playback_start_notification(); g_ws_message_callback(NULL, WS_CMD_SENTENCE_PLAYBACK_COMPLETE); } diff --git a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c index 178178a24..0530aef84 100644 --- a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c +++ b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.c @@ -91,6 +91,7 @@ static osMessageQueueId_t g_ws_msg_queue = NULL; static ws_call_backs_t g_ws_callbacks = {0}; /* WebSocket回调函数结构体 */ static volatile ws_close_status_t g_ws_close_status = WS_CLOSE_NOT_EXECUTED; /* WebSocket关闭状态标志位 */ static volatile int g_ws_is_reconnecting = 0; /* 是否正在重连的标志位 */ +static uint32_t g_main_thread_interval_ms = 1000; /* 主线程循环间隔时长(毫秒),默认1000ms */ /* 连接超时检测相关变量 */ static time_t g_ws_connect_start_time = 0; /* 连接开始时间 */ @@ -337,7 +338,7 @@ static void uapi_ws_main_thread(void *arg) case WS_MSG_TYPE_RAW_MESSAGE: { - HAISI_WS_DEBUG("Received raw message: %s, timestamp: %u, isBinary: %s\n", + HAISI_WS_INFO("Received raw message: %s, timestamp: %u, isBinary: %s\n", msg->raw_data, msg->timestamp, msg->isBinary ? "true" : "false"); // 根据消息类型调用不同的回调函数 @@ -523,11 +524,9 @@ static void uapi_ws_main_thread(void *arg) HAISI_WS_INFO("ws_state %s\n",uapi_ws_get_connection_state_string()); } - /* 1秒间隔 */ - // if(g_ws_connected!=WS_STATE_CONNECTED) + /* 使用动态间隔时长 */ { - usleep(1000 * 1000); - + usleep(g_main_thread_interval_ms * 1000); // 转换为微秒 } } @@ -568,7 +567,15 @@ int uapi_ws_start(const ws_call_backs_t *callbacks) // 注册回调函数结构体 if (callbacks != NULL) { g_ws_callbacks = *callbacks; - HAISI_WS_INFO("WebSocket callbacks registered successfully\n"); + + // 设置主线程间隔时长,如果未设置则使用默认值 + if (g_ws_callbacks.main_thread_interval_ms > 0) { + g_main_thread_interval_ms = g_ws_callbacks.main_thread_interval_ms; + } else { + g_main_thread_interval_ms = 1000; // 默认1000ms + } + + HAISI_WS_INFO("WebSocket callbacks registered successfully, main thread interval: %u ms\n", g_main_thread_interval_ms); if (g_ws_callbacks.message_callback != NULL) { HAISI_WS_DEBUG("Text message callback registered\n"); @@ -1037,6 +1044,15 @@ void uapi_ws_register_reconnect_success_callback(ws_reconnect_success_callback_t } } +/** + * @brief 获取主线程循环间隔时长(公共接口) + * @return 当前间隔时长(毫秒) + */ +uint32_t uapi_ws_get_main_thread_interval(void) +{ + return g_main_thread_interval_ms; +} + /** * @brief 重置连接超时计时器 */ diff --git a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h index 51beba46a..76e24cb2c 100644 --- a/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h +++ b/code/sdk/zhihui/websocket/os_ws/haisi_websocket.h @@ -57,6 +57,7 @@ typedef struct { ws_heartbeat_callback_t heartbeat_callback; /* 心跳处理回调函数 */ ws_event_callback_t event_callback; /* 连接事件回调函数 */ ws_reconnect_success_callback_t reconnect_success_callback; /* 重连成功回调函数 */ + uint32_t main_thread_interval_ms; /* 主线程循环间隔时长(毫秒),默认1000ms */ } ws_call_backs_t; @@ -75,6 +76,7 @@ int uapi_ws_get_connection_state(void); const char* uapi_ws_get_connection_state_string(void); int uapi_ws_get_close_status_public(void); void uapi_ws_print_status_info(void); +uint32_t uapi_ws_get_main_thread_interval(void); /* 回调函数注册接口 */ void uapi_ws_register_message_callback(ws_message_callback_t callback); -- 2.17.1