wangfq
466ce00680
feat(iot_mqtt): 恢复 loop_data 完整字段 + 分批发送(2通道/包)
...
按 DLD960_TCP_JSON协议.md §5.1 恢复完整字段:
- ch, freq_level, has_car, loop_ok, freq_current, freq_diff,
sensitivity, condition, misc.type, misc.value
每包发 2 个通道,确保 JSON < 450 字节 (mqttBuf 512 安全范围内)。
4 通道设备每次 SensorReport 发 2 条 loop_data 消息。
2026-07-08 17:21:06 +08:00
wangfq
4c6d23a951
fix(iot_mqtt): 传感数据 topic 改为 V1.01 双主题协议 dld960/{sn}/dev
...
原 iot_make_topic("dev","data","loop") → dld960/{sn}/dev/data/loop (V1.00)
改为直接用 g_iot_topic.topic_pub → dld960/{sn}/dev (V1.01)
与 report_config 等命令响应共用同一 topic,DBNMQTTool 订阅 dld960/+/dev 可接收到
2026-07-08 16:54:23 +08:00
wangfq
8425b473d3
fix: net_srv.h 添加 mqtt_publish() 声明供 iot_mqtt_srv.c 调用
2026-07-08 16:12:20 +08:00
wangfq
8232ec2c55
fix(iot_mqtt): 改用 net_srv.c mqtt_publish() 发送传感数据
...
iot_mqtt_publish_sensor() 原先调用 iot_mqtt_publish() →
iot_mqtt_send() → WCHNET_SocketSend() 从主循环发送导致重启。
改为调用 net_srv.c 的 mqtt_publish()(与 report_config 响应
共用同一路径,已验证在中断上下文中稳定工作)。
同时在 net_srv.h 中声明 mqtt_publish() 供跨文件调用。
2026-07-08 16:11:50 +08:00
wangfq
2175fee742
fix(iot_mqtt): 移除 iot_mqtt_send() hex dump 循环避免栈溢出重启
...
hex dump 连续 65 次 PRINT 调用消耗大量栈空间,
在 CH32V208 2KB 栈限制下导致溢出重启.
改为仅打印 len 和 ret/status.
2026-07-08 15:52:43 +08:00
wangfq
a71adaafdc
fix(iot_mqtt): 精简 loop_data JSON 避免 WCHNET_SocketSend 超大包崩溃
...
问题: 4通道传感器数据 JSON ~700字节 → MQTT Publish 733字节
超过 WCHNET TCP MSS(576) 和原始 MAX_MQTTBUF_LEN(512) 设计上限
WCHNET_SocketSend(733) 导致设备重启
修复:
- 移除非必要字段: freq_current, freq_diff, condition
- 展平 misc 嵌套对象 → mt(类型) + mv(数值)
- 缩短 key 名: freq_level→fl, has_car→car, loop_ok→ok, sensitivity→sens
- 每通道 ~70字, 4通道 ~280, 全包 ~400字节
- 加安全检查: payload >450 时跳过并打印警告
2026-07-08 15:09:50 +08:00
wangfq
555cdb741d
fix(iot_mqtt): g_iot_socket 未初始化导致 WCHNET_SocketSend(0xFF) 硬故障重启
...
根因: iot_mqtt_srv.c 中 g_iot_socket 初始化为 0xFF,
仅 iot_connect_broker() 中设为 SocketId_TCP.
但内联 MQTT 模式(iot_mqtt_poll 从未调用)下该赋值永不执行.
iot_mqtt_publish_sensor() 调用 iot_mqtt_send() →
WCHNET_SocketSend(0xFF, ...) → HardFault → 设备重启.
修复: iot_mqtt_init() 中设置 g_iot_socket = SocketId_TCP,
该函数在 net_srv_init() flag==1 时被调用(含首次启动和每次重连).
2026-07-08 09:11:23 +08:00
wangfq
0e116c2d31
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
2026-07-08 08:55:10 +08:00
wangfq
de2e70fd89
feat(vd960DBN): MQTT ssc_net_set / iot_net_set / iot_topic_set 实现
...
- ssc_net_set: 解析 dev_ip/subnet_mask/route_ip/lssc_ip/dns/port,调用 write_net_config
- iot_net_set: 解析 host/port/client_id/username/password,调用 write_net_config
- iot_topic_set: 解析 client_id_enable/topic_pub/topic_sub,调用 write_net_config
- 三个 SET 命令均写入 flash 并在完成后返回 code=0 success
2026-07-07 21:15:55 +08:00
wangfq
2bbe388738
fix: iot_mqtt_srv.c 添加缺失的 tcp_json_srv.h include
2026-07-07 18:47:05 +08:00
wangfq
a7de4dfcde
feat(vd960DBN): MQTT/TCP report_config 支持完整7参数配置
...
- 新增 ReportConfig 结构体 (sensor_type/enable/once/env_eval/interval/ack_required/timeout)
- net_srv.c: MQTT report_config handler — 查询/设置均返回完整配置JSON
- tcp_json_srv.c: TCP JSON handle_report_config 同步升级,兼容旧 active_report
- iot_mqtt_srv.c: g_report_active → g_report_cfg.enable
- g_report_active 全局变量替换为 g_report_cfg 结构体
2026-07-07 18:39:45 +08:00
wangfq
cd92f3e0c3
feat(DBNMQTTool): 查询响应自动回填输入框 + 主动上报配置
...
- _on_message 中 ssc_net/iot_net/iot_topic/report_config 查询结果
不再仅显示 JSON,改为调用 _apply_* 方法回填到对应输入框
- 新增「主动上报配置」GroupBox(sensor_type / interval / timeout
+ 4 开关),支持查询/设置 CMD_REPORT_CONFIG
- import 增加 CMD_REPORT_CONFIG / data_report_config
2026-07-07 18:22:39 +08:00
wangfq
b932dd7c6f
feat: DBNMQTTool 日志增强 — 收发打印 topic + payload 详情
...
新增 _log_send() / _log_recv() 两个统一日志方法:
- 发送: 标签 + → topic + PASTE:{精简payload}
- 接收: ← topic + summary + RECV:{精简payload}
- payload >200/300 字符自动截断
覆盖所有收发路径:
- [模拟]/[协议]/[自定义]/[命令] 发送
- 响应/loop_data/event_report/heartbeat/Initialize 接收
- mqtt_client.py 自动订阅事件日志
2026-07-07 17:47:58 +08:00
wangfq
5e4e1b1ec7
fix: DeviceManager 死锁 — threading.Lock 改为 RLock
...
根因: update_from_dev_info/update_loop_data/update_event/update_heartbeat
在 with self._lock 块内调用 get_or_create(), 后者再次 with self._lock.
Python threading.Lock 不可重入 → 永久阻塞 → GUI 无响应.
修复: self._lock = threading.RLock() (可重入锁)
清理: mqtt_client.py 移除 debug print 和未使用的 sys import
2026-07-07 17:36:35 +08:00
wangfq
c98aa5b0bb
fix: MqttClient 回退信号方案,添加 publish debug 日志追踪阻塞点
...
- 移除 QObject 基类和 QueuedConnection 信号方案
- publish() 直接调用 self._client.publish() 并打印前后日志
- 添加 print(flush=True) 确保 Windows 终端实时输出
目的是确认阻塞发生在:
[MqttClient] publish topic=... qos=1 ← 打印后消失?
[MqttClient] publish done mid=... ← 这行能否出现?
2026-07-07 17:27:15 +08:00
wangfq
baa82c895d
fix: MqttClient 重构为 QObject — publish 通过 Qt 信号排队避免 C 层崩溃
...
问题: paho-mqtt publish() C 扩展在 Windows 上从 GUI 线程调用时静默崩溃。
修复:
- MqttClient 改为 QObject 子类
- publish() 通过 Qt Signal(Qt.QueuedConnection) 排队,_do_publish()
始终在主线程事件循环中执行 paho 调用
- 状态/消息通知改用 Qt Signal 跨线程传递
- 新增 subscribe()/unsubscribe() 公开 API,消除 main.py 直接
访问 _client 的脆弱代码
- 移除 MainWindow 中已不再需要的中间信号 _mqtt_status/_mqtt_msg
2026-07-07 14:25:49 +08:00
wangfq
6eb93637c7
fix: DBNMQTTool — 所有 publish 路径增加通用异常捕获
...
问题: _custom_publish / _proto_publish / _sim_publish 只 catch
json.JSONDecodeError, MqttClient.publish() 抛出的 ConnectionError
等异常未被捕获, 在 Qt 信号槽中导致静默崩溃(Windows 无 traceback).
修复:
- _custom_publish: +except Exception, 避免 toPlainText() 重复调用
- _proto_publish: +except Exception, 避免 toPlainText() 重复调用
- _sim_publish: +except Exception
- _custom_subscribe/_custom_unsubscribe: +except Exception, +_client 空检查
2026-07-07 14:15:36 +08:00
wangfq
5a2ef0be5d
fix: DBNMQTTool — right 局部变量改为 self._notebook
...
_build_ui() 中 right = QTabWidget() 是局部变量,导致
_proto_publish_item() 中 self._notebook.setCurrentWidget() 报
AttributeError: 'MainWindow' object has no attribute '_notebook'
2026-07-07 14:07:52 +08:00
wangfq
90d723517e
feat: manage_mqtt_recv_message 实现 V1.01 协议命令分发
...
net_srv.c: manage_mqtt_recv_message() 从占位打印升级为完整命令分发器:
已实现(8条):
- dev_info_query: 返回设备信息(序列码/版本/子码)
- ssc_net_query: 返回 SSC 网络配置
- iot_net_query: 返回 IoT 网络配置(MQTT broker)
- iot_topic_query: 返回 topic 配置
- pwd_verify: 验证设备密码
- factory_reset: 出厂初始化+重启
- device_reset: 设备复位
未实现(返回 code=4):
- dev_serial_set, pwd_set, ssc_net_set 等 SET 类命令
所有响应通过 g_iot_topic.topic_pub (dld960/{sn}/dev) 发布
2026-07-07 13:58:27 +08:00
wangfq
3cdc5b6286
fix: MQTT PUBLISH 接收修复 — topic 过滤 + cmd/Method 双格式支持
...
问题: mqtt_data_manage() 的 PUBLISH 分支直接调用 manage_mqtt_recv_message(),
跳过了 mqtt_deserialize_publish() 的 topic 过滤, 且只支持旧 Method 格式.
修复:
- mqtt_data_manage: PUBLISH 改为走 mqtt_deserialize_publish 做 topic 匹配
- mqtt_deserialize_publish: topic 过滤已改用 g_iot_topic.topic_sub
- manage_mqtt_recv_message: 优先解析 cmd, 兼容旧 Method 字段
2026-07-07 12:09:07 +08:00
wangfq
ab3a4cea0a
fix: 出厂默认 topic 使用真实设备序列号 + PRINT 修正
...
- cfig_flash.c: factory_dev_info() 用 gMacAddr 生成真实主题 dld960/{SN}/srv + dld960/{SN}/dev
- net_srv.h: TOPIC_DEFAULT 加注释标明为格式模板
- net_srv.c: 修复上次提交的 PRINT 宏转义异常
2026-07-07 10:57:20 +08:00
wangfq
b707241429
feat: MQTT 双主题同步到 vd960DBN 固件 + DBNMQTTool devlog
...
vd960DBN 固件改动:
- net_srv.h: 默认 topic 改为 dld960/{sn}/srv + dld960/{sn}/dev
- net_srv.c: dg_subscribe_display_topic() 直接用 topic_sub 订阅(不再追加 client_id/sn 后缀)
- net_srv.c: mqtt_deserialize_publish() topic 过滤改用 g_iot_topic.topic_sub(不再硬编码 TOPIC_DEFAULT_SUBSCRIBE)
DBNMQTTool 文档:
- devlog.md: 清理过期 topic 引用语义
2026-07-07 09:46:54 +08:00
wangfq
770d67346f
refactor: MQTT 主题方向 down→srv, up→dev
...
- dld960/{sn}/down → dld960/{sn}/srv
- dld960/{sn}/up → dld960/{sn}/dev
- 通配符 dld960/+/up → dld960/+/dev
2026-07-07 09:42:35 +08:00
wangfq
213716033c
feat: MQTT 协议 V1.01 — Topic 压缩为双主题 (up/down)
...
- 7个主题压缩为2个: dld960/{sn}/down + dld960/{sn}/up
- 消息类型由 JSON cmd 字段区分,不再依赖 topic 路径
- protocol.py: topic_up()/topic_down() 替代旧7个函数
- mqtt_client.py: 4个通配符订阅→1个 dld960/+/up
- main.py: 消息路由改为 cmd 匹配,协议Topic树简化
- 文档更新 V1.01
2026-07-07 09:18:29 +08:00
wangfq
d29e16acc8
docs(DBNMQTTool): 开发日志 — 初始化到模拟上报全记录
2026-07-06 23:27:40 +08:00
wangfq
c19e465284
feat(DBNMQTTool): 模拟上报 + 协议Topic + 自定义Topic
...
新增三个 Tab:
1. 模拟上报 — 可编辑 loop_data/event_report/heartbeat JSON,
支持单次发送和周期上报(间隔可调)
2. 协议Topic — 按协议文档列出所有 dld960/{sn}/srv/... 和 dev/... topic,
双击填充到发布区,支持编辑 JSON 载荷
3. 自定义Topic — 自由输入 topic 发布,支持订阅/取消订阅,
接收消息实时展示
新增:
- QComboBox, QSpinBox, QPlainTextEdit 控件
- paho.mqtt.client 导入(topic_matches_sub 通配符匹配)
- 自定义订阅消息自动路由到接收区
2026-07-06 21:40:26 +08:00
wangfq
5210051f19
chore(DBNMQTTool): 删除误提交的 vim swap 文件
2026-07-06 21:32:30 +08:00
wangfq
213c0ddc2d
fix(DBNMQTTool): paho-mqtt disconnect 回调签名兼容 v1/v2
...
- _on_disconnect: 用 *args 兼容 v1(3参数) 和 v2(5参数)
- Client 构造加 callback_api_version=VERSION2
- _on_connect 签名保持不变 (v2)
2026-07-06 21:32:24 +08:00
wangfq
e1bf3dcfca
refactor(DBNMQTTool): tkinter → PySide6
...
- main.py: 完整重写为 PySide6 (Qt for Python)
- requirements.txt: 加 PySide6>=6.6.0
- 使用 Qt 信号/槽替代 tkinter 回调
- 界面更现代化,Fusion 风格
- 分组框 (QGroupBox) 布局,QSplitter 分栏
2026-07-06 21:19:55 +08:00
wangfq
a2cfe4602c
feat: DBNMQTTool — DLD960 IoT MQTT 设备管理工具 (Python/tkinter 跨平台)
...
基于《DLD960_IoT_MQTT协议.md》V1.00 实现
功能:
- MQTT Broker 连接管理
- 设备自动发现(订阅 dld960/+/dev/# 通配符)
- 设备信息查询(dev_info_query)
- 网络配置(SSC/IoT TCP)+ Topic 配置
- 实时线圈数据监控(loop_data)+ 事件上报(event_report)
- 心跳监控(heartbeat)
- 控制命令:密码验证/设置、出厂初始化、设备复位
项目结构:
- main.py 主窗口 (tkinter GUI)
- dbn_mqtt_tool/
- protocol.py DLD960 IoT MQTT 协议定义
- mqtt_client.py MQTT 客户端封装 (paho-mqtt)
- device_manager.py 设备发现与状态管理
2026-07-06 18:14:38 +08:00
wangfq
220f778117
fix(vd960DBN): 删除重复 poll_mqtt 定义 + 加头文件声明
2026-07-06 17:30:28 +08:00
wangfq
c17b67d185
refactor(vd960DBN): MQTT 重构,对标 DBN101GA 参考项目
...
net_srv.c 改动:
- WCHNET_HandleSockInt IoT 分支:SINT_STAT_CONNECT 直接调 mqtt_connect(),
SINT_STAT_RECV 调 mqtt_data_manage() — 复用已有的 SocketId_TCP/mqttBuf/mqttData
- 新增 mqtt_data_manage(): 处理 CONNACK/SUBACK/PUBLISH/PINGRESP
- 新增 poll_mqtt(): 心跳 PINGREQ (~9s)
peripheral_main.c 改动:
- IoT 模式下 poll_mqtt() 替代 iot_mqtt_poll()
对标 DBN101GA 的关键差异:
- net_srv.c 已有完整 mqtt_connect/mqtt_publish/MQTT_Subscribe/MQTT_Pingreq
- SocketId_TCP 由 WCHNET_CreateTcpMqttSocket 创建,不再自建 socket
- SINT_STAT_CONNECT 直接发 MQTT CONNECT,不延迟
2026-07-06 17:21:48 +08:00
wangfq
0c8402d726
fix(vd960DBN): MQTT socket 复用 SocketId_TCP,对标官方 WCHNET MQTT 例程
...
根因分析:iot_connect_broker 自建 socket 与 WCHNET_CreateTcpMqttSocket
创建的 SocketId_TCP 冲突(重复创建),且自建 socket 的 WCHNET_SocketSend
崩溃。官方 MQTT 例程使用统一的 SocketId/SocketId_TCP 模式。
改动:
- peripheral_main.c: 恢复 WCHNET_CreateTcpMqttSocket() 调用
- iot_connect_broker: 不再创建新 socket,直接复用 SocketId_TCP
- 全链路(SocketSend/HandleSockInt/poll)通过 g_iot_socket=SocketId_TCP 统一
2026-07-06 16:09:22 +08:00
wangfq
46091639cd
fix(vd960DBN): iot_connect_broker 加 SourPort + iot_mqtt_send 加 hex dump
...
- SourPort 参考 WCHNET_CreateTcpMqttSocket 设为 port_dev_udp+1
- iot_mqtt_send 打印前64字节 hex 内容
2026-07-06 15:44:22 +08:00
wangfq
88526158d0
fix(vd960DBN): MQTT CONNECT 改为 poll 内延迟发送,避免中断内 WCHNET_SocketSend 崩溃
...
1. 参考 net_srv.c mqtt_connect 模式重写 iot_mqtt_send_connect:
- clientID 用 g_dev_number_str(全局),不用 g_iot_dev_serial
- username/password 直接赋值,不用 strlen 检查
- memset 手动初始化,不用 brace-initializer 赋值
2. SINT_STAT_CONNECT 中断内不再调 iot_mqtt_send_connect,
改为标记 TCP_CONNECTED,由 iot_mqtt_poll 下一轮发送 —
参考 tcp_json_handle_sock_int 不立即发送数据的模式
2026-07-06 15:16:24 +08:00
wangfq
884a622cab
refactor(vd960DBN): 缓冲区 2048→1024,单次交互不超 1KB
...
- IOT_MQTT_RECV_BUF_LEN: 2048 → 1024
- IOT_MQTT_SEND_BUF_LEN: 2048 → 1024
- data_json 改用宏
- iot_handle_publish 的 json[] 改 static 防栈溢出
2026-07-06 13:47:10 +08:00
wangfq
7459c0fa80
fix(vd960DBN): iot_mqtt_publish_sensor 栈溢出 — data_json[2KB] + payload[2KB] = 4KB 远超 2KB 栈
...
每次主循环调 iot_mqtt_publish_sensor 都分配 4KB 栈变量,
直接栈溢出踩烂全局变量(含 g_iot_dev_serial→clientId=空),
最终在 iot_mqtt_send_connect→WCHNET_SocketSend 时 hard fault。
改为 static 彻底消除栈压力。
另加 iot_mqtt_send 调试日志。
2026-07-06 13:40:25 +08:00
wangfq
de3a7c197e
fix(vd960DBN): MQTTPacket_connectData_initializer 不能用于赋值,用临时变量中转
2026-07-06 11:31:12 +08:00
wangfq
dfadc26717
fix(vd960DBN): MQTT buffer 从栈改为 static,防止栈溢出 (栈仅 2KB)
...
iot_mqtt_send_connect: opts(~85B) + buf[256] → static (~340B 省)
iot_mqtt_send_subscribe: buf[256] → static (256B 省)
iot_mqtt_publish: buf[2048] → static (2KB 省)
调用链 WCHNET_HandleGlobalInt → iot_mqtt_handle_sock_int
→ iot_mqtt_send_connect 会叠加 WCHNET 协议栈内部开销,
2048B 栈极易溢出导致 hard fault(现象:乱码+truncated日志+重启)
2026-07-06 11:27:08 +08:00
wangfq
c0220c1d37
fix(vd960DBN): IoT socket 重复创建 + broker IP 解析错误
...
- iot_connect_broker: 删除 memcpy,get_ipstr_to_array 已正确解析 IP
之前 memcpy 把原始 ASCII 字节覆写到 broker_ip,导致 IP 变成 49.50.49.46
- peripheral_main.c: IoT 模式下跳过 WCHNET_CreateTcpMqttSocket,
由 iot_connect_broker() 统一管理 socket 生命周期,避免重复创建
2026-07-06 10:46:51 +08:00
wangfq
e6dbdb5296
fix(vd960DBN): 修复无法设置 IoT 模式的 bug
2026-07-06 10:24:15 +08:00
wangfq
39bda6067f
fix(vd960DBN): add missing closing brace for case PUBLISH block in iot_process_recv
...
case PUBLISH: { ... } was missing its closing }, causing ARMCC to think
iot_send_heartbeat and iot_connect_broker were declared inside a function body.
2026-07-03 18:28:40 +08:00
wangfq
122c36bb9d
fix(vd960DBN): iot_make_topic missing 5th arg for "srv"/"ctrl" topic
2026-07-03 18:18:38 +08:00
wangfq
6f5effae8c
fix(vd960DBN): iot_mqtt_srv compilation errors
...
- Add extern g_report_active (from tcp_json_srv.h)
- Fix iot_make_topic call: 4-arg -> 5-arg (add NULL for 'status' sub)
- Fix SOCK_INF field names: DestPort->DesPort, DestAddr->IPAddr
- Fix struct _WCHNET_IPAddr -> uint8_t broker_ip[4] (type not available)
2026-07-03 18:12:55 +08:00
wangfq
5333fe40de
refactor(vd960DBN): replace compile-time NET_SSC/NET_JSON/NET_IOT macros with runtime g_sub_code_enable.iot_enable
...
- Remove NET_SSC_ENABLE, NET_JSON_ENABLE, NET_IOT_ENABLE from net_config.h
- Socket config always allocates max: 1 UDP + 2 TCP + 1 TCP_LISTEN
- All #if guards in net_srv.c/h and peripheral_main.c replaced with
runtime g_sub_code_enable.iot_enable checks
- iot_enable=0 -> SSC mode (UDP + TCP client + JSON server)
- iot_enable=1 -> IoT MQTT mode (MQTT client via iot_mqtt_srv)
2026-07-03 18:07:32 +08:00
wangfq
9629729dc9
feat: IoT MQTT 客户端实现 — NET_SSC_ENABLE=0 时启用
...
新增文件:
- iot_mqtt_srv.h/c: MQTT 客户端 (TCP→CONNECT→SUBSCRIBE→READY)
支持: dev_info_query, pwd_verify (其他命令框架预留)
上报: loop_data (传感器), heartbeat (心跳 60s)
断线重连: 指数退避 5s~60s
协议: DLD960 IoT MQTT V1.00 (dld960/{sn}/...)
修改:
- net_config.h: 新增 NET_IOT_ENABLE = !NET_SSC_ENABLE,
IoT 模式分配 1 TCP socket (MQTT client)
- net_srv.c: IoT 初始化 + socket 中断路由
- peripheral_main.c: IoT poll + sensor publish 调用
模式:
NET_SSC_ENABLE=1 → SCC + TCP JSON Server (原有行为)
NET_SSC_ENABLE=0 → IoT MQTT Client (新增)
2026-07-03 17:36:22 +08:00
wangfq
a73a9392bd
docs: 补充 V2.8~V3.1 开发日志 (编译修复/车间距/misc_counter/上电抑制)
2026-07-03 17:01:09 +08:00
wangfq
acb999a881
fix: 放弃 close+recreate listen socket, 改为只关数据socket
...
根因: WCHNET ERR_ISCONN(0x1D), listen socket 关闭后端口5960仍被占用,
无法在同端口立即重建. WCHNET_MainTask 循环也未能释放.
新方案: tcp_json_restart 只关数据 socket(N+1) 断开客户端,
listen socket(N) 保持不动, 仅重置应用层状态.
新客户端连接时 CONNECT 事件照常触发.
2026-07-03 16:10:52 +08:00
wangfq
c181839694
fix: SocketCreat 0x1D — close后先跑WCHNET回收资源再creat
...
根因: WCHNET_SocketClose 异步, 资源在 WCHNET_MainTask 中释放.
tcp_json_restart() close后立刻creat, 旧socket未回收→0x1D.
修复: close后循环5次 WCHNET_MainTask+HandleGlobalInt+Delay(10ms)
确保资源释放后再 WCHNET_SocketCreat
2026-07-03 15:51:16 +08:00
wangfq
b97afe22d5
refactor: 去掉 60s Auth timeout, 改为 3次失败即重启
...
- 删除 tcp_json_poll 中的 Auth timeout 60s 超时检查
- Auth 失败逻辑已在 handle_pwd_verify: 3次失败→tcp_json_restart()
- 连接后无交互场景由 5min 空闲检查覆盖
2026-07-03 15:28:00 +08:00