blob: 26adf0069ce3ea956e961221576d7c5b36a7dfa4 [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>API for btshell app &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="BLE User Guide" href="../index.html"/>
<link rel="next" title="GAP API for btshell" href="btshell_GAP.html"/>
<link rel="prev" title="NimBLE Host ATT Client Reference" href="../ble_hs/ble_att.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="../index.html">BLE User Guide</a> /
API for btshell app
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-nimble/edit/master/docs/btshell/btshell_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" selected="selected" >
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"><a class="reference internal" href="../../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">BLE User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../ble_sec.html">NimBLE Security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ble_setup/ble_setup_intro.html">NimBLE Setup</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ble_hs/ble_hs.html">NimBLE Host</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">btshell Usage API</a><ul>
<li class="toctree-l3"><a class="reference internal" href="btshell_GAP.html">GAP</a></li>
<li class="toctree-l3"><a class="reference internal" href="btshell_GATT.html">GATT</a></li>
<li class="toctree-l3"><a class="reference internal" href="btshell_advdata.html">Advertisement Data Fields</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../mesh/index.html">Bluetooth Mesh</a></li>
</ul>
</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.6.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="api-for-btshell-app">
<h1>API for btshell app<a class="headerlink" href="#api-for-btshell-app" title="Permalink to this headline"></a></h1>
<p>“btshell” is one of the sample applications that come with Mynewt. It is a shell application which provides a basic
interface to the host-side of the BLE stack. “btshell” includes all the possible roles (Central/Peripheral) and they may
be run simultaneously. You can run btshell on a board and issue commands that make it behave as a central or a peripheral
with different peers.</p>
<p><strong>btshell</strong> is a new application that uses shell subsystem introduced in Mynewt 1.1 and has updated commands and
parameters names. Thanks to support for tab completion commands names are more descriptive and self-explanatory
without requiring extensive typing.</p>
<p>Highlighted below are some of the ways you can use the API to establish connections and discover services and
characteristics from peer devices. For descriptions of the full API, go to the next sections on
<a class="reference internal" href="btshell_GAP.html"><span class="doc">GAP API for btshell</span></a> and <a class="reference internal" href="btshell_GATT.html"><span class="doc">GATT feature API for btshell</span></a>.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#set-device-address" id="id1">Set device address.</a></p></li>
<li><p><a class="reference internal" href="#initiate-a-direct-connection-to-a-device" id="id2">Initiate a direct connection to a device</a></p></li>
<li><p><a class="reference internal" href="#configure-advertisements-to-include-device-name" id="id3">Configure advertisements to include device name</a></p></li>
<li><p><a class="reference internal" href="#begin-sending-undirected-general-advertisements" id="id4">Begin sending undirected general advertisements</a></p></li>
<li><p><a class="reference internal" href="#show-established-connections" id="id5">Show established connections.</a></p></li>
<li><p><a class="reference internal" href="#discover-and-display-peer-s-services-characteristics-and-descriptors" id="id6">Discover and display peer’s services, characteristics, and descriptors.</a></p></li>
<li><p><a class="reference internal" href="#read-an-attribute-belonging-to-the-peer" id="id7">Read an attribute belonging to the peer</a></p></li>
<li><p><a class="reference internal" href="#write-to-an-attribute-belonging-to-the-peer" id="id8">Write to an attribute belonging to the peer</a></p></li>
<li><p><a class="reference internal" href="#perform-a-passive-scan" id="id9">Perform a passive scan</a></p></li>
</ul>
</div>
<div class="toctree-wrapper compound">
</div>
<div class="section" id="set-device-address">
<h2><a class="toc-backref" href="#id1">Set device address.</a><a class="headerlink" href="#set-device-address" title="Permalink to this headline"></a></h2>
<p>On startup, btshell has the following identity address configuration:</p>
<ul class="simple">
<li><p>Public address: None</p></li>
<li><p>Random address: None</p></li>
</ul>
<p>The below <code class="docutils literal notranslate"><span class="pre">set</span></code> commands can be used to change the address configuration:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set addr_type=public addr=&lt;device-address&gt;
set addr_type=random addr=&lt;device-address&gt;
</pre></div>
</div>
<p>For example:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set addr_type=public addr=01:02:03:04:05:06
set addr_type=random addr=c1:aa:bb:cc:dd:ee
</pre></div>
</div>
<p>The address configuration can be viewed with the <code class="docutils literal notranslate"><span class="pre">gatt-show-addr</span></code> command, as follows:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-show-addr
public_id_addr=01:02:03:04:05:06 random_id_addr=c1:aa:bb:cc:dd:ee
</pre></div>
</div>
</div>
<div class="section" id="initiate-a-direct-connection-to-a-device">
<h2><a class="toc-backref" href="#id2">Initiate a direct connection to a device</a><a class="headerlink" href="#initiate-a-direct-connection-to-a-device" title="Permalink to this headline"></a></h2>
<p>In this case, your board is acting as a central and initiating a connection with another BLE device. The example
assumes you know the address of the peer, either by scanning for available peers or because you have set up the peer
yourself.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span><span class="hll">connect peer_addr=d4:f5:13:53:d2:43
</span>connection established; handle=1 our_ota_addr_type=0 our_ota_addr=0a:0b:0c:0d:0e:0f out_id_addr_type=0 our_id_addr=0a:0b:0c:0d:0e:0f peer_addr_type=0 peer_addr=43:d2:53:13:f5:d4 conn_itvl=40 conn_latency=0 supervision_timeout=256 encrypted=0 authenticated=0 bonded=0
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">handle=1</span></code> in the output indicates that it is connection-1.</p>
</div>
<div class="section" id="configure-advertisements-to-include-device-name">
<h2><a class="toc-backref" href="#id3">Configure advertisements to include device name</a><a class="headerlink" href="#configure-advertisements-to-include-device-name" title="Permalink to this headline"></a></h2>
<p>In this case, your board is acting as a peripheral.</p>
<p>With Extended Advertising enabled (should be executed after advertise-configure):</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>advertise-set-adv-data name=&lt;your-device-name&gt;
</pre></div>
</div>
<p>With Extended Advertising disabled:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set-adv-data name=&lt;your-device-name&gt;
</pre></div>
</div>
</div>
<div class="section" id="begin-sending-undirected-general-advertisements">
<h2><a class="toc-backref" href="#id4">Begin sending undirected general advertisements</a><a class="headerlink" href="#begin-sending-undirected-general-advertisements" title="Permalink to this headline"></a></h2>
<p>In this case, your board is acting as a peripheral.</p>
<p>With Extended Advertising enabled:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>advertise-configure connectable=1 legacy=1 scannable=1
advertise-start
</pre></div>
</div>
<p>With Extended Advertising disabled:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>advertise conn=und discov=gen
</pre></div>
</div>
</div>
<div class="section" id="show-established-connections">
<h2><a class="toc-backref" href="#id5">Show established connections.</a><a class="headerlink" href="#show-established-connections" title="Permalink to this headline"></a></h2>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-show-conn
</pre></div>
</div>
</div>
<div class="section" id="discover-and-display-peer-s-services-characteristics-and-descriptors">
<h2><a class="toc-backref" href="#id6">Discover and display peer’s services, characteristics, and descriptors.</a><a class="headerlink" href="#discover-and-display-peer-s-services-characteristics-and-descriptors" title="Permalink to this headline"></a></h2>
<p>This is how you discover and then display the services of the peer you established earlier across connection-1.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span><span class="hll">gatt-discover-full conn=1
</span><span class="hll">gatt-show
</span>[ts=132425ssb, mod=64 level=2] CONNECTION: handle=1 addr=d4:f5:13:53:d2:43
[ts=132428ssb, mod=64 level=2] start=1 end=5 uuid=0x1800
[ts=132433ssb, mod=64 level=2] start=6 end=16 uuid=0x1808
[ts=132437ssb, mod=64 level=2] start=17 end=31 uuid=0x180a
[ts=132441ssb, mod=64 level=2] start=32 end=65535 uuid=00000000-0000-1000-1000000000000000
</pre></div>
</div>
</div>
<div class="section" id="read-an-attribute-belonging-to-the-peer">
<h2><a class="toc-backref" href="#id7">Read an attribute belonging to the peer</a><a class="headerlink" href="#read-an-attribute-belonging-to-the-peer" title="Permalink to this headline"></a></h2>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-read conn=1 attr=21
</pre></div>
</div>
</div>
<div class="section" id="write-to-an-attribute-belonging-to-the-peer">
<h2><a class="toc-backref" href="#id8">Write to an attribute belonging to the peer</a><a class="headerlink" href="#write-to-an-attribute-belonging-to-the-peer" title="Permalink to this headline"></a></h2>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-write conn=1 attr=3 value=0x01:0x02:0x03
</pre></div>
</div>
</div>
<div class="section" id="perform-a-passive-scan">
<h2><a class="toc-backref" href="#id9">Perform a passive scan</a><a class="headerlink" href="#perform-a-passive-scan" title="Permalink to this headline"></a></h2>
<p>This is how you tell your board to listen to all advertisements around it. The duration is specified in ms.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>scan duration=1000 passive=1 filter=no_wl
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="btshell_GAP.html" class="btn btn-neutral float-right" title="GAP API for btshell" accesskey="n">Next: GAP API for btshell <span class="fa fa-arrow-circle-right"></span></a>
<a href="../ble_hs/ble_att.html" class="btn btn-neutral" title="NimBLE Host ATT Client Reference" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: NimBLE Host ATT Client Reference</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>