fix(net_srv): MQTT 主动上报无数据 + PINGREQ 缺失导致断连

问题1: iot_mqtt_publish_sensor() 检查 g_iot_state != IOT_STATE_READY 直接 return,
但 g_iot_state 从未被 net_srv.c 内联 MQTT 处理器设置为 READY → 无传感数据上报

问题2: poll_mqtt() 依赖 flag_mqtt_ping_send 触发 PINGREQ,
但该标志从未被设为 1 → broker keepalive 超时断连 (~12s)

修复:
- mqtt_data_manage() CONNACK: 设 g_iot_state=IOT_STATE_READY
- WCHNET_HandleSockInt DISCONNECT: 设 g_iot_state=IOT_STATE_DISCONNECTED
- mqtt_data_manage() PINGRESP: 重置 flag_mqtt_ping_err
- poll_mqtt(): g_activ_counter > 9000 自动触发 PINGREQ
This commit is contained in:
wangfq
2026-07-08 08:55:10 +08:00
parent de2e70fd89
commit 0e116c2d31
@@ -392,6 +392,7 @@ void mqtt_data_manage(uint8_t id)
dg_subscribe_display_topic();
dev_initialize_pub();
reset_net_active_timeup();
g_iot_state = IOT_STATE_READY; // Sync iot_mqtt_srv state
break;
case PUBLISH:
MQTTDeserialize_publish(&dup, &qos, &retained, &packetid,
@@ -409,6 +410,8 @@ void mqtt_data_manage(uint8_t id)
break;
case PINGRESP:
PRINT("MQTT PINGRESP\n");
if(flag_mqtt_ping_err)
flag_mqtt_ping_err = 0;
reset_net_active_timeup();
break;
default:
@@ -541,6 +544,7 @@ uint8_t i;
}
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) {
@@ -635,6 +639,12 @@ void poll_mqtt(void)
// return;
// }
//
/* Auto-trigger PINGREQ every MQTT_KEEPALIVE_INTERVAL seconds of inactivity */
if (g_activ_counter > (MQTT_KEEPALIVE_INTERVAL * 1000)) {
g_activ_counter = 0;
flag_mqtt_ping_send = 1;
}
if(flag_mqtt_ping_send)
{
flag_mqtt_ping_send = 0;