Skip to content
/ wake-rs Public

`wake-rs` is a library written in Rust for encoding/decoding Wake protocol packets

Notifications You must be signed in to change notification settings

ew1abz/wake-rs

Repository files navigation

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.

About

`wake-rs` is a library written in Rust for encoding/decoding Wake protocol packets

Resources

Stars

Watchers

Forks

Packages

No packages published