Mynewt Sensor Framework Overview
================================
.. toctree::
   :maxdepth: 1

   Sensor API <sensor_api>
   Sensor Manager API <sensor_mgr_api>
   Sensor Listener API <sensor_listener_api>
   Sensor Notifier API <sensor_notifier_api>
   OIC Sensor API <sensor_oic>
   Sensor Shell <sensor_shell>
   Sensor Device Driver <sensor_driver>
   Creating and Configuring Sensor Devices <sensor_create> 


The Mynewt sensor framework is an abstraction layer between an
application and sensor devices. The sensor framework provides the
following support:

-  A set of APIs that allows developers to develop sensor device drivers
   within a common framework and enables application developers to
   develop applications that can access sensor data from any Mynewt
   sensor device using a common interface.

-  Support for onboard and off-board sensors.

-  An OIC sensor server that exposes sensors as OIC resources and
   handles OIC CoAP requests for the sensor resources. A developer can
   easily develop a MyNewt OIC sensor enabled application that serves
   sensor resource requests from OIC client applications.

-  A sensor shell command and optional sensor device driver shell
   commands to view sensor data and manage sensor device settings for
   testing and debugging sensor enabled applications and sensor device
   drivers.

|Alt Layout - Sensor Framework|

Overview of Sensor Support Packages
-----------------------------------

In this guide and the package source code, we use ``SENSORNAME`` (all
uppercase) to refer to a sensor product name. For each sensor named
``SENSORNAME``:

-  The package name for the sensor device driver is ``<sensorname>``.
   All functions and data structures that the sensor device driver
   exports are prefixed with ``<sensorname>``.

-  All syscfg settings defined for the sensor are prefixed with
   ``<SENSORNAME>``. For example:

   -  The ``<SENSORNAME>_CLI`` syscfg setting defined in the device
      driver package to specify whether to enable the sensor device
      shell command.
   -  The ``<SENSORNAME>_ONB`` syscfg setting defined in the BSP to
      specify whether the onboard sensor is enabled.
   -  The ``<SENSORNAME>_OFB`` syscfg setting defined in the sensor
      creator package to specify whether to enable the off-board sensor.

The following Mynewt packages provide sensor support and are needed to
build a sensor enabled application.

-  ``hw/sensor``: The sensor framework package. This package implements
   the `sensor framework
   APIs </os/modules/sensor_framework/sensor_api.html>`__, the `OIC sensor
   server </os/modules/sensor_framework/sensor_oic.html>`__, and the
   `sensor shell
   command </os/modules/sensor_framework/sensor_shell.html>`__.

-  ``hw/sensor/creator``: The sensor creator package. This package
   supports off-board sensor devices. It creates the OS devices for the
   sensor devices that are enabled in an application and configures the
   sensor devices with default values. See the `Creating and Configuring
   a Sensor Device </os/modules/sensor_framework/sensor_create.html>`__
   page for more information.

   **Note:** This package is only needed if you are building an
   application with off-board sensors enabled.

-  ``hw/bsp/``: The BSP for boards that support onboard sensors. The BSP
   creates the OS devices for the onboard sensors that the board
   supports and configures the sensors with default values. See the
   `Creating and Configuring a Sensor
   Device </os/modules/sensor_framework/sensor_create.html>`__ page for
   more information.

-  ``hw/drivers/sensors/*``: These are the sensor device driver
   packages. The ``hw/drivers/sensors/<sensorname>`` package is the
   device driver for a sensor named ``SENSORNAME``. See the `Sensor
   Device Driver </os/modules/sensor_framework/sensor_driver.html>`__ page
   for more information.

.. |Alt Layout - Sensor Framework| image:: /os/modules/sensor_framework/sensor_framework.png

