#rtos #zephyr #message-format #codec #request-response #smp #mcumgr

mcumgr-smp

An implementation of the smp protocol for microcontrollers in pure rust

3 releases (breaking)

0.8.0 Jan 8, 2025
0.7.0 Sep 5, 2024
0.6.0 Dec 7, 2023

#268 in Embedded development

Download history 7/week @ 2024-09-26 2/week @ 2024-10-03 1/week @ 2024-11-21 2/week @ 2024-11-28 8/week @ 2024-12-05 6/week @ 2024-12-12 77/week @ 2025-01-02 118/week @ 2025-01-09

195 downloads per month

MIT/Apache

40KB
894 lines

mcumgr-smp

An implementation of the SMP protocol.

This library defines the SMP message format and methods to encode and decode bytes.

Additionally, common request and response objects with a CBOR payload for groups Application Management, OS Management, and Shell Management are provided. Feel free to contribute additional message definitions.

Custom messages are fully supported by creating SmpFrames manually. You can even use a payload encoding other than CBOR.

A transport implementation for UDP, Serial and Bluetooth is provided.
By default, all available transport features are enabled. If you don't need them all, disable default features and enable the needed one.

Example

Echo

// build an echo SMP message
let smp_frame: mcumgr_smp::SmpFrame = mcumgr_smp::os_management::echo(42, "Hello World");
// get frame as bytes
let data: Vec<u8> = smp_frame.encode_with_cbor();
// send frame and get response
// ...
let response_data = [3, 0, 0, 16, 0, 0, 66, 0, 191, 97, 114, 107, 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 255];
let response: SmpFrame<EchoResult> = mcumgr_smp::SmpFrame::decode_with_cbor(&response_data).expect("decoding error");

println!("response payload: {:?}", response.data);

You can also create a frame manually:

let data = todo!(); // cbor payload of command, in this case a firmware chunk
let smp_frame = SmpFrame::new(
    mcumgr_smp::OpCode::WriteRequest,
    69,
    mcumgr_smp::Group::ApplicationManagement,
    mcumgr_smp::ApplicationManagementCommand::Upload as u8,
    data,
);

Copyright (c) 2024 Gessler GmbH.

Dependencies

~0.2–29MB
~409K SLoC