<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        
        <!-- This is broken by doc revisioning.
         -->
        <link rel="shortcut icon" href="../../../../img/favicon.ico">

        <title>Sensor Device Driver - Apache Mynewt</title>

        <link href="../../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
        <link rel="stylesheet" href="../../../../css/highlight.css">
        <link href="../../../../css/base.css" rel="stylesheet">
        <link href="../../../../css/custom.css" rel="stylesheet">
        <link href="../../../../css/v2.css" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->

        
            <script>
            (function(i, s, o, g, r, a, m) {
    i["GoogleAnalyticsObject"] = r;
    (i[r] =
        i[r] ||
        function() {
            (i[r].q = i[r].q || []).push(arguments);
        }),
        (i[r].l = 1 * new Date());
    (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");

ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
        
    </head>


    <body class="Sensor Device Driver">


        <div class="container">
    <div class="row v2-main-banner">
        <a class="logo-cell" href="/">
            <img class="logo" src="/img/logo.png">
        </a>
        <div class="tagline-cell">
            <h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
        </div>
        <div class="news-cell">
            <div class="well">
                <h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
            </div>
        </div>
    </div>
</div>

        






<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
    <div class="container">
        <!-- Collapsed navigation -->
        <div class="navbar-header">
            <!-- Expander button -->
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>

        </div>

        <!-- Expanded navigation -->
        <div class="navbar-collapse collapse">
            <!-- Main navigation -->
            <ul class="nav navbar-nav navbar-right">
                <li 
  class=""
>
                    <a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
                </li>
                <li 
  class="important"
>
                    <a href="/quick-start/">Quick Start</a>
                </li>
                <li 
  class=""
>
                    <a href="/about/">About</a>
                </li>
                <li 
  class=""
>
                    <a href="/talks/">Talks</a>
                </li>
                <li 
  class="active"
>
                    <a href="/documentation/">Documentation</a>
                </li>
                <li 
  class=""
>
                    <a href="/download/">Download</a>
                </li>
                <li 
  class=""
>
                    <a href="/community/">Community</a>
                </li>
                <li 
  class=""
>
                    <a href="/events/">Events</a>
                </li>
            </ul>

        </div>
    </div>
</nav>

        

        <div class="container">
            
                <div class="row">
                    <div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
    <div class="top">
        <div role="search">
            <form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
                <div class="form-group">
                    <input type="text" name="q" class="form-control" placeholder="Search documentation" />
                </div>
            </form>
        </div>
    </div>
    <ul class="toc-nav">
      <li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
  <option value="/latest">
    Version: master
  </option>
  <option value="/v1_12_0/" >
    Version: 1.12.0
  </option>
  <option value="/v1_11_0/" >
    Version: 1.11.0
  </option>
  <option value="/v1_10_0/" >
    Version: 1.10.0
  </option>
  <option value="/v1_9_0/" >
    Version: 1.9.0
  </option>
    <option value="/v1_8_0/" >
    Version: 1.8.0
  </option>
  <option value="/v1_7_0/" >
    Version: 1.7.0
  </option>
  <option value="/v1_6_0/" >
    Version: 1.6.0
  </option>
  <option value="/v1_5_0/" >
    Version: 1.5.0
  </option>
  <option value="/v1_4_0/" >
    Version: 1.4.0
  </option>
  <option value="/v1_3_0/os/introduction" selected="selected" >
    Version: 1.3.0
  </option>
  <option value="/v1_2_0/os/introduction" >
    Version: 1.2.0
  </option>
  <option value="/v1_1_0/os/introduction" >
    Version: 1.1.0
  </option>
  <option value="/v1_0_0/os/introduction" >
    Version: 1.0.0
  </option>
  <option value="/v0_9_0/os/introduction" >
    Version: 0.9.0
  </option>
</select></li>
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
          
  
  
    <li ><a href="../../../introduction/">Mynewt Documentation</a>
  
  
    <ul>
          
              
          
              
                
  
  
    <li ><a href="../../../get_started/get_started/">Basic Setup</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../../get_started/vocabulary/">Concepts</a>
  </li>

              
          
              
                
  
  
    <li ><a href="../../../tutorials/tutorials/">Tutorials</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../os_user_guide/">OS User Guide</a>
  
  
    <ul>
          
              
          
              
                
  
  
    <li ><a href="../../../core_os/mynewt_os/">OS Core</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../core_os/porting/port_os/">Porting to your Platform</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../console/console/">Console</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../shell/shell/">Shell</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../split/split/">Split Images</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../bootloader/bootloader/">Bootloader</a>
  
  
    </li>

              
          
              
                
  
  
    <li><a href="
  
  
  ../../fs/fs/fs/

">File System</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../hal/hal/">Hardware Abstraction Layer</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../sensor_framework_overview/">Sensor Framework</a>
  
  
    <ul>
          
              
          
              
                
  
  
    <li><a href="
  ../sensor_api/
">API</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../sensor_shell/">Sensor Shell</a>
  </li>

              
          
              
                
  <li class="active">
    <a href="./">Sensor Device Driver</a>
  </li>

              
          
              
                
  <li >
    <a href="../sensor_create/">Creating and Configuring Sensor Devices</a>
  </li>

              
          
    </ul>
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../drivers/driver/">Drivers</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../testutil/testutil/">Test Utilities</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../devmgmt/newtmgr/">Device Management with Newt Manager</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../imgmgr/imgmgr/">Image Manager</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../baselibc/">Baselibc library</a>
  </li>

              
          
              
                
  
  
    <li ><a href="../../json/json/">JSON</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../fcb/fcb/">Flash Circular Buffer</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../stats/stats/">Stats</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../logs/logs/">Logs</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../sysinitconfig/sysinitconfig/">System Configuration And Initialization</a>
  
  
    </li>

              
          
    </ul>
  
    </li>

              
          
              
                
  
  
    <li><a href="
  ../../../../network/ble/ble_intro/
">BLE User Guide</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../../newt/newt_intro/">Newt Tool Guide</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../../newtmgr/overview/">Newt Manager Guide</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../../../known_issues/">Known Issues</a>
  </li>

              
          
    </ul>
  
    </li>

        
      
        
          
  
  
    <li><a href="
  ../../../../newt/install/prev_releases/
">Appendix</a>
  
  
    </li>

        
      
    </ul>
</div></div>

                    <div class="col-md-9" role="main">
                        <div class="doc-header">
                            <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="/documentation/">Docs</a></li>
    
    
        
          <li>&raquo; <a href="os/modules/sensor_framework/sensor_framework_overview/">Sensor Framework</a></li>
        
      
        
          <li>&raquo; <a href="os/os_user_guide/">OS User Guide</a></li>
        
      
        
          <li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
        
      
      
        <li>&raquo; Sensor Device Driver</li>
      
    
    
      <li class="wy-breadcrumbs-aside">
        
          <a href="https://github.com/apache/mynewt-site/blob/master/docs/os/modules/sensor_framework/sensor_driver.md"
            class="icon icon-github"> Edit on GitHub</a>
        
      </li>
    
  </ul>
</div>
                        </div>
                        
                          
                        
                          
                        
                          
                        
                          
                        
                          
                        
                          
                        
                          
                            <div class="alert alert-warning">
                                <p>
                                    Version 1.3.0 is not the most recent version of the Apache Mynewt
                                    documentation. Click <a href="/latest">here</a> to read the latest
                                    version.
                                </p>
                            </div>
                          
                        
                        
                            <h2 id="sensor-device-driver">Sensor Device Driver</h2>
<p>A Mynewt sensor device driver uses the sensor framework abstraction and API to enable applications to access sensor data from any Mynewt sensor device using a common interface. The sensor device driver must also use the Mynewt HAL interface to communicate with and control a sensor device.</p>
<p>This guide describes what a sensor device driver must implement to enable a sensor device within the sensor framework. For information on using the HAL API to communicate with a sensor device, see the <a href="/os/modules/hal/hal.md">Hardware Layer Abstraction Guide</a>.</p>
<p>The <code>hw/drivers/sensors/&lt;sensorname&gt;</code> package implements the device driver for the sensor named <code>SENSORNAME</code>.</p>
<p><strong>Note:</strong> All example excerpts are from the BNO055 sensor device driver package.</p>
<p><br></p>
<h3 id="initializing-and-configuring-a-sensor-device">Initializing and Configuring a Sensor Device</h3>
<p>A driver package for a sensor named <code>SENSORNAME</code> must define and export the following data structures and functions to initialize and configure a device: </p>
<ul>
<li>
<p><code>struct &lt;sensorname&gt;</code>: This data structure represents a sensor device. The structure  must include a <code>dev</code> field of type <code>struct os_dev</code> and a <code>sensor</code> field of type <code>struct sensor</code>.   For example: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>struct bno055 {
    struct os_dev dev;
    struct sensor sensor;
    struct bno055_cfg cfg;
    os_time_t last_read_time;
};
</code></pre></div>

</li>
<li>
<p><code>struct &lt;sensorname&gt;_cfg</code>: This data structure defines the configuration for a sensor device. The structure fields are specific to the device. This is the data structure that a BSP, the sensor creator package, or an application sets to configure a sensor device. For example: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>struct bno055_cfg {
    uint8_t bc_opr_mode;
    uint8_t bc_pwr_mode;
    uint8_t bc_units;
    uint8_t bc_placement;
    uint8_t bc_acc_range;
    uint8_t bc_acc_bw;

         ...

    uint32_t bc_mask;
};
</code></pre></div>

</li>
<li>
<p><code>&lt;sensorname&gt;_init()</code>:  This is the os device initialization callback of type <code>int (*os_dev_init_func_t)(struct os_dev *, void *)</code> that the <code>os_dev_create()</code> function calls to initialize the device.   For example, the bno055 device driver package defines the following function:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>int bno055_init(struct os_dev *dev, void *arg)
</code></pre></div>

<p>The BSP, which creates a device for an onboard sensor, and the sensor creator package, which creates a device for an off-board sensor, calls the <code>os_dev_create()</code> function and passes:</p>
<ul>
<li>A pointer to a <code>struct &lt;sensorname&gt;</code> variable. </li>
<li>The <code>&lt;sensorname&gt;_init()</code> function pointer.</li>
<li>A pointer to a <code>struct sensor_itf</code> variable that specifies the interface the driver uses to communicate with the sensor device. </li>
</ul>
<p>See the <a href="/os/modules/sensor_framework/sensor_create.md">Creating Sensor Devices</a> page for more details.</p>
<p>The <code>os_dev_create()</code> function calls the <code>&lt;sensorname&gt;_init()</code> function with a pointer to the <code>struct &lt;sensorname&gt;</code> for the <code>dev</code> parameter and a pointer to the <code>struct sensor_itf</code> for the <code>arg</code> parameter.</p>
</li>
<li>
<p><code>&lt;sensorname&gt;_config()</code>: This is the sensor configuration function that the BSP, sensor creator package, or an application calls to configure the sensor device. For example:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>int bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
</code></pre></div>

</li>
</ul>
<p><br></p>
<h3 id="defining-functions-to-read-sensor-data-and-get-sensor-value-type">Defining Functions to Read Sensor Data and Get Sensor Value Type</h3>
<p>A device driver must implement the following functions that the sensor API uses to read sensor data and to get the configuration value type for a sensor: </p>
<ul>
<li>
<p>A function of type <code>int (*sensor_read_func_t)(struct sensor *, sensor_type_t, sensor_data_func_t, void *, uint32_t)</code> that the sensor framework uses to read a single value from a sensor for the specified sensor types. The device driver must implement this function such that it reads, for each sensor type set in the bit mask, a single value from the sensor and calls the <code>sensor_data_funct_t</code> callback with the opaque callback argument , the sensor data, and the sensor type.</p>
</li>
<li>
<p>A  function of type <code>int (*sensor_get_config_func_t)(struct sensor *, sensor_type_t, struct sensor_cfg *)</code> that returns the value type for the specified sensor type.  For example, the value type for a <code>SENSOR_VALUE_TYPE_TEMPERATURE</code> sensor might be <code>SENSOR_VALUE_TYPE_FLOAT</code> and the value type for a <code>SENSOR_TYPE_ACCELEROMETER</code> sensor might be <code>SENSOR_VALUE_TYPE_FLOAT_TRIPLET</code>.  </p>
</li>
</ul>
<p>The driver initializes a <code>sensor_driver</code> structure, shown below,  with the pointers to these functions:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">sensor_driver</span> {
    <span style="color: #000000">sensor_read_func_t</span> <span style="color: #000000">sd_read</span>;
    <span style="color: #000000">sensor_get_config_func_t</span> <span style="color: #000000">sd_get_config</span>;
};
</code></pre></div>

<p>For example:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">static</span> <span style="color: #A90D91">int</span> <span style="color: #000000">bno055_sensor_read</span>(<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">sensor</span> <span style="color: #000000">*</span>, <span style="color: #000000">sensor_type_t</span>,
        <span style="color: #000000">sensor_data_func_t</span>, <span style="color: #A90D91">void</span> <span style="color: #000000">*</span>, <span style="color: #A90D91">uint32_t</span>);
<span style="color: #A90D91">static</span> <span style="color: #A90D91">int</span> <span style="color: #000000">bno055_sensor_get_config</span>(<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">sensor</span> <span style="color: #000000">*</span>, <span style="color: #000000">sensor_type_t</span>,
        <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">sensor_cfg</span> <span style="color: #000000">*</span>);

<span style="color: #A90D91">static</span> <span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">sensor_driver</span> <span style="color: #000000">g_bno055_sensor_driver</span> <span style="color: #000000">=</span> {
    <span style="color: #000000">bno055_sensor_read</span>,
    <span style="color: #000000">bno055_sensor_get_config</span>
};
</code></pre></div>

<p><br></p>
<h3 id="registering-the-sensor-in-the-sensor-framework">Registering the Sensor in the Sensor Framework</h3>
<p>The device driver must initialize and register a <code>struct sensor</code> object with the sensor manager. See the <a href="/os/modules/sensor_framework/sensor_api.md">Sensor API</a> and the <a href="/os/modules/sensor_framework/sensor_manager_api.md">Sensor Manager API</a> pages for more details.</p>
<p>The device driver <code>&lt;sensorname&gt;_init()</code> function initializes and registers a sensor object as follows:</p>
<ul>
<li>
<p>Calls the <code>sensor_init()</code> function to initialize the <code>struct sensor</code> object.</p>
</li>
<li>
<p>Calls the <code>sensor_set_driver()</code> function to specify the sensor types that the sensor device supports, and the pointer to the <code>struct sensor_driver</code> variable that specifies the driver functions to read the sensor data and to get the value type for a sensor.</p>
</li>
<li>
<p>Calls the <code>sensor_set_interface()</code> function to set the interface that the device driver uses to communicate with the sensor device. The BSP, or sensor creator package for an off-board sensors, sets up the <code>sensor_itf</code> and passes it to the <code>&lt;sensorname&gt;_init()</code> function.  The <code>sensor_set_interface()</code> functions saves this information in the sensor object. The device driver uses the <code>SENSOR_GET_ITF()</code> macro to retrieve the sensor_itf  when it needs to communicate with the sensor device.</p>
</li>
<li>
<p>Calls the <code>sensor_mgr_register()</code> function to register the sensor with the sensor manager.</p>
</li>
</ul>
<p>For example:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>int
bno055_init(struct os_dev *dev, void *arg)
{
    struct bno055 *bno055;
    struct sensor *sensor;
    int rc;

    if (!arg || !dev) {
        rc = SYS_ENODEV;
        goto err;
    }

<span style="background-color: #ffffcc">    bno055 = (struct bno055 *) dev;
</span>
    rc = bno055_default_cfg(&amp;bno055-&gt;cfg);
    if (rc) {
        goto err;
    }

<span style="background-color: #ffffcc">    sensor = &amp;bno055-&gt;sensor;
</span>
    /* Code to setup logging and stats may go here */
    .... 

<span style="background-color: #ffffcc">    rc = sensor_init(sensor, dev);
</span>    if (rc != 0) {
        goto err;
    }

    /* Add the accelerometer/magnetometer driver */
<span style="background-color: #ffffcc">    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER         |
</span><span style="background-color: #ffffcc">            SENSOR_TYPE_MAGNETIC_FIELD | SENSOR_TYPE_GYROSCOPE       |
</span><span style="background-color: #ffffcc">            SENSOR_TYPE_TEMPERATURE    | SENSOR_TYPE_ROTATION_VECTOR |
</span><span style="background-color: #ffffcc">            SENSOR_TYPE_GRAVITY        | SENSOR_TYPE_LINEAR_ACCEL    |
</span><span style="background-color: #ffffcc">            SENSOR_TYPE_EULER, (struct sensor_driver *) &amp;g_bno055_sensor_driver);
</span>    if (rc != 0) {
        goto err;
    }

    /* Set the interface */
<span style="background-color: #ffffcc">    rc = sensor_set_interface(sensor, arg);
</span>    if (rc) {
        goto err;
    }

<span style="background-color: #ffffcc">    rc = sensor_mgr_register(sensor);
</span>    if (rc != 0) {
        goto err;
    }

    return (0);
err:
    return (rc);
}
</code></pre></div>

<p><br></p>
<h3 id="configuring-the-sensor-device-and-setting-the-configured-sensor-types">Configuring the Sensor Device and Setting the Configured Sensor Types</h3>
<p>After the BSP, or the sensor creator package for an off-board sensor, creates the OS device for a sensor, it calls the <code>&lt;sensorname&gt;_config()</code> function to configure sensor device information such as mode, power mode, and to set the configured  sensor types. The <code>&lt;sensorname&gt;_config()</code> function configures the settings on the sensor device. It  must also call the <code>sensor_set_type_mask()</code> function to set the configured sensor types in the sensor object. The configured sensor types are a subset of the sensor types that the sensor device supports and the sensor framework only reads sensor data for configured sensor types.</p>
<p><strong>Notes:</strong> </p>
<ul>
<li>
<p>The device driver uses the <code>SENSOR_GET_ITF()</code> macro to retrieve the sensor interface to communicate with the sensor.</p>
</li>
<li>
<p>If a sensor device has a chip ID that can be queried, we recommend that the device driver read and verify the chip ID with the data sheet.</p>
</li>
<li>
<p>An application may call the <code>&lt;sensorname&gt;_config()</code> function to configure the sensor device.</p>
</li>
</ul>
<p>For example:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>int
bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
{
    int rc;
    uint8_t id;
    uint8_t mode;
<span style="background-color: #ffffcc">    struct sensor_itf *itf;
</span>
<span style="background-color: #ffffcc">    itf = SENSOR_GET_ITF(&amp;(bno055-&gt;sensor));
</span>
<span style="background-color: #ffffcc">    /* Check if we can read the chip address */
</span><span style="background-color: #ffffcc">    rc = bno055_get_chip_id(itf, &amp;id);
</span><span style="background-color: #ffffcc">    if (rc) {
</span><span style="background-color: #ffffcc">        goto err;
</span><span style="background-color: #ffffcc">    }
</span><span style="background-color: #ffffcc">
</span><span style="background-color: #ffffcc">    if (id != BNO055_ID) {
</span><span style="background-color: #ffffcc">        os_time_delay((OS_TICKS_PER_SEC * 100)/1000 + 1);
</span><span style="background-color: #ffffcc">
</span><span style="background-color: #ffffcc">        rc = bno055_get_chip_id(itf, &amp;id);
</span><span style="background-color: #ffffcc">        if (rc) {
</span><span style="background-color: #ffffcc">            goto err;
</span><span style="background-color: #ffffcc">        }
</span><span style="background-color: #ffffcc">
</span><span style="background-color: #ffffcc">        if(id != BNO055_ID) {
</span><span style="background-color: #ffffcc">            rc = SYS_EINVAL;
</span><span style="background-color: #ffffcc">            goto err;
</span><span style="background-color: #ffffcc">        }
</span><span style="background-color: #ffffcc">    }
</span>
           ....

    /* Other code to set the configuration on the sensor device. */

           .... 

<span style="background-color: #ffffcc">    rc = sensor_set_type_mask(&amp;(bno055-&gt;sensor), cfg-&gt;bc_mask);
</span><span style="background-color: #ffffcc">    if (rc) {
</span><span style="background-color: #ffffcc">        goto err;
</span><span style="background-color: #ffffcc">    }
</span><span style="background-color: #ffffcc">
</span><span style="background-color: #ffffcc">    bno055-&gt;cfg.bc_mask = cfg-&gt;bc_mask;
</span>
    return 0;
err:
    return rc;
}
</code></pre></div>

<p><br></p>
<h3 id="implementing-a-sensor-device-shell-command">Implementing a Sensor Device Shell Command</h3>
<p>A sensor device driver package may optionally implement a sensor device shell command that retrieves and sets sensor device information to aid in testing and debugging.  While the sensor framework <a href="/os/modules/sensor_framework/sensor_shell.md">sensor shell command</a> reads sensor data for configured sensor types and is useful for testing an application, it does not access low level device information, such as reading register values and setting hardware configurations, that might be needed to test a sensor device or to debug the sensor device driver code. A sensor device shell command implementation is device specific but should minimally support reading sensor data for all the sensor types that the device supports because the sensor framework <code>sensor</code> shell command only reads sensor data for configured sensor types.</p>
<p>The package should: </p>
<ul>
<li>
<p>Name the sensor device shell command <code>&lt;sensorname&gt;</code>.  For example, the sensor device shell command for the BNO055 sensor device is <code>bno055</code>.</p>
</li>
<li>
<p>Define a <code>&lt;SENSORNAME&gt;_CLI</code> syscfg setting to specify whether the shell command is enabled and disable the setting by default.</p>
</li>
<li>
<p>Export a <code>&lt;sensorname&gt;_shell_init()</code> function that an application calls to initialize the sensor shell command when the <code>SENSORNAME_CLI</code> setting is enabled.</p>
</li>
</ul>
<p>For an example on how to implement a sensor device shell command, see the <a href="https://github.com/apache/mynewt-core/blob/master/hw/drivers/sensors/bno055/src/bno055_shell.c">bno055 shell command</a> source code. See the <a href="/os/tutorials/sensors/sensor_nrf52_bno055.md">Enabling an Off-Board Sensor in an Existing Application Tutorial</a> for examples of the bno055 shell command.</p>
<p><br></p>
<h3 id="defining-logs">Defining Logs</h3>
<p>A sensor device driver should define logs for testing purposes. See the <a href="os/modules/logs/logs.md">Log OS Guide</a> for more details on how to add logs.  The driver should define a <code>&lt;SENSORNAME&gt;_LOG</code> syscfg setting to specify whether logging is enabled and disable the setting by default.</p>
<p>Here is an example from the BNO055 sensor driver package:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="background-color: #ffffcc">#if MYNEWT_VAL(BNO055_LOG)
</span><span style="background-color: #ffffcc">#include &quot;log/log.h&quot;
</span><span style="background-color: #ffffcc">#endif
</span>
<span style="background-color: #ffffcc">if MYNEWT_VAL(BNO055_LOG)
</span><span style="background-color: #ffffcc">#define LOG_MODULE_BNO055 (305)
</span><span style="background-color: #ffffcc">#define BNO055_INFO(...)  LOG_INFO(&amp;_log, LOG_MODULE_BNO055, __VA_ARGS__)
</span><span style="background-color: #ffffcc">#define BNO055_ERR(...)   LOG_ERROR(&amp;_log, LOG_MODULE_BNO055, __VA_ARGS__)
</span><span style="background-color: #ffffcc">static struct log _log;
</span><span style="background-color: #ffffcc">#else
</span><span style="background-color: #ffffcc">#define BNO055_INFO(...)
</span><span style="background-color: #ffffcc">#define BNO055_ERR(...)
</span><span style="background-color: #ffffcc">#endif
</span><span style="background-color: #ffffcc">
</span>     ...

int
bno055_init(struct os_dev *dev, void *arg)
{

      ...

    rc = bno055_default_cfg(&amp;bno055-&gt;cfg);
    if (rc) {
        goto err;
    }

<span style="background-color: #ffffcc">#if MYNEWT_VAL(BNO055_LOG)
</span><span style="background-color: #ffffcc">    log_register(dev-&gt;od_name, &amp;_log, &amp;log_console_handler, NULL, LOG_SYSLEVEL);
</span><span style="background-color: #ffffcc">#endif
</span>
      ...
} 
</code></pre></div>

<p><br></p>
<h3 id="defining-stats">Defining Stats</h3>
<p>A sensor device driver may also define stats for the sensor. See the <a href="os/modules/stats/stats.md">Stats OS Guide</a> for more details on how to add stats.  The driver should define a <code>&lt;SENSORNAME&gt;_STATS</code> syscfg setting to specify whether stats is enabled and disable the setting by default.</p>
<p>Here is an example from the BNO055 sensor driver package:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="background-color: #ffffcc">#if MYNEWT_VAL(BNO055_STATS)
</span><span style="background-color: #ffffcc">#include &quot;stats/stats.h&quot;
</span><span style="background-color: #ffffcc">#endif
</span>
<span style="background-color: #ffffcc">#if MYNEWT_VAL(BNO055_STATS)
</span><span style="background-color: #ffffcc">/* Define the stats section and records */
</span><span style="background-color: #ffffcc">STATS_SECT_START(bno055_stat_section)
</span><span style="background-color: #ffffcc">    STATS_SECT_ENTRY(errors)
</span><span style="background-color: #ffffcc">STATS_SECT_END
</span>
<span style="background-color: #ffffcc">/* Define stat names for querying */
</span><span style="background-color: #ffffcc">STATS_NAME_START(bno055_stat_section)
</span><span style="background-color: #ffffcc">    STATS_NAME(bno055_stat_section, errors)
</span><span style="background-color: #ffffcc">STATS_NAME_END(bno055_stat_section)
</span>
<span style="background-color: #ffffcc">/* Global variable used to hold stats data */
</span><span style="background-color: #ffffcc">STATS_SECT_DECL(bno055_stat_section) g_bno055stats;
</span><span style="background-color: #ffffcc">#endif
</span>
   ...


int
bno055_init(struct os_dev *dev, void *arg)
{

      ...

<span style="background-color: #ffffcc">#if MYNEWT_VAL(BNO055_STATS)
</span><span style="background-color: #ffffcc">    /* Initialise the stats entry */
</span><span style="background-color: #ffffcc">    rc = stats_init(
</span><span style="background-color: #ffffcc">        STATS_HDR(g_bno055stats),
</span><span style="background-color: #ffffcc">        STATS_SIZE_INIT_PARMS(g_bno055stats, STATS_SIZE_32),
</span><span style="background-color: #ffffcc">        STATS_NAME_INIT_PARMS(bno055_stat_section));
</span><span style="background-color: #ffffcc">    SYSINIT_PANIC_ASSERT(rc == 0);
</span><span style="background-color: #ffffcc">    /* Register the entry with the stats registry */
</span><span style="background-color: #ffffcc">    rc = stats_register(dev-&gt;od_name, STATS_HDR(g_bno055stats));
</span><span style="background-color: #ffffcc">    SYSINIT_PANIC_ASSERT(rc == 0);
</span><span style="background-color: #ffffcc">#endif
</span>
      ...
}
</code></pre></div>
                        
                        <div class="row">
                            



<ul class="nav nav-pills" style="margin-bottom: 10px">
    <li>
    
    </li>
    <li class="pull-right">
    
    </li>
</ul>
                        </div>
                        <footer class="row">
    <div class="col-xs-12">
        
            <p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
        
    </div>
    <div class="col-xs-12">
        <div class="logos">
            <a href="https://www.apache.org/">
                <img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
            </a>
            <p>
                Copyright © 2015-2021 The Apache Software Foundation.<br>
                <small class="footnote">
                    Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
                    project logo are either registered trademarks or trademarks of the Apache
                    Software Foundation in the United States and other countries.
                </small>
            </p>
            <a href="">
                <img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
            </a>
        </div>
    </div>
    <a href="https://www.apache.org/licenses/">
        <button class="button-footer-asf">
            License
        </button>
    </a>
    <a href="https://www.apache.org/foundation/sponsorship.html">
        <button class="button-footer-asf">
            Sponsorship
        </button>
    </a>
    <a href="https://www.apache.org/foundation/thanks.html">
        <button class="button-footer-asf">
            Thanks
        </button>
    </a>
    <a href="https://www.apache.org/security/">
        <button class="button-footer-asf">
            Security
        </button>
    </a>
    <a href="https://apache.org/events/current-event">
        <button class="button-footer-asf">
            ASF Events
        </button>
    </a>
</footer>
                    </div>
                </div>
            
            
        </div>

        <script src="../../../../js/jquery-1.10.2.min.js"></script>
        <script src="../../../../js/bootstrap-3.0.3.min.js"></script>
        <script src="../../../../js/highlight.pack.js"></script>
        <script src="../../../../js/base.js"></script>
        <script src="../../../../js/custom.js"></script>
            <script src="search/main.js"></script>

    </body>
</html>