wangfq
|
11d1a96d24
|
同步协议 V1.03:双主题发布对齐 + initialize 数据格式修正
vd960DBN:
- heartbeat/sensor/initialize 发布统一走 dld960/{sn}/dev
- dev_initialize_pub 补 model/hard_ver/soft_ver,删 extra_info.version
DBNMQTTool:
- 协议版本号更新至 V1.03
- 协议 Topic 树和模拟页增加 initialize 支持
|
2026-07-10 08:49:28 +08:00 |
|
wangfq
|
652fc5f938
|
feat: V1.03 initialize 上线消息 — 固件+工具同步
vd960DBN:
- dev_initialize_pub() 改为 V1.03 格式 (msg_id/cmd/ts/data/extra_info)
- iot_mqtt_srv: 订阅改双主题 dld960/{sn}/srv, 响应 topic 改 dev
- SUBACK 后自动发 initialize 告知服务器上线
- net_srv.h: 加 dev_initialize_pub 声明
DBNMQTTool:
- protocol.py: 加 CMD_INITIALIZE
- device_manager: DeviceInfo 加 extra_info, 加 mark_online()
- main.py: 接收 initialize 消息, 自动标记设备上线
- docs: 协议 V1.03 + devlog V3.1
|
2026-07-09 21:32:39 +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
|
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
|
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
|
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
|
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
|
4e75312a0f
|
fix: CONNECT 事件到达 TCP_LISTEN socket(1) 而非 TCP socket(0)
WCHNET 将 CONNECT 事件投递到 TCP_LISTEN 内部 socket (sock 1),
而非用户创建的 TCP socket (sock 0)。之前的路由只检查
socketid==g_json_socket_listen(0),遗漏了 sock 1。
修复:
- NET_SSC_ENABLE=1 时同时路由 sock N 和 sock N+1 到 JSON handler
- NET_SSC_ENABLE=0 时所有 socket 事件都路由到 JSON handler
- tcp_json_handle_sock_int 移除 socket 限定,处理任意 socket 事件
|
2026-07-01 14:09:34 +08:00 |
|
wangfq
|
32d613a54f
|
debug: 在 WCHNET_HandleGlobalInt 中打印 socket 中断信息
添加 SockInt: sock=%d stat=0x%02X 日志,用于诊断为何
client 连接成功后 CONNECT 事件未被处理
|
2026-07-01 14:02:10 +08:00 |
|
wangfq
|
157ff48835
|
fix: NET_SSC_ENABLE=0 时 g_net_state.flag 卡在 1 导致 tcp_json_srv_init 反复调用
WCHNET_CreateUdpSocket 原本会将 flag 推进到 2,被 #if 排除后
net_srv_init 每次主循环都重新执行,tcp_json_srv_init 首次成功后
后续 SocketCreat 都返回 0x1B(socket 已存在)
修复:SSC 禁用时在 tcp_json_srv_init 后手动设 flag=2
|
2026-07-01 13:47:09 +08:00 |
|
wangfq
|
131d767cc3
|
fix: mStopIfError/GetMacAddr/get_ipstr_to_array 误被 #if NET_SSC_ENABLE 排除
这些共享函数被包裹在 #if NET_SSC_ENABLE 中导致链接失败:
- mStopIfError — net_srv_init 调用
- GetMacAddr — peripheral_main 调用
- get_ipstr_to_array — tcp_json_srv 调用
修复:在 clear_mqtt_buf 后关闭 #if,mStopIfError 后重开;
在 poll_mqtt 后关闭 #if,get_ipstr_to_array 后重开
|
2026-07-01 13:35:14 +08:00 |
|
wangfq
|
e5c99069a0
|
refactor: 用 NET_SSC_ENABLE 宏隔离原有 TCP/UDP 代码,默认=0
net_config.h:
- 新增 NET_SSC_ENABLE=0, NET_JSON_ENABLE=1 功能开关
- WCHNET_NUM_UDP/TCP 根据开关条件编译
- 默认仅保留 JSON TCP server (1 TCP socket),SSC 全部禁用
net_srv.h:
- SocketId_TCP/UDP extern 放入 #if NET_SSC_ENABLE
- WCHNET_CreateTcpSocket/MqttSocket 原型放入 #if
net_srv.c:
- SSC/MQTT 变量和函数全部置入 #if NET_SSC_ENABLE
- WCHNET_HandleSockInt 中 SSC 处理分支置入 #if
- net_srv_init 中 WCHNET_CreateUdpSocket 和 memset(socket) 置入 #if
- JSON routing 保持无条件编译
peripheral_main.c:
- WCHNET_CreateTcpSocket/MqttSocket 调用置入 #if NET_SSC_ENABLE
tcp_json_srv.h:
- 移除 SocketId_TCP/UDP extern(JSON handler 不再引用)
影响:NET_SSC_ENABLE=0 时设备仅运行 TCP JSON server (port 5960),
原有 SSC UDP/TCP/MQTT 代码不参与编译,零干扰。
|
2026-07-01 11:33:32 +08:00 |
|
wangfq
|
ba35ea8ae3
|
refactor: 按 WCH 官方 TCPServer 例程重写 TCP JSON server
核心变更:去掉 g_json_socket_client,listen socket 直接承载收发数据。
参考 EVT/EXAM/ETH/TCPServer 例程:
- 创建 PROTO_TYPE_TCP socket → WCHNET_SocketListen
- 同一 socket 处理 CONNECT + RECV + DISCONNECT + TIMEOUT
- 不需要 'accepted socket' 检测
移除的复杂逻辑:
- g_json_socket_client 变量及所有 'newly accepted' 检测代码
- WCHNET_HandleSockInt 第二路由条件(socketid!=listen,!=TCP,!=UDP 那串)
- tcp_json_handle_sock_int 中 listen/client 分离处理
- listen==client overlap 的迂回保护
修改文件:
- tcp_json_srv.h: 移除 g_json_socket_client extern
- tcp_json_srv.c: 移除 g_json_socket_client,handler 简化为 4 个 if
- net_srv.c: 路由简化为仅 socketid==g_json_socket_listen
|
2026-07-01 11:18:43 +08:00 |
|
wangfq
|
7804d97a45
|
fix: listen socket CONNECT 不应触发 accepted 客户端逻辑
- WCHNET_HandleSockInt 第二路由条件增加 socketid!=g_json_socket_listen
- tcp_json_handle_sock_int 'Newly accepted' 检查增加 socketid!=g_json_socket_listen
- 防止 listen socket 的 CONNECT 事件误触发 WCHNET_ModifyRecvBuf 和 g_json_socket_client 覆写
根因:TCP_LISTEN socket 和 accepted client 是不同 socket ID(1 vs 3),
listen socket 的 CONNECT 不应穿透到 'newly accepted' 分支去配置 recv buffer,
否则会干扰 WCHNET 对 accepted socket 的数据路由
|
2026-07-01 09:52:28 +08:00 |
|
wangfq
|
eb79c66763
|
fix: JSON TCP accept后未配置接收缓冲区导致无法收数据
根因: WCHNET TCP Server 模式下, accept后的socket需要调用
WCHNET_ModifyRecvBuf 配置接收缓冲区才能正常接收数据。
修复:
1. tcp_json_srv.c: accept时调用 WCHNET_ModifyRecvBuf 设置 recv buf
2. 去掉脆弱的scan逻辑, 改为收到CONNECT+socket不匹配已知socket时自动识别
3. net_srv.c: 同步更新路由条件
4. DBNetClient: 增加原始JSON发送日志
|
2026-06-30 17:38:45 +08:00 |
|
wangfq
|
af997a79fe
|
feat(vd960DBN): TCP JSON协议服务 — 端口5960, 鉴权+15条命令
- net_config.h: TCP_LISTEN=0→1, TCP=2 支持 JSON 监听
- 新增 tcp_json_srv.h/c: 行分隔 JSON, pwd_verify鉴权, 命令分发
- 实现15条协议命令: dev_info/ssc_net/iot_net/iot_topic/pwd_set/factory_reset等
- loop_param_set/query 接受命令返回stub(Loop MCU中继待实现)
- net_srv.c: 集成 JSON 中断路由 + init
- peripheral_main.c: 主循环 tcp_json_poll()
|
2026-06-30 14:53:53 +08:00 |
|
wangfq
|
95808f9f25
|
refactor(vd960Loop): 算法回退到 DLD154V4B,四通道适配
- 用 DLD154V4B vd1_task/per_channel 替换 vds_task 复杂算法
- 移除 FUNCTION_B/二次判断/快速变化/多重确认等增强特性
- 保留平坦性离开算法 (CN200910309382),每通道独立状态
- 灵敏度表改为 DLD154V4B 4级: {216,108,36,10} / {108,72,18,9}
- 清理废弃类型: FltHistoryManager, Loop_ACS_Info, StageRangeConfig 等
- 首次添加 vd960DBN 完整源码
|
2026-06-25 16:21:57 +08:00 |
|