rmodem
XMODEM protocol implementation in pure #[no_std] Rust.
This implementation has the goal of supporting as many variants of the XMODEM protocol still in common usage.
If code size becomes an issue, protocol variants may be disabled using feature-gates.
For example, all implemented variants are available by default.
To disable default features, and enable XMODEM-1K support:
[]
# ...
= false
= ["1k"]
no-std
This crate is #[no_std] by default, making it usable in environments without the std and alloc libraries.
Exception safety
This crate aims to be free from explicit and implicit panics, favoring fallible functions to bubble-up errors.
Lints and manual code review should help in these efforts.
If you notice code that will panic at runtime, it's a bug.
Please file an issue or submit code changes :)
Compile-time errors, such as failing assertions in proc-macros, do not count since they are caught during compilation.
Usage
As a library
use ;
// This would be a packet of data from a file in practice.
let block = ;
let sequence = new;
let packet = new
.with_sequence
.with_data
.into_bytes;
// retry sending the packet, recommended retries is 16
match retry_packet?
For a full example of auto-detection and fall-back, see cli binary module.
As a binary
Compile the project with the cli feature:
# for only the original XMODEM
# for all available options
Currently, the CLI app supports sending files over a serial device:
WIP
The current plan is to support:
- XMODEM
- XMODEM-1k
- XMODEM-CRC
- WXMODEM
- YMODEM
- ZMODEM
If there are other variants still in common usage, please open an issue or submit code changes :)
LICENSE
This code is licensed under AGPL v3.0 or later.