blob: c90b8072f002f75d09048e14f99860e187af0ca3 [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>Enabling The Console and Shell for Blinky &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 Blinky" href="blinky.html"/>
<link rel="next" title="Adding Repositories to your Project" href="../repo/add_repos.html"/>
<link rel="prev" title="Blinky, your “Hello World!”, on STM32F4-Discovery" href="blinky_stm32f4disc.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.12.0, Apache NimBLE 1.7.0 </a> released April 4, 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="/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="blinky.html">Project Blinky</a> /
Enabling The Console and Shell for Blinky
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/blinky/blinky_console.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_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" selected="selected" >
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 current"><a class="reference internal" href="../tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="blinky.html">Project Blinky</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="arduino_zero.html">Blinky on Arduino Zero</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_primo.html">Blinky on Arduino Primo</a></li>
<li class="toctree-l3"><a class="reference internal" href="olimex.html">Blinky on Olimex</a></li>
<li class="toctree-l3"><a class="reference internal" href="nRF52.html">Blinky on nRF52 DK</a></li>
<li class="toctree-l3"><a class="reference internal" href="pinetime.html">Blinky on PineTime</a></li>
<li class="toctree-l3"><a class="reference internal" href="rbnano2.html">Blinky on RedBear Nano 2</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_stm32f4disc.html">Blinky on STM32F4-Discovery</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Add Console and Shell to Blinky</a></li>
</ul>
</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"><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.9.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="enabling-the-console-and-shell-for-blinky">
<h1>Enabling The Console and Shell for Blinky<a class="headerlink" href="#enabling-the-console-and-shell-for-blinky" title="Permalink to this headline"></a></h1>
<p>This tutorial shows you how to add the Console and Shell to the Blinky
application and interact with it over a serial line connection.</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="#use-an-existing-project" id="id2">Use an Existing Project</a></p></li>
<li><p><a class="reference internal" href="#modify-the-dependencies-and-configuration" id="id3">Modify the Dependencies and Configuration</a></p></li>
<li><p><a class="reference internal" href="#use-the-os-default-event-queue-to-process-blinky-timer-and-shell-events" id="id4">Use the OS Default Event Queue to Process Blinky Timer and Shell Events</a></p></li>
<li><p><a class="reference internal" href="#modify-main-c" id="id5">Modify main.c</a></p></li>
<li><p><a class="reference internal" href="#build-run-and-upload-the-blinky-application-target" id="id6">Build, Run, and Upload the Blinky Application Target</a></p></li>
<li><p><a class="reference internal" href="#set-up-a-serial-connection" id="id7">Set Up a Serial Connection</a></p></li>
<li><p><a class="reference internal" href="#communicate-with-the-application" id="id8">Communicate with the Application</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>
<ul class="simple">
<li><p>Work through one of the <a class="reference internal" href="blinky.html"><span class="doc">Blinky Tutorials</span></a> to create and build a Blinky
application for one of the boards.</p></li>
<li><p>Have a <a class="reference internal" href="../../get_started/serial_access.html"><span class="doc">serial setup</span></a>.</p></li>
</ul>
</div>
<div class="section" id="use-an-existing-project">
<h2><a class="toc-backref" href="#id2">Use an Existing Project</a><a class="headerlink" href="#use-an-existing-project" title="Permalink to this headline"></a></h2>
<p>Since all we’re doing is adding the shell and console capability to
blinky, we assume that you have worked through at least some of the
other tutorials, and have an existing project. For this example, we’ll
be modifying the <a class="reference internal" href="nRF52.html"><span class="doc">blinky on nRF52</span></a> project to enable the
shell and console connectivity. You can use blinky on a different board.</p>
</div>
<div class="section" id="modify-the-dependencies-and-configuration">
<h2><a class="toc-backref" href="#id3">Modify the Dependencies and Configuration</a><a class="headerlink" href="#modify-the-dependencies-and-configuration" title="Permalink to this headline"></a></h2>
<p>Modify the package dependencies in your application target’s <code class="docutils literal notranslate"><span class="pre">pkg.yml</span></code>
file as follows:</p>
<ul>
<li><p>Add the shell package: <code class="docutils literal notranslate"><span class="pre">&#64;apache-mynewt-core/sys/shell</span></code>.</p></li>
<li><p>Replace the <code class="docutils literal notranslate"><span class="pre">&#64;apache-mynewt-core/sys/console/stub</span></code> package with the
<code class="docutils literal notranslate"><span class="pre">&#64;apache-mynewt-core/sys/console/full</span></code> package.</p>
<p><strong>Note</strong>: If you are using version 1.1 or lower of blinky, the
<code class="docutils literal notranslate"><span class="pre">&#64;apache-mynewt-core/sys/console/full</span></code> package may be already
listed as a dependency.</p>
</li>
</ul>
<p>The updated <code class="docutils literal notranslate"><span class="pre">pkg.yml</span></code> file should have the following two lines:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">pkg.deps</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;@apache-mynewt-core/sys/console/full&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;@apache-mynewt-core/sys/shell&quot;</span>
</pre></div>
</div>
<p>This lets the newt system know that it needs to pull in the code for the
console and the shell.</p>
<p>Modify the system configuration settings to enable Shell and Console
ticks and prompt. Add the following to your application target’s
<code class="docutils literal notranslate"><span class="pre">syscfg.yml</span></code> file:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">syscfg.vals</span><span class="p">:</span>
<span class="w"> </span><span class="c1"># Enable the shell task.</span>
<span class="w"> </span><span class="nt">SHELL_TASK</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<span class="w"> </span><span class="nt">SHELL_PROMPT_MODULE</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
</pre></div>
</div>
</div>
<div class="section" id="use-the-os-default-event-queue-to-process-blinky-timer-and-shell-events">
<h2><a class="toc-backref" href="#id4">Use the OS Default Event Queue to Process Blinky Timer and Shell Events</a><a class="headerlink" href="#use-the-os-default-event-queue-to-process-blinky-timer-and-shell-events" title="Permalink to this headline"></a></h2>
<p>Mynewt creates a main task that executes the application <code class="docutils literal notranslate"><span class="pre">main()</span></code>
function. It also creates an OS default event queue that packages can
use to queue their events. Shell uses the OS default event queue for
Shell events, and <code class="docutils literal notranslate"><span class="pre">main()</span></code> can process the events in the context of
the main task.</p>
<p>Blinky’s main.c is very simple. It only has a <code class="docutils literal notranslate"><span class="pre">main()</span></code> function that
executes an infinite loop to toggle the LED and sleep for one second. We
will modify blinky:</p>
<ul class="simple">
<li><p>To use os_callout to generate a timer event every one second instead
of sleeping. The timer events are added to the OS default event
queue.</p></li>
<li><p>To process events from the OS default event queue inside the infinite
loop in <code class="docutils literal notranslate"><span class="pre">main()</span></code>.</p></li>
</ul>
<p>This allows the main task to process both Shell events and the timer
events to toggle the LED from the OS default event queue.</p>
</div>
<div class="section" id="modify-main-c">
<h2><a class="toc-backref" href="#id5">Modify main.c</a><a class="headerlink" href="#modify-main-c" title="Permalink to this headline"></a></h2>
<p>Initialize a os_callout timer and move the toggle code from the while
loop in <code class="docutils literal notranslate"><span class="pre">main()</span></code> to the event callback function. Add the following
code above the <code class="docutils literal notranslate"><span class="pre">main()</span></code> function:</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cm">/* The timer callout */</span>
<span class="k">static</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">os_callout</span><span class="w"> </span><span class="n">blinky_callout</span><span class="p">;</span>
<span class="cm">/*</span>
<span class="cm"> * Event callback function for timer events. It toggles the led pin.</span>
<span class="cm"> */</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span>
<span class="nf">timer_ev_cb</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">os_event</span><span class="w"> </span><span class="o">*</span><span class="n">ev</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="n">ev</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span>
<span class="w"> </span><span class="o">++</span><span class="n">g_task1_loops</span><span class="p">;</span>
<span class="w"> </span><span class="n">hal_gpio_toggle</span><span class="p">(</span><span class="n">g_led_pin</span><span class="p">);</span>
<span class="w"> </span><span class="n">os_callout_reset</span><span class="p">(</span><span class="o">&amp;</span><span class="n">blinky_callout</span><span class="p">,</span><span class="w"> </span><span class="n">OS_TICKS_PER_SEC</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span>
<span class="nf">init_timer</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="cm">/*</span>
<span class="cm"> * Initialize the callout for a timer event.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">os_callout_init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">blinky_callout</span><span class="p">,</span><span class="w"> </span><span class="n">os_eventq_dflt_get</span><span class="p">(),</span>
<span class="w"> </span><span class="n">timer_ev_cb</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span>
<span class="w"> </span><span class="n">os_callout_reset</span><span class="p">(</span><span class="o">&amp;</span><span class="n">blinky_callout</span><span class="p">,</span><span class="w"> </span><span class="n">OS_TICKS_PER_SEC</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
<p>In <code class="docutils literal notranslate"><span class="pre">main()</span></code>, add the call to the <code class="docutils literal notranslate"><span class="pre">init_timer()</span></code> function before the
while loop and modify the while loop to process events from the OS
default event queue:</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span>
<span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">argv</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">rc</span><span class="p">;</span>
<span class="cp">#ifdef ARCH_sim</span>
<span class="w"> </span><span class="n">mcu_sim_parse_args</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="n">argv</span><span class="p">);</span>
<span class="cp">#endif</span>
<span class="w"> </span><span class="n">sysinit</span><span class="p">();</span>
<span class="w"> </span><span class="n">g_led_pin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LED_BLINK_PIN</span><span class="p">;</span>
<span class="hll"><span class="w"> </span><span class="n">hal_gpio_init_out</span><span class="p">(</span><span class="n">g_led_pin</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
</span><span class="w"> </span><span class="n">init_timer</span><span class="p">();</span>
<span class="hll"><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
</span><span class="w"> </span><span class="n">os_eventq_run</span><span class="p">(</span><span class="n">os_eventq_dflt_get</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">rc</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="section" id="build-run-and-upload-the-blinky-application-target">
<h2><a class="toc-backref" href="#id6">Build, Run, and Upload the Blinky Application Target</a><a class="headerlink" href="#build-run-and-upload-the-blinky-application-target" title="Permalink to this headline"></a></h2>
<p>We’re not going to build the bootloader here since we are assuming that
you have already built and loaded it during previous tutorials.</p>
<p>We will use the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">run</span></code> command to build and deploy our improved
blinky image. The run command performs the following tasks for us:</p>
<ol class="arabic simple">
<li><p>Builds a binary Mynewt executable</p></li>
<li><p>Wraps the executable in an image header and footer, turning it into a
Mynewt image.</p></li>
<li><p>Uploads the image to the target hardware.</p></li>
<li><p>Starts a gdb process to remotely debug the Mynewt device.</p></li>
</ol>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">run</span> <span class="pre">nrf52_blinky</span> <span class="pre">0</span></code> command. The <code class="docutils literal notranslate"><span class="pre">0</span></code> is the version
number that should be written to the image header. Any version will do,
so we choose 0.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>run<span class="w"> </span>nrf52_blinky<span class="w"> </span><span class="m">0</span>
<span class="go"> ...</span>
<span class="go">Archiving util_mem.a</span>
<span class="go">Linking /home/me/dev/myproj/bin/targets/nrf52_blinky/app/apps/blinky/blinky.elf</span>
<span class="go">App image succesfully generated: /home/me/dev/myproj/bin/targets/nrf52_blinky/app/apps/blinky/blinky.elf</span>
<span class="go">Loading app image into slot 1</span>
<span class="go">[/home/me/dev/myproj/repos/apache-mynewt-core/hw/bsp/nrf52dk/nrf52dk_debug.sh /home/me/dev/myproj/repos/apache-mynewt-core/hw/bsp/nrf52dk /home/me/dev/myproj/bin/targets/nrf52_blinky/app/apps/blinky]</span>
<span class="go">Debugging /home/me/dev/myproj/bin/targets/nrf52_blinky/app/apps/blinky/blinky.elf</span>
</pre></div>
</div>
</div>
<div class="section" id="set-up-a-serial-connection">
<h2><a class="toc-backref" href="#id7">Set Up a Serial Connection</a><a class="headerlink" href="#set-up-a-serial-connection" title="Permalink to this headline"></a></h2>
<p>You’ll need a Serial connection to see the output of your program. You
can reference the <a class="reference internal" href="../../get_started/serial_access.html"><span class="doc">Using the Serial Port with Mynewt OS</span></a> Tutorial for more information
on setting up your serial communication.</p>
</div>
<div class="section" id="communicate-with-the-application">
<h2><a class="toc-backref" href="#id8">Communicate with the Application</a><a class="headerlink" href="#communicate-with-the-application" title="Permalink to this headline"></a></h2>
<p>Once you have a connection set up, you can connect to your device as
follows:</p>
<ul class="simple">
<li><p>On Mac OS and Linux platforms, you can run
<code class="docutils literal notranslate"><span class="pre">minicom</span> <span class="pre">-D</span> <span class="pre">/dev/tty.usbserial-&lt;port&gt;</span> <span class="pre">-b</span> <span class="pre">115200</span></code> to connect to the
console of your app. Note that on Linux, the format of the port name
is <code class="docutils literal notranslate"><span class="pre">/dev/ttyUSB&lt;N&gt;</span></code>, where N is a number.</p></li>
<li><p>On Windows, you can use a terminal application such as PuTTY to
connect to the device.</p></li>
</ul>
<p>If you located your port from a MinGW terminal, the port name format is
<code class="docutils literal notranslate"><span class="pre">/dev/ttyS&lt;N&gt;</span></code>, where <code class="docutils literal notranslate"><span class="pre">N</span></code> is a number. You must map the port name to
a Windows COM port: <code class="docutils literal notranslate"><span class="pre">/dev/ttyS&lt;N&gt;</span></code> maps to <code class="docutils literal notranslate"><span class="pre">COM&lt;N+1&gt;</span></code>. For example,
<code class="docutils literal notranslate"><span class="pre">/dev/ttyS2</span></code> maps to <code class="docutils literal notranslate"><span class="pre">COM3</span></code>.</p>
<p>You can also use the Windows Device Manager to locate the COM port.</p>
<p>To test and make sure that the Shell is running, first just hit :</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">004543 shell&gt;</span>
</pre></div>
</div>
<p>You can try some commands:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">003005 shell&gt; help</span>
<span class="go">003137 Available modules:</span>
<span class="go">003137 os</span>
<span class="go">003138 prompt</span>
<span class="go">003138 To select a module, enter &#39;select &lt;module name&gt;&#39;.</span>
<span class="go">003140 shell&gt; prompt</span>
<span class="go">003827 help</span>
<span class="go">003827 ticks shell ticks command</span>
<span class="go">004811 shell&gt; prompt ticks off</span>
<span class="go">005770 Console Ticks off</span>
<span class="go">shell&gt; prompt ticks on</span>
<span class="go">006404 Console Ticks on</span>
<span class="go">006404 shell&gt;</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="../repo/add_repos.html" class="btn btn-neutral float-right" title="Adding Repositories to your Project" accesskey="n">Next: Adding Repositories to your Project <span class="fa fa-arrow-circle-right"></span></a>
<a href="blinky_stm32f4disc.html" class="btn btn-neutral" title="Blinky, your “Hello World!”, on STM32F4-Discovery" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Blinky, your “Hello World!”, on STM32F4-Discovery</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>