static void mav_callback(mavlink_message_t *msg, void *d) { struct widget *w = d; struct widget_priv *priv = w->priv; unsigned char i; if (msg->msgid == MAVLINK_MSG_ID_RC_CHANNELS_RAW) { priv->total_ch = 8; } else { priv->total_ch = mavlink_msg_rc_channels_get_chancount(msg); } for (i = 0; i < priv->total_ch; i++) priv->ch_raw[i] = mavlink_msg_rc_channels_raw_get_chan(msg, i); schedule_widget(w); }
void MavLinkInterpreter::ProcessRCChannels() const { _m->ChannelCount = mavlink_msg_rc_channels_get_chancount(&_msg); // Number of RC Channels used _m->ChannelRaw[0] = mavlink_msg_rc_channels_get_chan1_raw(&_msg); // The PPM values of the RC channels received. _m->ChannelRaw[1] = mavlink_msg_rc_channels_get_chan2_raw(&_msg); // The standard PPM modulation is as follows: _m->ChannelRaw[2] = mavlink_msg_rc_channels_get_chan3_raw(&_msg); // 1000 microseconds: 0%, 2000 microseconds: 100%. _m->ChannelRaw[3] = mavlink_msg_rc_channels_get_chan4_raw(&_msg); // Individual receivers/transmitters might violate this specification. _m->ChannelRaw[4] = mavlink_msg_rc_channels_get_chan5_raw(&_msg); _m->ChannelRaw[5] = mavlink_msg_rc_channels_get_chan6_raw(&_msg); _m->ChannelRaw[6] = mavlink_msg_rc_channels_get_chan7_raw(&_msg); _m->ChannelRaw[7] = mavlink_msg_rc_channels_get_chan8_raw(&_msg); _m->ChannelRaw[8] = mavlink_msg_rc_channels_get_chan9_raw(&_msg); _m->ChannelRaw[9] = mavlink_msg_rc_channels_get_chan10_raw(&_msg); _m->ChannelRaw[10] = mavlink_msg_rc_channels_get_chan11_raw(&_msg); _m->ChannelRaw[11] = mavlink_msg_rc_channels_get_chan12_raw(&_msg); _m->ChannelRaw[12] = mavlink_msg_rc_channels_get_chan13_raw(&_msg); _m->ChannelRaw[13] = mavlink_msg_rc_channels_get_chan14_raw(&_msg); _m->ChannelRaw[14] = mavlink_msg_rc_channels_get_chan15_raw(&_msg); _m->ChannelRaw[15] = mavlink_msg_rc_channels_get_chan16_raw(&_msg); _m->ChannelRaw[16] = mavlink_msg_rc_channels_get_chan17_raw(&_msg); _m->ChannelRaw[17] = mavlink_msg_rc_channels_get_chan18_raw(&_msg); // #ifdef DEBUG_APM_RC_CHANNELS debugSerial.printf("%d\tMAVLINK_MSG_ID_RC_CHANNELS: chancount: %d\r\n", millis(), _m->ChannelCount); for (size_t i = 0; i < 3; i++) { int j = i * 6; debugSerial.printf("\tRC%d: %d, RD%d: %d, RC%d: %d, RC%d: %d, RC%d: %d, RC%d: %d\r\n", j + 1, _m->ChannelRaw[j], j + 2, _m->ChannelRaw[j+1], j + 3, _m->ChannelRaw[j+2], j + 4, _m->ChannelRaw[j+3], j + 5, _m->ChannelRaw[j+4], j + 6, _m->ChannelRaw[j+5] ); } #endif }