3个版本 (破坏性更新)
0.3.0 | 2022年6月15日 |
---|---|
0.2.0 | 2022年6月13日 |
0.1.0 | 2022年6月12日 |
#29 in #列车
46KB
900 行
dcc-rs
NMRA数字命令控制的纯Rust实现
本crate实现了NMRA DCC协议,旨在用于嵌入式应用,例如用于计算机控制的定制基站。它是完全no_std
-兼容的,没有分配,并使用embedded_hal
特性来驱动输出引脚。
为了解决标准中断支持不足的问题,本crate提供了一个DccInterruptHandler
结构,它可以由中断处理程序中的static
拥有,并且DccInterruptHandler::tick
方法执行所有必要的处理,返回再次调用之前应等待的微秒数。这个时间对于本crate的正确运行至关重要,因为它用于计时输出引脚的转换。
将新数据包放入DccInterruptHandler
留给实现者作为练习。在提供的示例代码中,这是通过一个Mutex
来完成的,该Mutex
持有一个RefCell<Option<_>>
,它允许外部代码将新的序列化数据包推入,供中断处理程序在方便时检索。
状态
本crate目前仅实现了基站(发射器)端,并且仅实现了“基线”和“服务模式”数据包。“扩展格式”DCC数据包正在开发中。
DCC接收正在开发中,一旦实现了主要数据包类型。
示例实现
- examples/stm32f103-blue-pill 单通道速度控制器
贡献
欢迎贡献,形式包括代码改进、测试报告、更多示例实现、更多平台实现等。我对在Rust的AVR支持整理完毕后让这个crate在Arduino uno/nano上运行特别感兴趣。一个即插即用的DCC++
兼容固件也会很棒。
许可证
本crate可在Mozilla公共许可证第2.0版下使用。
依赖关系
~1MB
~27K SLoC