添加雷鸟websocket AT指令可以实时调节心跳间隔。 3077/target/2 3079/1 3079/head
author孙春阳 <snickersun@163.com>
Tue, 13 Jan 2026 12:36:28 +0000 (20:36 +0800)
committer孙春阳 <snickersun@163.com>
Tue, 13 Jan 2026 12:36:28 +0000 (20:36 +0800)
code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_websocket.c

index a5dbce8..11cb5d7 100644 (file)
@@ -1913,6 +1913,33 @@ static uint32_t ln_bt_disconnect_at(uint8_t *para, uint32_t paraLen, char *strCo
     ln_bt_disconnect();
     return ERRCODE_SUCC;
 }
+
+//获取心跳间隔
+static uint32_t ln_ws_get_heartbeat_interval_sec_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    LN_UNUSED(strCommonCmd);
+    LN_UNUSED(para);
+    LN_UNUSED(paraLen);
+    return ln_ws_get_heartbeat_interval_sec();
+}
+
+//设置心跳间隔
+static uint32_t ln_ws_set_heartbeat_interval_sec_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    LN_UNUSED(strCommonCmd);
+    LN_UNUSED(para);
+    LN_UNUSED(paraLen);
+    uint8_t argv[LN_MAX_ARGC][LN_MAX_ARGV_LEN] = {0};
+    uint32_t argc = 0;
+    if (ConvertCmdToParam(para, paraLen, argv, &argc) != LN_SUCCESS || argc < 1) {
+        printf("ERROR: Failed to parse heartbeat interval\n");
+        return ERRCODE_FAIL;
+    }
+    uint32_t heartbeat_interval = atoi((char*)argv[0]);
+    ln_ws_set_heartbeat_interval_sec(heartbeat_interval);
+    printf("[LN][WS_HEARTBEAT_INTERVAL] Set heartbeat interval to: %d\n", heartbeat_interval);
+    return ERRCODE_SUCC;
+}
 static uint32_t ln_ws_set_log_level_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
     LN_UNUSED(strCommonCmd);
@@ -2055,6 +2082,10 @@ static const at_cmd_table_t g_ln_api_cmd[] = {
     {(char *)"AT^LN_WS_LOG_LEVEL", ln_ws_set_log_level_at, (char *)"设置WebSocket日志等级: AT^LN_WS_LOG_LEVEL=0-3"},  
      //压测相关
     {(char *)"AT^LN_STRESS_TEST_DIALOGUE", ln_stress_test_dialogue_at, (char *)"压测模式:跳转到对话说话界面,常亮屏且循环播放FactoryMode.mp3: AT^LN_STRESS_TEST_DIALOGUE"},
+
+    //心跳间隔设置
+    {(char *)"AT^LN_WS_HEARTBEAT_INTERVAL", ln_ws_get_heartbeat_interval_sec_at, (char *)"获取心跳间隔: AT^LN_WS_HEARTBEAT_INTERVAL"},
+    {(char *)"AT^LN_WS_HEARTBEAT_INTERVAL_SET", ln_ws_set_heartbeat_interval_sec_at, (char *)"设置心跳间隔: AT^LN_WS_HEARTBEAT_INTERVAL_SET=60"},
 };
 
 
index 9249284..b4eb46e 100644 (file)
@@ -648,6 +648,10 @@ int ln_http_download_get_stats(uint32_t *total_bytes, uint32_t *total_packets);
  */
 uint8_t ln_http_download_is_initialized(void);
 /* ====================================================================== */
+/* 设置心跳间隔 */
+void ln_ws_set_heartbeat_interval_sec(uint32_t interval);
+/* 获取心跳间隔 */
+uint32_t ln_ws_get_heartbeat_interval_sec(void);
 
 #ifdef __cplusplus
 }
index 8b30e79..f1cdff3 100644 (file)
 // 主线程循环间隔时长(毫秒)
 #define LN_WS_MAIN_THREAD_INTERVAL_MS 500
 
-// 心跳间隔(秒)
-#define LN_WS_HEARTBEAT_INTERVAL_SEC 60*5  //5分钟发送一次心跳,正常最大7分钟
-
+ // 心跳间隔(秒)
+// #define LN_WS_HEARTBEAT_INTERVAL_SEC 60*5  //5分钟发送一次心跳,正常最大7分钟
+static volatile uint32_t LN_WS_HEARTBEAT_INTERVAL_SEC = 60*5;  //5分钟发送一次心跳,正常最大7分钟
+ 
+void ln_ws_set_heartbeat_interval_sec(uint32_t interval)
+{
+    LN_WS_HEARTBEAT_INTERVAL_SEC = interval;
+}
+uint32_t ln_ws_get_heartbeat_interval_sec(void)
+{
+    return LN_WS_HEARTBEAT_INTERVAL_SEC;
+}
 // 心跳间隔计数器阈值(基于主线程间隔计算)
 #define LN_WS_HEARTBEAT_COUNTER_THRESHOLD ((LN_WS_HEARTBEAT_INTERVAL_SEC * 1000) / LN_WS_MAIN_THREAD_INTERVAL_MS)