
CAN-Bridge 是一个基于 Golang 开发的硬件适配网桥服务,专门用于支持使用 CAN(Controller Area Network)协议的设备进行高效稳定的数据通信。
本项目旨在提供一个简单易用的 HTTP API 接口,允许用户通过网络请求实现 CAN 消息的发送、接收、接口设置管理及设备状态监控,同时支持动态配置多个 CAN 接口。
接口设置管理器 (InterfaceSetupManager):
ip link set can0 up type can bitrate 1000000增强的配置系统:
完整的接口管理 API:
GET /api/setup/config, PUT /api/setup/config)can0, can1)。支持裸金属安装、Docker 容器环境使用、从源码构建。
具体安装方式参考安装文档。
基本使用
./can-bridge -can-ports can0,can1
设置端口
./can-bridge -port 5260
禁用自动设置(通过 API 手动管理)
./can-bridge -auto-setup=false
自定义比特率
./can-bridge -can-ports can0 -bitrate 500000
采样点
./can-bridge -sample-point 0.875
重启超时
./can-bridge -restart-ms 100
重试次数
./can-bridge -setup-retry 3
启用服务发现
./can-bridge -enable-finder=true
服务发现间隔
./can-bridge -finder-interval 5
启用健康检查
./can-bridge -enable-healthcheck=true
通过 API 设置接口
curl -X POST localhost:5260/api/setup/interfaces/can0 \
-H "Content-Type: application/json" \
-d '{"bitrate": 500000, "withRetry": true}'
http://localhost:5260/api
用于获取系统、接口的状态、健康信息和性能指标。
GET /api/status: 获取完整的系统状态,包括正常运行时间、看门狗状态和所有接口的详细信息。GET /api/interfaces: 获取已配置和活动的接口列表。GET /api/interfaces/:name/status: 获取指定接口的详细状态。GET /api/health: 获取系统健康状况摘要。GET /api/metrics: 获取用于外部监控系统(如 Prometheus)的详细指标。POST /api/can: 发送一条 CAN 消息。请求体需要包含 CAN 消息的详细信息(如 ID, Data 等)。用于动态配置、启动、停止和管理 CAN 接口。
配置管理:
GET /api/setup/config: 获取当前的接口设置配置(如默认比特率、采样点等)。PUT /api/setup/config: 更新接口设置的全局配置。单个接口操作:
GET /api/setup/available: 获取操作系统上所有可用的 CAN 接口列表。POST /api/setup/interfaces/{name}: 根据配置设置并启动指定的 CAN 接口。DELETE /api/setup/interfaces/{name}: 关闭并拆除指定的 CAN 接口。POST /api/setup/interfaces/{name}/reset: 重置(先关闭再启动)指定的 CAN 接口。GET /api/setup/interfaces/{name}/state: 获取指定接口的当前状态(是否已设置、配置详情等)。批量接口操作:
POST /api/setup/interfaces/setup-all: 批量设置所有已配置的或请求中指定的接口。POST /api/setup/interfaces/teardown-all: 批量关闭并拆除所有已配置的接口。用于从 CAN 总线上实时捕获、查看和管理消息。
监听控制:
POST /api/messages/:interface/listen/start: 在指定接口上开始监听 CAN 消息。POST /api/messages/:interface/listen/stop: 在指定接口上停止监听 CAN 消息。GET /api/messages/:interface/listen/status: 获取指定接口的当前监听状态。GET /api/messages/listen/status: 获取所有接口的监听状态汇总。消息获取:
GET /api/messages/:interface: 获取指定接口已缓存的所有消息。支持通过 id 参数进行过滤。GET /api/messages/:interface/recent: 获取指定接口最近收到的 N 条消息(可通过 count 参数指定数量)。GET /api/messages: 以接口为单位,获取所有接口缓存的所有消息。消息管理与统计:
GET /api/messages/:interface/statistics: 获取指定接口的消息统计信息(如接收总数、错误数等)。DELETE /api/messages/:interface: 清除指定接口的消息缓存。GET /api/messages/statistics: 获取所有接口的全局消息统计信息。DELETE /api/messages: 清除所有接口的消息缓存。日志采用标准输出,格式友好,包含清晰的错误提示和运行状态信息。
建议使用 systemd 或 Docker 容器化进行部署,确保服务长期稳定运行。
欢迎提交 Issue 和 Pull Request 来帮助项目完善和优化。
本项目使用 Apache-2.0 license 许可证。