Beacon demo for the BLE API using the nRF51822 native mode drivers

Dependencies:   BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1

Fork of BLE_iBeacon by Bluetooth Low Energy

Committer:
Rohit Grover
Date:
Thu May 22 17:10:38 2014 +0100
Revision:
18:e49bb8b059bf
Parent:
17:e7748951593e
Child:
19:869d8c7306b4
minor white space diffs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ktownsend 0:7613d21e5974 1 /* mbed Microcontroller Library
ktownsend 0:7613d21e5974 2 * Copyright (c) 2006-2013 ARM Limited
ktownsend 0:7613d21e5974 3 *
ktownsend 0:7613d21e5974 4 * Licensed under the Apache License, Version 2.0 (the "License");
ktownsend 0:7613d21e5974 5 * you may not use this file except in compliance with the License.
ktownsend 0:7613d21e5974 6 * You may obtain a copy of the License at
ktownsend 0:7613d21e5974 7 *
ktownsend 0:7613d21e5974 8 * http://www.apache.org/licenses/LICENSE-2.0
ktownsend 0:7613d21e5974 9 *
ktownsend 0:7613d21e5974 10 * Unless required by applicable law or agreed to in writing, software
ktownsend 0:7613d21e5974 11 * distributed under the License is distributed on an "AS IS" BASIS,
ktownsend 0:7613d21e5974 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ktownsend 0:7613d21e5974 13 * See the License for the specific language governing permissions and
ktownsend 0:7613d21e5974 14 * limitations under the License.
ktownsend 0:7613d21e5974 15 */
ktownsend 0:7613d21e5974 16
ktownsend 0:7613d21e5974 17 #include "mbed.h"
Rohit Grover 17:e7748951593e 18 #include "BLEDevice.h"
ktownsend 0:7613d21e5974 19
Rohit Grover 17:e7748951593e 20 BLEDevice ble; /* BLE radio driver */
ktownsend 0:7613d21e5974 21
Rohit Grover 16:3a0aa30e3b12 22 DigitalOut mainloopLED(LED1);
Rohit Grover 16:3a0aa30e3b12 23 DigitalOut tickerLED(LED2);
Rohit Grover 16:3a0aa30e3b12 24 Ticker flipper;
Rohit Grover 16:3a0aa30e3b12 25 Serial pc(USBTX,USBRX);
ktownsend 0:7613d21e5974 26
Rohit Grover 10:391c1acf4b9d 27 /*
Rohit Grover 10:391c1acf4b9d 28 * For this demo application, populate the beacon advertisement payload
Rohit Grover 15:4e1b36b73213 29 * with 2 AD structures: FLAG and MSD (manufacturer specific data).
Rohit Grover 10:391c1acf4b9d 30 *
Rohit Grover 10:391c1acf4b9d 31 * Reference:
Rohit Grover 10:391c1acf4b9d 32 * Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 11, 18
Rohit Grover 10:391c1acf4b9d 33 */
ktownsend 0:7613d21e5974 34
Rohit Grover 14:dfdf0c8b1c09 35 /*
Rohit Grover 15:4e1b36b73213 36 * The Beacon payload (encapsulated within the MSD advertising data structure)
Rohit Grover 15:4e1b36b73213 37 * has the following composition:
Rohit Grover 10:391c1acf4b9d 38 * 128-Bit UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
Rohit Grover 10:391c1acf4b9d 39 * Major/Minor = 0000 / 0000
Rohit Grover 10:391c1acf4b9d 40 * Tx Power = C8
Rohit Grover 10:391c1acf4b9d 41 */
Rohit Grover 10:391c1acf4b9d 42 uint8_t beaconPayload[] = {
Rohit Grover 10:391c1acf4b9d 43 0x4C, 0x00, // Company identifier code (0x004C == Apple)
Rohit Grover 10:391c1acf4b9d 44 0x02, // ID
Rohit Grover 10:391c1acf4b9d 45 0x15, // length of the remaining payload
Rohit Grover 10:391c1acf4b9d 46 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
Rohit Grover 10:391c1acf4b9d 47 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
Rohit Grover 10:391c1acf4b9d 48 0x00, 0x00, // the major value to differenciate a location
Rohit Grover 10:391c1acf4b9d 49 0x00, 0x00, // the minor value to differenciate a location
Rohit Grover 10:391c1acf4b9d 50 0xC8 // 2's complement of the Tx power (-56dB)
Rohit Grover 10:391c1acf4b9d 51 };
Rohit Grover 10:391c1acf4b9d 52
Rohit Grover 10:391c1acf4b9d 53 static void setupAppHardware(void);
Rohit Grover 10:391c1acf4b9d 54 static void tickerCallback(void);
Rohit Grover 10:391c1acf4b9d 55
ktownsend 0:7613d21e5974 56 int main(void)
ktownsend 0:7613d21e5974 57 {
Rohit Grover 10:391c1acf4b9d 58 setupAppHardware();
ktownsend 0:7613d21e5974 59
Rohit Grover 16:3a0aa30e3b12 60 pc.printf("Initialising BTLE transport\n\r");
Rohit Grover 11:6774f4827024 61 ble.init();
Rohit Grover 11:6774f4827024 62 ble.reset();
ktownsend 0:7613d21e5974 63
Rohit Grover 10:391c1acf4b9d 64 /* Setup advertising data. This includes AD structures in the payload of
Rohit Grover 15:4e1b36b73213 65 * advertising packets. */
Rohit Grover 10:391c1acf4b9d 66 {
Rohit Grover 10:391c1acf4b9d 67 GapAdvertisingData advData;
Rohit Grover 10:391c1acf4b9d 68 advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 10:391c1acf4b9d 69 advData.addData(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
Rohit Grover 10:391c1acf4b9d 70 beaconPayload,
Rohit Grover 10:391c1acf4b9d 71 sizeof(beaconPayload));
Rohit Grover 13:04c6103760d2 72 ble.setAdvertisingData(advData);
Rohit Grover 10:391c1acf4b9d 73 }
ktownsend 0:7613d21e5974 74
ktownsend 0:7613d21e5974 75 /* Start advertising! */
Rohit Grover 10:391c1acf4b9d 76 GapAdvertisingParams advParams(
Rohit Grover 10:391c1acf4b9d 77 GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
Rohit Grover 12:00545c957af4 78 ble.startAdvertising(advParams);
ktownsend 0:7613d21e5974 79
Rohit Grover 9:438f44012039 80 /* Do blinky on mainloopLED while we're waiting for BLE events */
rohit.grover 5:97ce285ff00a 81 for (;; ) {
Rohit Grover 9:438f44012039 82 mainloopLED = !mainloopLED;
rohit.grover 6:26eab6ee6df4 83 wait(1);
ktownsend 0:7613d21e5974 84 }
Rohit Grover 10:391c1acf4b9d 85 }
Rohit Grover 10:391c1acf4b9d 86
Rohit Grover 10:391c1acf4b9d 87 void setupAppHardware(void)
Rohit Grover 10:391c1acf4b9d 88 {
Rohit Grover 10:391c1acf4b9d 89 /* Setup blinkies: mainloopLED is toggled in main, tickerLED is
Rohit Grover 10:391c1acf4b9d 90 * toggled via Ticker */
Rohit Grover 10:391c1acf4b9d 91 mainloopLED = 1;
Rohit Grover 10:391c1acf4b9d 92 tickerLED = 1;
Rohit Grover 10:391c1acf4b9d 93 flipper.attach(&tickerCallback, 1.0);
ktownsend 0:7613d21e5974 94 }
ktownsend 0:7613d21e5974 95
ktownsend 0:7613d21e5974 96 void tickerCallback(void)
ktownsend 0:7613d21e5974 97 {
Rohit Grover 9:438f44012039 98 tickerLED = !tickerLED;
ktownsend 0:7613d21e5974 99 }