From 3d017ccca968edb56111276ca5b29e926b5660bc Mon Sep 17 00:00:00 2001 From: wangfq Date: Thu, 23 Jul 2026 11:25:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20IoT=20MQTT=20=E6=A0=88?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=8E=A5=E7=AE=A1=20socket=20=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6,=20=E6=B6=88=E9=99=A4=E5=8F=8C=20CONNECT=20=E8=87=B4?= =?UTF-8?q?=E9=A2=91=E7=B9=81=20initialize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit root cause: WCHNET_HandleSockInt 在 iot_enable=1 时仍走旧 MQTT 代码: CONNECT → mqtt_connect() ← 发 MQTT CONNECT #1 iot_mqtt_poll() → send_connect() ← 发 MQTT CONNECT #2 (同一socket) broker 见双 CONNECT → 协议违规踢线 → 4s 后重连 → 循环 RECV → mqtt_data_manage() ← 旧代码收 CONNACK → dev_initialize_pub() ← initialize msg_id=1, 强设 g_iot_state=READY fix: 1. net_srv.c WCHNET_HandleSockInt: iot_enable 时直接调 iot_mqtt_handle_sock_int 2. peripheral_main.c: poll_mqtt() → iot_mqtt_poll() (IoT 自有 PINGREQ) BSS savings: -1024B (data_json eliminated), send buffer 隔离 (v3) --- .../OnlyUpdateApp_Peripheral/APP/net_srv.c | 23 ++++--------------- .../APP/peripheral_main.c | 2 +- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/net_srv.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/net_srv.c index 730d87a..a21e55d 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/net_srv.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/net_srv.c @@ -578,28 +578,15 @@ uint8_t i; return; } - // IoT MQTT mode — inline MQTT handling (ref: DBN101GA) + // IoT MQTT mode — delegate all socket events to iot_mqtt_srv + // (2026-07-23 修复: 旧 mqtt_connect/mqtt_data_manage 与 IoT 栈抢 socket, 致双 CONNECT → broker 踢线 → 频繁 initialize) if (g_sub_code_enable.iot_enable) { - if (intstat & SINT_STAT_RECV) { - mqtt_data_manage(socketid); - } - if (intstat & SINT_STAT_CONNECT) { #if KEEPLIVE_ENABLE + if (intstat & SINT_STAT_CONNECT) { WCHNET_SocketSetKeepLive(socketid, ENABLE); + } #endif - WCHNET_ModifyRecvBuf(socketid, (uint32_t)SocketRecvBuf[socketid], RECE_BUF_LEN); - PRINT("TCP Connect Success (MQTT)\n"); - mqtt_connect(); - } - if (intstat & SINT_STAT_DISCONNECT) { - PRINT("TCP Disconnect (MQTT)\n"); - g_iot_state = IOT_STATE_DISCONNECTED; - g_net_state.flag = 1; - } - if (intstat & SINT_STAT_TIM_OUT) { - PRINT("TCP Timeout (MQTT)\n"); - g_net_state.flag = 1; - } + iot_mqtt_handle_sock_int(socketid, intstat); return; } diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c index 0e09359..796f827 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c @@ -271,7 +271,7 @@ void Main_Circulation(void) if (g_sub_code_enable.iot_enable) { iot_mqtt_publish_sensor(); // Push 0xC0 sensor data to MQTT broker - poll_mqtt(); // MQTT PINGREQ heartbeat (in net_srv.c) + iot_mqtt_poll(); // IoT MQTT state machine + PINGREQ keepalive } else { tcp_json_push_sensor(); // Push 0xC0 sensor data to TCP JSON client tcp_json_poll();