blob: 18c5b51864b5763d41352aea7d1e98a7102d9b52 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../../../../img/favicon.ico">
<title>GATT server definitions - Apache Mynewt</title>
<link href="../../../../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../../../../css/highlight.css">
<link href="../../../../../../css/base.css" rel="stylesheet">
<link href="../../../../../../css/custom.css" rel="stylesheet">
<link href="../../../../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="GATT server definitions">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" selected="selected" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../../../../../os/introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../../../../../../os/get_started/get_started/">Basic Setup</a>
</li>
<li >
<a href="../../../../../../os/get_started/vocabulary/">Concepts</a>
</li>
<li ><a href="../../../../../../os/tutorials/tutorials/">Tutorials</a>
</li>
<li ><a href="../../../../../../os/os_user_guide/">OS User Guide</a>
</li>
<li><a href="
../../../../ble_intro/
">BLE User Guide</a>
<ul>
<li >
<a href="../../../../ble_intro/">NimBLE Introduction</a>
</li>
<li >
<a href="../../../../ble_sec/">NimBLE Security</a>
</li>
<li ><a href="../../../../ble_setup/ble_setup_intro/">NimBLE Setup</a>
</li>
<li ><a href="../../../ble_hs/">NimBLE Host API</a>
<ul>
<li >
<a href="../../../ble_hs_return_codes/">Return codes</a>
</li>
<li ><a href="../../../ble_gap/ble_gap/">GAP</a>
</li>
<li ><a href="../../../ble_gattc/ble_gattc/">GATT client</a>
</li>
<li ><a href="../../ble_gatts/">GATT server</a>
<ul>
<li><a href="
./
">Definitions</a>
<ul>
<li class="active">
<a href="./">GATT server definitions</a>
</li>
</ul>
</li>
<li><a href="
../../functions/ble_gatts_add_svcs/
">Functions</a>
</li>
</ul>
</li>
<li ><a href="../../../ble_hs_id/ble_hs_id/">Identity</a>
</li>
<li ><a href="../../../ble_att/ble_att/">ATT</a>
</li>
<li ><a href="../../../other/other/">Other</a>
</li>
</ul>
</li>
<li ><a href="../../../../bletiny/bletiny_api/">bletiny app Usage API</a>
</li>
<li ><a href="../../../../btshell/btshell_api/">btshell app Usage API</a>
</li>
</ul>
</li>
<li ><a href="../../../../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../../../../newt/install/prev_releases/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; Definitions</li>
<li>&raquo; <a href="network/ble/ble_hs/ble_gatts/ble_gatts/">GATT server</a></li>
<li>&raquo; <a href="network/ble/ble_hs/ble_hs/">NimBLE Host API</a></li>
<li>&raquo; <a href="network/ble/ble_intro/">BLE User Guide</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; GATT server definitions</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/network/ble/ble_hs/ble_gatts/definitions/ble_gatts_defs.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.2.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h2 id="gatt-server-definitions"><font color="#F2853F" style="font-size:24pt">GATT Server Definitions</font></h2>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">typedef</span> <span style="color: #A90D91">int</span> <span style="color: #000000">ble_gatt_access_fn</span>(<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">conn_handle</span>, <span style="color: #A90D91">uint16_t</span> <span style="color: #000000">attr_handle</span>,
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_access_ctxt</span> <span style="color: #000000">*ctxt</span>, <span style="color: #A90D91">void</span> <span style="color: #000000">*arg</span>);
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">typedef</span> <span style="color: #A90D91">uint16_t</span> <span style="color: #000000">ble_gatt_chr_flags</span>;
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_chr_def</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Pointer to characteristic UUID; use BLE_UUIDxx_DECLARE macros to declare</span>
<span style="color: #177500"> * proper UUID; NULL if there are no more characteristics in the service.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #000000">ble_uuid_t</span> <span style="color: #000000">*uuid</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Callback that gets executed when this characteristic is read or</span>
<span style="color: #177500"> * written.</span>
<span style="color: #177500"> */</span>
<span style="color: #000000">ble_gatt_access_fn</span> <span style="color: #000000">*access_cb</span>;
<span style="color: #177500">/** Optional argument for callback. */</span>
<span style="color: #A90D91">void</span> <span style="color: #000000">*arg</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Array of this characteristic&#39;s descriptors. NULL if no descriptors.</span>
<span style="color: #177500"> * Do not include CCCD; it gets added automatically if this</span>
<span style="color: #177500"> * characteristic&#39;s notify or indicate flag is set.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_dsc_def</span> <span style="color: #000000">*descriptors</span>;
<span style="color: #177500">/** Specifies the set of permitted operations for this characteristic. */</span>
<span style="color: #000000">ble_gatt_chr_flags</span> <span style="color: #000000">flags</span>;
<span style="color: #177500">/** Specifies minimum required key size to access this characteristic. */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">min_key_size</span>;
<span style="color: #177500">/** </span>
<span style="color: #177500"> * At registration time, this is filled in with the characteristic&#39;s value</span>
<span style="color: #177500"> * attribute handle.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">*</span> <span style="color: #A90D91">const</span> <span style="color: #000000">val_handle</span>;
};
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_svc_def</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * One of the following:</span>
<span style="color: #177500"> * o BLE_GATT_SVC_TYPE_PRIMARY - primary service</span>
<span style="color: #177500"> * o BLE_GATT_SVC_TYPE_SECONDARY - secondary service</span>
<span style="color: #177500"> * o 0 - No more services in this array.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">type</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Pointer to service UUID; use BLE_UUIDxx_DECLARE macros to declare</span>
<span style="color: #177500"> * proper UUID; NULL if there are no more characteristics in the service.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #000000">ble_uuid_t</span> <span style="color: #000000">*uuid</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Array of pointers to other service definitions. These services are</span>
<span style="color: #177500"> * reported as &quot;included services&quot; during service discovery. Terminate the</span>
<span style="color: #177500"> * array with NULL.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_svc_def</span> <span style="color: #000000">**includes</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Array of characteristic definitions corresponding to characteristics</span>
<span style="color: #177500"> * belonging to this service.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_chr_def</span> <span style="color: #000000">*characteristics</span>;
};
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_dsc_def</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Pointer to descriptor UUID; use BLE_UUIDxx_DECLARE macros to declare</span>
<span style="color: #177500"> * proper UUID; NULL if there are no more characteristics in the service.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #000000">ble_uuid_t</span> <span style="color: #000000">*uuid</span>;
<span style="color: #177500">/** Specifies the set of permitted operations for this descriptor. */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">att_flags</span>;
<span style="color: #177500">/** Specifies minimum required key size to access this descriptor. */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">min_key_size</span>;
<span style="color: #177500">/** Callback that gets executed when the descriptor is read or written. */</span>
<span style="color: #000000">ble_gatt_access_fn</span> <span style="color: #000000">*access_cb</span>;
<span style="color: #177500">/** Optional argument for callback. */</span>
<span style="color: #A90D91">void</span> <span style="color: #000000">*arg</span>;
};
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #177500">/**</span>
<span style="color: #177500"> * Context for an access to a GATT characteristic or descriptor. When a client</span>
<span style="color: #177500"> * reads or writes a locally registered characteristic or descriptor, an</span>
<span style="color: #177500"> * instance of this struct gets passed to the application callback.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_access_ctxt</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Indicates the gatt operation being performed. This is equal to one of</span>
<span style="color: #177500"> * the following values:</span>
<span style="color: #177500"> * o BLE_GATT_ACCESS_OP_READ_CHR</span>
<span style="color: #177500"> * o BLE_GATT_ACCESS_OP_WRITE_CHR</span>
<span style="color: #177500"> * o BLE_GATT_ACCESS_OP_READ_DSC</span>
<span style="color: #177500"> * o BLE_GATT_ACCESS_OP_WRITE_DSC</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">op</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * A container for the GATT access data.</span>
<span style="color: #177500"> * o For reads: The application populates this with the value of the</span>
<span style="color: #177500"> * characteristic or descriptor being read.</span>
<span style="color: #177500"> * o For writes: This is already populated with the value being written</span>
<span style="color: #177500"> * by the peer. If the application wishes to retain this mbuf for</span>
<span style="color: #177500"> * later use, the access callback must set this pointer to NULL to</span>
<span style="color: #177500"> * prevent the stack from freeing it.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_mbuf</span> <span style="color: #000000">*om</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The GATT operation being performed dictates which field in this union is</span>
<span style="color: #177500"> * valid. If a characteristic is being accessed, the chr field is valid.</span>
<span style="color: #177500"> * Otherwise a descriptor is being accessed, in which case the dsc field</span>
<span style="color: #177500"> * is valid.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">union</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The characteristic definition corresponding to the characteristic</span>
<span style="color: #177500"> * being accessed. This is what the app registered at startup.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_chr_def</span> <span style="color: #000000">*chr</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The descriptor definition corresponding to the descriptor being</span>
<span style="color: #177500"> * accessed. This is what the app registered at startup.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_dsc_def</span> <span style="color: #000000">*dsc</span>;
};
}
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #177500">/**</span>
<span style="color: #177500"> * Context passed to the registration callback; represents the GATT service,</span>
<span style="color: #177500"> * characteristic, or descriptor being registered.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_register_ctxt</span> {
<span style="color: #177500">/**</span>
<span style="color: #177500"> * Indicates the gatt registration operation just performed. This is</span>
<span style="color: #177500"> * equal to one of the following values:</span>
<span style="color: #177500"> * o BLE_GATT_REGISTER_OP_SVC</span>
<span style="color: #177500"> * o BLE_GATT_REGISTER_OP_CHR</span>
<span style="color: #177500"> * o BLE_GATT_REGISTER_OP_DSC</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">op</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The value of the op field determines which field in this union is valid.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">union</span> {
<span style="color: #177500">/** Service; valid if op == BLE_GATT_REGISTER_OP_SVC. */</span>
<span style="color: #A90D91">struct</span> {
<span style="color: #177500">/** The ATT handle of the service definition attribute. */</span>
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">handle</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The service definition representing the service being</span>
<span style="color: #177500"> * registered.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_svc_def</span> <span style="color: #000000">*svc_def</span>;
} <span style="color: #000000">svc</span>;
<span style="color: #177500">/** Characteristic; valid if op == BLE_GATT_REGISTER_OP_CHR. */</span>
<span style="color: #A90D91">struct</span> {
<span style="color: #177500">/** The ATT handle of the characteristic definition attribute. */</span>
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">def_handle</span>;
<span style="color: #177500">/** The ATT handle of the characteristic value attribute. */</span>
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">val_handle</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The characteristic definition representing the characteristic</span>
<span style="color: #177500"> * being registered.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_chr_def</span> <span style="color: #000000">*chr_def</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The service definition corresponding to the characteristic&#39;s</span>
<span style="color: #177500"> * parent service.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_svc_def</span> <span style="color: #000000">*svc_def</span>;
} <span style="color: #000000">chr</span>;
<span style="color: #177500">/** Descriptor; valid if op == BLE_GATT_REGISTER_OP_DSC. */</span>
<span style="color: #A90D91">struct</span> {
<span style="color: #177500">/** The ATT handle of the descriptor definition attribute. */</span>
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">handle</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The descriptor definition corresponding to the descriptor being</span>
<span style="color: #177500"> * registered.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_dsc_def</span> <span style="color: #000000">*dsc_def</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The characteristic definition corresponding to the descriptor&#39;s</span>
<span style="color: #177500"> * parent characteristic.</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_chr_def</span> <span style="color: #000000">*chr_def</span>;
<span style="color: #177500">/**</span>
<span style="color: #177500"> * The service definition corresponding to the descriptor&#39;s</span>
<span style="color: #177500"> * grandparent service</span>
<span style="color: #177500"> */</span>
<span style="color: #A90D91">const</span> <span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_svc_def</span> <span style="color: #000000">*svc_def</span>;
} <span style="color: #000000">dsc</span>;
};
};
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">typedef</span> <span style="color: #A90D91">void</span> <span style="color: #000000">ble_gatt_register_fn</span>(<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">ble_gatt_register_ctxt</span> <span style="color: #000000">*ctxt</span>,
<span style="color: #A90D91">void</span> <span style="color: #000000">*arg</span>);
</code></pre></div>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../../../../js/highlight.pack.js"></script>
<script src="../../../../../../js/base.js"></script>
<script src="../../../../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>