AP_GPS: Allow multiple external AHRS GPS instances

Signed-off-by: Ryan Friedman <ryanfriedman5410+github@gmail.com>
This commit is contained in:
Ryan Friedman 2023-08-18 11:16:33 -06:00 committed by Peter Barker
parent f2dcf72fbb
commit 01cd42d1e7
2 changed files with 17 additions and 3 deletions

View File

@ -1346,13 +1346,23 @@ void AP_GPS::handle_msp(const MSP::msp_gps_data_message_t &pkt)
#endif // HAL_MSP_GPS_ENABLED #endif // HAL_MSP_GPS_ENABLED
#if HAL_EXTERNAL_AHRS_ENABLED #if HAL_EXTERNAL_AHRS_ENABLED
void AP_GPS::handle_external(const AP_ExternalAHRS::gps_data_message_t &pkt)
bool AP_GPS::get_first_external_instance(uint8_t& instance) const
{ {
for (uint8_t i=0; i<num_instances; i++) { for (uint8_t i=0; i<num_instances; i++) {
if (drivers[i] != nullptr && _type[i] == GPS_TYPE_EXTERNAL_AHRS) { if (drivers[i] != nullptr && _type[i] == GPS_TYPE_EXTERNAL_AHRS) {
drivers[i]->handle_external(pkt); instance = i;
return true;
} }
} }
return false;
}
void AP_GPS::handle_external(const AP_ExternalAHRS::gps_data_message_t &pkt, const uint8_t instance)
{
if (_type[instance] == GPS_TYPE_EXTERNAL_AHRS && drivers[instance] != nullptr) {
drivers[instance]->handle_external(pkt);
}
} }
#endif // HAL_EXTERNAL_AHRS_ENABLED #endif // HAL_EXTERNAL_AHRS_ENABLED

View File

@ -249,7 +249,11 @@ public:
void handle_msp(const MSP::msp_gps_data_message_t &pkt); void handle_msp(const MSP::msp_gps_data_message_t &pkt);
#endif #endif
#if HAL_EXTERNAL_AHRS_ENABLED #if HAL_EXTERNAL_AHRS_ENABLED
void handle_external(const AP_ExternalAHRS::gps_data_message_t &pkt); // Retrieve the first instance ID that is configured as type GPS_TYPE_EXTERNAL_AHRS.
// Can be used by external AHRS systems that only report one GPS to get the instance ID.
// Returns true if an instance was found, false otherwise.
bool get_first_external_instance(uint8_t& instance) const WARN_IF_UNUSED;
void handle_external(const AP_ExternalAHRS::gps_data_message_t &pkt, const uint8_t instance);
#endif #endif
// Accessor functions // Accessor functions