wake-rs

Crates.iowake-rs
lib.rswake-rs
version0.2.5
sourcesrc
created_at2022-10-12 02:05:14.585624
updated_at2024-02-04 01:35:05.506877
descriptionWake protocol library written in Rust
homepagehttps://github.com/ew1abz/wake-rs
repositoryhttps://github.com/ew1abz/wake-rs
max_upload_size
id685823
size55,558
Vladimir (ew1abz)

documentation

https://docs.rs/wake-rs

README

wake-rs

crates.io docs.rs MIT licensed

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).

debug_print

Main features

  • unique start symbol
  • 7-bit addressing (optional)
  • CRC (8 or 16 bits)
  • low overhead

The protocol doesn't support:

  • error correction
  • compression

Frame structure:

Frame structure

Integrations

There are many architecture-specific implementations:

  • MCS-51
  • AVR
  • STM32
  • x86

in many languages:

  • C
  • C++
  • C#
  • Python
  • Rust

Examples

  1. Demo - basic usage
  2. Serial - how to use with serial port
  3. Relay shield - PC <-> device communication

Quick Start

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

Resources

Protocol description, libraries, and tools: http://www.leoniv.diod.club/articles/wake/wake.html

TODO

  • Use this library with a microcontroller (nostd)
  • Add a stream decoder (one byte per time with internal buffer)

License

Code released under the MIT License.

Commit count: 32

cargo fmt