// 功能开关宏定义
#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, // 错误信息
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; // 需要发送心跳
}
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) {
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:
// 触发单句语音播放完成事件
if (g_ws_message_callback != NULL) {
- push_audio_playback_start_notification();
g_ws_message_callback(NULL, WS_CMD_SENTENCE_PLAYBACK_COMPLETE);
}
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; /* 连接开始时间 */
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");
// 根据消息类型调用不同的回调函数
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); // 转换为微秒
}
}
// 注册回调函数结构体
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");
}
}
+/**
+ * @brief 获取主线程循环间隔时长(公共接口)
+ * @return 当前间隔时长(毫秒)
+ */
+uint32_t uapi_ws_get_main_thread_interval(void)
+{
+ return g_main_thread_interval_ms;
+}
+
/**
* @brief 重置连接超时计时器
*/
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;
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);