Rust implementation of the MultiWii Serial Protocol (MSP v1 + v2).
- Streaming parser (
MspParser) — 1 byte → state machine → optional packet - Serializer — build & transmit MSP v1/v2 frames
- Zero-copy payload access (
decode_as<T>()) usingpacked_struct - Tiny footprint (
smallvecpayload buffer)
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:?}");
}
}
}
}