cu_msp_lib/
commands.rs

1use packed_struct::derive::PrimitiveEnum;
2use packed_struct::PrimitiveEnum;
3
4#[derive(PrimitiveEnum, Debug, Copy, Clone, PartialEq)]
5#[allow(non_camel_case_types)]
6/// MSP command values, used for command encapsulation
7pub enum MspCommandCode {
8    MSP_API_VERSION = 1,
9    MSP_FC_VARIANT = 2,
10    MSP_FC_VERSION = 3,
11    MSP_BOARD_INFO = 4,
12    MSP_BUILD_INFO = 5,
13
14    // MSP commands for Cleanflight original features
15    MSP_BATTERY_CONFIG = 32,
16    MSP_SET_BATTERY_CONFIG = 33,
17    MSP_MODE_RANGES = 34,
18    MSP_SET_MODE_RANGE = 35,
19    MSP_FEATURE = 36,
20    MSP_SET_FEATURE = 37,
21    MSP_BOARD_ALIGNMENT = 38,
22    MSP_SET_BOARD_ALIGNMENT = 39,
23    MSP_AMPERAGE_METER_CONFIG = 40,
24    MSP_SET_AMPERAGE_METER_CONFIG = 41,
25    MSP_MIXER = 42,
26    MSP_SET_MIXER = 43,
27    MSP_RX_CONFIG = 44,
28    MSP_SET_RX_CONFIG = 45,
29    MSP_LED_COLORS = 46,
30    MSP_SET_LED_COLORS = 47,
31    MSP_LED_STRIP_CONFIG = 48,
32    MSP_SET_LED_STRIP_CONFIG = 49,
33    MSP_RSSI_CONFIG = 50,
34    MSP_SET_RSSI_CONFIG = 51,
35    MSP_ADJUSTMENT_RANGES = 52,
36    MSP_SET_ADJUSTMENT_RANGE = 53,
37    MSP_CF_SERIAL_CONFIG = 54,
38    MSP_SET_CF_SERIAL_CONFIG = 55,
39    MSP_VOLTAGE_METER_CONFIG = 56,
40    MSP_SET_VOLTAGE_METER_CONFIG = 57,
41    MSP_SONAR = 58,
42    MSP_PID_CONTROLLER = 59,
43    MSP_SET_PID_CONTROLLER = 60,
44    MSP_ARMING_CONFIG = 61,
45    MSP_SET_ARMING_CONFIG = 62,
46    MSP_DATAFLASH_SUMMARY = 70,
47    MSP_DATAFLASH_READ = 71,
48    MSP_DATAFLASH_ERASE = 72,
49    MSP_LOOP_TIME = 73,
50    MSP_SET_LOOP_TIME = 74,
51    MSP_FAILSAFE_CONFIG = 75,
52    MSP_SET_FAILSAFE_CONFIG = 76,
53    MSP_RXFAIL_CONFIG = 77,
54    MSP_SET_RXFAIL_CONFIG = 78,
55    MSP_SDCARD_SUMMARY = 79,
56    MSP_BLACKBOX_CONFIG = 80,
57    MSP_SET_BLACKBOX_CONFIG = 81,
58    MSP_TRANSPONDER_CONFIG = 82,
59    MSP_SET_TRANSPONDER_CONFIG = 83,
60
61    MSP_OSD_CONFIG = 84,     //out message         Get osd settings - baseflight
62    MSP_SET_OSD_CONFIG = 85, //in message          Set osd settings - baseflight
63
64    MSP_OSD_CHAR_READ = 86, //out message         Get osd settings - betaflight
65    MSP_OSD_CHAR_WRITE = 87, //in message          Set osd settings - betaflight
66
67    MSP_LED_STRIP_MODECOLOR = 127,
68    MSP_SET_LED_STRIP_MODECOLOR = 221,
69
70    MSP_VOLTAGE_METERS = 128,
71    MSP_AMPERAGE_METERS = 129,
72    MSP_BATTERY_STATE = 130,
73
74    MSP_MOTOR_CONFIG = 131,
75
76    // OSD commands
77    MSP_OSD_VIDEO_CONFIG = 180,
78    MSP_SET_OSD_VIDEO_CONFIG = 181,
79    MSP_OSD_VIDEO_STATUS = 182,
80    MSP_OSD_ELEMENT_SUMMARY = 183,
81    MSP_OSD_LAYOUT_CONFIG = 184,
82    MSP_SET_OSD_LAYOUT_CONFIG = 185,
83
84    // Multiwii MSP commands
85    MSP_IDENT = 100,
86    MSP_STATUS = 101,
87    MSP_RAW_IMU = 102,
88    MSP_SERVO = 103,
89    MSP_MOTOR = 104,
90    MSP_RC = 105,
91    MSP_RAW_GPS = 106,
92    MSP_COMP_GPS = 107,
93    MSP_ATTITUDE = 108,
94    MSP_ALTITUDE = 109,
95    MSP_ANALOG = 110,
96    MSP_RC_TUNING = 111,
97    MSP_PID = 112,
98    MSP_BOX = 113,
99    MSP_MISC = 114,
100    MSP_MOTOR_PINS = 115,
101    MSP_BOXNAMES = 116,
102    MSP_PIDNAMES = 117,
103    MSP_WP = 118,
104    MSP_BOXIDS = 119,
105    MSP_SERVO_CONFIGURATIONS = 120,
106    MSP_MOTOR_3D_CONFIG = 124,
107    MSP_RC_DEADBAND = 125,
108    MSP_SENSOR_ALIGNMENT = 126,
109
110    MSP_SET_RAW_RC = 200,
111    MSP_SET_RAW_GPS = 201,
112    MSP_SET_PID = 202,
113    MSP_SET_BOX = 203,
114    MSP_SET_RC_TUNING = 204,
115    MSP_ACC_CALIBRATION = 205,
116    MSP_MAG_CALIBRATION = 206,
117    MSP_SET_MISC = 207,
118    MSP_RESET_CONF = 208,
119    MSP_SET_WP = 209,
120    MSP_SELECT_SETTING = 210,
121    MSP_SET_HEAD = 211,
122    MSP_SET_SERVO_CONFIGURATION = 212,
123    MSP_SET_MOTOR = 214,
124    MSP_SET_3D = 217,
125    MSP_SET_RC_DEADBAND = 218,
126    MSP_SET_RESET_CURR_PID = 219,
127    MSP_SET_SENSOR_ALIGNMENT = 220,
128
129    // MSP_BIND =               240,
130    MSP_SERVO_MIX_RULES = 241,
131    MSP_SET_SERVO_MIX_RULE = 242,
132
133    MSP_EEPROM_WRITE = 250,
134
135    MSP_DEBUGMSG = 253,
136    MSP_DEBUG = 254,
137
138    MSP_BF_CONFIG = 66,
139
140    // Additional baseflight commands that are not compatible with MultiWii
141    MSP_UID = 160,          // Unique device ID
142    MSP_STATUS_EX = 150,    // cycletime, errors_count, CPU load, sensor present etc
143    MSP_ACC_TRIM = 240,     // get acc angle trim values
144    MSP_SET_ACC_TRIM = 239, // set acc angle trim values
145    MSP_GPS_SV_INFO = 164,  // get Signal Strength
146
147    // Additional private MSP for baseflight configurator
148    MSP_RX_MAP = 64,     // get channel map (also returns number of channels total)
149    MSP_SET_RX_MAP = 65, // set rc map, numchannels to set comes from MSP_RX_MAP
150
151    MSP_SET_REBOOT = 68,    // reboot settings
152    MSP_BF_BUILD_INFO = 69, // build date as well as some space for future expansion,
153
154    // Betaflight
155    MSP_ADVANCED_CONFIG = 90,
156    MSP_SET_ADVANCED_CONFIG = 91,
157
158    MSP_FILTER_CONFIG = 92,
159    MSP_SET_FILTER_CONFIG = 93,
160
161    MSP_PID_ADVANCED = 94,
162    MSP_SET_PID_ADVANCED = 95,
163
164    MSP_SENSOR_CONFIG = 96,
165    MSP_SET_SENSOR_CONFIG = 97,
166
167    // Inav
168    MSP2_COMMON_SETTING = 0x1003, //in/out message    Returns the value for a setting
169    MSP2_COMMON_SET_SETTING = 0x1004, //in message        Sets the value for a setting
170
171    MSP2_MOTOR_MIXER = 0x1005,
172    MSP2_SET_MOTOR_MIXER = 0x1006,
173
174    MSP2_COMMON_SETTING_INFO = 0x1007,
175    MSP2_COMMON_PG_LIST = 0x1008,
176
177    MSP2_SERIAL_CONFIG = 0x1009,
178    MSP2_SET_SERIAL_CONFIG = 0x100A,
179
180    MSP2_INAV_OSD_LAYOUTS = 0x2012,
181    MSP2_INAV_OSD_SET_LAYOUT_ITEM = 0x2013,
182    MSP2_INAV_OSD_ALARMS = 0x2014,
183    MSP2_INAV_OSD_SET_ALARMS = 0x2015,
184    MSP2_INAV_OSD_PREFERENCES = 0x2016,
185    MSP2_INAV_OSD_SET_PREFERENCES = 0x2017,
186
187    MSP2_INAV_SERVO_MIXER = 0x2020,
188    MSP2_INAV_SET_SERVO_MIXER = 0x2021,
189}
190
191impl From<u16> for MspCommandCode {
192    fn from(value: u16) -> Self {
193        Self::from_primitive(value).unwrap_or_else(|| panic!("Invalid MSP command code: {value}"))
194    }
195}