blob: 0ce53e9179c2527fb6e8656db594831b99b02af3 [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">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>API for btshell app &mdash; Apache Mynewt latest documentation</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<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>
</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.13.0, Apache NimBLE 1.8.0 </a> released November 25, 2024)
</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="/cve/">CVE</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="/master" >
Version: master
</option>
<option value="/v1_13_0" >
Version: 1.13.0
</option>
<option value="/v1_12_0" selected="selected" >
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" >
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.12.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">
<section id="api-for-btshell-app">
<h1>API for btshell app<a class="headerlink" href="#api-for-btshell-app" title="Link to this heading"></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>
<nav class="contents local" 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>
</nav>
<div class="toctree-wrapper compound">
</div>
<section id="set-device-address">
<h2><a class="toc-backref" href="#id1" role="doc-backlink">Set device address.</a><a class="headerlink" href="#set-device-address" title="Link to this heading"></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">show-addr</span></code> command, as follows:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>show-addr
public_id_addr=01:02:03:04:05:06 random_id_addr=c1:aa:bb:cc:dd:ee
</pre></div>
</div>
</section>
<section id="initiate-a-direct-connection-to-a-device">
<h2><a class="toc-backref" href="#id2" role="doc-backlink">Initiate a direct connection to a device</a><a class="headerlink" href="#initiate-a-direct-connection-to-a-device" title="Link to this heading"></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>
</section>
<section id="configure-advertisements-to-include-device-name">
<h2><a class="toc-backref" href="#id3" role="doc-backlink">Configure advertisements to include device name</a><a class="headerlink" href="#configure-advertisements-to-include-device-name" title="Link to this heading"></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>
</section>
<section id="begin-sending-undirected-general-advertisements">
<h2><a class="toc-backref" href="#id4" role="doc-backlink">Begin sending undirected general advertisements</a><a class="headerlink" href="#begin-sending-undirected-general-advertisements" title="Link to this heading"></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>
</section>
<section id="show-established-connections">
<h2><a class="toc-backref" href="#id5" role="doc-backlink">Show established connections.</a><a class="headerlink" href="#show-established-connections" title="Link to this heading"></a></h2>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-show-conn
</pre></div>
</div>
</section>
<section id="discover-and-display-peer-s-services-characteristics-and-descriptors">
<h2><a class="toc-backref" href="#id6" role="doc-backlink">Discover and display peer’s services, characteristics, and descriptors.</a><a class="headerlink" href="#discover-and-display-peer-s-services-characteristics-and-descriptors" title="Link to this heading"></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>
</section>
<section id="read-an-attribute-belonging-to-the-peer">
<h2><a class="toc-backref" href="#id7" role="doc-backlink">Read an attribute belonging to the peer</a><a class="headerlink" href="#read-an-attribute-belonging-to-the-peer" title="Link to this heading"></a></h2>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>gatt-read conn=1 attr=21
</pre></div>
</div>
</section>
<section id="write-to-an-attribute-belonging-to-the-peer">
<h2><a class="toc-backref" href="#id8" role="doc-backlink">Write to an attribute belonging to the peer</a><a class="headerlink" href="#write-to-an-attribute-belonging-to-the-peer" title="Link to this heading"></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>
</section>
<section id="perform-a-passive-scan">
<h2><a class="toc-backref" href="#id9" role="doc-backlink">Perform a passive scan</a><a class="headerlink" href="#perform-a-passive-scan" title="Link to this heading"></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>
</section>
</section>
</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">
<a href="https://www.apache.org">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2024 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="https://join.slack.com/t/mynewt/shared_invite/enQtNjA1MTg0NzgyNzg3LTcyMmZiOGQzOGMxM2U4ODFmMTIwNjNmYTE5Y2UwYjQwZWIxNTE0MTUzY2JmMTEzOWFjYWZkNGM0YmM4MzAxNWQ">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</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>
<!-- 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/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/sphinx_highlight.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>