Use HCI access to NimBLE controller
-----------------------------------

This tutorial explains how to use the example application ``blehci``
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.

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.

.. contents::
  :local:
  :depth: 2

Prerequisites
~~~~~~~~~~~~~

Ensure that you meet the following prerequisites before continuing with
one of the tutorials.

-  Have Internet connectivity to fetch remote Mynewt components.
-  Have a board with BLE radio that is supported by Mynewt. We will use
   an nRF52 Dev board in this tutorial.
-  Have a USB TTL Serial Cable that supports hardware flow control such
   as ones found at
   http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm to establish
   a serial USB connection between the board and the laptop.
-  Install the newt tool and toolchains (See :doc:`Basic
   Setup <../../get_started/index>`).
-  Install a BLE host such as BlueZ on a Linux machine to talk to the
   nRF52 board running Mynewt. Use ``sudo apt-get install bluez`` to
   install it on your Linux machine.

Create a project
~~~~~~~~~~~~~~~~

Use the newt tool to create a new project directory containing a
skeletal Mynewt framework. Change into the newly created directory.

::
    
    $ 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

Create targets
~~~~~~~~~~~~~~

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 ``blehci`` for the application target. Set the
bsp to nordic_pca10040.

**NOTE:** 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.

::
    
    $ 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

::
    
    $ 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

Check that the targets are defined correctly.

::
    
    $ 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

Build targets
~~~~~~~~~~~~~

Then build the two targets.

.. code-block:: console

    $ newt build nrf52_boot
    <snip>
    Linking ~/dev/blehciproj/bin/targets/nrf52_boot/app/boot/mynewt/mynewt.elf
    Target successfully built: targets/nrf52_boot

    $ newt build myble2
    <snip>
    Linking ~/dev/blehciproj/bin/targets/myble2/app/apps/blehci/blehci.elf
    Target successfully built: targets/myble2
    $

Create the app image
~~~~~~~~~~~~~~~~~~~~

Generate a signed application image for the ``myble2`` target. The
version number is arbitrary.

.. code-block:: console

    $ newt create-image myble2 1.0.0
    App image succesfully generated: ~/dev/blehciproj/bin/targets/myble2/app/apps/blehci/blehci.img

Load the bootloader and the application image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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.

Load the bootloader:

.. code-block:: console

    $ newt load nrf52_boot
    Loading bootloader
    $

Load the application image:

.. code-block:: console

    $ newt load myble2
    Loading app image into slot 1
    $

Establish serial connection
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Attach a serial port to your board by connecting the USB TTL Serial
Cable. This should create /dev/ttyUSB0 (or similar) on your machine.

**Note** 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.

Open Bluetooth monitor btmon
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

``btmon`` 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.

::
    
    $ sudo btmon
    [sudo] password for admin: 
    Bluetooth monitor ver 5.37

Attach the blehci device to BlueZ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In a different terminal, attach the blehci device to the BlueZ daemon
(substitute the correct /dev filename for ttyUSB0).

::
    
    $ 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

The baud rate used to connect to the controller may be changed by
overriding the default value of 1000000 in the
``net/nimble/transport/uart/syscfg.yml``. Settings in the serial
transport ``syscfg.yml`` file can be overridden by a higher priority
package such as the application. So, for example, you may set the
``BLE_HCI_UART_BAUD`` to a different value in
``apps/blehci/syscfg.yml``.

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. **Note:** -N option came with BlueZ ver 5.44. 
Also, modify the value of ``BLE_HCI_UART_FLOW_CTRL`` in the 
``nimble/transport/uart/syscfg.yml`` to ``HAL_UART_FLOW_CTL_NONE``.

Start btmgmt to send commands
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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
``btattach`` in the previous step.

::
    
    $ sudo btmgmt --index 1
    [sudo] password for admin: 

Set your device address (you can substitute any static random address
here).

::
    
    [hci1]# static-addr cc:11:11:11:11:11
    Static address successfully set

Initialize the controller.

::

    [hci1]# power on
    hci1 Set Powered complete, settings: powered le static-addr 

Begin scanning.

::

    [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
    <snip>
