blob: 5ca1a37553b210d221ca24a18900e8dc7193936f [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>Callout &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="Apache Mynewt Operating System Kernel" href="../mynewt_os.html"/>
<link rel="next" title="Heap" href="../heap/heap.html"/>
<link rel="prev" title="Event Queues" href="../event_queue/event_queue.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="../mynewt_os.html">Apache Mynewt Operating System Kernel</a> /
Callout
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/core_os/callout/callout.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" selected="selected" >
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 current"><a class="reference internal" href="../mynewt_os.html">Kernel</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../context_switch/context_switch.html">Scheduler</a></li>
<li class="toctree-l3"><a class="reference internal" href="../task/task.html">Task</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mutex/mutex.html">Mutex</a></li>
<li class="toctree-l3"><a class="reference internal" href="../semaphore/semaphore.html">Semaphore</a></li>
<li class="toctree-l3"><a class="reference internal" href="../event_queue/event_queue.html">Event Queues</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Callout</a></li>
<li class="toctree-l3"><a class="reference internal" href="../heap/heap.html">Heap</a></li>
<li class="toctree-l3"><a class="reference internal" href="../memory_pool/memory_pool.html">Memory Pools</a></li>
<li class="toctree-l3"><a class="reference internal" href="../mbuf/mbuf.html">Mbufs</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cputime/os_cputime.html">CPU Time</a></li>
<li class="toctree-l3"><a class="reference internal" href="../time/os_time.html">OS Time</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sanity/sanity.html">Sanity</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/system_modules.html">System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/hal/hal.html">Hardware Abstraction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/split/split.html">Split Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../porting/port_os.html">Porting Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/fs/fs.html">File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/fcb/fcb.html">Flash Circular Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/sensor_framework/sensor_framework.html">Sensor Framework</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/mfg/mfg.html">Manufacturing 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.8.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="callout">
<h1>Callout<a class="headerlink" href="#callout" title="Permalink to this headline"></a></h1>
<p>Callouts are Apache Mynewt OS timers.</p>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>Callout is a way of setting up an OS timer. When the timer fires, it is
delivered as an event to task’s event queue.</p>
<p>User would initialize their callout structure using
<a class="reference internal" href="#c.os_callout_init" title="os_callout_init"><code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_init()</span></code></a>, or <code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_func_init()</span></code> and
then arm it with <a class="reference internal" href="#c.os_callout_reset" title="os_callout_reset"><code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_reset()</span></code></a>.</p>
<p>If user wants to cancel the timer before it expires, they can either use
<a class="reference internal" href="#c.os_callout_reset" title="os_callout_reset"><code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_reset()</span></code></a> to arm it for later expiry, or stop it altogether
by calling <a class="reference internal" href="#c.os_callout_stop" title="os_callout_stop"><code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_stop()</span></code></a>.</p>
<p>There are 2 different options for data structure to use. First is
<code class="xref c c-type docutils literal notranslate"><span class="pre">struct</span> <span class="pre">os_callout</span></code>, which is a bare-bones version. You would
initialize this with <a class="reference internal" href="#c.os_callout_init" title="os_callout_init"><code class="xref c c-func docutils literal notranslate"><span class="pre">os_callout_init()</span></code></a>.</p>
<p>Second option is <code class="xref c c-type docutils literal notranslate"><span class="pre">struct</span> <span class="pre">os_callout_func</span></code>. This you can use if you
expect to have multiple different types of timers in your task, running
concurrently. The structure contains a function pointer, and you would
call that function from your task’s event processing loop.</p>
<p>Time unit when arming the timer is OS ticks. This rate of this ticker
depends on the platform this is running on. You should use OS define
<code class="docutils literal notranslate"><span class="pre">OS_TICKS_PER_SEC</span></code> to convert wallclock time to OS ticks.</p>
<p>Callout timer fires out just once. For periodic timer type of operation
you need to rearm it once it fires.</p>
<div class="section" id="api">
<h3>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h3>
<dl class="c function">
<dt id="c.os_callout_init">
<span class="target" id="group___o_s_callouts_1gac1a34a023c7a9eb52e46c5155855debd"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">os_callout_init</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.os_callout" title="os_callout"><span class="pre">os_callout</span></a> <span class="pre">*</span><em><span class="pre">cf</span></em>, <em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="../event_queue/event_queue.html#c.os_eventq" title="os_eventq"><span class="pre">os_eventq</span></a> <span class="pre">*</span><em><span class="pre">evq</span></em>, <a class="reference internal" href="../event_queue/event_queue.html#c.os_event_fn" title="os_event_fn"><span class="pre">os_event_fn</span></a> <span class="pre">*</span><em><span class="pre">ev_cb</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">ev_arg</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.os_callout_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initialize a callout. </p>
<p>Callouts are used to schedule events in the future onto a task’s event queue. Callout timers are scheduled using the <a class="reference internal" href="#group___o_s_callouts_1gaa1f671cead691f97ae6b7db62666f01a"><span class="std std-ref">os_callout_reset()</span></a> function. When the timer expires, an event is posted to the event queue specified in <a class="reference internal" href="#group___o_s_callouts_1gac1a34a023c7a9eb52e46c5155855debd"><span class="std std-ref">os_callout_init()</span></a>. The event argument given here is posted in the ev_arg field of that event.</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">c</span></code>: The callout to initialize </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evq</span></code>: The event queue to post an OS_EVENT_T_TIMER event to </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">timo_func</span></code>: The function to call on this callout for the host task used to provide multiple timer events to a task (this can be NULL.) </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ev_arg</span></code>: The argument to provide to the event when posting the timer. </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.os_callout_stop">
<span class="target" id="group___o_s_callouts_1ga661bbf1a84775044ac93d9464688e4bb"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">os_callout_stop</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.os_callout" title="os_callout"><span class="pre">os_callout</span></a><span class="pre">*</span><span class="sig-paren">)</span><a class="headerlink" href="#c.os_callout_stop" title="Permalink to this definition"></a><br /></dt>
<dd><p>Stop the callout from firing off, any pending events will be cleared. </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">c</span></code>: The callout to stop </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.os_callout_reset">
<span class="target" id="group___o_s_callouts_1gaa1f671cead691f97ae6b7db62666f01a"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">os_callout_reset</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.os_callout" title="os_callout"><span class="pre">os_callout</span></a><span class="pre">*</span>, <a class="reference internal" href="../time/os_time.html#c.os_time_t" title="os_time_t"><span class="pre">os_time_t</span></a><span class="sig-paren">)</span><a class="headerlink" href="#c.os_callout_reset" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reset the callout to fire off in ‘ticks’ ticks. </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">c</span></code>: The callout to reset </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ticks</span></code>: The number of ticks to wait before posting an event</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.os_callout_remaining_ticks">
<span class="target" id="group___o_s_callouts_1gab0809de1868462fe0a066f67645342be"></span><a class="reference internal" href="../time/os_time.html#c.os_time_t" title="os_time_t"><span class="pre">os_time_t</span></a> <code class="sig-name descname"><span class="pre">os_callout_remaining_ticks</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.os_callout" title="os_callout"><span class="pre">os_callout</span></a><span class="pre">*</span>, <a class="reference internal" href="../time/os_time.html#c.os_time_t" title="os_time_t"><span class="pre">os_time_t</span></a><span class="sig-paren">)</span><a class="headerlink" href="#c.os_callout_remaining_ticks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns the number of ticks which remains to callout. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>Number of ticks to first pending callout </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">c</span></code>: The callout to check </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">now</span></code>: The current time in OS ticks</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.os_callout_queued">
<span class="target" id="group___o_s_callouts_1ga9f0d8c6cb4cd1a10a269fe004cf12e45"></span><em class="property"><span class="pre">static</span></em> <em class="property"><span class="pre">inline</span></em> <span class="pre">int</span> <code class="sig-name descname"><span class="pre">os_callout_queued</span></code><span class="sig-paren">(</span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="#c.os_callout" title="os_callout"><span class="pre">os_callout</span></a> <span class="pre">*</span><em><span class="pre">c</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.os_callout_queued" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns whether the callout is pending or not. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>1 if queued, 0 if not queued. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">c</span></code>: The callout to check</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c struct">
<dt id="c.os_callout">
<span class="target" id="structos__callout"></span><em class="property"><span class="pre">struct</span> </em><code class="sig-name descname"><span class="pre">os_callout</span></code><a class="headerlink" href="#c.os_callout" title="Permalink to this definition"></a><br /></dt>
<dd><em>#include &lt;os_callout.h&gt;</em><p>Structure containing the definition of a callout, initialized by <a class="reference internal" href="#group___o_s_callouts_1gac1a34a023c7a9eb52e46c5155855debd"><span class="std std-ref">os_callout_init()</span></a> and passed to callout functions. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-members">Public Members</p>
<dl class="c var">
<dt id="c.os_callout.c_ev">
<span class="target" id="structos__callout_1a6e3cac590085fde37bdc3efac687cedf"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="../event_queue/event_queue.html#c.os_event" title="os_event"><span class="pre">os_event</span></a> <code class="sig-name descname"><span class="pre">c_ev</span></code><a class="headerlink" href="#c.os_callout.c_ev" title="Permalink to this definition"></a><br /></dt>
<dd><p>Event to post when the callout expires. </p>
</dd></dl>
<dl class="c var">
<dt id="c.os_callout.c_evq">
<span class="target" id="structos__callout_1a81692681ef25523c32e893cd66b612a2"></span><em class="property"><span class="pre">struct</span></em> <a class="reference internal" href="../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">c_evq</span></code><a class="headerlink" href="#c.os_callout.c_evq" title="Permalink to this definition"></a><br /></dt>
<dd><p>Pointer to the event queue to post the event to. </p>
</dd></dl>
<dl class="c var">
<dt id="c.os_callout.c_ticks">
<span class="target" id="structos__callout_1aaa5870ce79ffdbe6a160578def5f6dfc"></span><a class="reference internal" href="../time/os_time.html#c.os_time_t" title="os_time_t"><span class="pre">os_time_t</span></a> <code class="sig-name descname"><span class="pre">c_ticks</span></code><a class="headerlink" href="#c.os_callout.c_ticks" title="Permalink to this definition"></a><br /></dt>
<dd><p>Number of ticks in the future to expire the callout. </p>
</dd></dl>
</div>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="../heap/heap.html" class="btn btn-neutral float-right" title="Heap" accesskey="n">Next: Heap <span class="fa fa-arrow-circle-right"></span></a>
<a href="../event_queue/event_queue.html" class="btn btn-neutral" title="Event Queues" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Event Queues</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>