Skip to main content

mcumgr_toolkit/
lib.rs

1#![deny(missing_docs)]
2#![deny(unreachable_pub)]
3#![forbid(unsafe_code)]
4#![doc = include_str!("../README.md")]
5#![doc(issue_tracker_base_url = "https://github.com/Finomnis/mcumgr-toolkit/issues")]
6
7/// A high-level client for Zephyr's MCUmgr SMP functionality
8pub mod client;
9pub use client::MCUmgrClient;
10
11mod errno;
12pub use errno::Errno;
13
14/// [MCUmgr command group](https://docs.zephyrproject.org/latest/services/device_mgmt/smp_protocol.html#specifications-of-management-groups-supported-by-zephyr) definitions
15pub mod commands;
16
17/// [SMP protocol layer](https://docs.zephyrproject.org/latest/services/device_mgmt/smp_protocol.html) implementation
18pub mod connection;
19
20/// [SMP transport layer](https://docs.zephyrproject.org/latest/services/device_mgmt/smp_transport.html) implementation
21pub mod transport;
22
23/// Zephyr SMP error definitions
24pub mod smp_errors;
25
26/// Bootloader related definitions
27pub mod bootloader;
28
29/// MCUboot specific algorithms
30pub mod mcuboot;
31
32/// See [`enum mcumgr_group_t`](https://docs.zephyrproject.org/latest/doxygen/html/mgmt__defines_8h.html).
33#[derive(strum::FromRepr, strum::Display, Debug, Copy, Clone, PartialEq, Eq)]
34#[repr(u16)]
35#[allow(non_camel_case_types)]
36#[allow(missing_docs)]
37pub enum MCUmgrGroup {
38    MGMT_GROUP_ID_OS = 0,
39    MGMT_GROUP_ID_IMAGE,
40    MGMT_GROUP_ID_STAT,
41    MGMT_GROUP_ID_SETTINGS,
42    MGMT_GROUP_ID_LOG,
43    MGMT_GROUP_ID_CRASH,
44    MGMT_GROUP_ID_SPLIT,
45    MGMT_GROUP_ID_RUN,
46    MGMT_GROUP_ID_FS,
47    MGMT_GROUP_ID_SHELL,
48    MGMT_GROUP_ID_ENUM,
49    ZEPHYR_MGMT_GRP_BASIC = 63,
50    MGMT_GROUP_ID_PERUSER = 64,
51}
52
53impl MCUmgrGroup {
54    /// Converts a raw group id to a string
55    pub fn group_id_to_string(group_id: u16) -> String {
56        const PERUSER: MCUmgrGroup = MCUmgrGroup::MGMT_GROUP_ID_PERUSER;
57        if group_id < PERUSER as u16 {
58            if let Some(group_enum) = Self::from_repr(group_id) {
59                format!("{group_enum}")
60            } else {
61                format!("MGMT_GROUP_ID_UNKNOWN({group_id})")
62            }
63        } else {
64            format!("{PERUSER}({group_id})")
65        }
66    }
67}