CANLink HAL
CANLink HAL 是 CANLink-RS 项目的核心硬件抽象层,提供统一的 API 来访问不同的 CAN 硬件后端。
特性
-
🔌 统一接口 - 单一 API 支持多种硬件后端
-
🛡️ 类型安全 - 强类型的 CAN 消息和 ID
-
🚀 零成本抽象 - 编译时优化,运行时开销极小
-
📦 后端注册 - 动态注册和切换后端
-
🔧 灵活配置 - 支持多种配置方式
-
📊 能力查询 - 查询硬件能力和限制
安装
添加到您的 Cargo.toml:
[]
= "0.3.0"
核心概念
1. CanBackend Trait
所有 CAN 硬件后端都实现 CanBackend trait:
2. CanMessage
类型安全的 CAN 消息表示:
use ;
// 标准帧 (11-bit ID)
let msg = new_standard?;
// 扩展帧 (29-bit ID)
let msg = new_extended?;
// CAN-FD 消息
let data = vec!;
let msg = new_canfd?;
// 远程帧
let msg = new_remote?;
3. CanId
类型安全的 CAN 标识符:
use CanId;
// 标准 ID (11-bit)
let id = Standard;
assert!;
// 扩展 ID (29-bit)
let id = Extended;
assert!;
4. BackendRegistry
全局后端注册表,用于管理多个后端:
use ;
use MockBackendFactory;
use Arc;
// 获取全局注册表
let registry = global;
// 注册后端
let factory = new;
registry.register?;
// 创建后端实例
let config = new;
let backend = registry.create_backend?;
// 列出所有后端
let backends = registry.list_backends;
使用示例
基础使用
use ;
use MockBackend;
查询硬件能力
use CanBackend;
let capability = backend.get_capability?;
println!;
println!;
println!;
println!;
println!;
使用后端注册表
use ;
use MockBackendFactory;
use TSCanBackendFactory;
use Arc;
// 注册多个后端
let registry = global;
registry.register?;
registry.register?;
// 列出所有后端
for name in registry.list_backends
// 根据配置创建后端
let config = new;
let mut backend = registry.create_backend?;
backend.initialize?;
// 使用后端...
错误处理
use ;
消息过滤
use ;
// 使用
let messages = vec!;
let filtered = filter_messages;
assert_eq!;
API 文档
核心 Traits
-
CanBackend- 后端实现的主要接口 -
BackendFactory- 后端工厂接口
核心类型
-
CanMessage- CAN 消息 -
CanId- CAN 标识符 (Standard/Extended) -
MessageFlags- 消息标志 (RTR, FD, BRS, ESI) -
HardwareCapability- 硬件能力描述 -
BackendConfig- 后端配置 -
BackendVersion- 后端版本信息
错误类型
-
CanError- 统一的错误类型 -
CanResult<T>- 结果类型别名
工具类
BackendRegistry- 全局后端注册表
性能
CANLink HAL 设计注重性能:
-
能力查询: < 1 µs (实际: 0.641 µs)
-
消息转换: ~3 ns
-
抽象层开销: < 5% (实际: 可忽略不计)
详见 性能基准测试报告。
测试
# 运行单元测试
# 运行集成测试
# 运行基准测试
实现后端
要实现自己的后端,需要:
-
实现
CanBackendtrait -
实现
BackendFactorytrait -
注册到
BackendRegistry
示例:
use ;
;
相关包
-
canlink-mock - Mock 测试后端
-
canlink-tscan - LibTSCAN 真实硬件后端(当前已验证为同星 / TOSUN 相关硬件)
-
canlink-cli - 命令行工具
示例
查看 examples/ 目录获取更多示例:
-
basic_usage.rs- 基础使用 -
backend_switching.rs- 后端切换 -
error_handling.rs- 错误处理 -
capability_query.rs- 能力查询
贡献
欢迎贡献!请查看 贡献指南。
许可证
MIT OR Apache-2.0