# CAN API 集成说明 ## ✅ 已完成的工作 ### 1. 库文件准备 - ✅ 复制CAN API头文件到 `libs/can_api/include/lib_emuc_2.h` - ✅ 复制CAN API库文件到 `libs/can_api/lib/lib_emuc2_64.a` ### 2. 核心类实现 - ✅ **CanManager** (`src/can_manager/can_manager.h/cpp`) - 参考 `SerialManager` 的设计模式 - 支持设备发现、打开/关闭、配置管理 - 支持CAN数据发送和接收(使用独立线程) - 集成 `SoftBusCore` 进行数据存储和消息路由 ### 3. UI组件实现 - ✅ **CanDataWidget** (`src/view_can/can_data_widget.h/cpp/ui`) - 参考 `SerialDataWidget` 的设计 - 支持CAN数据收发显示 - 支持HEX/ASCII显示模式切换 - 支持CAN ID输入、扩展ID选择、CAN端口选择 ### 4. 视图实现 - ✅ **ViewCan** (`src/view_can/viewcan.h/cpp/ui`) - 参考 `ViewSerial` 的设计 - 集成设备树、CAN数据组件、原始数据表格、总线数据表格 - 支持设备自动发现和注册 ### 5. 构建配置 - ✅ 更新 `CMakeLists.txt` - 添加CAN相关源文件 - 添加CAN API库链接(`lib_emuc2_64.a`) - 添加pthread库链接(CAN接收线程需要) - 添加CAN API头文件路径 ## 📁 文件结构 ``` soft_bus/ ├── libs/ │ └── can_api/ │ ├── include/ │ │ └── lib_emuc_2.h # CAN API头文件 │ └── lib/ │ └── lib_emuc2_64.a # CAN API静态库 │ ├── src/ │ ├── can_manager/ │ │ ├── can_manager.h # CAN管理器头文件 │ │ └── can_manager.cpp # CAN管理器实现 │ │ │ └── view_can/ │ ├── viewcan.h # CAN视图头文件 │ ├── viewcan.cpp # CAN视图实现 │ ├── viewcan.ui # CAN视图UI │ ├── can_data_widget.h # CAN数据组件头文件 │ ├── can_data_widget.cpp # CAN数据组件实现 │ └── can_data_widget.ui # CAN数据组件UI │ └── CMakeLists.txt # 已更新,包含CAN相关配置 ``` ## 🔧 使用方法 ### 1. 编译项目 ```bash cd /home/dt/myCode/bus/soft_bus/soft_bus mkdir -p build && cd build cmake .. make ``` ### 2. 在主窗口中添加CAN视图 需要在 `mainwindow.cpp` 中添加CAN视图的创建和切换逻辑,参考串口视图的实现。 ### 3. 基本使用流程 1. **设备发现**:`CanManager` 会自动发现可用的EMUC设备 2. **打开设备**:在设备树中选择CAN设备,自动打开 3. **配置CAN参数**:可以通过 `CanManager::setCanConfig()` 设置波特率、模式等 4. **发送数据**:在CAN数据组件中输入CAN ID和数据,点击发送 5. **接收数据**:接收到的数据会自动显示在接收区 ## 🎯 主要功能 ### CanManager 功能 - ✅ 设备自动发现(定时扫描) - ✅ 设备打开/关闭管理 - ✅ CAN配置管理(波特率、模式、过滤器等) - ✅ CAN数据发送 - ✅ CAN数据接收(独立线程,非阻塞) - ✅ 数据解析和存储(集成SoftBusCore) ### CanDataWidget 功能 - ✅ CAN数据收发显示 - ✅ HEX/ASCII显示模式 - ✅ CAN ID输入(支持扩展ID) - ✅ CAN端口选择(CAN1/CAN2) - ✅ 设备检测功能 - ✅ 响应超时检测 ## 📝 注意事项 1. **线程安全**:`CanManager` 使用互斥锁保护共享数据 2. **资源管理**:设备关闭时会自动停止接收线程 3. **错误处理**:所有API调用都有错误检查 4. **数据格式**:CAN数据最多8字节 5. **ID格式**:CAN ID支持标准ID(11位)和扩展ID(29位) ## 🔄 与串口模块的对比 | 特性 | SerialManager | CanManager | |------|--------------|------------| | 设备发现 | 串口扫描 | EMUC设备扫描 | | 数据格式 | 任意长度 | 最多8字节 | | 标识符 | 端口名 | CAN ID + 端口名 | | 接收方式 | Qt信号槽 | 独立线程 | | 配置项 | 波特率、校验位等 | 波特率、模式、过滤器等 | ## 🚀 后续改进建议 1. **CAN配置界面**:创建类似 `SerialSettingsWidget` 的CAN配置界面 2. **过滤器配置**:添加图形化过滤器配置界面 3. **数据统计**:添加发送/接收数据统计功能 4. **错误监控**:添加CAN总线错误监控和显示 5. **回环测试**:添加CAN回环测试功能 ## 📚 参考文档 - CAN API使用指南:`/home/dt/EMUC2_CAN_API_V2.0.0_Linux/EMUC2_CAN_API_V2.0.0_Linux/CAN_API_使用指南.md` - 示例代码:`/home/dt/EMUC2_CAN_API_V2.0.0_Linux/EMUC2_CAN_API_V2.0.0_Linux/Sample_EMUC2/main.c`