139 lines
4.0 KiB
Markdown
139 lines
4.0 KiB
Markdown
# libcom_decode 模块合并计划
|
||
|
||
> **目标**: 将 libcom_channel(488行) + libcom_scan(192行) 合并为 libcom_decode,按功能拆分文件,整合为一个 app 线程
|
||
|
||
**涉及文件**: ~15个
|
||
|
||
---
|
||
|
||
## 新模块结构
|
||
|
||
```
|
||
src/system/libcom_decode/
|
||
├── inc/
|
||
│ └── .gitkeep
|
||
└── src/
|
||
├── decode_channel_mgr.cpp # 通道管理:参数配置、创建、启动、状态回调
|
||
├── decode_frame_codec.cpp # ICP66 帧解码:协议转换、环形缓冲
|
||
├── decode_data_router.cpp # 数据路由:recv 分发、send 转发
|
||
└── decode_main.cpp # app 线程入口:事件循环
|
||
```
|
||
|
||
---
|
||
|
||
## 文件功能划分
|
||
|
||
### decode_channel_mgr.cpp (~150行)
|
||
- g_tcp_para[3] / g_uart_para[1] / g_channel_para[4] 参数配置
|
||
- com_channel_create() → comm_create + register callbacks
|
||
- com_channel_start() → pthread_create per channel
|
||
- com_start() → comm_connect 入口
|
||
- com_channel_state_cb() → 状态回调,通知 self_ptl
|
||
- com_channel_interface_get() → 供外部查询接口标识符
|
||
|
||
### decode_frame_codec.cpp (~120行)
|
||
- g_rx 环形缓冲区 + put_rx_data / get_rx_data
|
||
- crc_check_sum()
|
||
- icp66_search_frame() → 帧头+CRC+帧尾检测
|
||
- icp66_to_icp67() → 协议头转换
|
||
- icp66_search_first_head()
|
||
- icp66_frame_decode() → 帧解码主循环
|
||
|
||
### decode_data_router.cpp (~130行)
|
||
- com_recv_data() → 协议识别 + 路由到 iec/self_ptl
|
||
- com_scan_send_data_to_app() → 消息入队 + 事件通知
|
||
- com_channel_recv_cb() → 接收回调:透传/协议解析/直接投递
|
||
- com_send_data() → 下行发送
|
||
|
||
### decode_main.cpp (~80行)
|
||
- app_com_decode_init1() → com_channel_create + com_channel_start
|
||
- app_com_decode_init2() → return 0
|
||
- app_com_decode() → 事件循环:
|
||
```
|
||
wait EV_TIMER1|TIMER2|TIMER3|EV_COM_RX_IEC|EV_COM_RX_SELF_PTL
|
||
→ TIMER1/2: 空操作
|
||
→ TIMER3: run_cnt++
|
||
→ EV_COM_RX_IEC/EV_COM_RX_SELF_PTL: com_send_data()
|
||
```
|
||
|
||
---
|
||
|
||
## 外部接口变更
|
||
|
||
### mySystem.h 枚举
|
||
```c
|
||
// 旧
|
||
ENUM_APP_COMM = 2, // 删除
|
||
ENUM_APP_COM_SCAN = 3, // 删除
|
||
ENUM_APP_IEC = 4, // → 3
|
||
ENUM_APP_SELF_PTL = 5, // → 4
|
||
ENUM_APP_WEB_SERVER = 6, // → 5
|
||
ENUM_APP_IEC61850M = 7, // → 6
|
||
ENUM_APP_IEC61850S = 8, // → 7
|
||
ENUM_APP_MAX = 9 // → 8
|
||
|
||
// 新
|
||
ENUM_APP_COM_DECODE = 2, // 新增
|
||
ENUM_APP_IEC = 3,
|
||
...
|
||
ENUM_APP_MAX = 8
|
||
```
|
||
|
||
### mySystem.h extern 声明
|
||
- 删除: `app_com_channel_init1/2`, `app_com_channel`
|
||
- 删除: `app_com_scan_init1/2`, `app_com_scan`
|
||
- 删除: `com_recv_data`(不再对外暴露)
|
||
- 新增: `app_com_decode_init1`, `app_com_decode_init2`, `app_com_decode`
|
||
- 保留: `com_channel_interface_get`
|
||
|
||
### 所有引用 ENUM_APP_* 的文件需要更新
|
||
影响:
|
||
- `self_ptl.cpp`: ENUM_APP_COM_SCAN → ENUM_APP_COM_DECODE
|
||
- `iec.cpp`: ENUM_APP_COM_SCAN → ENUM_APP_COM_DECODE
|
||
- `app_sys.cpp`: g_vec_app 替换两个条目为一个
|
||
|
||
---
|
||
|
||
## 编译系统变更
|
||
|
||
### Makefile
|
||
- 删除: `release/src/system/libcom_channel/makefile`
|
||
- 删除: `release/src/system/libcom_scan/makefile`
|
||
- 新增: `release/src/system/libcom_decode/makefile`
|
||
- 更新: `release/src/system/makefile`(子目录列表)
|
||
- 更新: `release/src/system/RTU/makefile`(链接库:-lcom_channel -lcom_scan → -lcom_decode)
|
||
|
||
---
|
||
|
||
## Task 分解
|
||
|
||
### T1: 创建新模块目录和文件
|
||
- 创建 `src/system/libcom_decode/` 目录结构
|
||
- 创建 4 个源文件(从两个旧文件拆出)
|
||
- 创建 makefile
|
||
|
||
### T2: 更新 mySystem.h
|
||
- 修改 enum_app 枚举值
|
||
- 替换 extern 声明
|
||
|
||
### T3: 更新 app_sys.cpp
|
||
- 替换 g_vec_app 中两个条目为一个
|
||
|
||
### T4: 更新所有引用 ENUM_APP_COM_SCAN 的文件
|
||
- self_ptl.cpp, iec.cpp 中的 ENUM_APP_COM_SCAN → ENUM_APP_COM_DECODE
|
||
|
||
### T5: 更新编译系统
|
||
- 修改父级 makefile 和 RTU 链接 makefile
|
||
|
||
### T6: 更新 .gitignore(如有需要)
|
||
|
||
### T7: 编译验证 + 更新文档
|
||
|
||
---
|
||
|
||
## 验证
|
||
|
||
| 步骤 | 命令 | 预期 |
|
||
|------|------|------|
|
||
| 全量编译 | `./release/build.sh` | `Build complete`,零错误零警告 |
|