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

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_iBeacon by Bluetooth Low Energy

Committer:
Rohit Grover
Date:
Fri May 23 17:50:10 2014 +0100
Revision:
24:9bcd0dbf0f41
Parent:
23:b66fa312e926
Child:
25:a56462536345
removed use of forward declarations for helper functions

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 22:080d9bf2f5c0 42 const static 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 24:9bcd0dbf0f41 53 void tickerCallback(void)
Rohit Grover 24:9bcd0dbf0f41 54 {
Rohit Grover 24:9bcd0dbf0f41 55 tickerLED = !tickerLED;
Rohit Grover 24:9bcd0dbf0f41 56 }
Rohit Grover 24:9bcd0dbf0f41 57
Rohit Grover 24:9bcd0dbf0f41 58 void setupAppHardware(void)
Rohit Grover 24:9bcd0dbf0f41 59 {
Rohit Grover 24:9bcd0dbf0f41 60 /* Setup blinkies: mainloopLED is toggled in main, tickerLED is
Rohit Grover 24:9bcd0dbf0f41 61 * toggled via Ticker */
Rohit Grover 24:9bcd0dbf0f41 62 mainloopLED = 1;
Rohit Grover 24:9bcd0dbf0f41 63 tickerLED = 1;
Rohit Grover 24:9bcd0dbf0f41 64 flipper.attach(&tickerCallback, 1.0);
Rohit Grover 24:9bcd0dbf0f41 65 }
Rohit Grover 10:391c1acf4b9d 66
ktownsend 0:7613d21e5974 67 int main(void)
ktownsend 0:7613d21e5974 68 {
Rohit Grover 10:391c1acf4b9d 69 setupAppHardware();
ktownsend 0:7613d21e5974 70
Rohit Grover 16:3a0aa30e3b12 71 pc.printf("Initialising BTLE transport\n\r");
Rohit Grover 11:6774f4827024 72 ble.init();
Rohit Grover 11:6774f4827024 73 ble.reset();
ktownsend 0:7613d21e5974 74
Rohit Grover 23:b66fa312e926 75 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 23:b66fa312e926 76 ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
Rohit Grover 23:b66fa312e926 77 beaconPayload,
Rohit Grover 23:b66fa312e926 78 sizeof(beaconPayload));
ktownsend 0:7613d21e5974 79
Rohit Grover 20:5e84b5b253a5 80 ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
Rohit Grover 23:b66fa312e926 81 ble.setAdvertisingTimeout(0); /* disable timeout. */
Rohit Grover 23:b66fa312e926 82 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
Rohit Grover 19:869d8c7306b4 83 ble.startAdvertising();
ktownsend 0:7613d21e5974 84
Rohit Grover 9:438f44012039 85 /* Do blinky on mainloopLED while we're waiting for BLE events */
Rohit Grover 21:a61af863b273 86 for (;;) {
Rohit Grover 9:438f44012039 87 mainloopLED = !mainloopLED;
rohit.grover 6:26eab6ee6df4 88 wait(1);
ktownsend 0:7613d21e5974 89 }
Rohit Grover 10:391c1acf4b9d 90 }