MSP 扩展
Betaflight 包括 MultiWii 串行协议 (MSP) 的许多扩展。本文档描述了 这些扩展以便第三方工具可以识别 Betaflight 固件并做出适当的反应。
发出 MSP_API_VERSION 命令以查明固件是否支持它们。
模式范围
MSP_MODE_RANGES
MSP_MODE_RANGES 从飞控返回当前辅助模式设置。应该调用它 在对配置进行任何修改之前。
该消息为飞控中可用的每个“插槽”返回一组 4 个无符号字节。数量 槽位应该根据返回消息的大小来计算。
| 命令 | 消息 ID | 方向 | 笔记 |
|---|---|---|---|
| MSP_MODE_范围 | 34 | 34前往FC | 执行此命令后,FC 为每个辅助模式“插槽”返回 4 个字节的块 |
未分配的槽具有 rangeStartStep == rangeEndStep。每个元素包含以下字段。
| 数据 | 类型 | 笔记 |
|---|---|---|
| 永久ID | uint8 | 有关永久 id 的定义,请参阅 Modes.md |
| 辅助频道索引 | uint8 | 辅助开关编号(从 0 开始索引) |
| 范围开始步骤 | uint8 | 此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100 |
| 范围结束步骤 | uint8 | 此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100 |
因此,对于具有 40 个插槽的 Betaflight 固件,将返回 160 字节以响应 MSP_MODE_RANGES。
MSP_MODE_RANGES_EXTRA
MSP_MODE_RANGES_EXTRA 从飞控返回额外的模式设置参数。应该调用它 在对配置进行任何修改之前与 MSP_MODE_RANGES 一起使用。
该消息返回额外元素的数量,后跟航班中可用的每个“时隙”的一组字节 控制器。槽数应与 MSP_MODE_RANGES 相同,根据返回的大小计算得出 消息和每组的字节数。
| 命令 | 消息 ID | 方向 | 笔记 |
|---|---|---|---|
| MSP_MODE_RANGES_EXTRA | MSP_MODE_RANGES_EXTRA | 238 | 238前往FC |
返回消息前面带有每个元素的字节数(3 个字节)。每个元素包含 以下字段:
| 数据 | 类型 | 笔记 |
|---|---|---|
| 永久ID | uint8 | 有关永久 id 的定义,请参阅 Modes.md |
| 模式逻辑 | uint8 | 0 = 逻辑与; 1 = 逻辑或 |
| 链接到 | uint8 | 此模式链接到的永久 ID。 |
因此,对于具有 20 个插槽的 Betaflight 固件,将返回 61 个字节(包括前置大小)以响应 MSP_MODE_RANGES_EXTRA。
MSP_SET_MODE_RANGE
MSPSET_MODE_RANGE 用于通知飞控 辅助模式设置。客户端_必须返回所有辅助 元素,包括那些已被禁用或未定义的元素 为所有辅助时隙发送此消息。
| 命令 | 消息 ID | 方向 |
|---|---|---|
| MSP_SET_MODE_RANGE | MSP_SET_MODE_RANGE | 35 |
|数据|类型 |笔记| | ---------------- | -----| -------------------------------------------------------------------------------- ||序列号 | uint8 |单调递增的 ID,从 0 到槽数 -1 | |永久ID | uint8 |有关永久 id 的定义,请参阅 Modes.md | |辅助频道索引 | uint8 |辅助通道编号(从 0 开始索引)| |范围开始步骤 | uint8 |此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100 | |范围结束步骤 | uint8 |此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100 |
实施说明
- 客户端不应假设可用插槽的数量。相反,应该计算这个数字 将 MSP_MODE_RANGES 消息的大小除以返回的数据元素的大小(4 个字节);
- 客户应确保所有更改的项目都返回给飞控,包括那些 开关或量程已被禁用;
- 必须为所有未使用的槽返回“null”,除了序列 ID 之外的所有值都设置为 0 根据初始消息计算出的最大时隙数。
调整范围
MSP_ADJUSTMENT_RANGES
MSP_ADJUSTMENT_RANGES 返回当前调整范围设置 飞控。应该在任何修改之前调用它 根据配置进行。
该消息为每个“槽”返回一组 6 个无符号字节 在飞控中可用。插槽数量应为 根据返回消息的大小计算。
| 命令 | 消息 ID | 方向 | 笔记 |
|---|---|---|---|
| MSP_调整范围 | 52 | 52前往FC | 执行此命令后,FC 将为每个调整范围“时隙”返回 6 个字节的块 |
未分配的槽具有 rangeStartStep == rangeEndStep。每个元素包含以下字段。
| 数据 | 类型 | 笔记 |
|---|---|---|
| 调整状态索引 | uint8 | 见下文 |
| 辅助频道索引 | uint8 | 用于激活调节的辅助通道编号(从 0 开始索引) |
| 范围开始步骤 | uint8 | 此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100 |
| 范围结束步骤 | uint8 | 此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100 |
| 调节功能 | uint8 | 见下文 |
| auxSwitchChannelIndex | 辅助开关频道索引uint8 | 用于执行功能的辅助通道编号(从 0 开始索引) |
因此,对于具有 12 个插槽的 Betaflight 固件,将返回 72 字节以响应 MSP_ADJUSTMENT_RANGES,
MSP_SET_ADJUSTMENT_RANGE
MSPSET_ADJUSTMENT_RANGE 用于通知飞控 调节范围设置。客户端_必须返回所有调整范围 元素,包括那些已被禁用或未定义的元素 为所有调整范围时隙发送此消息。
| 命令 | 消息 ID | 方向 |
|---|---|---|
| MSP_SET_ADJUSTMENT_RANGE | MSP_SET_ADJUSTMENT_RANGE | 53 |
| 数据 | 类型 | 笔记 |
|---|---|---|
| 序列号 | uint8 | 单调递增的 ID,从 0 到槽数 -1 |
| 调整状态索引 | uint8 | 见下文 |
| 辅助频道索引 | uint8 | 辅助通道编号(从 0 开始索引) |
| 范围结束步骤 | uint8 | 此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100 |
| 调节功能 | uint8 | 见下文 |
| auxSwitchChannelIndex | 辅助开关频道索引uint8 | 用于执行功能的辅助通道编号(从 0 开始索引) |
MSP_SET_1WIRE
MSP_SET_1WIRE 用于启用串行 1 线直通 注意:最好在武装时禁用此功能
| 命令 | 消息 ID | 方向 |
|---|---|---|
| MSP_SET_1WIRE | 243 | 243前往FC |
| 数据 | 类型 | 笔记 |
|---|---|---|
| ESC ID | uint8 | 单调递增的 ID,从 0 到 esc 数量 -1 |
####调整指数
FC维护每个调整状态索引的内部状态,当前维护4个同时调整状态。多个调节范围 可以配置为使用相同的状态,但应注意不要发送多个调整范围,否则在活动时会发生冲突。
例如使用同一插槽配置两个相同的调整范围会发生冲突,但配置使用相同插槽的两个调整范围 每个通道只有一半的可能通道范围,但使用相同的 adjustmentStateIndex 不会发生冲突。
FC 不检查冲突。
调整功能
可以进行许多调整,它们的数量及其用途可以在“飞行调整”部分中的 cli adjrange 命令的文档中找到。
实施说明
- 客户端不应假设可用插槽的数量。相反,应该计算这个数字 将 MSP_ADJUSTMENT_RANGES 消息的大小除以返回的数据元素的大小(6 字节);
- 客户应确保所有更改的项目都返回给飞控,包括那些 开关或量程已被禁用;
- 必须为所有未使用的槽返回“null”,其中除序列 ID 之外的所有值都设置为 0, 最多为根据初始消息计算出的最大时隙数。
已弃用的 MSP
以下 MSP 命令替换为 MSP_MODE_RANGES 和 MSP_SET_MODE_RANGE 扩展,并且不被 Betaflight。
- MSP_BOX
- MSP_SET_BOX
另请参阅
Modes 描述了 Betaflight 的用户可见实现 模式扩展。