Skip to content

tassalor1/msp_protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

msp_protocol

Rust implementation of the MultiWii Serial Protocol (MSP v1 + v2).

crates.io docs.rs


Features

  • Streaming parser (MspParser) — 1 byte → state machine → optional packet
  • Serializer — build & transmit MSP v1/v2 frames
  • Zero-copy payload access (decode_as<T>()) using packed_struct
  • Tiny footprint (smallvec payload buffer)

Quick start

use msp_protocol::{
    helpers::{send_request, wait_for_port},
    msp::{codes::MspCommandCode, structs::MspRawImu, MspParser},
};

let mut port   = wait_for_port("/dev/ttyUSB0", 115_200, 200);
let mut parser = MspParser::from_fc();
let mut buf    = [0u8; 256];

send_request(&mut *port, MspCommandCode::MSP_RAW_IMU as u16, &[])?;

loop {
    let n = port.read(&mut buf)?;
    for &b in &buf[..n] {
        if let Ok(Some(pkt)) = parser.parse(b) {
            if pkt.cmd == MspCommandCode::MSP_RAW_IMU as u16 {
                let imu = pkt.decode_as::<MspRawImu>()?;
                println!("{imu:?}");
            }
        }
    }
}

About

Rust implementation of MSP (Multiwii Serial Protocol)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages