| Crates.io | msp_protocol |
| lib.rs | msp_protocol |
| version | 0.1.2 |
| created_at | 2025-06-24 21:08:55.051119+00 |
| updated_at | 2025-07-13 08:24:23.440699+00 |
| description | MultiWii Serial Protocol (MSP) encoder/decoder and transport layer |
| homepage | |
| repository | https://github.com/tassalor1/msp_protocol |
| max_upload_size | |
| id | 1725005 |
| size | 63,598 |
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>()) using packed_struct
Tiny footprint (smallvec payload 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:?}");
}
}
}
}