BLE temperature profile using digital DS1820 or analog LM35 sensors
The scheduler is used for transferring execution from the interrupt context to the main context. More...
Typedefs | |
typedef void(* | app_sched_event_handler_t )(void *p_event_data, uint16_t event_size) |
Scheduler event handler type. | |
Functions | |
uint32_t | app_sched_init (uint16_t max_event_size, uint16_t queue_size, void *p_evt_buffer) |
Function for initializing the Scheduler. | |
void | app_sched_execute (void) |
Function for executing all scheduled events. | |
uint32_t | app_sched_event_put (void *p_event_data, uint16_t event_size, app_sched_event_handler_t handler) |
Function for scheduling an event. |
Detailed Description
The scheduler is used for transferring execution from the interrupt context to the main context.
See ble_sdk_apps_seq_diagrams for sequence diagrams illustrating the flow of events when using the Scheduler.
Requirements:
Logic in main context:
- Define an event handler for each type of event expected.
- Initialize the scheduler by calling the APP_SCHED_INIT() macro before entering the application main loop.
- Call app_sched_execute() from the main loop each time the application wakes up because of an event (typically when sd_app_evt_wait() returns).
Logic in interrupt context:
- In the interrupt handler, call app_sched_event_put() with the appropriate data and event handler. This will insert an event into the scheduler's queue. The app_sched_execute() function will pull this event and call its handler in the main context.
For an example usage of the scheduler, please see the implementations of ble_sdk_app_hids_mouse and ble_sdk_app_hids_keyboard.
The high level design of the scheduler
Typedef Documentation
typedef void(* app_sched_event_handler_t)(void *p_event_data, uint16_t event_size) |
Scheduler event handler type.
Definition at line 69 of file app_scheduler.h.
Function Documentation
uint32_t app_sched_event_put | ( | void * | p_event_data, |
uint16_t | event_size, | ||
app_sched_event_handler_t | handler | ||
) |
Function for scheduling an event.
Puts an event into the event queue.
- Parameters:
-
[in] p_event_data Pointer to event data to be scheduled. [in] p_event_size Size of event data to be scheduled. [in] handler Event handler to receive the event.
- Returns:
- NRF_SUCCESS on success, otherwise an error code.
void app_sched_execute | ( | void | ) |
Function for executing all scheduled events.
This function must be called from within the main loop. It will execute all events scheduled since the last time it was called.
uint32_t app_sched_init | ( | uint16_t | max_event_size, |
uint16_t | queue_size, | ||
void * | p_evt_buffer | ||
) |
Function for initializing the Scheduler.
It must be called before entering the main loop.
- Parameters:
-
[in] max_event_size Maximum size of events to be passed through the scheduler. [in] queue_size Number of entries in scheduler queue (i.e. the maximum number of events that can be scheduled for execution). [in] p_event_buffer Pointer to memory buffer for holding the scheduler queue. It must be dimensioned using the APP_SCHED_BUFFER_SIZE() macro. The buffer must be aligned to a 4 byte boundary.
- Note:
- Normally initialization should be done using the APP_SCHED_INIT() macro, as that will both allocate the scheduler buffer, and also align the buffer correctly.
- Return values:
-
NRF_SUCCESS Successful initialization. NRF_ERROR_INVALID_PARAM Invalid parameter (buffer not aligned to a 4 byte boundary).
Generated on Tue Jul 12 2022 15:07:13 by 1.7.2