wake-rs
is a library written in Rust for encoding/decoding Wake protocol.
Wake
is a serial communication protocol highly optimized for microcontrollers. It based on SLIP protocol (https://datatracker.ietf.org/doc/html/rfc1055).
- unique start symbol
- 7-bit addressing (optional)
- CRC (8 or 16 bits)
- low overhead
The protocol doesn't support:
error correctioncompression
Frame structure:
There are many architecture-specific implementations:
- MCS-51
- AVR
- STM32
- x86
in many languages:
- C
- C++
- C#
- Python
- Rust
- Demo - basic usage
- Serial - how to use with serial port
- Relay shield - PC <-> device communication
Add to your Rust project:
cargo add systemd-wake
Create, encode and decode packet:
use wake_rs::{Decode, Encode};
fn main() {
let wp = wake_rs::Packet {
address: Some(0x12),
command: 3,
data: Some(vec![0x00, 0xeb]),
};
let encoded = wp.encode().unwrap();
let decoded = encoded.decode();
}
Build library:
cargo build --release
Build examples:
cargo build --examples
Protocol description, libraries, and tools: http://www.leoniv.diod.club/articles/wake/wake.html
- Use this library with a microcontroller (nostd)
- Add a stream decoder (one byte per time with internal buffer)
Code released under the MIT License.