3 个版本
0.1.1 | 2024年6月26日 |
---|---|
0.1.0 | 2024年6月23日 |
0.1.0-预发布版 |
|
在 嵌入式开发 中排名 205
每月下载量 185
73KB
1.5K SLoC
rmodem
纯 Rust 实现的 XMODEM 协议。
此实现的目标是支持仍在广泛使用的 XMODEM 协议的尽可能多的变体。
如果代码大小成为问题,可以通过功能门禁来禁用协议变体。
例如,默认情况下,所有实现的变体都是可用的。
要禁用默认功能,并启用 XMODEM-1K
支持
[dependencies.rmodem]
# ...
default_features = false
features = ["1k"]
无-std
默认情况下,此包是 #[no_std]
,使其能够在没有 std
和 alloc
库的环境中使用。
异常安全性
此包旨在避免显式和隐式恐慌,更喜欢有错误的函数以冒泡错误。
警告和手动代码审查将有助于这些努力。
如果您注意到会在运行时 panic
的代码,那么它是一个错误。
请提交问题或提交代码更改 :)
编译时错误,如 proc-macros 中的失败断言,不计入其中,因为它们在编译期间被捕获。
用法
作为库
use rmodem::{Control, Error, Result, Sequence, XmodemData, XmodemPacket};
// This would be a packet of data from a file in practice.
let block = [rmodem::CPMEOF; XmodemData::LEN];
let sequence = Sequence::new();
let packet = XmodemPacket::new()
.with_sequence(sequence)
.with_data(XmodemData::from_block(&block))
.into_bytes();
// retry sending the packet, recommended retries is 16
match retry_packet(packet.as_ref(), 16)? {
Control::Nak => (), // packet NAKed after retries exhausted
Control::Ack => (), // packet ACKed, continue sending XMODEM packets
ctrl => return Err(Error::InvalidControl(ctrl.into())), // bad response
}
有关自动检测和回退的完整示例,请参阅 cli 二进制模块。
作为二进制文件
使用 cli
功能编译项目
cargo build --features cli
# for only the original XMODEM
cargo build --features cli --no-default-features
# for all available options
cargo run --features cli -- --help
目前,CLI 应用程序支持通过串行设备发送文件
cargo run --features cli -- --file <file-path> --device <serial-tty> [--baud <baud-rate>]
进行中
当前计划是支持
- XMODEM
- XMODEM-1k
- XMODEM-CRC
- WXMODEM
- YMODEM
- ZMODEM
如果还有其他仍在广泛使用的变体,请提交问题或提交代码更改 :)
许可证
此代码根据 AGPL v3.0 或更高版本 许可。
依赖关系
~0–0.9MB
~14K SLoC