blob: 54b445353c62ce7652e355250ad627dd64dfe06f [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>Use HCI access to NimBLE controller &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="Bluetooth Low Energy" href="ble.html"/>
<link rel="next" title="LoRaWAN App" href="../lora/lorawanapp.html"/>
<link rel="prev" title="BLE Peripheral App" href="bleprph/bleprph-sections/bleprph-app.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="../tutorials.html">Tutorials</a> /
<a href="ble.html">Bluetooth Low Energy</a> /
Use HCI access to NimBLE controller
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/ble/blehci_project.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" selected="selected" >
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 current"><a class="reference internal" href="../tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../blinky/blinky.html">Project Blinky</a></li>
<li class="toctree-l2"><a class="reference internal" href="../repo/add_repos.html">Working with repositories</a></li>
<li class="toctree-l2"><a class="reference internal" href="../slinky/project-slinky.html">Project Slinky for Remote Comms</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="ble.html">Bluetooth Low Energy</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="ble_bare_bones.html">Set up a bare bones NimBLE application</a></li>
<li class="toctree-l3"><a class="reference internal" href="ibeacon.html">BLE iBeacon</a></li>
<li class="toctree-l3"><a class="reference internal" href="eddystone.html">BLE Eddystone</a></li>
<li class="toctree-l3"><a class="reference internal" href="bleprph/bleprph.html">BLE Peripheral Project</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Use HCI access to NimBLE controller</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../lora/lorawanapp.html">LoRa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../os_fundamentals/os_fundamentals.html">OS Fundamentals</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/devmgmt.html">Remote Device Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sensors/sensors.html">Sensors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tooling/tooling.html">Tooling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../other/other.html">Other</a></li>
</ul>
</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"><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.5.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="use-hci-access-to-nimble-controller">
<h1>Use HCI access to NimBLE controller<a class="headerlink" href="#use-hci-access-to-nimble-controller" title="Permalink to this headline"></a></h1>
<p>This tutorial explains how to use the example application <code class="docutils literal notranslate"><span class="pre">blehci</span></code>
included in the NimBLE stack to talk to the Mynewt NimBLE controller via
the Host Controller Interface. You may build the Mynewt image using a
laptop running any OS of your choice - Mac, Linux, or Windows.</p>
<p>The host used in this specific example is the BlueZ Bluetooth stack.
Since BlueZ is a Bluetooth stack for Linux kernel-based family of
operating system, the tutorial expects a computer running Linux OS and
with BlueZ installed to talk to the board with the Mynewt image.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#prerequisites" id="id1">Prerequisites</a></p></li>
<li><p><a class="reference internal" href="#create-a-project" id="id2">Create a project</a></p></li>
<li><p><a class="reference internal" href="#create-targets" id="id3">Create targets</a></p></li>
<li><p><a class="reference internal" href="#build-targets" id="id4">Build targets</a></p></li>
<li><p><a class="reference internal" href="#create-the-app-image" id="id5">Create the app image</a></p></li>
<li><p><a class="reference internal" href="#load-the-bootloader-and-the-application-image" id="id6">Load the bootloader and the application image</a></p></li>
<li><p><a class="reference internal" href="#establish-serial-connection" id="id7">Establish serial connection</a></p></li>
<li><p><a class="reference internal" href="#open-bluetooth-monitor-btmon" id="id8">Open Bluetooth monitor btmon</a></p></li>
<li><p><a class="reference internal" href="#attach-the-blehci-device-to-bluez" id="id9">Attach the blehci device to BlueZ</a></p></li>
<li><p><a class="reference internal" href="#start-btmgmt-to-send-commands" id="id10">Start btmgmt to send commands</a></p></li>
</ul>
</div>
<div class="section" id="prerequisites">
<h2><a class="toc-backref" href="#id1">Prerequisites</a><a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h2>
<p>Ensure that you meet the following prerequisites before continuing with
one of the tutorials.</p>
<ul class="simple">
<li><p>Have Internet connectivity to fetch remote Mynewt components.</p></li>
<li><p>Have a board with BLE radio that is supported by Mynewt. We will use
an nRF52 Dev board in this tutorial.</p></li>
<li><p>Have a USB TTL Serial Cable that supports hardware flow control such
as ones found at
<a class="reference external" href="http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm">http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm</a> to establish
a serial USB connection between the board and the laptop.</p></li>
<li><p>Install the newt tool and toolchains (See <a class="reference internal" href="../../get_started/index.html"><span class="doc">Basic
Setup</span></a>).</p></li>
<li><p>Install a BLE host such as BlueZ on a Linux machine to talk to the
nRF52 board running Mynewt. Use <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">apt-get</span> <span class="pre">install</span> <span class="pre">bluez</span></code> to
install it on your Linux machine.</p></li>
</ul>
</div>
<div class="section" id="create-a-project">
<h2><a class="toc-backref" href="#id2">Create a project</a><a class="headerlink" href="#create-a-project" title="Permalink to this headline"></a></h2>
<p>Use the newt tool to create a new project directory containing a
skeletal Mynewt framework. Change into the newly created directory.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt new blehciproj
Downloading project skeleton from apache/mynewt-blinky...
Installing skeleton in blehciproj ...
Project blehciproj successfully created.
$ cd mblehciproj
$ newt upgrade
Downloading repository mynewt-core (commit: master) ...
apache-mynewt-core successfully upgraded to version 1.7.0
</pre></div>
</div>
</div>
<div class="section" id="create-targets">
<h2><a class="toc-backref" href="#id3">Create targets</a><a class="headerlink" href="#create-targets" title="Permalink to this headline"></a></h2>
<p>You will create two targets - one for the bootloader, the other for the
application. Then you will add the definitions for them. Note that you
are using the example app <code class="docutils literal notranslate"><span class="pre">blehci</span></code> for the application target. Set the
bsp to nordic_pca10040.</p>
<p><strong>NOTE:</strong> The preview version, nRF52PDK, is no longer supported. If you
do not see PCA100040 on the top of your board, you have a preview
version of the board and will need to upgrade your developer board
before continuing.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt target create nrf52_boot
$ newt target set nrf52_boot app=@mcuboot/boot/mynewt
$ newt target set nrf52_boot bsp=@apache-mynewt-core/hw/bsp/nordic_pca10040
$ newt target set nrf52_boot build_profile=optimized
</pre></div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt target create myble2
$ newt target set myble2 bsp=@apache-mynewt-core/hw/bsp/nordic_pca10040
$ newt target set myble2 app=@apache-mynewt-nimble/apps/blehci
$ newt target set myble2 build_profile=optimized
</pre></div>
</div>
<p>Check that the targets are defined correctly.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt target show
targets/my_blinky_sim
app=apps/blinky
bsp=@apache-mynewt-core/hw/bsp/native
build_profile=debug
targets/myble2
app=@apache-mynewt-nimble/apps/blehci
bsp=@apache-mynewt-core/hw/bsp/nordic_pca10040
build_profile=optimized
targets/nrf52_boot
app=@mcuboot/boot/mynewt
bsp=@apache-mynewt-core/hw/bsp/nordic_pca10040
build_profile=optimized
</pre></div>
</div>
</div>
<div class="section" id="build-targets">
<h2><a class="toc-backref" href="#id4">Build targets</a><a class="headerlink" href="#build-targets" title="Permalink to this headline"></a></h2>
<p>Then build the two targets.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>nrf52_boot
<span class="go">&lt;snip&gt;</span>
<span class="go">Linking ~/dev/blehciproj/bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf</span>
<span class="go">Target successfully built: targets/nrf52_boot</span>
<span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>myble2
<span class="go">&lt;snip&gt;</span>
<span class="go">Linking ~/dev/blehciproj/bin/targets/myble2/app/apps/blehci/blehci.elf</span>
<span class="go">Target successfully built: targets/myble2</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
<div class="section" id="create-the-app-image">
<h2><a class="toc-backref" href="#id5">Create the app image</a><a class="headerlink" href="#create-the-app-image" title="Permalink to this headline"></a></h2>
<p>Generate a signed application image for the <code class="docutils literal notranslate"><span class="pre">myble2</span></code> target. The
version number is arbitrary.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>create-image<span class="w"> </span>myble2<span class="w"> </span><span class="m">1</span>.0.0
<span class="go">App image succesfully generated: ~/dev/blehciproj/bin/targets/myble2/app/apps/blehci/blehci.img</span>
</pre></div>
</div>
</div>
<div class="section" id="load-the-bootloader-and-the-application-image">
<h2><a class="toc-backref" href="#id6">Load the bootloader and the application image</a><a class="headerlink" href="#load-the-bootloader-and-the-application-image" title="Permalink to this headline"></a></h2>
<p>Make sure the USB connector is in place and the power LED on the board
is lit. Use the Power ON/OFF switch to reset the board after loading the
image.</p>
<p>Load the bootloader:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>nrf52_boot
<span class="go">Loading bootloader</span>
<span class="gp">$</span>
</pre></div>
</div>
<p>Load the application image:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>myble2
<span class="go">Loading app image into slot 1</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
<div class="section" id="establish-serial-connection">
<h2><a class="toc-backref" href="#id7">Establish serial connection</a><a class="headerlink" href="#establish-serial-connection" title="Permalink to this headline"></a></h2>
<p>Attach a serial port to your board by connecting the USB TTL Serial
Cable. This should create /dev/ttyUSB0 (or similar) on your machine.</p>
<p><strong>Note</strong> Certain Linux OS versions have been observed to detect the
nrf52 board as a mass storage device and the console access doesn’t work
properly. In that case try powering the nrf52 board from your monitor or
something other than your Linux computer/laptop when you set up the
serial port for HCI communication.</p>
</div>
<div class="section" id="open-bluetooth-monitor-btmon">
<h2><a class="toc-backref" href="#id8">Open Bluetooth monitor btmon</a><a class="headerlink" href="#open-bluetooth-monitor-btmon" title="Permalink to this headline"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">btmon</span></code> is a BlueZ test tool to display all HCI commands and events in
a human readable format. Start the btmon tool in a terminal window.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo btmon
[sudo] password for admin:
Bluetooth monitor ver 5.37
</pre></div>
</div>
</div>
<div class="section" id="attach-the-blehci-device-to-bluez">
<h2><a class="toc-backref" href="#id9">Attach the blehci device to BlueZ</a><a class="headerlink" href="#attach-the-blehci-device-to-bluez" title="Permalink to this headline"></a></h2>
<p>In a different terminal, attach the blehci device to the BlueZ daemon
(substitute the correct /dev filename for ttyUSB0).</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo btattach -B /dev/ttyUSB0 -S 1000000
Attaching BR/EDR controller to /dev/ttyUSB0
Switched line discipline from 0 to 15
Device index 1 attached
</pre></div>
</div>
<p>The baud rate used to connect to the controller may be changed by
overriding the default value of 1000000 in the
<code class="docutils literal notranslate"><span class="pre">net/nimble/transport/uart/syscfg.yml</span></code>. Settings in the serial
transport <code class="docutils literal notranslate"><span class="pre">syscfg.yml</span></code> file can be overridden by a higher priority
package such as the application. So, for example, you may set the
<code class="docutils literal notranslate"><span class="pre">BLE_HCI_UART_BAUD</span></code> to a different value in
<code class="docutils literal notranslate"><span class="pre">apps/blehci/syscfg.yml</span></code>.</p>
<p>If there is no CTS/RTS lines present in the test environment, flow
control should be turned off. This can be done with -N option for
btattach. <strong>Note:</strong> -N option came with BlueZ ver 5.44.
Also, modify the value of <code class="docutils literal notranslate"><span class="pre">BLE_HCI_UART_FLOW_CTRL</span></code> in the
<code class="docutils literal notranslate"><span class="pre">nimble/transport/uart/syscfg.yml</span></code> to <code class="docutils literal notranslate"><span class="pre">HAL_UART_FLOW_CTL_NONE</span></code>.</p>
</div>
<div class="section" id="start-btmgmt-to-send-commands">
<h2><a class="toc-backref" href="#id10">Start btmgmt to send commands</a><a class="headerlink" href="#start-btmgmt-to-send-commands" title="Permalink to this headline"></a></h2>
<p>In a third terminal, start btmgmt. This tool allows you to send commands
to the blehci controller. Use the index number that shows up when you
<code class="docutils literal notranslate"><span class="pre">btattach</span></code> in the previous step.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ sudo btmgmt --index 1
[sudo] password for admin:
</pre></div>
</div>
<p>Set your device address (you can substitute any static random address
here).</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>[hci1]# static-addr cc:11:11:11:11:11
Static address successfully set
</pre></div>
</div>
<p>Initialize the controller.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>[hci1]# power on
hci1 Set Powered complete, settings: powered le static-addr
</pre></div>
</div>
<p>Begin scanning.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>[hci1]# find -l
Discovery started
hci1 type 6 discovering on
hci1 dev_found: 58:EF:77:C8:8D:17 type LE Random rssi -78 flags 0x0000
AD flags 0x06
eir_len 23
&lt;snip&gt;
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="../lora/lorawanapp.html" class="btn btn-neutral float-right" title="LoRaWAN App" accesskey="n">Next: LoRaWAN App <span class="fa fa-arrow-circle-right"></span></a>
<a href="bleprph/bleprph-sections/bleprph-app.html" class="btn btn-neutral" title="BLE Peripheral App" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: BLE Peripheral App</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>