blob: 8f21bd8a20f2f4d1de5e3b70babda3e2c8085404 [file] [log] [blame]
<!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>Change the Default Configuration For a Sensor - 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="Change the Default Configuration For a Sensor">
<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.11.0, Apache NimBLE 1.6.0 </a> released (September 7, 2023)
</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_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" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" selected="selected" >
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</a>
<ul>
<li ><a href="../../blinky/">Project Blinky</a>
</li>
<li ><a href="../../repo/add_repos/">Work with repositories</a>
</li>
<li ><a href="../../project-slinky/">Project Slinky for Remote Comms</a>
</li>
<li><a href="
../../ble_bare_bones/
">Bluetooth Low Energy</a>
</li>
<li><a href="
../../event_queue/
">OS Fundamentals</a>
</li>
<li><a href="
../../add_newtmgr/
">Remote Device Management</a>
</li>
<li><a href="
../sensors/
">Sensors</a>
<ul>
<li ><a href="../sensors/">Sensor Framework</a>
<ul>
<li >
<a href="../sensor_nrf52_bno055/">Enable an Off-Board Sensor in an Existing Application</a>
</li>
<li class="active">
<a href="./">Change the Default Configuration For a Sensor</a>
</li>
<li >
<a href="../sensor_thingy_lis2dh12_onb/">Develop an Application for an Onboard Sensor</a>
</li>
<li ><a href="../sensor_oic_overview/">Enable OIC Sensor Data Monitoring</a>
</li>
</ul>
</li>
<li><a href="
../../air_quality_sensor/
">Air-quality Sensor project</a>
</li>
<li >
<a href="../../nrf52_adc/">Add an Analog Sensor</a>
</li>
</ul>
</li>
<li><a href="
../../segger_rtt/
">Tooling</a>
</li>
<li><a href="
../../codesize/
">Other</a>
</li>
</ul>
</li>
<li ><a href="../../../os_user_guide/">OS User Guide</a>
</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="
../../../../faq/go_env/
">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/tutorials/sensors/sensors/">Sensor Framework</a></li>
<li>&raquo; Sensors</li>
<li>&raquo; <a href="os/tutorials/tutorials/">Tutorials</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; Change the Default Configuration For a Sensor</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/os/tutorials/sensors/sensor_offboard_config.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.1.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="changing-the-default-configuration-for-a-sensor">Changing the Default Configuration for a Sensor</h2>
<p>This tutorial shows you how to change default configuration values for an off-board sensor. It continues with the example in the <a href="/os/tutorials/sensors/sensor_offboard_config.md">Enabling an Off-Board Sensor in an Existing Application tutorial</a>.</p>
<p>** Note:** You can also follow most of the instructions in this tutorial to change the default configuration for an onboard sensor. The difference is that the BSP, instead of the sensor creator package, creates and configures the onboard sensor devices in the <code>hal_bsp.c</code> file. You should check the BSP to determine whether the default configuration for a sensor meets your application requirements.</p>
<h3 id="prerequisite">Prerequisite</h3>
<p>Complete the tasks described in the <a href="/os/tutorials/sensors/sensor_offboard_config.md">Enabling an Off-Board Sensor in an Existing Application tutorial</a>. </p>
<h3 id="overview-on-how-to-initialize-the-configuration-values-for-a-sensor">Overview on How to Initialize the Configuration Values for a Sensor</h3>
<p>The sensor creator package, <code>hw/sensor/creator</code>, creates, for each enabled sensor, an os device in the kernel for the sensor and initializes the sensor with its default configuration when the package is initialized. The steps to configure a sensor device are:</p>
<ol>
<li>Open the os device for the sensor.</li>
<li>Initialize the sensor driver configuration data structure with default values.</li>
<li>Call the <code>&lt;sensorname&gt;_config()</code> function that the sensor device driver package exports. </li>
<li>Close the os device for the sensor.</li>
</ol>
<p>For the BNO055 sensor device, the creator package calls the local <code>config_bno055_sensor()</code> function to configure the sensor. A code excerpt for this function is shown below:</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">config_bno055_sensor</span>(<span style="color: #A90D91">void</span>)
{
<span style="color: #A90D91">int</span> <span style="color: #000000">rc</span>;
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_dev</span> <span style="color: #000000">*dev</span>;
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">bno055_cfg</span> <span style="color: #000000">bcfg</span>;
<span style="color: #000000">dev</span> <span style="color: #000000">=</span> (<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_dev</span> <span style="color: #000000">*</span>) <span style="color: #000000">os_dev_open</span>(<span style="color: #C41A16">&quot;bno055_0&quot;</span>, <span style="color: #000000">OS_TIMEOUT_NEVER</span>, <span style="color: #A90D91">NULL</span>);
<span style="color: #000000">assert</span>(<span style="color: #000000">dev</span> <span style="color: #000000">!=</span> <span style="color: #A90D91">NULL</span>);
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_units</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_UNIT_MS2</span> <span style="color: #000000">|</span> <span style="color: #000000">BNO055_ANGRATE_UNIT_DPS</span> <span style="color: #000000">|</span>
<span style="color: #000000">BNO055_EULER_UNIT_DEG</span> <span style="color: #000000">|</span> <span style="color: #000000">BNO055_TEMP_UNIT_DEGC</span> <span style="color: #000000">|</span>
<span style="color: #000000">BNO055_DO_FORMAT_ANDROID</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_opr_mode</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_OPR_MODE_NDOF</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_pwr_mode</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_PWR_MODE_NORMAL</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_acc_bw</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_CFG_BW_125HZ</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_acc_range</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_CFG_RNG_16G</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_mask</span> <span style="color: #000000">=</span> <span style="color: #000000">SENSOR_TYPE_ACCELEROMETER|</span>
<span style="color: #000000">SENSOR_TYPE_MAGNETIC_FIELD|</span>
<span style="color: #000000">SENSOR_TYPE_GYROSCOPE|</span>
<span style="color: #000000">SENSOR_TYPE_EULER|</span>
<span style="color: #000000">SENSOR_TYPE_GRAVITY|</span>
<span style="color: #000000">SENSOR_TYPE_LINEAR_ACCEL|</span>
<span style="color: #000000">SENSOR_TYPE_ROTATION_VECTOR</span>;
<span style="color: #000000">rc</span> <span style="color: #000000">=</span> <span style="color: #000000">bno055_config</span>((<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">bno055</span> <span style="color: #000000">*</span>) <span style="color: #000000">dev</span>, <span style="color: #000000">&amp;bcfg</span>);
<span style="color: #000000">os_dev_close</span>(<span style="color: #000000">dev</span>);
<span style="color: #A90D91">return</span> <span style="color: #000000">rc</span>;
}
</code></pre></div>
<p><br></p>
<h3 id="changing-the-default-configuration">Changing the Default Configuration</h3>
<p>To change the default configuration, you can directly edit the fields in the <code>config_bno055_sensor()</code> function in the <code>hw/sensor/creator/sensor_creator.c</code> file or add code to your application to reconfigure the sensor during application initialization. </p>
<p>This tutorial shows you how to add the code to the <code>apps/sensors_test/src/main.c</code> file to configure the sensor without the accelerometer sensor type. When you reconfigure a sensor in the application, you must initialize all the fields in the sensor configuration data structure even if you are not changing the default values. </p>
<p><br></p>
<h4 id="step-1-adding-the-sensor-device-driver-header-file">Step 1: Adding the Sensor Device Driver Header File</h4>
<p>Add the bno055 device driver header file:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>#include &lt;bno055/bno055.h&gt;
</code></pre></div>
<p><br></p>
<h4 id="step-2-adding-a-new-configuration-function">Step 2: Adding a New Configuration Function</h4>
<p>Add the <code>sensors_test_config_bno055()</code> function and copy the code from the <code>config_bno055_sensor()</code> function in the <code>hw/sensor/creator/sensor_creator.c</code> file to the body of the <code>sensors_test_config_bno055()</code> function. The content of the <code>sensors_test_config_bno055()</code> function should look like the example below:</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">sensors_test_config_bno055</span>(<span style="color: #A90D91">void</span>)
{
<span style="color: #A90D91">int</span> <span style="color: #000000">rc</span>;
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_dev</span> <span style="color: #000000">*dev</span>;
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">bno055_cfg</span> <span style="color: #000000">bcfg</span>;
<span style="color: #000000">dev</span> <span style="color: #000000">=</span> (<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_dev</span> <span style="color: #000000">*</span>) <span style="color: #000000">os_dev_open</span>(<span style="color: #C41A16">&quot;bno055_0&quot;</span>, <span style="color: #000000">OS_TIMEOUT_NEVER</span>, <span style="color: #A90D91">NULL</span>);
<span style="color: #000000">assert</span>(<span style="color: #000000">dev</span> <span style="color: #000000">!=</span> <span style="color: #A90D91">NULL</span>);
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_units</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_UNIT_MS2</span> <span style="color: #000000">|</span> <span style="color: #000000">BNO055_ANGRATE_UNIT_DPS</span> <span style="color: #000000">|</span>
<span style="color: #000000">BNO055_EULER_UNIT_DEG</span> <span style="color: #000000">|</span> <span style="color: #000000">BNO055_TEMP_UNIT_DEGC</span> <span style="color: #000000">|</span>
<span style="color: #000000">BNO055_DO_FORMAT_ANDROID</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_opr_mode</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_OPR_MODE_NDOF</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_pwr_mode</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_PWR_MODE_NORMAL</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_acc_bw</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_CFG_BW_125HZ</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_acc_range</span> <span style="color: #000000">=</span> <span style="color: #000000">BNO055_ACC_CFG_RNG_16G</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_use_ext_xtal</span> <span style="color: #000000">=</span> <span style="color: #1C01CE">1</span>;
<span style="color: #000000">bcfg</span>.<span style="color: #000000">bc_mask</span> <span style="color: #000000">=</span> <span style="color: #000000">SENSOR_TYPE_ACCELEROMETER|</span>
<span style="color: #000000">SENSOR_TYPE_MAGNETIC_FIELD|</span>
<span style="color: #000000">SENSOR_TYPE_GYROSCOPE|</span>
<span style="color: #000000">SENSOR_TYPE_EULER|</span>
<span style="color: #000000">SENSOR_TYPE_GRAVITY|</span>
<span style="color: #000000">SENSOR_TYPE_LINEAR_ACCEL|</span>
<span style="color: #000000">SENSOR_TYPE_ROTATION_VECTOR</span>;
<span style="color: #000000">rc</span> <span style="color: #000000">=</span> <span style="color: #000000">bno055_config</span>((<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">bno055</span> <span style="color: #000000">*</span>) <span style="color: #000000">dev</span>, <span style="color: #000000">&amp;bcfg</span>);
<span style="color: #000000">os_dev_close</span>(<span style="color: #000000">dev</span>);
<span style="color: #A90D91">return</span> <span style="color: #000000">rc</span>;
}
</code></pre></div>
<p><br></p>
<h4 id="step-3-changing-the-default-configuration-settings">Step 3: Changing the Default Configuration Settings</h4>
<p>Delete the <code>SENSOR_TYPE_ACCELEROMETER</code> type from the <code>bcfg.bc_mask</code> initialization setting values:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>static int
sensors_test_config_bno055(void)
{
int rc
...
/* Delete the SENSOR_TYPE_ACCELEROMETER from the mask */
<span style="background-color: #ffffcc"> bcfg.bc_mask = SENSOR_TYPE_MAGNETIC_FIELD|
</span> SENSOR_TYPE_GYROSCOPE|
SENSOR_TYPE_EULER|
SENSOR_TYPE_GRAVITY|
SENSOR_TYPE_LINEAR_ACCEL|
SENSOR_TYPE_ROTATION_VECTOR;
rc = bno055_config((struct bno055 *) dev, &amp;bcfg);
os_dev_close(dev);
return rc;
</code></pre></div>
<p><br></p>
<h4 id="step-4-calling-the-configuration-function-from-main">Step 4: Calling the Configuration Function From main()</h4>
<p>Add the <code>int rc</code> declaration and the call to the <code>sensors_test_config_bno055()</code> function in <code>main()</code>:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">int</span>
<span style="color: #000000">main</span>(<span style="color: #A90D91">int</span> <span style="color: #000000">argc</span>, <span style="color: #A90D91">char</span> <span style="color: #000000">**argv</span>)
{
<span style="color: #177500">/* Add rc for the return value from sensors_test_config_bno055() */</span>
<span style="color: #A90D91">int</span> <span style="color: #000000">rc</span>;
....
<span style="color: #177500">/* Add call to sensors_test_config_bno055() and abort on error */</span>
<span style="color: #000000">rc</span> <span style="color: #000000">=</span> <span style="color: #000000">sensors_test_config_bno055</span>();
<span style="color: #000000">assert</span>(<span style="color: #000000">rc</span> <span style="color: #000000">==</span> <span style="color: #1C01CE">0</span>);
<span style="color: #177500">/* log reboot */</span>
<span style="color: #000000">reboot_start</span>(<span style="color: #000000">hal_reset_cause</span>());
<span style="color: #177500">/*</span>
<span style="color: #177500"> * As the last thing, process events from default event queue.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">while</span> (<span style="color: #1C01CE">1</span>) {
<span style="color: #000000">os_eventq_run</span>(<span style="color: #000000">os_eventq_dflt_get</span>());
}
<span style="color: #A90D91">return</span> (<span style="color: #1C01CE">0</span>);
}
</code></pre></div>
<p><br></p>
<h4 id="step-5-building-a-new-application-image">Step 5: Building a New Application Image</h4>
<p>Run the <code>newt build nrf52_bno055_test</code> and the <code>newt create-image nrf52_bno055_test 2.0.0</code> commands to rebuild and create a new application image.</p>
<p><br></p>
<h4 id="step-6-loading-the-new-image-and-rebooting-the-device">Step 6: Loading the New Image and Rebooting the Device</h4>
<p>Run the <code>newt load nrf52_bno055_test</code> command and power the device OFF and On.</p>
<p><br></p>
<h4 id="step-7-verifing-the-sensor-is-configured-with-the-new-values">Step 7: Verifing the Sensor is Configured with the New Values</h4>
<p>Start a terminal emulator, and run the <code>sensor list</code> command to verify the accelerometer (0x1) is not configured. The <code>configured type</code> listed for the sensor should not have the value <code>0x1</code>.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>045930 compat&gt; sensor list
<span style="background-color: #ffffcc">046482 sensor dev = bno055_0, configured type = 0x2 0x4 0x200 0x1000 0x2000 0x4000
</span>046484 compat&gt;
</code></pre></div>
<p><br></p>
<h4 id="step-8-verifying-that-the-accelerometer-data-samples-cannot-be-read">Step 8: Verifying that the Accelerometer Data Samples Cannot be Read</h4>
<p>Run the <code>sensor read</code> command to read data samples from the accelerometer to verify that the sensor cannot be read:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>046484 compat&gt; sensor read bno055_0 0x1 -n 5
092387 Cannot read sensor bno055_0
</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>