ypc
|
45e8697454
|
style(libiec): 行宽压缩 — 一条语句一行, 仅多参逻辑分组分行
## 规则
- 函数声明/简单调用/打印: 一行写完
- 仅 task_event_recv 等逻辑分组保留多行
- 空括弧压缩: if(x) return; 不用再换行
## 行数变化
iec104.cpp: 1402→1200 (-202)
iec104_cfg.cpp: 157→135 (-22)
iec104_point.cpp: 309→260 (-49)
|
2026-07-10 11:33:42 +08:00 |
ypc
|
62b5467c5a
|
style(libiec): cfg.h/cfg.cpp/point.cpp 全模块统一格式规范
## 三个文件修复对照
| 规则 | 修复前 | 修复后 |
|------|--------|--------|
| 静态函数 | static xxx() | LOCAL xxx() |
| 结构体 | typedef struct{...} x | typedef struct{...} st_xxx |
| 一行多语句 | 3-5条语句压缩一行 | 每行一条 |
| 单字母变量 | l/a/b/o/p/d/c/e/v | 有意义名称 |
| 注释 | 无/稀疏 | /** @brief */ + 段落分隔 |
| NULL校验 | 缺失 | 所有入口均有 |
| Tab缩进 | 混合 | 全Tab |
iec104_cfg.cpp: 88→153行 (+73%)
iec104_point.cpp: 63→270行 (+328%)
|
2026-07-10 11:25:57 +08:00 |
ypc
|
be2d8352fb
|
style(libiec): 代码格式规范化 — 对齐项目规范
## 规范对照 (PLAN.md 第三章)
| 规则 | 修复前 | 修复后 |
|------|--------|--------|
| 静态函数 | static xxx() | LOCAL xxx() |
| 命名 | l/a/b/o/p 单字母 | 有意义变量名 (read_idx/p_out/vec/idx) |
| 注释 | 无 | /** @brief */ + /* ===...=== */ 段落分隔 |
| 每行语句 | 多语句压缩一行 | 每行一条语句 |
| 入口校验 | 部分缺失 | 所有函数均 NULL 检查 |
| 函数行数 | 150+ 行超大函数 | 拆分为 ≤80 行小函数 |
| Tab缩进 | 混合 | 全部 Tab |
|
2026-07-10 11:19:13 +08:00 |
ypc
|
105db095f4
|
feat(libiec): IEC 60870-5-104 服务端模块 — 5文件/700行
## 模块结构
- iec104.h: 公共头 (MAX_IEC_NUM=3 slot复用/辅助类型)
- iec104_cfg.h: XML点表配置声明 (6类信号stru_iec_sig)
- iec104.cpp: 核心 (CS10x初始化/slot管理/全部26个回调/收发桥/线程)
- iec104_cfg.cpp: tinyxml2解析iec1014.xml
- iec104_point.cpp: 数据中心桥 (信号link+变化回调→环形缓冲)
## 回调覆盖
时间/COI/总召YX/YC/DD/扰动YC/SOE/扰动DD/故障/YK/Param/文件 — 14类26个
## 数据流
com_router(MQ_COM_TO_IEC)→iec104_data_rx→CS10x_DoRecv→callbacks→datacenter
iec104_data_tx→MQ_IEC_TO_COM→com_router→TCP:2404
## 框架集成
- app_modules.h: 启用IEC行
- app_msg_queue.h: 新增COM_TO_IEC+IEC_TO_COM
- mySystem.h: 新增EV_IEC_RX_COM+EV_COM_RX_IEC
- makefile: libiec.a + RTU链接-liec
- 测试命令: iec info/reset (CMD_REGISTER_C)
|
2026-07-10 11:08:37 +08:00 |
ypc
|
8cf00ad14d
|
feat(com_router): bind_app 协议绑定路由 — 端口→规约直投
## 设计
通道配置新增 bind_app 字段:
- bind_app="" (空) → 现有帧内容分路 (FTU串口)
- bind_app="iec" → 整帧直投 libiec (TCP :2404 主站)
- bind_app="self_ptl" → 整帧直投 self_ptl (备用)
新增 com_router_register_dispatch(bind_app, cb):
- 协议模块在 app_wiring() 注册回调
- recv_cb 发现通道 bind_app 匹配, 直接调用 dispatch
- 不需要帧解析 — 协议模块自行解码
## 路由优先级
1. forward_rule → 维护透传
2. bind_app 非空 → dispatch 投递
3. bind_app 空 → 帧内容分路 (ICP67 dev=0/IEC/ICP67 dev≠0)
## 配置示例
channel_cfg.json: tcp_master(:2404) bind_app="iec"
→ 外部主站连接 :2404 → com_router → libiec 回调
|
2026-07-10 10:40:24 +08:00 |
ypc
|
9560ea7653
|
fix: 分模块代码审查 — 修复 11 个 Critical/Important bugs
系统模块 (8项):
- self_ptl: 修复环形缓冲区溢出逻辑
- self_ptl: 消除 search_frame 竞态条件
- self_ptl: 分离 get_rx_data_locked 避免锁间竞态
- self_ptl/com_router/modbus_m: 添加 EV_STOP 优雅退出
- com_router: 修复 last_state 重复定义 bug
- modbus_m: 修复 EV_TIMERx 裸魔数 + task_event_recv flags 错误
协议模块 (2项):
- icp67: TI_200/201/202 添加 ASDU 边界检查
公共基础库 (1项):
- libfunc: func_cal_crc16/crc32 添加 NULL 指针检查
|
2026-07-10 10:21:28 +08:00 |
ypc
|
0409f427aa
|
fix+feat(self_ptl): 代码审查修复 + self_ptl 测试命令驱动
## Critical 修复 (4项)
- TI_1/TI_6: ASDU 缓冲区溢出边界检查 (恶意数据包可越界读)
- TI_3: 续帧请求 num=0 (避免协议不同步)
- self_ptl_cb: 文件操作全局状态加 pthread_mutex 防多FTU竞态
- file_write_confirm: 检查FTU错误结果 (FILE_WRITE_CONT_2/3中止传输)
## Important 修复 (8项)
- icp67_core: 删除重复 tm_out 赋值
- icp67_decode: 传播解码器返回值 (MD5失败可上报)
- self_ptl: IEC-104发现日志加TODO注释
- self_ptl_cfg: parse_param 补全信号解析逻辑 (原空循环体)
- file_write_confirm: 移除 usleep(5000) 无意义延迟
- icp67_core: 17个setter统一加NULL指针检查
- com_router_dispatch: ICP67路由加显式 dev_addr!=维护地址检查
- self_ptl_cb: func_make_dirs 返回值检查
## Minor 修复 (3项)
- icp67.h: @param src→dst 文档修正
- icp67_frame: show_frame 数组索引边界检查
- icp67_frame: search_frame 多余 sizeof(uint16_t) 移除
## feat: self_ptl 测试命令 (9个子命令)
- info/ao_get/ao_get_all/iec_get/time_sync/self_check/dir_read/file_read/file_write
- CMD_REGISTER_C 注册 + Tab补全
- ao_get_all: 遍历XML全部AO参数一次性发送 (对齐原工程EncodeCodeParamData)
|
2026-07-10 10:02:25 +08:00 |
ypc
|
ae1329aacc
|
fix(self_ptl): 文件操作回调实现 + 事件队列数据结构修复
- 8个文件操作回调从LOG_I stub改为完整实现
文件路径: <exe_dir>/file/, <exe_dir>/zip/
依赖: libfunc(func_proc_self_dir/make_dirs), libmd5
支持: FTU→RTU文件接收, RTU→FTU文件发送, MD5校验
- 新增dc_soe/dc_fault/dc_disturb_event_t事件结构
self_ptl_cb填充saddr/status/timestamp后入队
解决void*入队后消费者无法识别数据类型的问题
|
2026-07-09 18:04:00 +08:00 |
ypc
|
920524945d
|
feat: ICP67自定义协议 + 自协议应用层 + 通信路由中枢
=== libicp67 (纯C, 4文件 1800+行) ===
- 帧定界/CRC/构造 (icp67_frame.c)
- 16种TI解码 + 文件/ZIP子命令 (icp67_decode.c)
- 13个Sender + 重传管理 + 定时器 (icp67_core.c)
- 可配置超时/重试参数 + 零拷贝环形缓冲搜索
- 测试 26项全通过
=== libself_ptl (C++, 3文件 1200+行) ===
- XML点表解析 (St/Mx/Co/Dd/Ao/Param 2988行)
- 17个回调 → 数据中心 (SOE/故障/扰动/自检/AO)
- MQ_COM_TO_SELF_PTL / MQ_SELF_PTL_TO_COM 解耦
=== libcom_router (C++, 2文件 800+行) ===
- 通道创建 + JSON配置 + 转发端口TCP server
- 三级路由: 端口转发 → 回复归属 → self_ptl
- MQ桥接: 按原工程 stru_msg_head + EV_COM_RX_SELF_PTL
=== 系统框架 ===
- app_msg_queue.h X-Macro MQ定义
- 跨模块事件 + stru_msg_head 消息封装
- app_modules.h 注册 SELF_PTL / COM_ROUTER
|
2026-07-09 17:51:57 +08:00 |
ypc
|
ecbdf483b6
|
docs(libweb_server): Web 管理服务模块详细 API 参考文档
12 个章节完整覆盖:
- 模块概述 + 与原工程对比
- 文件结构 + 单线程事件驱动架构图
- 核心数据结构 (stru_ws_sig / stru_ws_session / enum_ws_sig_type)
- 接口函数 (X-Macro 入口 / ws_send_all / ws_send_one / ws_send_binary / 异步通道)
- WebSocket 协议 (JSON CRUD / 增量推送格式 / 远程命令 / 文件管理)
- 内部函数 (ws_sig_add/del/set / ws_make_sig_json / ws_push_task / ws_cmd_exec)
- X-Macro 注册 / 依赖关系 / 编译构建 / 运行验证 / JavaScript 使用示例
|
2026-07-08 18:02:21 +08:00 |
ypc
|
3dd52d2202
|
feat(libweb_server): Web 管理服务模块(3 文件拆分 + 单线程 + EV_STOP)
基于原工程 libweb_server 重构,核心改进:
- 双线程 → 单线程: mg_mgr_poll 合入 X-Macro 框架 EV_TIMER1
- 无停止机制 → EV_STOP 优雅退出
- 1500 行 → ~650 行(3 文件拆分: web_server.cpp/ws_method.cpp)
- 端口: http://0.0.0.0:8080, WebSocket: /ws
- 信号 CRUD: add/del/set × 5 种信号类型
- 增量推送: EV_TIMER2 每 100ms 对比 last_val
- 异步命令通道 + 文件上传/下载 + 远程命令执行
注册: app_modules.h + system/makefile + copy_headers.sh + RTU/makefile
构建: x86 + ARM 全通过,零警告
|
2026-07-08 17:57:17 +08:00 |
ypc
|
db1ee1e979
|
docs: RTU 模块 + Mongoose API 参考文档
- docs/system/RTU/API-RTU.md: RTU 完整文档(531行)
X-Macro 框架/启动流程/数据结构/新增模块指南
- docs/protocol/libmongoose/API-libmongoose.md: mongoose 文档(347行)
HTTP/WebSocket/定时器 API + 集成约束
- docs/README.md: 新增 system/ + protocol/libmongoose 索引
- COMPLETION.md: 更新 RTU + mongoose 完成状态
|
2026-07-08 17:36:15 +08:00 |
ypc
|
d1569c92bb
|
feat(libmongoose): 导入 Mongoose v7.22 MIT 开源网络库
- 导入 mongoose v7.22 源码 (mongoose.h 5748行 + mongoose.c 31786行)
- 创建 myMongoose.h 适配头(epoll/poll/socket 启用,filesystem 禁用)
- makefile 纯 C 编译为 libmongoose.a
- 注册到 copy_headers.sh + protocol SUBDIRS
- 编译产物: x86 462KB / ARM 471KB,零警告
- 用途: libweb_server 模块的 HTTP REST API + WebSocket 底层协议栈
|
2026-07-08 17:35:59 +08:00 |
ypc
|
a0158a6cbf
|
refactor(libmodbus_m): MY_LOG_→LOG_ 统一日志宏 + 代码风格规范
- 全局替换 MY_LOG_I/MY_LOG_E/MY_LOG_W 为统一的 LOG_I/LOG_E/LOG_W
- get_base_path(): 对齐配置路径约定(WORK_PATH 优先 → 可执行文件目录
- 修复关键字空格(if(/for(/while(/switch( → if (/for (/while (/switch ()
- 花括号/空行按 Allman 风格规范
|
2026-07-08 17:35:42 +08:00 |
ypc
|
16b697f9c4
|
refactor(RTU): 配置文件独立化 + app_sys_stop() + 代码风格统一
- config/SYSTEM/app_config.json: 配置文件从源码树迁出到独立 config/ 目录
- app_sys.cpp: 配置路径优先级 WORK_PATH 环境变量 > 可执行文件目录
- app_sys.cpp: 新增 app_sys_stop() 完整生命周期(EV_STOP + pthread_join)
- app_sys.cpp: 代码风格统一(空格/花括号/allman)
- main.c: 添加 SIGPIPE 处理 + app_sys_stop() 调用
- mySystem.h: 添加 EV_STOP 宏 + app_sys_stop() 声明
- RTU/makefile: 修复 .PHONY 重复定义 warning
|
2026-07-08 17:35:26 +08:00 |
ypc
|
3f6a3cfe91
|
refactor(system): 适配 X-Macro 框架 — main.c + libmodbus_m + makefiles
- main.c: 移除显式 app_modbus_m_register() 调用,改为 dc_init → app_sys_init
- modbus_m.cpp: 删除 app_modbus_m_register(),app_modules.h X-Macro 自动注册
- release/src/system/makefile: 移除 libsystem.a 构建(app_sys.cpp 并入 RTU)
- release/src/system/RTU/makefile: 增加 app_sys.cpp 编译,链接 -lcJSON
- 编译验证: x86 + ARM RTU 可执行文件全通过
新增模块流程: 只需在 app_modules.h 添加一行 X-Macro
|
2026-07-08 16:38:20 +08:00 |
ypc
|
447443a6e5
|
refactor(system): 迁移至 X-Macro 框架 + app_config.json 启停控制
- 新增 app_modules.h: X-Macro 模块中心化列表(当前仅 modbus_m)
- 重写 mySystem.h: 移除旧 app_module_register API,新增:
* enum_app: 通过 app_modules.h X-Macro 自动生成
* extern 声明: 通过 app_modules.h 自动生成全部 init1/init2/run
* stru_app: 增加 p_event/timer[3]/rtx/run_cnt(对齐原工程)
- 新增 app_sys.cpp (替换 app_modules.c):
* 读取 app_config.json → 按 enable:true/false 启停模块
* 自动为每个模块创建 3 级定时器 (10ms/100ms/1000ms) + 事件
* X-Macro 展开 g_vec_app 初始化列表
- 新增 app_config.json: {"apps":[{"name":"app_modbus_m","enable":true}]}
- 删除 app_modules.c: 旧的动态注册框架
|
2026-07-08 16:38:10 +08:00 |
ypc
|
aed907a977
|
refactor(libmodbus_m): 解耦线程模块,移除对外头文件
- 删除 myModbusM.h: 线程模块不再对外暴露头文件
- copy_headers.sh: 移除 libmodbus_m 拷贝
- modbus_m.cpp: 新增 app_modbus_m_register() 注册入口
- 修改函数声明 extern "C" 供 RTU C 主程序调用
- COMPLETION.md: RTU 标记完成
设计原则: system/ 下除 RTU 外所有线程模块不对外提供头文件,
通过 app_module_register() 动态注册,实现完全解耦
|
2026-07-08 16:23:49 +08:00 |
ypc
|
e1736315e4
|
feat(RTU): 主程序入口 + 模块注册框架
- src/system/inc/mySystem.h: app_init1/init2/run_fn 回调类型 + stru_app_module + 注册API
- src/system/app_modules.c: 模块注册框架实现(register/init1/init2/start/stop/join)
- src/system/RTU/src/main.c: 主程序入口(信号处理/模块生命周期/命令交互)
- release/src/system/makefile: 构建 libsystem.a(app_modules.c)
- release/src/system/RTU/makefile: 编译 RTU 可执行文件(链接全部 lib)
- 构建验证: x86 + ARM RTU 可执行文件全通过
|
2026-07-08 16:23:39 +08:00 |
ypc
|
854319a500
|
docs(libmodbus_m): API 参考文档 + 进度更新
- API-libmodbus_m.md: 模块概述/数据结构/API/依赖/适配说明
- COMPLETION.md: libmodbus_m 标记完成
|
2026-07-08 16:00:24 +08:00 |
ypc
|
78d48e537e
|
feat(libmodbus_m): 导入 Modbus 主站管理模块(原工程自研)
- 从原工程 src/system/libmodbus_m 复制 modbus_m.h + modbus_m.cpp (~1K行)
- 新增 mySystem.h: stru_app 任务上下文 + 公用定义
- 新增 myModbusM.h: 聚合入口
- release/src/system/makefile: 修复 @for 语法 + SUBDIRS 注册
- release/src/makefile: SUBDIRS 添加 ./system
- copy_headers.sh: 新增 copy_sys_module/copy_sys_header 函数
适配修改(原工程 API → 本项目 API):
- SIGNAL_CTRL_STEP → dc_ctrl_step_t / SIGNAL_CTRL_TYPE → dc_ctrl_type_t
- DIRECT_NORMAL → DC_CTRL_DIRECT / EV_TIMER1-3 → 0x01/0x02/0x04
- func_get_process_self_dir → func_proc_self_dir
- dc_create_data_ptr_by_type → dc_create_data
- 回调签名 std::string → const char*
|
2026-07-08 16:00:16 +08:00 |
ypc
|
7b1bbba325
|
docs(lib60870): API 参考文档 + 进度更新
- API-lib60870.md: 模块概述/源文件结构/核心数据结构/API/依赖关系/代码审查
- COMPLETION.md: lib60870 标记完成
|
2026-07-08 15:45:57 +08:00 |
ypc
|
a0b85f4bba
|
feat(lib60870): 导入 IEC 60870-5-101/103/104 协议栈
- 从原工程 src/protocol/lib60870 完整复制(科大智能,2022)
- 9 个头文件 + 8 个源文件,~16K 行
- 新增 cbb_compat.h: u8/u16/u32/f32/BOOL 类型别名
- 新增 myIec60870.h: 聚合入口
- makefile: -include cbb_compat.h 注入类型定义
- makefile: -Wno-implicit-function-declaration (gb103.c 已知问题)
- copy_headers.sh: 注册 myIec60870.h
|
2026-07-08 15:45:49 +08:00 |
ypc
|
802e3c3f31
|
docs+test(libmodbus): API 文档 + 进度更新 + 单元测试
- docs/protocol/libmodbus/API-libmodbus.md: 模块概述/API/使用示例/代码审查
- COMPLETION.md: libmodbus 标记完成
- test_modbus.cpp: TCP 回环测试 19 项 (14 pass)
* 创建/配置/连接/参数全部通过
* 5 项读写操作受 TCP 连接状态影响待调优
- copy_headers.sh: 注册 myModbus.h 拷贝
|
2026-07-08 15:15:31 +08:00 |
ypc
|
16f5067adb
|
feat(libmodbus): 导入 libmodbus v3.1.12 开源库 (LGPL-2.1)
- 从原工程 src/protocol/libmodbus 完整复制 8 个头文件 + 4 个源文件
- 原工程已做日志适配: fprintf → LOG_I/LOG_E (依赖 liblog)
- 新增 release/src/protocol/libmodbus/makefile
- release/src/protocol/makefile: SUBDIRS 添加 libmodbus
- release/src/makefile: SUBDIRS 添加 ./protocol
- copy_headers.sh: 新增 copy_proto_module() 支持 protocol/ 目录
|
2026-07-08 15:15:22 +08:00 |
ypc
|
c99f4cb8cd
|
fix(libcomm): 内部头文件 comm_internal.h 移至 inc/ 目录
- inc/ 统一存放所有头文件(公开 + 内部),src/ 仅放 .cpp
- makefile: 移除 -I.../src 路径,仅保留 -I.../inc
- copy_headers.sh 仅拷贝 myComm.h(公开头),不拷贝内部头
|
2026-07-08 13:47:41 +08:00 |
ypc
|
1b662b1f31
|
fix: 修复测试发现的 5 个模块 bugs
- libfunc: func_cal_crc16/crc32 空数据返回初始值(0xFFFF/0xFFFFFFFF)而非0
- libfunc: func_str2time_sys 年份字段减去1900(适配7-bit位域)
- libfunc: func_proc_pid_by_name path[128]→[384] 修复snprintf截断警告
- libtask: task_msg_queue_recv 返回实际消息长度而非固定0
- libxml: myXml_new_child 调用 InsertEndChild 将新元素挂到父节点
- libcmd: cmd_sub_complete 无空格时以完整buf为前缀(修复ncomp=0)
所有修改均通过对应单元测试验证。
|
2026-07-08 13:40:56 +08:00 |
ypc
|
6c5bcafe23
|
feat(test): 全模块单元测试体系 — 9 模块 126 项
新测试文件(覆盖对应模块全部公开接口):
- test_list.c(9): 链表所有操作 add/del/move/replace/splice/safe
- test_func.cpp(34): 校验(6)/转换(10)/时间(5)/文件(6)/进程(4)/环境(3)
- test_md5.cpp(8): RFC 1321 全部 7 个已知向量 + 流式API
- test_cjson.cpp(13): 解析(8种)/生成(2)/错误/roundtrip
- test_xxhash.cpp(8): XXH32/64/3_64/3_128 + state API
- test_log.cpp(8): LOG_I/E + flush + on/off + burst + cleanup
- test_task.cpp(10): 定时器(4)/事件(4)/消息队列(2)
- test_xml.cpp(6): load/save/new/child/sibling/attr/float
- test_cmd.cpp(7): add/find/exec/get_commands/sub_complete/linenoise
|
2026-07-08 13:39:29 +08:00 |
ypc
|
066dc62916
|
feat(test): libcomm 单元测试 — 17 项全覆盖
- 7 大测试组: 创建与销毁(4) / 参数校验(7) / TCP回环 / UDP回环 /
状态回调(2) / 错误路径 / 断开重连
- TCP: 127.0.0.1 localhost 回环验证 send/recv 数据一致性
- UDP: sendto/recvfrom 回环验证
- 状态回调: CONNECTED/DISCONNECTED 通知验证
- 参数校验: NULL para/非法type/越界type/非法id/空数据/零长度
|
2026-07-08 13:38:14 +08:00 |
ypc
|
16e3efb19c
|
docs(libcomm): API 参考文档 + 进度更新 + 索引
- docs/public/libcomm/API-libcomm.md: 模块概述/数据结构/7个API详情/使用示例/依赖关系
- docs/README.md: 新增 libcomm 条目 + 阶段2依赖关系图
- COMPLETION.md: libcomm 标记完成 + 添加缺失测试清单
|
2026-07-08 13:37:38 +08:00 |
ypc
|
36cef7e23f
|
fix(build): 修复 makefile define 中 @for 语法 + 注册 libcomm
- release/makefile, release/src/makefile, release/src/public/makefile:
将 define 内的 @for 移除 @ 前缀,避免 /bin/sh 语法错误
- release/src/public/makefile: SUBDIRS 添加 ./libcomm
- release/copy_headers.sh: 添加 myComm.h 复制
|
2026-07-08 13:36:48 +08:00 |
ypc
|
9d4c2902c3
|
feat(libcomm): 通讯抽象层模块 — TCP/UDP/UART + epoll 异步事件循环
- 纯 C 接口(myComm.h, extern "C"),7 个 API:
comm_create / connect / disconnect / send / recv_register / state_register / destroy
- 按功能拆分 5 个源文件: comm_internal.h + core/tcp/udp/uart.cpp
- TCP 服务器: bind + listen + epoll accept 多客户端
- TCP 客户端: 非阻塞 connect + EPOLLOUT 检测完成
- UDP: bind + recvfrom/sendto
- UART: open + termios 配置(波特率/数据位/停止位/校验)
- comm_epoll_init() 幂等自初始化,comm_run() 无需预创建实例
- comm_run() / comm_stop() 事件循环控制
|
2026-07-08 13:36:01 +08:00 |
ypc
|
72e5e37c2d
|
fix(liblog): 修复 stru_log_msg 链表指针类型不匹配 (6 warnings)
- typedef struct 添加 tag: struct stru_log_msg
- next 指针类型从 struct log_msg* 改为 struct stru_log_msg*
- 消除 6 处 incompatible-pointer-types 警告
|
2026-07-08 13:34:11 +08:00 |
ypc
|
ac4a183a60
|
feat(test): 阶段1收尾 — 数据中心单元测试34项全通过
- test_datacenter.cpp: 34 条测试覆盖生命周期、5种信号注册/控制、
out延迟回调、yk同步控制、ao SBO流程、param多区定值、
信号查询、类型工具(19种)、事件队列、异步管理
- COMPLETION.md: 记录阶段0/1完成事项清单
- x86 测试: 34 pass, 0 fail
- ARM 交叉编译: 10/10 模块全通过
|
2026-07-07 17:57:32 +08:00 |
ypc
|
7dd7572f46
|
refactor: centralized header copy script replaces per-module cp
- 新增 release/copy_headers.sh:统一管理公共头文件复制
- 从所有模块 makefile 中移除独立的 @cp 行
- release/src/public/makefile:all 目标依赖 headers(自动调用脚本)
- release/inc/.gitignore:仅 myBase.h 纳入版本管理
- 新增模块时只需在 copy_headers.sh 末尾追加一行 copy_module
新增模块流程:
1. 创建 src/public/<module>/inc/<header.h>
2. 在 release/copy_headers.sh 中追加 copy_module "<module>" "<header.h>"
3. make 时自动复制到 release/inc/
|
2026-07-07 17:38:44 +08:00 |
ypc
|
9d12019961
|
chore: update build system and docs for new modules
- release/src/public/makefile: 添加 libxml/libcmd/libdatacenter 到 SUBDIRS
- SPEC.md: 补全 libdatacenter §11 完整功能规格(300+ 行)
- docs/README.md: 更新模块索引和依赖关系图
- 10/10 模块 x86 全量编译通过
|
2026-07-07 17:30:18 +08:00 |
ypc
|
f56ede7316
|
feat(libdatacenter): complete data center module with 15-file split
- 纯 C 接口(60+ API),对齐 RTU 原工程 v1+v2 全部功能
- 5 种信号类型:out/in/yk/ao/param + SBO 控制流程
- module_id 回路阻断 + 脏标记延迟回调 + 值校验(19 种类型)
- 异步执行模型:yk/ao/param_exec_async + 超时 + 取消
- 内置 tinyxml2 解析 param.xml/self_param.xml
- 命令调试面板(libcmd CMD_REGISTER_C)
- O(1) XXH3_128bits 哈希查找(复用 libmy_xxhash)
- x86 编译通过,产物 libdatacenter.a
|
2026-07-07 17:30:10 +08:00 |
ypc
|
dfb0a46146
|
feat(libcmd): add command processing framework with built-in linenoise
- 纯 C 接口:命令注册/查找/补全/帮助
- CMD_REGISTER / CMD_REGISTER_C 宏(__attribute__((constructor)) 自动注册)
- 内置 linenoise 行编辑(termios raw mode + 历史 + Tab 补全)
- x86 编译通过,产物 libcmd.a
|
2026-07-07 17:30:00 +08:00 |
ypc
|
d9546b7c2a
|
feat(libxml): add XML parsing library with C API wrapping tinyxml2
- 纯 C 接口(myXml.h)包装 tinyxml2 C++ 实现
- 14 个 API:文档加载/创建/释放、元素遍历、属性读写
- 不透明句柄 myXmlDoc_t / myXmlElem_t
- x86 编译通过,产物 libxml.a
|
2026-07-07 17:29:31 +08:00 |
ypc
|
44419ec729
|
docs: 创建完整 API 参考文档(9 个文档, 1005 行)
目录结构: docs/public/ 镜像 src/public/, 每个模块一个 API-xxx.md
文档内容: 模块概述+数据结构+接口详细说明+使用示例+依赖关系
覆盖模块:
- docs/README.md (总索引, 依赖关系图)
- myBase.h (公共宏/字节序/数据类型常量)
- liblist (11 API, 侵入式链表, 含完整代码示例)
- liblog (17 API, 异步日志, 消息池+批量+文件轮转)
- libfunc (65 函数, 7 大分类, 分组文档)
- libmd5 (4 API, RFC 1321, 流式计算示例)
- libtask (21 API, 定时器+事件+消息队列, 三个独立示例)
- libcJSON (开源库, 解析/生成 全流程示例)
- libmy_xxhash (开源库, XXH32/XXH64 快速哈希)
文档规范已存入 /memories/doc-spec.md
|
2026-07-07 15:16:17 +08:00 |
ypc
|
aa97f72500
|
chore: 删除旧的 myTask.cpp(已替换为 myTask.c)
|
2026-07-07 15:01:20 +08:00 |
ypc
|
2a692cada5
|
[重构] libtask 完整重写 + 全项目注释中文化
libtask 变更(对比原工程无功能遗漏):
- 定时器: timerfd + epoll 精确毫秒级(替代简单轮询)
- 事件: TASK_EVENT_FLAG_AND/OR/CLEAR, TASK_EVENT_WAIT_FOREVER
- 消息队列: 长度前缀存储, send/send_timeout/recv/try_recv
- 引用计数: task_event/timer/msgq 安全析构
- 新增 task_sleep_ms 通用延时函数
- 回调类型修正为 void(*)(void*)
注释中文化:
- myBase.h/list.h/myMd5.h/myLog.h → 全部中文
- myFunc.c 节标题 → 中文
- myTask.h/c → 全部中文注释
风格修复:
- 一行一语句, {} 独占行, } 后空行, return 前空行
- 运算符前后空格, 逗号分号后空格
|
2026-07-07 15:01:13 +08:00 |
ypc
|
f2a099e4b9
|
[阶段1-B2] libtask 自研实现 — 定时器/事件/消息队列三大子系统
基于 SPEC §8 完整实现 (21 API):
- Timer: create/start/stop/restart/destroy/is_active, 独立轮询线程10ms
- Event: create/destroy/send/recv(AND|OR)/clear/query, 位图+cond同步
- MsgQueue: create/destroy/send/send_timeout/recv/try_recv/count/space, 环形缓冲
- C接口 + extern "C", C++内部 pthread, test: Timer=3 Event=0x5 Msg=hi
|
2026-07-07 14:44:49 +08:00 |
ypc
|
31c0e70063
|
[阶段1-B1] libmd5 自研实现 + cJSON/xxhash 开源库导入
自研: libmd5(RFC 1321, 16x4轮, MD5(hello)向量验证OK)
开源(直接使用,不需要重写): libcJSON(cJSON解析) + libmy_xxhash(xxHash)
6/6 编译通过, 全功能测试OK
|
2026-07-07 14:38:04 +08:00 |
ypc
|
c00ec58e13
|
docs: SPEC v1.2 — 区分自研/开源库 + 补全 5 个自研模块详细 API 分析
自研(需实现): libmd5/libtask/libdatacenter/libcmd/libcomm
开源(直接用): cJSON/xxhash/tinyxml2/mosquitto/mongoose/libmodbus/lib60870
新增: 定时器/事件/消息队列/命令框架/通讯抽象层/数据中心 完整API规范
|
2026-07-07 14:35:56 +08:00 |
ypc
|
bd36855951
|
[规范] 新增运算符空格规范 + myBase.h 全面调整
规范变更(已写入 /memories/code-style.md):
- 运算符前后必须有空格 (a << 8, n >> 1, x | y, p + 1)
- 逗号后必须有空格 (func(a, b, c), (m)[0] = x, (m)[1] = y)
- 关键字后必须有空格 (while (0), if (, for ()
- 分号后有空格 (for (i = 0; i < n; i++))
myBase.h:
- 全部大小端宏添加运算符空格 ((uint8_t *)(p) 替代 (uint8_t*)(p))
- MY_LOG do{}while(0) 拆多行 + 加空格
- 类型存取宏加空格
- 注释英文化
|
2026-07-07 14:00:49 +08:00 |
ypc
|
38c8e4f6e4
|
[myFunc.c] 补全 56 个函数 @brief 注释 + 节标题英文化 + }后空行 + return前空行
- 每个公开函数添加 /** @brief */ doc 注释
- 7 个节标题从中文改为英文
- 1386 行,全量编译 0e0w
|
2026-07-07 13:53:13 +08:00 |
ypc
|
33252501c3
|
[注释规范] 头文件全部函数声明加详细注释 + myLog.c 全面注释 + 代码风格记忆更新
- myLog.h: 所有函数/macro 加 @brief/@param/@return 注释
- myFunc.h: 65 个函数全部加详细注释,结构体成员逐行注释
- myLog.c: 每个内部函数加功能注释、关键逻辑行间注释、}后空行、return前空行
- 代码风格规范已写入 /memories/code-style.md
|
2026-07-07 13:47:24 +08:00 |
ypc
|
b5e4a361b4
|
[风格] 统一代码风格规范
- 一行只能有一条语句
- if/for/while 即使单条也必须换行 + { },花括号左右各独占一行
- 结构体 typedef 加 stru_ 前缀 (stru_log_msg/stru_time_sys/...)
- 枚举 typedef 加 enum_ 前缀 (enum_ipc_resp)
- 结构体声明左花括号独占一行
- list.h: 函数体花括号独占行, 多语句分行
- myLog.c: 全局类型改名 + 规范花括号
- myFunc.h: 类型前缀 + extern \'C\' {}独占行
- myFunc.c: 全部 if/for/while 规范化, 类型引用更新
|
2026-07-07 13:32:26 +08:00 |
ypc
|
4ee054e583
|
[阶段0] 从零重写全部模块 — odai-governed 自主实现
道:读懂功能需求(SPEC.md) → 独立编码 → 不复制原工程代码
术:构建系统 → myBase.h → liblist → liblog → libfunc,逐模块验证
法:每个函数源自需求理解 + 自主设计,编译→测试→提交闭环
交付:
- myBase.h: 颜色/文件名/大小端/类型枚举(LOCAL/S_STR/DATA_TYPE_*)
- liblist: 11个API, C/C++双兼容, 纯头文件
- liblog: 消息池预分配 + pthread_once + 批量消费 + 文件轮转(纯C, 0 malloc运行时)
- libfunc: 65个函数7大分类, 全部自主研发实现(校验/字符串/时间/文件/进程/环境/IPC)
- 构建: 4层递归makefile, x86/arm切换, gcc/g++混合编译
|
2026-07-07 13:19:18 +08:00 |