Browse Source

refactor uorb: inline orb_publish_auto

It is a very small core function that needs to be fast.
sbg
Beat Küng 7 years ago committed by Lorenz Meier
parent
commit
7753dd4b4e
  1. 17
      src/modules/uORB/uORB.cpp
  2. 29
      src/modules/uORB/uORB.h

17
src/modules/uORB/uORB.cpp

@ -67,23 +67,6 @@ int orb_unadvertise(orb_advert_t handle) @@ -67,23 +67,6 @@ int orb_unadvertise(orb_advert_t 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)
{
return uORB::Manager::get_instance()->orb_publish(meta, handle, data);

29
src/modules/uORB/uORB.h

@ -161,6 +161,11 @@ extern orb_advert_t orb_advertise_multi_queue(const struct orb_metadata *meta, c @@ -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;
/**
* @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.
*
@ -169,13 +174,23 @@ extern int orb_unadvertise(orb_advert_t handle) __EXPORT; @@ -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
*/
extern int orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data, int *instance,
int priority);
/**
* @see uORB::Manager::orb_publish()
*/
extern int orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data) __EXPORT;
static inline int orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data,
int *instance,
int priority)
{
if (!*handle) {
*handle = orb_advertise_multi(meta, data, instance, priority);
if (*handle) {
return 0;
}
} else {
return orb_publish(meta, *handle, data);
}
return -1;
}
/**
* @see uORB::Manager::orb_subscribe()

Loading…
Cancel
Save