BetaFlight模块设计之十二:电传任务分析
基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。
电传任务
描述:主要用于向地面砖发送飞机状态信息,以便地面站了解飞机的实时工作状态,位置信息等。
├──> 初始化
│ ├──> [x]硬件初始化
│ └──> [v]业务初始化telemetryInit
├──> 任务
│ ├──> [x]实时任务
│ ├──> [x]事件任务
│ └──> [v]时间任务[TASK_TELEMETRY] = DEFINE_TASK("TELEMETRY", NULL, NULL, taskTelemetry, TASK_PERIOD_HZ(250), TASK_PRIORITY_LOW),
├──> 驱动
│ ├──> [x]查询
│ └──> [x]中断
└──> 接口
├──> void telemetryCheckState(void)
├──> bool telemetryCheckRxPortShared(const serialPortConfig_t *portConfig, const SerialRXType serialrxProvider)
└──> 支持FRSKY、HOTT、SMARTPORT、LTM、JETIEXBUS、MAVLINK、CRSF、GHST、SRXL、IBUS协议
taskTelemetry任务分析
任务并不复杂,只要不是连计算机的情况下,使能电传功能,就没3秒更新下温度,并调用telemetryProcess。
taskTelemetry
└──> <!cliMode && featureIsEnabled(FEATURE_TELEMETRY)>
├──> subTaskTelemetryPollSensors
└──> telemetryProcess
subTaskTelemetryPollSensors函数分析
这里估计是飞控都有IMU,所以从gyro获取温度更加通用吧。
subTaskTelemetryPollSensors
└──> <cmpTimeUs(currentTimeUs, lastGyroTempTimeUs) >= GYRO_TEMP_READ_DELAY_US> // read the gyro temp every 3 seconds
├──> sgyroReadTemperature
└──> lastGyroTempTimeUs = currentTimeUs;
telemetryProcess函数分析
从这里可以看出目前代码4.3支持的电传协议种类:FRSKY、HOTT、SMARTPORT、LTM、JETIEXBUS、MAVLINK、CRSF、GHST、SRXL、IBUS,详细的电传协议可以仔细阅读相应的处理函数代码。
telemetryProcess
├──> <USE_TELEMETRY_FRSKY_HUB>
│ └──> handleFrSkyHubTelemetry
├──> <USE_TELEMETRY_HOTT>
│ └──> handleHoTTTelemetry
├──> <USE_TELEMETRY_SMARTPORT>
│ └──> handleSmartPortTelemetry
├──> <USE_TELEMETRY_LTM>
│ └──> handleLtmTelemetry
├──> <USE_TELEMETRY_JETIEXBUS>
│ └──> handleJetiExBusTelemetry
├──> <USE_TELEMETRY_MAVLINK>
│ └──> handleMAVLinkTelemetry
├──> <USE_TELEMETRY_CRSF>
│ └──> handleCrsfTelemetry
├──> <USE_TELEMETRY_GHST>
│ └──> handleGhstTelemetry
├──> <USE_TELEMETRY_SRXL>
│ └──> handleSrxlTelemetry
└──> <USE_TELEMETRY_IBUS>
└──> handleIbusTelemetry