AP_RCProtocol: discriminate GHST and CRSF based on first byte

do not change to GHST baudrate unless it has been specifically configured
This commit is contained in:
Andy Piper 2024-02-01 13:51:02 +00:00 committed by Andrew Tridgell
parent dcf5730561
commit 019b9f5c35
3 changed files with 17 additions and 4 deletions

View File

@ -67,6 +67,10 @@ public:
return frontend.rc_protocols_mask; return frontend.rc_protocols_mask;
} }
bool protocol_enabled(enum AP_RCProtocol::rcprotocol_t protocol) const {
return frontend.protocol_enabled(protocol);
}
// get RSSI // get RSSI
int16_t get_RSSI(void) const { int16_t get_RSSI(void) const {
return rssi; return rssi;

View File

@ -238,6 +238,10 @@ void AP_RCProtocol_CRSF::_process_byte(uint32_t timestamp_us, uint8_t byte)
return; return;
} }
if (_frame.device_address != DeviceAddress::CRSF_ADDRESS_FLIGHT_CONTROLLER) {
return;
}
// parse the length // parse the length
if (_frame_ofs == CSRF_HEADER_TYPE_LEN) { if (_frame_ofs == CSRF_HEADER_TYPE_LEN) {
_frame_crc = crc8_dvb_s2(0, _frame.type); _frame_crc = crc8_dvb_s2(0, _frame.type);
@ -617,7 +621,7 @@ void AP_RCProtocol_CRSF::process_handshake(uint32_t baudrate)
|| baudrate != CRSF_BAUDRATE || baudrate != CRSF_BAUDRATE
|| baudrate == get_bootstrap_baud_rate() || baudrate == get_bootstrap_baud_rate()
|| uart->get_baud_rate() == get_bootstrap_baud_rate() || uart->get_baud_rate() == get_bootstrap_baud_rate()
|| (get_rc_protocols_mask() & ((1U<<(uint8_t(AP_RCProtocol::CRSF)+1))+1)) == 0) { || !protocol_enabled(AP_RCProtocol::CRSF)) {
return; return;
} }

View File

@ -152,6 +152,10 @@ void AP_RCProtocol_GHST::_process_byte(uint32_t timestamp_us, uint8_t byte)
return; return;
} }
if (_frame.device_address != DeviceAddress::GHST_ADDRESS_FLIGHT_CONTROLLER) {
return;
}
// parse the length // parse the length
if (_frame_ofs == GHST_HEADER_TYPE_LEN) { if (_frame_ofs == GHST_HEADER_TYPE_LEN) {
_frame_crc = crc8_dvb_s2(0, _frame.type); _frame_crc = crc8_dvb_s2(0, _frame.type);
@ -421,17 +425,18 @@ void AP_RCProtocol_GHST::process_byte(uint8_t byte, uint32_t baudrate)
_process_byte(AP_HAL::micros(), byte); _process_byte(AP_HAL::micros(), byte);
} }
// change the bootstrap baud rate to ELRS standard if configured // change the bootstrap baud rate to Ghost standard if configured
void AP_RCProtocol_GHST::process_handshake(uint32_t baudrate) void AP_RCProtocol_GHST::process_handshake(uint32_t baudrate)
{ {
AP_HAL::UARTDriver *uart = get_current_UART(); AP_HAL::UARTDriver *uart = get_current_UART();
// only change the baudrate if we are bootstrapping CRSF // only change the baudrate if we are specifically bootstrapping Ghost
if (uart == nullptr if (uart == nullptr
|| baudrate != CRSF_BAUDRATE || baudrate != CRSF_BAUDRATE
|| baudrate == GHST_BAUDRATE || baudrate == GHST_BAUDRATE
|| uart->get_baud_rate() == GHST_BAUDRATE || uart->get_baud_rate() == GHST_BAUDRATE
|| (get_rc_protocols_mask() & ((1U<<(uint8_t(AP_RCProtocol::GHST)+1))+1)) == 0) { || !protocol_enabled(AP_RCProtocol::GHST)
|| protocol_enabled(AP_RCProtocol::CRSF)) {
return; return;
} }