75 lines
4.4 KiB
ReStructuredText
75 lines
4.4 KiB
ReStructuredText
.. zephyr:code-sample:: chre
|
|
:name: Android's Context Hub Runtime Environment (CHRE)
|
|
|
|
Run nanoapps on Zephyr using the Context Hub Runtime Environment (CHRE).
|
|
|
|
Overview
|
|
========
|
|
|
|
Android's context hub enables the use of nanoapps. A single nanoapp has 3 entry points seen in
|
|
`chre_api/chre/nanoapp.h`_:
|
|
|
|
* A ``nanoappStart`` function used to notify the nanoapp that it is now active.
|
|
* A ``nanoappHandleEvent`` function used to notify the nanoapp tha an event of interest took place.
|
|
* A ``nanoappEnd`` function used to notify the nanoapp that it is now deactivated.
|
|
|
|
The CHRE connects to several frameworks called Platform Abstraction Layers (PAL)s. Note that
|
|
currently, none of these are implemented for Zephyr, but they are scheduled to be added. These
|
|
frameworks include:
|
|
|
|
#. *Audio* - a framework allowing nanoapps to get audio events. See `pal/audio.h`_ for API details.
|
|
#. *GNSS* - a framework allowing nanoapps to manage location and measurement sessions. See
|
|
`pal/gnss.h`_ for API details.
|
|
#. *Sensor* - a framework allowing nanoapps to request changes to sensors configuration get
|
|
data/bias events. See `pal/sensor.h`_ for API details.
|
|
#. *System* - a framework allowing nanoapps to make common system requests such as logging, clock,
|
|
and some basic memory allocation/deallocation. See `pal/system.h`_ for API details.
|
|
#. *WiFi* - a framework allowing nanoapps to interact with the on board WiFi. See `pal/wifi.h`_ for
|
|
API details.
|
|
#. *WWAN* - a framework allowing nanoapps to interact with the WWAN module such as getting the
|
|
current capabilities and info. See `pal/wwan.h`_ for API details.
|
|
|
|
Building and expectations
|
|
=========================
|
|
|
|
To build the sample use the following west command:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/modules/chre
|
|
:board: native_sim
|
|
:goals: build
|
|
|
|
Once built and run, the sample application should:
|
|
|
|
#. Print a hello message
|
|
#. Notify that the event loop started via an ``inf`` level log
|
|
#. Notify that a nanoapp was started and assigned an instance/app ID of 1 via a ``dbg`` level log
|
|
#. Print a message saying that the nanoapp's start callback was called
|
|
#. Send an event of type ``1`` and no data to the nanoapp
|
|
#. Notify that the event was processed
|
|
#. Call the ``nanoappEnd`` function of the nanoapp
|
|
#. Print a message notifying that it's not possible to remove a system level nanoapp
|
|
#. Exit the event loop
|
|
|
|
Roadmap
|
|
=======
|
|
|
|
#. Add an implementation of the `pal/sensor.h`_ and `pal/system.h`_ to Zephyr. These will be
|
|
standalone modules that can be used independently of CHRE, but when ``CONFIG_CHRE`` is enabled
|
|
will also provide an implementation of ``chrePalSensorGetApi()`` and ``struct chrePalSystemApi``.
|
|
#. Add a directory ``chre/nanoapps`` which will host various nanoapps to be used by the Zephyr
|
|
community. These should each have their own Kconfig to enable them and set the appropriate
|
|
dependencies. The first nanoapp will be a lid angle calculator which will use 2 accelerometers.
|
|
#. Update the ``overlay.dts`` of this sample application to include 2 emulated accelerometers and
|
|
configure them to return scripted data.
|
|
#. Run this sample application and watch the nanoapp provide lid angle calculations based on 2
|
|
accelerometers provided by the sensors PAL framework.
|
|
|
|
.. _`chre_api/chre/nanoapp.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/chre_api/include/chre_api/chre/nanoapp.h;drc=7c60a553288d63e6e3370d679803da46dac723a4
|
|
.. _`pal/audio.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/audio.h;l=69;drc=6ca547ad175f80ce9f09f5b7b14fcc6f14565f5c
|
|
.. _`pal/gnss.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/gnss.h;l=152;drc=830255234157cc7afe5201dca19a7fb71ea850fe
|
|
.. _`pal/sensor.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/sensor.h;l=51;drc=23207906add05054a94dfab41b95bcfc39bedfe4
|
|
.. _`pal/system.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/system.h;l=49;drc=6ca547ad175f80ce9f09f5b7b14fcc6f14565f5c
|
|
.. _`pal/wifi.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/wifi.h;l=153;drc=b673b80ed98e1b6e6360bee4ba98e2cd8f4e0935
|
|
.. _`pal/wwan.h`: https://cs.android.com/android/platform/superproject/+/master:system/chre/pal/include/chre/pal/wwan.h;l=69;drc=629361a803cb305c8575b41614e6e071e7141a03
|