yemai 81bee50cd9 Initial commit: Complete USB2CAN cross-platform framework
Features:
- Cross-platform support (Windows/Linux/macOS)
- CAN and CANFD protocol support
- USB communication (WinUSB/libusb)
- Device management and configuration
- Message transmission and reception
- Filter configuration
- CMake build system
- Comprehensive examples and tests
2025-09-11 17:56:26 +08:00

USB2CAN功能框架

这是一个跨平台的USB2CAN功能框架支持Linux、CAN和USB并且USB支持WinUSB。

框架结构

  • 平台抽象层: 处理不同操作系统Windows、Linux的差异
  • USB通信层: 处理USB通信支持WinUSB
  • CAN协议层: 处理CAN和CANFD协议
  • 设备管理层: 管理USB2CAN设备
  • 应用接口层: 提供简化的API给应用程序使用

目录结构

USB2CAN-Framework/
├── include/               # 头文件目录
│   ├── platform/         # 平台抽象层
│   ├── usb/              # USB通信层
│   ├── can/              # CAN协议层
│   ├── device/           # 设备管理层
│   └── api/              # 应用接口层
├── src/                  # 源文件目录
│   ├── platform/         # 平台抽象层
│   ├── usb/              # USB通信层
│   ├── can/              # CAN协议层
│   ├── device/           # 设备管理层
│   └── api/              # 应用接口层
├── examples/             # 示例程序
├── tests/                # 测试程序
└── CMakeLists.txt        # CMake构建文件

使用方法

  1. 包含头文件:#include "usb2can/api/Usb2Can.h"
  2. 创建Usb2Can对象
  3. 初始化设备
  4. 发送/接收CAN报文
  5. 关闭设备

示例代码

#include "usb2can/api/Usb2Can.h"
#include <iostream>

int main() {
    Usb2Can can;
    
    // 扫描设备
    int deviceCount = can.scanDevices();
    std::cout << "Found " << deviceCount << " devices" << std::endl;
    
    if (deviceCount > 0) {
        // 打开第一个设备
        if (can.openDevice(0)) {
            // 初始化CAN
            CanConfig config;
            config.baudrate = 500000; // 500kbps
            if (can.initCan(0, config)) {
                // 发送CAN报文
                CanMsg msg;
                msg.id = 0x123;
                msg.dataLength = 8;
                memcpy(msg.data, "TestData", 8);
                can.transmit(0, &msg, 1);
                
                // 接收CAN报文
                CanMsg recvMsg;
                if (can.receive(0, &recvMsg, 1, 1000)) {
                    std::cout << "Received CAN message with ID: 0x" << std::hex << recvMsg.id << std::endl;
                }
            }
            
            // 关闭设备
            can.closeDevice(0);
        }
    }
    
    return 0;
}
Description
实现hcanview开源项目
Readme 71 KiB
Languages
C++ 92.5%
C 4.2%
CMake 3.3%