| .. _async_notification: |
| |
| Asynchronous Notification APIs |
| ############################## |
| |
| Zephyr APIs often include :ref:`api_term_async` functions where an |
| operation is initiated and the application needs to be informed when it |
| completes, and whether it succeeded. Using :c:func:`k_poll` is |
| often a good method, but some application architectures may be more |
| suited to a callback notification, and operations like enabling clocks |
| and power rails may need to be invoked before kernel functions are |
| available so a busy-wait for completion may be needed. |
| |
| This API is intended to be embedded within specific subsystems such as |
| :ref:`resource_mgmt_onoff` and other APIs that support async |
| transactions. The subsystem wrappers are responsible for extracting |
| operation-specific data from requests that include a notification |
| element, and for invoking callbacks with the parameters required by the |
| API. |
| |
| A limitation is that this API is not suitable for :ref:`syscalls` |
| because: |
| |
| * :c:struct:`sys_notify` is not a kernel object; |
| * copying the notification content from userspace will break use of |
| :c:macro:`CONTAINER_OF` in the implementing function; |
| * neither the spin-wait nor callback notification methods can be |
| accepted from userspace callers. |
| |
| Where a notification is required for an asynchronous operation invoked |
| from a user mode thread the subsystem or driver should provide a syscall |
| API that uses :c:struct:`k_poll_signal` for notification. |
| |
| API Reference |
| ************* |
| |
| .. doxygengroup:: sys_notify_apis |
| :project: Zephyr |