msp_protocol

Crates.iomsp_protocol
lib.rsmsp_protocol
version0.1.2
created_at2025-06-24 21:08:55.051119+00
updated_at2025-07-13 08:24:23.440699+00
descriptionMultiWii Serial Protocol (MSP) encoder/decoder and transport layer
homepage
repositoryhttps://github.com/tassalor1/msp_protocol
max_upload_size
id1725005
size63,598
Connor Walker (tassalor1)

documentation

README

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:?}");
            }
        }
    }
}
Commit count: 0

cargo fmt