blob: 44451d6321fb905585809870ee57fed1e4957f93 [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>Project Sim Slinky &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="Project Slinky" href="project-slinky.html"/>
<link rel="next" title="Project Slinky using the Nordic nRF52 Board" href="project-nrf52-slinky.html"/>
<link rel="prev" title="Project Slinky" href="project-slinky.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="project-slinky.html">Project Slinky</a> /
Project Sim Slinky
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/slinky/project-sim-slinky.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 current"><a class="reference internal" href="project-slinky.html">Project Slinky for Remote Comms</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Slinky on Simulated device</a></li>
<li class="toctree-l3"><a class="reference internal" href="project-nrf52-slinky.html">Slinky on nRF52</a></li>
<li class="toctree-l3"><a class="reference internal" href="project-stm32-slinky.html">Slinky on Olimex</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../ble/ble.html">Bluetooth Low Energy</a></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="project-sim-slinky">
<h1>Project Sim Slinky<a class="headerlink" href="#project-sim-slinky" title="Permalink to this headline"></a></h1>
<p>This tutorial shows you how to create, build and run the Slinky
application and communicate with newtmgr for a simulated device. This is
supported on Mac OS and Linux platforms.</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="#creating-a-new-project" id="id2">Creating a new project</a></p></li>
<li><p><a class="reference internal" href="#setting-up-your-target-build" id="id3">Setting up your target build</a></p></li>
<li><p><a class="reference internal" href="#building-your-target" id="id4">Building Your target</a></p></li>
<li><p><a class="reference internal" href="#run-the-target" id="id5">Run the target</a></p></li>
<li><p><a class="reference internal" href="#setting-up-a-connection-profile" id="id6">Setting up a connection profile</a></p></li>
<li><p><a class="reference internal" href="#executing-newtmgr-commands-with-the-target" id="id7">Executing newtmgr commands with the target</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>Meet the prerequisites listed in <a class="reference internal" href="project-slinky.html"><span class="doc">Project Slinky</span></a></p>
</div>
<div class="section" id="creating-a-new-project">
<h2><a class="toc-backref" href="#id2">Creating a new project</a><a class="headerlink" href="#creating-a-new-project" title="Permalink to this headline"></a></h2>
<p>Instructions for creating a project are located in the
<a class="reference internal" href="../../get_started/project_create.html"><span class="doc">Basic Setup</span></a> section of the
<a class="reference internal" href="../../index.html"><span class="doc">Mynewt Documentation</span></a></p>
<p>We will list only the steps here for brevity.
We will name the project <code class="docutils literal notranslate"><span class="pre">slinky</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>new<span class="w"> </span>slinky
<span class="go">Downloading project skeleton from apache/mynewt-blinky...</span>
<span class="go">...</span>
<span class="go">Installing skeleton in slinky...</span>
<span class="go">Project slinky successfully created.</span>
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>slinky
<span class="gp">$ </span>newt<span class="w"> </span>upgrade
<span class="go">Downloading repository mynewt-core (commit: master) ...</span>
<span class="go">...</span>
<span class="go">apache-mynewt-core successfully upgraded to version 1.7.0</span>
<span class="go">mcuboot successfully upgraded to version 1.3.1</span>
</pre></div>
</div>
</div>
<div class="section" id="setting-up-your-target-build">
<h2><a class="toc-backref" href="#id3">Setting up your target build</a><a class="headerlink" href="#setting-up-your-target-build" title="Permalink to this headline"></a></h2>
<p>Create a target for <code class="docutils literal notranslate"><span class="pre">slinky</span></code> using the native bsp. We will list only
the steps and suppress the tool output here for brevity.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>create<span class="w"> </span>sim_slinky
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>sim_slinky<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@apache-mynewt-core/hw/bsp/native
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>sim_slinky<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>debug
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>sim_slinky<span class="w"> </span><span class="nv">app</span><span class="o">=</span>@apache-mynewt-core/apps/slinky
</pre></div>
</div>
</div>
<div class="section" id="building-your-target">
<h2><a class="toc-backref" href="#id4">Building Your target</a><a class="headerlink" href="#building-your-target" title="Permalink to this headline"></a></h2>
<p>To build your target, use <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span></code>. When complete, an executable
file is created.</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>sim_slinky
<span class="go">Building target targets/sim_slinky</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/caps.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/encrypted.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c</span>
<span class="go">Compiling repos/apache-mynewt-core/apps/slinky/src/main.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ed25519.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c</span>
<span class="go">Compiling repos/apache-mynewt-core/boot/split/src/split_config.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/loader.c</span>
<span class="go"> ...</span>
<span class="go">Archiving @apache-mynewt-core_util_rwlock.a</span>
<span class="go">Archiving @apache-mynewt-core_util_streamer.a</span>
<span class="go">Linking ~/dev/slinky/bin/targets/sim_slinky/app/@apache-mynewt-core/apps/slinky/slinky.elf</span>
<span class="go">Target successfully built: targets/sim_slinky</span>
</pre></div>
</div>
</div>
<div class="section" id="run-the-target">
<h2><a class="toc-backref" href="#id5">Run the target</a><a class="headerlink" href="#run-the-target" title="Permalink to this headline"></a></h2>
<p>Run the executable you have build for the simulated environment. The
serial port name on which the simulated target is connected is shown in
the output when mynewt slinky starts.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>~/dev/slinky/bin/targets/sim_slinky/app/apps/slinky/slinky.elf
<span class="go">uart0 at /dev/ttys005</span>
</pre></div>
</div>
<p>In this example, the slinky app opened up a com port <code class="docutils literal notranslate"><span class="pre">/dev/ttys005</span></code>
for communications with newtmgr.</p>
<p><strong>NOTE:</strong> This application will block. You will need to open a new
console (or execute this in another console) to continue the tutorial.*</p>
</div>
<div class="section" id="setting-up-a-connection-profile">
<h2><a class="toc-backref" href="#id6">Setting up a connection profile</a><a class="headerlink" href="#setting-up-a-connection-profile" title="Permalink to this headline"></a></h2>
<p>You will now set up a connection profile using <code class="docutils literal notranslate"><span class="pre">newtmgr</span></code> for the
serial port connection and start communicating with the simulated remote
device.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newtmgr<span class="w"> </span>conn<span class="w"> </span>add<span class="w"> </span>sim1<span class="w"> </span><span class="nv">type</span><span class="o">=</span>serial<span class="w"> </span><span class="nv">connstring</span><span class="o">=</span>/dev/ttys005
<span class="go">Connection profile sim1 successfully added</span>
<span class="gp">$ </span>newtmgr<span class="w"> </span>conn<span class="w"> </span>show
<span class="go">Connection profiles:</span>
<span class="go"> sim1: type=serial, connstring=&#39;/dev/ttys005&#39;</span>
</pre></div>
</div>
</div>
<div class="section" id="executing-newtmgr-commands-with-the-target">
<h2><a class="toc-backref" href="#id7">Executing newtmgr commands with the target</a><a class="headerlink" href="#executing-newtmgr-commands-with-the-target" title="Permalink to this headline"></a></h2>
<p>You can now use connection profile <code class="docutils literal notranslate"><span class="pre">sim1</span></code> to talk to the running
sim_slinky. As an example, we will query the running mynewt OS for the
usage of its memory pools.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newtmgr<span class="w"> </span>-c<span class="w"> </span>sim1<span class="w"> </span>mpstat
<span class="go">Return Code = 0</span>
<span class="go"> name blksz cnt free min</span>
<span class="go"> msys_1 292 12 10 10</span>
</pre></div>
</div>
<p>As a test command, you can send an arbitrary string to the target and it
will echo that string back in a response to newtmgr.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newtmgr<span class="w"> </span>-c<span class="w"> </span>sim1<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;Hello Mynewt&quot;</span>
<span class="go">Hello Mynewt</span>
</pre></div>
</div>
<p>In addition to these, you can also examine running tasks, statistics,
logs, image status (not on sim), and configuration.</p>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="project-nrf52-slinky.html" class="btn btn-neutral float-right" title="Project Slinky using the Nordic nRF52 Board" accesskey="n">Next: Project Slinky using the Nordic nRF52 Board <span class="fa fa-arrow-circle-right"></span></a>
<a href="project-slinky.html" class="btn btn-neutral" title="Project Slinky" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Project Slinky</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>