atbetaflight/docs/API/MSP_extensions.md

4.5 KiB

MSP Extensions

Cleanflight includes a number of extensions to the MultiWii Serial Protocol (MSP). This document describes those extensions in order that 3rd part tools may identify cleanflight firmware and react appropriately.

MSP_IDENT capabilities

Cleanflight sets a number of non-standard bits in the MSP_IDENT message in order to identify the firmware. For completeness, this includes flags defined for baseflight.

Value Mnemonic Notes Reference
1 << 29 CAP_CLEANFLIGHT_CONFIG The firmware supports cleanflight configuration options. This is the definitive test for cleanflight firmware src/main/io/serial_msp.c
1 << 30 CAP_BASEFLIGHT_CONFIG The firmware supports baseflight configuration options. See the baseflight documentation for details. src/main/io/serial_msp.c
1 << 31 CAP_PLATFORM_32BIT This is a 32bit platform. src/main/io/serial_msp.c

Modes Extension

The cleanflight modes extension to MSP supports the extended auxiliary modes introduced 2014-10-14. The CAP_CLEANFLIGHT_CONFIG capabilities flag should be used to confirm the availability of extended auxiliary modes. If this flag is not present, the legacy MSP MSP_BOX and MSP_SET_BOX messages should be used.

Note: In the following descriptions, the format of the original MSP documentation is followed.

MSP_MODE_RANGES

The MSP_MODE_RANGES returns the current auxiliary mode settings from the flight controller. It should be invoked before any modification is made to the configuration.

The message returns a group of 4 unsigned bytes for each 'slot' available in the flight controller. The number of slots should be calculated from the size of the returned message.

Command Msg Id Direction Data Type Notes
MSP_MODE_RANGES 34 to FC (none) N/A Following this command, the FC returns a block of 4 bytes for each auxiliary mode 'slot'

Unassigned slots have rangeStartStep == rangeEndStep. Each element contains the following fields.

Command Msg Id Direction Data Type Notes
returned from FC permanentId uint8 See Modes.md for a definition of the permanent ids
returned from FC auxChannelIndex uint8 The Aux switch number (indexed from 0)
returned from FC rangeStartStep uint8 The start value for this element in 'blocks' of 25 where 0 == 900 and 48 == 2100
returned from FC rangeEndStep uint8 The end value for this element in 'blocks' of 25 where 0 == 900 and 48 == 2100

Thus, for a cleanflight firmware with 40 slots for auxiliary settings, 160 bytes would be returned in response to MSP_MODE_RANGES,

MSP_SET_MODE_RANGE

The MSP_SET_MODE_RANGE is used to inform the flight controller of auxiliary mode settings. The client must return all auxiliary elements, including those that have been disabled or are undefined, by sending this message for all auxiliary slots.

Command Msg Id Direction Data Type Notes
MSP_SET_MODE_RANGE 35 to FC sequence id uint8 A monotonically increasing ID, from 0 to the number of slots -1
permanentId uint8 See Modes.md for a definition of the permanent ids
auxChannelIndex uint8 The Aux switch number (indexed from 0)
rangeStartStep uint8 The start value for this element in 'blocks' of 25 where 0 == 900 and 48 == 2100
rangeEndStep uint8 The end value for this element in 'blocks' of 25 where 0 == 900 and 48 == 2100

Implementation Notes

  • The client should make no assumptions about the number of slots available. Rather, the number should be computed from the size of the MSP_MODE_RANGES message divided by the size of the returned data element (4 bytes);
  • The client should ensure that all changed items are returned to the flight controller, including those where a switch or range has been disabled;
  • A 'null' return (with rangeStartStep == rangeEndStep) must be made for all unused slots, up to the maximum number of slots calculated from the initial message.

Deprecated MSP

The following MSP commands are replaced by the MSP_MODE_RANGES and MSP_SET_MODE_RANGE extensions, and are not recognised by cleanflight where CAP_CLEANFLIGHT_CONFIG is set.

  • MSP_BOX
  • MSP_SET_BOX

See also

Modes.md describes the user visible implementation for the cleanflight modes extension.