static uint8_t ibusFrameStatus(void) { uint8_t frameStatus = RX_FRAME_PENDING; if (!ibusFrameDone) { return frameStatus; } ibusFrameDone = false; if (checksumIsOk()) { if (ibusModel == IBUS_MODEL_IA6 || ibusSyncByte == 0x20) { updateChannelData(); frameStatus = RX_FRAME_COMPLETE; } else { #if defined(TELEMETRY) && defined(TELEMETRY_IBUS) rxBytesToIgnore = respondToIbusRequest(ibus); #endif } } return frameStatus; }
void handleIbusTelemetry(void) { if (!ibusTelemetryEnabled) { return; } while (serialRxBytesWaiting(ibusSerialPort) > 0) { uint8_t c = serialRead(ibusSerialPort); if (outboundBytesToIgnoreOnRxCount) { outboundBytesToIgnoreOnRxCount--; continue; } pushOntoTail(ibusReceiveBuffer, IBUS_RX_BUF_LEN, c); if (isChecksumOkIa6b(ibusReceiveBuffer, IBUS_RX_BUF_LEN)) { outboundBytesToIgnoreOnRxCount += respondToIbusRequest(ibusReceiveBuffer); } } }