uORB: add Subscription method to change instance

This commit is contained in:
Daniel Agar
2020-09-01 13:53:15 -04:00
parent 787f9c1213
commit 94f7b50970
3 changed files with 62 additions and 0 deletions
+25
View File
@@ -88,4 +88,29 @@ void Subscription::unsubscribe()
_last_generation = 0;
}
bool Subscription::ChangeInstance(uint8_t instance)
{
if (instance != _instance) {
DeviceMaster *device_master = uORB::Manager::get_instance()->get_device_master();
if (device_master != nullptr) {
if (!device_master->deviceNodeExists(_orb_id, _instance)) {
return false;
}
// if desired new instance exists, unsubscribe from current
unsubscribe();
_instance = instance;
subscribe();
return true;
}
} else {
// already on desired index
return true;
}
return false;
}
} // namespace uORB