|
|
# Context Hub Runtime Environment (CHRE)
|
|
|
|
|
|
This project contains the AOSP reference implementation of the Context Hub
|
|
|
Runtime Environment (CHRE), which is Android’s platform for developing always-on
|
|
|
applications, called *nanoapps*. CHRE runs in a vendor-specific processor that
|
|
|
is independent of the main applications processor that runs Android. This
|
|
|
enables CHRE and its nanoapps to be more power-efficient for use cases that
|
|
|
require frequent background processing of contextual data, like sensor inputs.
|
|
|
Nanoapps are written to the CHRE API, which is standardized across all
|
|
|
platforms, enabling them to be code-compatible across different devices.
|
|
|
|
|
|
The CHRE reference implementation (“CHRE framework”) is designed to be portable
|
|
|
across hardware and software platforms. While Android does not require a
|
|
|
particular implementation (only compliance to the contracts given in the CHRE
|
|
|
API) using the reference implementation helps to reduce the work needed to
|
|
|
support CHRE, while also ensuring more consistent behavior for scenarios that
|
|
|
can be difficult to enforce via testing.
|
|
|
|
|
|
## Navigating the docs
|
|
|
|
|
|
Use the navigation bar at the top and/or the links below to move through the
|
|
|
documentation. Raw files can also be found in the `/doc` folder.
|
|
|
|
|
|
* Documentation related to the CHRE framework:
|
|
|
* [Framework Overview](/doc/framework_overview.md)
|
|
|
* [Porting Guide](/doc/porting_guide.md)
|
|
|
* [Build System](/doc/framework_build.md)
|
|
|
* [Debugging](/doc/framework_debugging.md)
|
|
|
* [Testing](/doc/framework_testing.md)
|
|
|
* [Vendor Extensions](/doc/vendor_extensions.md)
|
|
|
* Documentation related to nanoapps:
|
|
|
* [Nanoapp Overview](/doc/nanoapp_overview.md)
|
|
|
* [Developer Guide](/doc/nanoapp_developer_guide.md)
|
|
|
* [Interacting with Nanoapps](/doc/nanoapp_clients.md)
|
|
|
* General documentation:
|
|
|
* [Compatibility Design](/doc/compatibility.md)
|
|
|
* [Contributing](/doc/contributing.md)
|
|
|
|
|
|
The CHRE API and PAL API are also extensively documented using Doxygen syntax.
|
|
|
Run `doxygen` in the same folder as `Doxyfile` to generate a browseable HTML
|
|
|
version of the documentation.
|
|
|
|
|
|
## Navigating the code
|
|
|
|
|
|
This repository (system/chre) contains an assortment of code, structured as
|
|
|
follows:
|
|
|
|
|
|
- ``apps/``: Public nanoapp source code, including sample nanoapps intended to
|
|
|
showcase how to use the CHRE APIs, and test nanoapps used to validate API
|
|
|
functionality
|
|
|
- ``build/``: Files related to CHRE’s Makefile-based build system, which
|
|
|
supports building the CHRE framework and nanoapps using a configurable
|
|
|
toolchain
|
|
|
- ``chpp/``: Context Hub Peripheral Protocol (CHPP) source code - see the nested
|
|
|
README and associated documentation for details
|
|
|
- ``chre_api/``: Contains the official definition of the CHRE API (current and
|
|
|
past versions), which all CHRE implementations must adhere to
|
|
|
- ``core/``: Common CHRE framework code, which is applicable to every platform
|
|
|
(contrast to ``platform/``)
|
|
|
- ``doc/``: Contains documentation for the CHRE framework and associated topics
|
|
|
- ``external/``: Code developed primarily outside of AOSP which (can be)
|
|
|
leveraged by CHRE, and is potentially customized for CHRE (e.g. flatbuffers)
|
|
|
- ``host/``: Reference code which supports the CHRE implementation, but runs on
|
|
|
the applications processor (“host”), for example the Context Hub HAL
|
|
|
- ``java/``: Java test code used in conjunction with test nanoapps
|
|
|
- ``pal/``: The binary-stable Platform Abstraction Layer (PAL) C API definitions
|
|
|
and tests (these PALs may optionally be used by the platform implementation)
|
|
|
- ``platform/``: Code related to the implementation of CHRE on a particular
|
|
|
platform/device (compare to ``core/``), divided into sub-folders as follows:
|
|
|
- ``platform/include``: The interface between common code in ``core/`` and
|
|
|
platform-specific code implemented elsewhere in ``platform/``
|
|
|
- ``platform/shared``: Code that may apply to multiple platforms, but is not
|
|
|
necessarily applicable to _all_ platforms (as in ``core/``). For example,
|
|
|
multiple platforms may choose to use the binary-stable PAL interface - this
|
|
|
folder contains source files translating from the C++ platform abstractions
|
|
|
to the C PAL APIs.
|
|
|
- ``platform/<platform_name>``: Code specific to the platform indicated by
|
|
|
``platform_name``
|
|
|
- ``util/``: Utility code that is not platform-specific, but not part of the
|
|
|
core framework implementation. Includes code that is usable by nanoapps.
|
|
|
- ``variant/``: Code/configuration that is specific to a particular device (more
|
|
|
detail on variants can be found below). For example, multiple generations of a
|
|
|
given chip may use the same platform code, but the code may be configured on a
|
|
|
per-device basis in the build via ``variant.mk``.
|
|
|
|
|
|
Code related to CHRE also exists in other parts of the Android tree, including:
|
|
|
|
|
|
- ``hardware/interfaces/contexthub/``: The Context Hub HAL definition
|
|
|
- ``frameworks/base/core/java/android/hardware/location/ContextHub*.java``: The
|
|
|
APIs used by privileged apps to interact with CHRE and nanoapps
|
|
|
- ``frameworks/base/services/core/java/com/android/server/location/ContextHub*.java``:
|
|
|
The Context Hub service implementation in system server
|
|
|
|
|
|
# Have Questions?
|
|
|
|
|
|
If you’re unable to find the answers you’re looking for in CHRE documentation
|
|
|
or are looking for specific guidance for your platform, device, or nanoapp,
|
|
|
please reach out to the CHRE team via your TAM or through the [Google Issue
|
|
|
Tracker](https://developers.google.com/issue-tracker).
|