blob: 2d81c13bdb8e6749e7c6cd9d92f5aaa736b76791 [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">
<title>Sensor Manager API &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../../genindex.html"/>
<link rel="search" title="Search" href="../../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../../index.html"/>
<link rel="up" title="Mynewt Sensor Framework Overview" href="sensor_framework.html"/>
<link rel="next" title="Sensor Listener API" href="sensor_listener_api.html"/>
<link rel="prev" title="Sensor API" href="sensor_api.html"/>
<script src="../../../_static/js/modernizr.min.js"></script>
<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="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../../_static/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>
<header>
<nav id="navbar" class="navbar navbar-inverse" 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>
<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>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../../os_user_guide.html">OS User Guide</a> /
<a href="sensor_framework.html">Mynewt Sensor Framework Overview</a> /
Sensor Manager API
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/modules/sensor_framework/sensor_mgr_api.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</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" selected="selected" >
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" >
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>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../os_user_guide.html">OS User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../core_os/mynewt_os.html">Kernel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../system_modules.html">System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../hal/hal.html">Hardware Abstraction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../split/split.html">Split Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../core_os/porting/port_os.html">Porting Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="../baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sysinitdown/sysinitdown.html">System Initialization and Shutdown</a></li>
<li class="toctree-l2"><a class="reference internal" href="../extcmd/extcmd.html">Build-Time Hooks</a></li>
<li class="toctree-l2"><a class="reference internal" href="../fs/fs.html">File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../fcb/fcb.html">Flash Circular Buffer</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="sensor_framework.html">Sensor Framework</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="sensor_api.html">Sensor API</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Sensor Manager API</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_listener_api.html">Sensor Listener API</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_notifier_api.html">Sensor Notifier API</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_oic.html">OIC Sensor API</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_shell.html">Sensor Shell</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_driver.html">Sensor Device Driver</a></li>
<li class="toctree-l3"><a class="reference internal" href="sensor_create.html">Creating and Configuring Sensor Devices</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mfg/mfg.html">Manufacturing support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../bsp/index.html">Board support</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.9.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>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="sensor-manager-api">
<h1>Sensor Manager API<a class="headerlink" href="#sensor-manager-api" title="Permalink to this headline"></a></h1>
<p>The sensor manager API manages the sensors that are enabled in an
application. The API allows a sensor device to register itself with the
sensor manager and an application to look up the sensors that are
enabled. The sensor manager maintains a list of sensors, each
represented by a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sensor</span></code> object defined in the the <a class="reference external" href="/os/modules/sensor_framework/sensor_api.html">Sensor
API</a>.</p>
<div class="section" id="registering-sensors">
<h2>Registering Sensors<a class="headerlink" href="#registering-sensors" title="Permalink to this headline"></a></h2>
<p>When the BSP or the sensor creator package creates a sensor device in
the kernel, via the <code class="docutils literal notranslate"><span class="pre">os_dev_create()</span></code> function, the sensor device init
function must initialize a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sensor</span></code> object and call the
<code class="docutils literal notranslate"><span class="pre">sensor_mgr_register()</span></code> function to register itself with the sensor
manager.</p>
</div>
<div class="section" id="looking-up-sensors">
<h2>Looking Up Sensors<a class="headerlink" href="#looking-up-sensors" title="Permalink to this headline"></a></h2>
<p>An application uses the sensor manager API to look up the
<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sensor</span></code> object for a sensor. The <a class="reference external" href="/os/modules/sensor_framework/sensor_api.html">sensor
API</a> and the <a class="reference external" href="/os/modules/sensor_framework/sensor_listener_api.html">sensor
listener API</a>
perform operations on a sensor object. The sensor manager API provides
the following sensor lookup functions:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">sensor_mgr_find_next_bytype()</span></code>: This function returns the next
sensor, on the sensors list, whose configured sensor types match one
of the specified sensor types to search for. The sensor types to
search are specified as a bit mask. You can use the function to
search for the first sensor that matches or to iterate through the
list and search for all sensors that match. If you are iterating
through the list to find the next match, you must call the
<code class="docutils literal notranslate"><span class="pre">sensor_mgr_lock()</span></code> function to lock the sensors list before you
start the iteration and call the <code class="docutils literal notranslate"><span class="pre">sensor_mgr_unlock()</span></code> unlock the
list when you are done. You do not need to lock the sensor list if
you use the function to find the first match because the
<code class="docutils literal notranslate"><span class="pre">sensor_mgr_find_next_bytype()</span></code> locks the sensors list before the
search.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sensor_mgr_find_next_bydevname()</span></code>: This function returns the
sensor that matches the specified device name.</p>
<p><strong>Note:</strong> There should only be one sensor that matches a specified
device name even though the function name suggests that there can be
multiple sensors with the same device name.</p>
</li>
</ul>
</div>
<div class="section" id="checking-configured-sensor-types">
<h2>Checking Configured Sensor Types<a class="headerlink" href="#checking-configured-sensor-types" title="Permalink to this headline"></a></h2>
<p>An application may configure a sensor device to only support a subset of
supported sensor types. The <code class="docutils literal notranslate"><span class="pre">sensor_mgr_match_bytype()</span></code> function
allows an application to check whether a sensor is configured for one of
the specified sensor types. The type to check is a bit mask and can
include multiple types. The function returns a match when there is a
match for one, not all, of the specified types in the bit mask.</p>
</div>
<div class="section" id="polling-sensors">
<h2>Polling Sensors<a class="headerlink" href="#polling-sensors" title="Permalink to this headline"></a></h2>
<p>The sensor manager implements a poller that reads sensor data from
sensors at specified poll rates. If an application configures a sensor
to be polled, using the <code class="docutils literal notranslate"><span class="pre">sensor_set_poll_rate_ms()</span></code> function defined
in the <a class="reference external" href="/os/modules/sensor_framework/sensor_api.html">sensor API</a>, the
sensor manager poller will poll and read the configured sensor data from
the sensor at the specified interval.</p>
<p>The sensor manager poller uses an OS callout to set up a timer event to
poll the sensors, and uses the default OS event queue and the OS main
task to process timer events. The <code class="docutils literal notranslate"><span class="pre">SENSOR_MGR_WAKEUP_RATE</span></code> syscfg
setting specifies the default wakeup rate the sensor manager poller
wakes up to poll sensors. The sensor manager poller uses the poll rate
for a sensor if the sensor is configured for a higher poll rate than the
<code class="docutils literal notranslate"><span class="pre">SENSOR_MGR_WAKEUP_RATE</span></code> setting value.</p>
<p><strong>Note:</strong> An application needs to register a <a class="reference external" href="/os/modules/sensor_framework/sensor_listener_api.html">sensor
listener</a> to
receive the sensor data that the sensor manager poller reads from a
sensor.</p>
</div>
<div class="section" id="data-structures">
<h2>Data Structures<a class="headerlink" href="#data-structures" title="Permalink to this headline"></a></h2>
<p>The sensor manager API uses the <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sensor</span></code> and <code class="docutils literal notranslate"><span class="pre">sensor_type_t</span></code>
types.</p>
</div>
<div class="section" id="api">
<h2>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<dl class="c type">
<dt id="c.sensor_mgr_compare_func_t">
<span class="target" id="group___sensor_manager_a_p_i_1ga8bcda1800243e3eff11c93b12ed9a3a1"></span><em class="property"><span class="pre">typedef</span> </em><span class="pre">int</span> <span class="pre">(</span><span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_mgr_compare_func_t</span></code><span class="pre">)</span><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a><span class="pre">*</span>, <span class="pre">void</span><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_compare_func_t" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_lock">
<span class="target" id="group___sensor_manager_a_p_i_1gaa57e412f5568713fee9bb37015045e8b"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_mgr_lock</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_lock" title="Permalink to this definition"></a><br /></dt>
<dd><p>Lock sensor manager to access the list of sensors. </p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_unlock">
<span class="target" id="group___sensor_manager_a_p_i_1gad220c175d237deda5823c76ddbc37191"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_mgr_unlock</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_unlock" title="Permalink to this definition"></a><br /></dt>
<dd><p>Unlock sensor manager once the list of sensors has been accessed. </p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_register">
<span class="target" id="group___sensor_manager_a_p_i_1ga333be93fc6800a796fe80e6405811040"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_mgr_register</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_mgr_register" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_register" title="Permalink to this definition"></a><br /></dt>
<dd><p>Register the sensor with the global sensor list. </p>
<p>This makes the sensor searchable by other packages, who may want to look it up by type.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero error code on failure. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: The sensor to register</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_evq_get">
<span class="target" id="group___sensor_manager_a_p_i_1gacb3664534d185c2d40b936e462417c66"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="../../core_os/event_queue/event_queue.html#c.os_eventq" title="os_eventq"><span class="pre">os_eventq</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_mgr_evq_get</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_evq_get" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the current eventq, the system is misconfigured if there is still no parent eventq. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>Ptr OS eventq that the sensor mgr is set to </p>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_find_next">
<span class="target" id="group___sensor_manager_a_p_i_1ga77aae8c715375a43a10fa3ac9a47b58d"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_mgr_find_next</span></code><span class="sig-paren">(</span><a class="reference internal" href="#c.sensor_mgr_compare_func_t" title="sensor_mgr_compare_func_t"><span class="pre">sensor_mgr_compare_func_t</span></a>, <span class="pre">void</span><span class="pre">*</span>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_find_next" title="Permalink to this definition"></a><br /></dt>
<dd><p>The sensor manager contains a list of sensors, this function returns the next sensor in that list, for which compare_func() returns successful (one). </p>
<p>If prev_cursor is provided, the function starts at that point in the sensor list.</p>
<p>&#64;warn This function MUST be locked by sensor_mgr_lock/unlock() if the goal is to iterate through sensors (as opposed to just finding one.) As the “prev_cursor” may be resorted in the sensor list, in between calls.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>A pointer to the first sensor found from prev_cursor, or NULL, if none found. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">compare_func</span></code>: The comparison function to use against sensors in the list. </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">arg</span></code>: The argument to provide to that comparison function </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">prev_cursor</span></code>: The previous sensor in the sensor manager list, in case of iteration. If desire is to find first matching sensor, provide a NULL value.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_find_next_bytype">
<span class="target" id="group___sensor_manager_a_p_i_1ga576db694c79175d7f1b211f7f2c6630d"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_mgr_find_next_bytype" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_mgr_find_next_bytype</span></code><span class="sig-paren">(</span><a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_mgr_find_next_bytype" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_find_next_bytype" title="Permalink to this definition"></a><br /></dt>
<dd><p>Find the “next” sensor available for a given sensor type. </p>
<p>If the sensor parameter, is present find the next entry from that parameter. Otherwise, find the first matching sensor.</p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>A pointer to the sensor object matching that sensor type, or NULL if none found. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The type of sensor to search for </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: The cursor to search from, or NULL to start from the beginning.</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_find_next_bydevname">
<span class="target" id="group___sensor_manager_a_p_i_1ga58937a56c3f4d096c6d2c316dcf1412b"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_mgr_find_next_bydevname</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">prev_cursor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_find_next_bydevname" title="Permalink to this definition"></a><br /></dt>
<dd><p>Search the sensor list and find the next sensor that corresponds to a given device name. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero error code on failure </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: The device name to search for </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: The previous sensor found with this device name</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_match_bytype">
<span class="target" id="group___sensor_manager_a_p_i_1gaae3032ae14e7c6de98166e32629de9ab"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_mgr_match_bytype</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_mgr_match_bytype" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em>, <span class="pre">void</span><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_match_bytype" title="Permalink to this definition"></a><br /></dt>
<dd><p>Check if sensor type matches. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>1 if matches, 0 if it doesn’t match. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: The sensor object </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">arg</span></code>: type to check</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_set_poll_rate_ms">
<span class="target" id="group___sensor_manager_a_p_i_1ga1a1216ee483068101b9e147c4552d789"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_set_poll_rate_ms</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <span class="pre">uint32_t</span> <em><span class="pre">poll_rate</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_set_poll_rate_ms" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the sensor poll rate. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">poll_rate</span></code>: The poll rate in milli seconds </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_set_n_poll_rate">
<span class="target" id="group___sensor_manager_a_p_i_1ga931dca7b114d4ecb3c0996d757254f64"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_set_n_poll_rate</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor_type_traits" title="sensor_type_traits"><span class="pre">sensor_type_traits</span></a> <span class="pre">*</span><em><span class="pre">stt</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_set_n_poll_rate" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the sensor poll rate multiple based on the device name, sensor type. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">stt</span></code>: The sensor type trait </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_oic_tx_trigger">
<span class="target" id="group___sensor_manager_a_p_i_1ga6631095562fd723dc5d02f012136bf43"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_oic_tx_trigger</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_oic_tx_trigger" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">arg</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_oic_tx_trigger" title="Permalink to this definition"></a><br /></dt>
<dd><p>Transmit OIC trigger. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on sucess, non-zero on failure </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: Ptr to the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">arg</span></code>: Ptr to sensor data </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The sensor type</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_trigger_init">
<span class="target" id="group___sensor_manager_a_p_i_1ga48ba4c5c88d95795a6934d359d98bc38"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_trigger_init</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_trigger_init" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_trigger_notify_func_t" title="sensor_trigger_notify_func_t"><span class="pre">sensor_trigger_notify_func_t</span></a> <em><span class="pre">notify</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_trigger_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sensor trigger initialization. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: Ptr to the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: Sensor type to enable trigger for </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">notify</span></code>: the function to call if the trigger condition is satisfied </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_get_type_traits_bytype">
<span class="target" id="group___sensor_manager_a_p_i_1ga0c555e8eb46f172c02113e15328c9f39"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor_type_traits" title="sensor_type_traits"><span class="pre">sensor_type_traits</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_get_type_traits_bytype</span></code><span class="sig-paren">(</span><a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_get_type_traits_bytype" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_get_type_traits_bytype" title="Permalink to this definition"></a><br /></dt>
<dd><p>Search the sensor type traits list for specific type of sensor. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>NULL when no sensor type is found, ptr to <a class="reference internal" href="sensor_api.html#structsensor__type__traits"><span class="std std-ref">sensor_type_traits</span></a> structure when found </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The sensor type to search for </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: Ptr to a sensor</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_get_type_traits_byname">
<span class="target" id="group___sensor_manager_a_p_i_1ga7991195928c5cc75156150b07fe92b47"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_get_type_traits_byname</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span><span class="pre">*</span>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor_type_traits" title="sensor_type_traits"><span class="pre">sensor_type_traits</span></a><span class="pre">*</span><span class="pre">*</span>, <a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_get_type_traits_byname" title="Permalink to this definition"></a><br /></dt>
<dd><p>Get the type traits for a sensor. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>NULL on failure, sensor struct on success </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">stt</span></code>: Ptr to sensor types trait struct </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The sensor type</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_set_thresh">
<span class="target" id="group___sensor_manager_a_p_i_1gaf80eff546bbac5ca8157aba69947ad76"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_set_thresh</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor_type_traits" title="sensor_type_traits"><span class="pre">sensor_type_traits</span></a> <span class="pre">*</span><em><span class="pre">stt</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_set_thresh" title="Permalink to this definition"></a><br /></dt>
<dd><p>Set the thresholds along with the comparison algo for a sensor. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero on failure </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">stt</span></code>: Ptr to sensor type traits containing thresholds</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_clear_low_thresh">
<span class="target" id="group___sensor_manager_a_p_i_1gad3af8e44f61f860ee5d2ad33f698b167"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_clear_low_thresh</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_clear_low_thresh" title="Permalink to this definition"></a><br /></dt>
<dd><p>Clears the low threshold for a sensor. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero on failure </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The sensor type</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_clear_high_thresh">
<span class="target" id="group___sensor_manager_a_p_i_1ga6419280f2d85768fe9bc44c7b96f15c7"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_clear_high_thresh</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">const</span></em> <span class="pre">char</span> <span class="pre">*</span><em><span class="pre">devname</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_type_t" title="sensor_type_t"><span class="pre">sensor_type_t</span></a> <em><span class="pre">type</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_clear_high_thresh" title="Permalink to this definition"></a><br /></dt>
<dd><p>Clears the high threshold for a sensor. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero on failure </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">devname</span></code>: Name of the sensor </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">type</span></code>: The sensor type</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_put_notify_evt">
<span class="target" id="group___sensor_manager_a_p_i_1ga4945dabbb0346fe479c8f0040672b770"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_mgr_put_notify_evt</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="sensor_api.html#c.sensor_notify_ev_ctx" title="sensor_notify_ev_ctx"><span class="pre">sensor_notify_ev_ctx</span></a> <span class="pre">*</span><em><span class="pre">ctx</span></em>, <a class="reference internal" href="sensor_api.html#c.sensor_event_type_t" title="sensor_event_type_t"><span class="pre">sensor_event_type_t</span></a> <em><span class="pre">evtype</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_put_notify_evt" title="Permalink to this definition"></a><br /></dt>
<dd><p>Puts a notification event on the sensor manager evq. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">ctx</span></code>: Notification event context </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evtype</span></code>: The notification event type </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_put_interrupt_evt">
<span class="target" id="group___sensor_manager_a_p_i_1gad140f533b605b981c425a94f3c3f75ae"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_mgr_put_interrupt_evt</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_mgr_put_interrupt_evt" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_put_interrupt_evt" title="Permalink to this definition"></a><br /></dt>
<dd><p>Puts a interrupt event on the sensor manager evq. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">sensor</span></code>: Sensor Ptr as interrupt event context </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_mgr_put_read_evt">
<span class="target" id="group___sensor_manager_a_p_i_1gad608d34bb782f364465405c33f1af615"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_mgr_put_read_evt</span></code><span class="sig-paren">(</span><span class="pre">void</span> <span class="pre">*</span><em><span class="pre">arg</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_mgr_put_read_evt" title="Permalink to this definition"></a><br /></dt>
<dd><p>Puts read event on the sensor manager evq. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">arg</span></code>: Argument </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_reset">
<span class="target" id="group___sensor_manager_a_p_i_1ga7b8685cf15d97a273c84cd8f7e28ce40"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_reset</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.sensor_reset" title="sensor"><span class="pre">sensor</span></a> <span class="pre">*</span><em><span class="pre">sensor</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_reset" title="Permalink to this definition"></a><br /></dt>
<dd><p>Resets the sensor. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Ptr</span></code>: to sensor </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_ftostr">
<span class="target" id="group___sensor_manager_a_p_i_1ga1a6ef38701a37fb94ecbdb58111d6066"></span><span class="pre">char</span> <span class="pre">*</span><code class="sig-name descname"><span class="pre">sensor_ftostr</span></code><span class="sig-paren">(</span><span class="pre">float</span>, <span class="pre">char</span><span class="pre">*</span>, <span class="pre">int</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_ftostr" title="Permalink to this definition"></a><br /></dt>
<dd><p>Convinience API to convert floats to strings, might loose some precision due to rounding. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">num</span></code>: Floating point number to print </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fltstr</span></code>: Output float string </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">len</span></code>: Length of the string to print </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_shell_register">
<span class="target" id="group___sensor_manager_a_p_i_1gaa5974332a4adc961d1b2f4626bdab977"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">sensor_shell_register</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_shell_register" title="Permalink to this definition"></a><br /></dt>
<dd><p>API to register sensor shell. </p>
</dd></dl>
<dl class="c function">
<dt id="c.sensor_oic_init">
<span class="target" id="group___sensor_manager_a_p_i_1ga9fb6a1bc75c63384f781d2adc8499590"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">sensor_oic_init</span></code><span class="sig-paren">(</span><span class="pre">void</span><span class="sig-paren">)</span><a class="headerlink" href="#c.sensor_oic_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Iterates through the sensor list and initializes OIC resources based on each sensor type. </p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="sensor_listener_api.html" class="btn btn-neutral float-right" title="Sensor Listener API" accesskey="n">Next: Sensor Listener API <span class="fa fa-arrow-circle-right"></span></a>
<a href="sensor_api.html" class="btn btn-neutral" title="Sensor API" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Sensor API</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div 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">
<img src="../../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<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>
<a href="">
<img src="../../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../../_static/js/main.js"></script>
</body>
</html>