100 lines
5.3 KiB
Markdown
100 lines
5.3 KiB
Markdown
# 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).
|