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
|
be8c48688c
|
fix: tcp_json_handle_sock_int RECV 被 listen socket 分支拦截导致收不到鉴权数据
- RECV 处理移到函数最前面,优先于 listen socket 检查
- listen socket 分支增加 socketid!=g_json_socket_client 保护,
防止 listen 与 accepted client 为同一 socket ID 时
RECV 事件被 listen 分支 return 拦截
- WCHNET 某些版本可能将 TCP_LISTEN 和已 accept 的连接
共用同一 socket ID,此时旧代码在 listen 检查处直接 return
导致后续 client RECV 处理永远不被执行
|
2026-07-01 09:20:44 +08:00 |
|
wangfq
|
735af8c0eb
|
fix: WCHNET 接收缓冲区与帧缓冲区重叠导致数据损坏
根因: WCHNET_ModifyRecvBuf 将 socket 内部缓冲区设为 g_json_recv_buf,
但 WCHNET_SocketRecv 又从同一缓冲区(偏移)拷贝到自身 — 源和目的重叠。
修复:
1. 新增独立的 g_json_wchnet_buf 作为 WCHNET 内部接收缓冲区
2. RECV 时从 g_json_wchnet_buf 读入临时 buffer, 再追加到 g_json_recv_buf
3. 两缓冲区完全隔离, 消除重叠拷贝
|
2026-06-30 19:04:11 +08:00 |
|
wangfq
|
3e00a352d3
|
debug: 在 json_process_frame + handle_pwd_verify 增加详细日志
添加关键路径诊断日志以定位鉴权失败根因:
- json_process_frame: msg_id/cmd/匹配结果/auth状态
- handle_pwd_verify: data提取/password值/dev_pwd对照
|
2026-06-30 19:03:00 +08:00 |
|
wangfq
|
ae02e58a36
|
fix: json_get_cmd 未去除引号导致命令匹配失败
simple_parse_json 提取字符串值时保留双引号, json_get_cmd
直接用于 strcmp 匹配命令表, 因 "pwd_verify" != pwd_verify
导致所有命令都走进 'unsupported command' 分支。
改用 json_get_str_field (自动去引号) 修复。
|
2026-06-30 17:52:30 +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 |
|