Skip to content

Conversation

@Otpvondoiats
Copy link
Contributor

Summary

This PR adds non-wakeup subscription support to the uORB subsystem, enabling applications to subscribe to sensor topics without waking the system when new data arrives. This feature is critical for power-sensitive applications where battery life is prioritized over real-time data delivery.

Commit 1: Core API (edd1cb2) - system/uorb/uORB/

Adds new subscription APIs that enable non-wakeup mode:

int orb_subscribe_multi_nonwakeup(FAR const struct orb_metadata *meta, 
                                  unsigned instance);
int orb_subscribe_nonwakeup(FAR const struct orb_metadata *meta);

Implementation:

  • Extended orb_advsub_open() to accept non_wakeup parameter
  • When non_wakeup is true, calls ioctl(fd, SNIOC_SET_NONWAKEUP, true)
  • Existing orb_subscribe_multi() unchanged (defaults to wakeup mode)
  • Modified files:
    • system/uorb/uORB/uORB.c: Added new functions and parameter
    • system/uorb/uORB/uORB.h: Added API declarations and documentation

Commit 2: CLI Tool Support (2079026) - system/uorb/listener.c

Adds -u flag to uorb_listener for testing non-wakeup subscriptions:

# Subscribe in non-wakeup mode
uorb_listener -u sensor_accel,sensor_gyro

# Combine with other options
uorb_listener -u -f sensor_temp  # flush in non-wakeup mode
uorb_listener -u -i sensor_mag   # get info without waking system

Impact

Users

New Functionality:

  • Applications can now choose per-subscription whether to wake the system
  • CLI tool supports testing with -u flag
  • Ideal for background monitoring, logging, and non-critical sensor data

API Changes:

// New APIs added
int orb_subscribe_multi_nonwakeup(FAR const struct orb_metadata *meta, unsigned instance);
int orb_subscribe_nonwakeup(FAR const struct orb_metadata *meta);

// New CLI option
uorb_listener -u <topics>

Backward Compatibility:

  • 100% compatible - All existing code works unchanged
  • Default behavior unchanged (wakeup mode)
  • Non-wakeup mode is opt-in only

Build Process

  • No build configuration changes required
  • No new dependencies added
  • Standard compilation process
  • Modified files compile without warning

Testing

~~~
ap> ][01/20 22:31:27] [ 7] [cp] bt_temperature_comp_thread, temperature: 32
uorb_listener -n 10 sensor_accel

Mointor objects num:1
object_name:sensor_accel, object_instance:0
sensor_accel(now:20447017000):timestamp:20430408830,x:0.365890,y:0.218209,z:9.730313,temperature:29.453125
sensor_accel(now:20447057000):timestamp:20430449030,x:0.404197,y:0.306794,z:9.785380,temperature:29.453125
[01/20 22:31:28] [ 0] [audio] CPU USAGE: busy=1 cpu_sleep=0 bus_sleep=0 subsys_sleep=99(pd)
sensor_accel(now:20447097200):timestamp:20430489230,x:0.344342,y:0.323553,z:9.680036,temperature:29.453125
sensor_accel(now:20447137400):timestamp:20430529530,x:0.361101,y:0.249333,z:9.792563,temperature:29.453125
sensor_accel(now:20447177700):timestamp:20430569730,x:0.298852,y:0.313977,z:9.754255,temperature:29.453125
sensor_accel(now:20447217800):timestamp:20430609930,x:0.387437,y:0.249333,z:9.792563,temperature:29.453125
sensor_accel(now:20447257900):timestamp:20430650130,x:0.365890,y:0.290035,z:9.713554,temperature:29.453125
sensor_accel(now:20447298100):timestamp:20430690330,x:0.363495,y:0.261304,z:9.802140,temperature:29.453125
sensor_accel(now:20447338300):timestamp:20430730630,x:0.274910,y:0.297217,z:9.876360,temperature:29.453125
sensor_accel(now:20447379000):timestamp:20430770830,x:0.332371,y:0.313977,z:9.787775,temperature:29.453125
Object name:sensor_accel0, recieved:10
Total number of received Message:10/10
ap>
~~~

default subscribing is wakeup.

Signed-off-by: dongjiuzhu1 <[email protected]>
add nonwakeup ways to using uorb_listener

Signed-off-by: dongjiuzhu1 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants