Demonstration of possible usage of the Security Manager. Security Manager deals with pairing, authentication and encryption.

SM - example usage of the Security Manager to pair and encrypt

Demonstration of possible usage of the Security Manager. Security Manager deals with pairing, authentication and encryption.

The application demonstrates usage as a central and a peripheral. The central will connect to any connectable device present. Please have one ready and advertising. Application will attempt pairing. Please authorise your peer device to pair.

Upon success it will disconnect and start advertising to demonstrate usage as a peripheral. Please scan and connect using your peer device. Upon connection grant pairing if prompted. Upon success the application will disconnect. Observe the terminal to keep track of the sequence.

Running the application

Requirements

The sample application can be seen on any BLE scanner on a smartphone. If you don't have a scanner on your phone, please install :

- nRF Master Control Panel for Android.

- LightBlue for iPhone.

Information about activity is printed over the serial connection - please have a client open. You may use:

- Tera Term

Hardware requirements are in the main readme.

Building instructions

Building instructions for all samples are in the main readme.

Committer:
mbed_official
Date:
Thu Aug 15 17:02:31 2019 +0100
Revision:
23:03723224d5e7
Parent:
17:6bf7972c4d0e
Merge pull request #252 from donatieng/mbed_os_update

Update Master branch to use Mbed OS 5.13.1
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-ble

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 17:6bf7972c4d0e 1 /* mbed Microcontroller Library
mbed_official 17:6bf7972c4d0e 2 * Copyright (c) 2018 ARM Limited
mbed_official 17:6bf7972c4d0e 3 *
mbed_official 17:6bf7972c4d0e 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 17:6bf7972c4d0e 5 * you may not use this file except in compliance with the License.
mbed_official 17:6bf7972c4d0e 6 * You may obtain a copy of the License at
mbed_official 17:6bf7972c4d0e 7 *
mbed_official 17:6bf7972c4d0e 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 17:6bf7972c4d0e 9 *
mbed_official 17:6bf7972c4d0e 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 17:6bf7972c4d0e 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 17:6bf7972c4d0e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 17:6bf7972c4d0e 13 * See the License for the specific language governing permissions and
mbed_official 17:6bf7972c4d0e 14 * limitations under the License.
mbed_official 17:6bf7972c4d0e 15 */
mbed_official 17:6bf7972c4d0e 16
mbed_official 17:6bf7972c4d0e 17 #include <mbed.h>
mbed_official 17:6bf7972c4d0e 18 #include "ble/BLE.h"
mbed_official 17:6bf7972c4d0e 19
mbed_official 17:6bf7972c4d0e 20 inline void print_error(ble_error_t error, const char* msg)
mbed_official 17:6bf7972c4d0e 21 {
mbed_official 17:6bf7972c4d0e 22 printf("%s: ", msg);
mbed_official 17:6bf7972c4d0e 23 switch(error) {
mbed_official 17:6bf7972c4d0e 24 case BLE_ERROR_NONE:
mbed_official 17:6bf7972c4d0e 25 printf("BLE_ERROR_NONE: No error");
mbed_official 17:6bf7972c4d0e 26 break;
mbed_official 17:6bf7972c4d0e 27 case BLE_ERROR_BUFFER_OVERFLOW:
mbed_official 17:6bf7972c4d0e 28 printf("BLE_ERROR_BUFFER_OVERFLOW: The requested action would cause a buffer overflow and has been aborted");
mbed_official 17:6bf7972c4d0e 29 break;
mbed_official 17:6bf7972c4d0e 30 case BLE_ERROR_NOT_IMPLEMENTED:
mbed_official 17:6bf7972c4d0e 31 printf("BLE_ERROR_NOT_IMPLEMENTED: Requested a feature that isn't yet implement or isn't supported by the target HW");
mbed_official 17:6bf7972c4d0e 32 break;
mbed_official 17:6bf7972c4d0e 33 case BLE_ERROR_PARAM_OUT_OF_RANGE:
mbed_official 17:6bf7972c4d0e 34 printf("BLE_ERROR_PARAM_OUT_OF_RANGE: One of the supplied parameters is outside the valid range");
mbed_official 17:6bf7972c4d0e 35 break;
mbed_official 17:6bf7972c4d0e 36 case BLE_ERROR_INVALID_PARAM:
mbed_official 17:6bf7972c4d0e 37 printf("BLE_ERROR_INVALID_PARAM: One of the supplied parameters is invalid");
mbed_official 17:6bf7972c4d0e 38 break;
mbed_official 17:6bf7972c4d0e 39 case BLE_STACK_BUSY:
mbed_official 17:6bf7972c4d0e 40 printf("BLE_STACK_BUSY: The stack is busy");
mbed_official 17:6bf7972c4d0e 41 break;
mbed_official 17:6bf7972c4d0e 42 case BLE_ERROR_INVALID_STATE:
mbed_official 17:6bf7972c4d0e 43 printf("BLE_ERROR_INVALID_STATE: Invalid state");
mbed_official 17:6bf7972c4d0e 44 break;
mbed_official 17:6bf7972c4d0e 45 case BLE_ERROR_NO_MEM:
mbed_official 17:6bf7972c4d0e 46 printf("BLE_ERROR_NO_MEM: Out of Memory");
mbed_official 17:6bf7972c4d0e 47 break;
mbed_official 17:6bf7972c4d0e 48 case BLE_ERROR_OPERATION_NOT_PERMITTED:
mbed_official 17:6bf7972c4d0e 49 printf("BLE_ERROR_OPERATION_NOT_PERMITTED");
mbed_official 17:6bf7972c4d0e 50 break;
mbed_official 17:6bf7972c4d0e 51 case BLE_ERROR_INITIALIZATION_INCOMPLETE:
mbed_official 17:6bf7972c4d0e 52 printf("BLE_ERROR_INITIALIZATION_INCOMPLETE");
mbed_official 17:6bf7972c4d0e 53 break;
mbed_official 17:6bf7972c4d0e 54 case BLE_ERROR_ALREADY_INITIALIZED:
mbed_official 17:6bf7972c4d0e 55 printf("BLE_ERROR_ALREADY_INITIALIZED");
mbed_official 17:6bf7972c4d0e 56 break;
mbed_official 17:6bf7972c4d0e 57 case BLE_ERROR_UNSPECIFIED:
mbed_official 17:6bf7972c4d0e 58 printf("BLE_ERROR_UNSPECIFIED: Unknown error");
mbed_official 17:6bf7972c4d0e 59 break;
mbed_official 17:6bf7972c4d0e 60 case BLE_ERROR_INTERNAL_STACK_FAILURE:
mbed_official 17:6bf7972c4d0e 61 printf("BLE_ERROR_INTERNAL_STACK_FAILURE: internal stack faillure");
mbed_official 17:6bf7972c4d0e 62 break;
mbed_official 17:6bf7972c4d0e 63 }
mbed_official 17:6bf7972c4d0e 64 printf("\r\n");
mbed_official 17:6bf7972c4d0e 65 }
mbed_official 17:6bf7972c4d0e 66
mbed_official 17:6bf7972c4d0e 67 /** print device address to the terminal */
mbed_official 17:6bf7972c4d0e 68 void print_address(const uint8_t *addr)
mbed_official 17:6bf7972c4d0e 69 {
mbed_official 17:6bf7972c4d0e 70 printf("%02x:%02x:%02x:%02x:%02x:%02x\r\n",
mbed_official 17:6bf7972c4d0e 71 addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
mbed_official 17:6bf7972c4d0e 72 }
mbed_official 17:6bf7972c4d0e 73
mbed_official 17:6bf7972c4d0e 74 inline void print_mac_address()
mbed_official 17:6bf7972c4d0e 75 {
mbed_official 17:6bf7972c4d0e 76 /* Print out device MAC address to the console*/
mbed_official 17:6bf7972c4d0e 77 Gap::AddressType_t addr_type;
mbed_official 17:6bf7972c4d0e 78 Gap::Address_t address;
mbed_official 17:6bf7972c4d0e 79 BLE::Instance().gap().getAddress(&addr_type, address);
mbed_official 17:6bf7972c4d0e 80 printf("DEVICE MAC ADDRESS: ");
mbed_official 17:6bf7972c4d0e 81 print_address(address);
mbed_official 17:6bf7972c4d0e 82 }
mbed_official 17:6bf7972c4d0e 83
mbed_official 17:6bf7972c4d0e 84 inline const char* phy_to_string(Gap::Phy_t phy) {
mbed_official 17:6bf7972c4d0e 85 switch(phy.value()) {
mbed_official 17:6bf7972c4d0e 86 case Gap::Phy_t::LE_1M:
mbed_official 17:6bf7972c4d0e 87 return "LE 1M";
mbed_official 17:6bf7972c4d0e 88 case Gap::Phy_t::LE_2M:
mbed_official 17:6bf7972c4d0e 89 return "LE 2M";
mbed_official 17:6bf7972c4d0e 90 case Gap::Phy_t::LE_CODED:
mbed_official 17:6bf7972c4d0e 91 return "LE coded";
mbed_official 17:6bf7972c4d0e 92 default:
mbed_official 17:6bf7972c4d0e 93 return "invalid PHY";
mbed_official 17:6bf7972c4d0e 94 }
mbed_official 17:6bf7972c4d0e 95 }