mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-06 05:41:36 +08:00
refactor uorb: inline orb_publish_auto
It is a very small core function that needs to be fast.
This commit is contained in:
@@ -67,23 +67,6 @@ int orb_unadvertise(orb_advert_t handle)
|
|||||||
return uORB::Manager::get_instance()->orb_unadvertise(handle);
|
return uORB::Manager::get_instance()->orb_unadvertise(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
int orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data, int *instance,
|
|
||||||
int priority)
|
|
||||||
{
|
|
||||||
if (*handle == nullptr) {
|
|
||||||
*handle = orb_advertise_multi(meta, data, instance, priority);
|
|
||||||
|
|
||||||
if (*handle != nullptr) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return orb_publish(meta, *handle, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
|
int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
|
||||||
{
|
{
|
||||||
return uORB::Manager::get_instance()->orb_publish(meta, handle, data);
|
return uORB::Manager::get_instance()->orb_publish(meta, handle, data);
|
||||||
|
|||||||
+21
-6
@@ -161,6 +161,11 @@ extern orb_advert_t orb_advertise_multi_queue(const struct orb_metadata *meta, c
|
|||||||
*/
|
*/
|
||||||
extern int orb_unadvertise(orb_advert_t handle) __EXPORT;
|
extern int orb_unadvertise(orb_advert_t handle) __EXPORT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see uORB::Manager::orb_publish()
|
||||||
|
*/
|
||||||
|
extern int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data) __EXPORT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Advertise as the publisher of a topic.
|
* Advertise as the publisher of a topic.
|
||||||
*
|
*
|
||||||
@@ -169,13 +174,23 @@ extern int orb_unadvertise(orb_advert_t handle) __EXPORT;
|
|||||||
*
|
*
|
||||||
* @see uORB::Manager::orb_advertise_multi() for meaning of the individual parameters
|
* @see uORB::Manager::orb_advertise_multi() for meaning of the individual parameters
|
||||||
*/
|
*/
|
||||||
extern int orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data, int *instance,
|
static inline int orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data,
|
||||||
int priority);
|
int *instance,
|
||||||
|
int priority)
|
||||||
|
{
|
||||||
|
if (!*handle) {
|
||||||
|
*handle = orb_advertise_multi(meta, data, instance, priority);
|
||||||
|
|
||||||
/**
|
if (*handle) {
|
||||||
* @see uORB::Manager::orb_publish()
|
return 0;
|
||||||
*/
|
}
|
||||||
extern int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data) __EXPORT;
|
|
||||||
|
} else {
|
||||||
|
return orb_publish(meta, *handle, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see uORB::Manager::orb_subscribe()
|
* @see uORB::Manager::orb_subscribe()
|
||||||
|
|||||||
Reference in New Issue
Block a user