blob: 0aef6d3aabb9f088d96e93d356ed9c244e26578d [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"/>
<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> /
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" >
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" selected="selected" >
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>
<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"><a class="reference internal" href="../../os_user_guide.html">OS User Guide</a></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.4.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="list-of-functions">
<h2>List of Functions:<a class="headerlink" href="#list-of-functions" title="Permalink to this headline"></a></h2>
<p>These are the functions defined by the sensor manager API. Please see
the
<a class="reference external" href="https://github.com/apache/mynewt-core/blob/master/hw/sensor/include/sensor/sensor.h">sensor.h</a>
include file for details.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 43%" />
<col style="width: 57%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Function</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>sensor_mg
r_find_n
ext_bynam
e</p></td>
<td><p>Returns the
next sensor
from the
sensor manager
list that
matches the
specified
device name.
An application
uses this
function. You
must call the
sensor_mgr_l
ock()
function to
lock the
sensor manager
list if you
are iterating
through the
sensor manager
list.</p></td>
</tr>
<tr class="row-odd"><td><p>sensor_mg
r_find_n
ext_bytyp
e</p></td>
<td><p>Returns the
next sensor
from the
sensor manager
list that
matches one of
the specified
sensor types.
An application
uses this
function.You
must call the
sensor_mgr_l
ock()
function to
lock the
sensor manager
list if you
are iterating
through the
sensor manager
list.</p></td>
</tr>
<tr class="row-even"><td><p>sensor_mg
r_lock</p></td>
<td><p>Locks the
sensor manager
list. An
application
uses this
function.</p></td>
</tr>
<tr class="row-odd"><td><p>sensor_mg
r_match_
bytype</p></td>
<td><p>Indicates
whether a
given sensor
is configured
for one of the
specified
sensor types.
An application
uses this
function.
Note: The
function takes
a pointer to a
variable with
the bit mask
of the types
to match.</p></td>
</tr>
<tr class="row-even"><td><p>sensor_mg
r_registe
r</p></td>
<td><p>Registers a
sensor object.
A sensor
device driver
uses this
function.</p></td>
</tr>
<tr class="row-odd"><td><p>sensor_mg
r_unlock</p></td>
<td><p>Unlocks the
sensor manager
list. An
application
uses this
function.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</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>