Otpvondoiats opened a new pull request, #3373:
URL: https://github.com/apache/nuttx-apps/pull/3373
## 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 (edd1cb249) - `system/uorb/uORB/`**
Adds new subscription APIs that enable non-wakeup mode:
```c
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 (207902693) - `system/uorb/listener.c`**
Adds `-u` flag to `uorb_listener` for testing non-wakeup subscriptions:
```bash
# 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:**
```c
// 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>
~~~
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]