Demonstration of the GAP profile. It shows advertising, scanning and connecting. The demo will cycle through several modes and print over the serial connection information about current activity.

GAP - Advertising, Scanning, Connecting

Demonstration of GAP API usage. It shows advertising, scanning and connecting. The demo will cycle through several modes and print over the serial connection information about current activity.

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:
Mon Jan 14 10:45:29 2019 +0000
Revision:
16:4dd4ecbc8efb
Merge pull request #208 from ARMmbed/mbed-os-5.11.0-oob

Mbed OS 5.11.0
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-ble

Who changed what in which revision?

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