diff --git a/libraries/AP_OpenDroneID/AP_OpenDroneID.cpp b/libraries/AP_OpenDroneID/AP_OpenDroneID.cpp index f43289d248380c..65c332c10335de 100644 --- a/libraries/AP_OpenDroneID/AP_OpenDroneID.cpp +++ b/libraries/AP_OpenDroneID/AP_OpenDroneID.cpp @@ -132,7 +132,7 @@ void AP_OpenDroneID::set_basic_id() { if (pkt_basic_id.id_type != MAV_ODID_ID_TYPE_NONE) { return; } - if (id_len == 0) { + if ((id_len == 0) && (_options & LockUASIDOnFirstBasicIDRx)) { load_UAS_ID_from_persistent_memory(); } if (id_len > 0) { @@ -209,10 +209,12 @@ void AP_OpenDroneID::update() if ((pkt_basic_id.id_type == MAV_ODID_ID_TYPE_SERIAL_NUMBER) && (_options & LockUASIDOnFirstBasicIDRx) - && id_len == 0) { + && id_len == 0 + && !bootloader_flashed) { hal.util->flash_bootloader(); // reset the basic id on next set_basic_id call pkt_basic_id.id_type = MAV_ODID_ID_TYPE_NONE; + bootloader_flashed = true; } set_basic_id(); diff --git a/libraries/AP_OpenDroneID/AP_OpenDroneID.h b/libraries/AP_OpenDroneID/AP_OpenDroneID.h index 735bf358c76885..a4bb5f9856526c 100644 --- a/libraries/AP_OpenDroneID/AP_OpenDroneID.h +++ b/libraries/AP_OpenDroneID/AP_OpenDroneID.h @@ -117,7 +117,7 @@ class AP_OpenDroneID char id_type[3]; size_t id_len; char id_str[21]; - + bool bootloader_flashed; enum Options : int16_t { EnforceArming = (1U << 0U), AllowNonGPSPosition = (1U << 1U),