Simple beacon for nRF51822

Dependencies:   BLE_API mbed nRF51822Copy

Fork of BLE_iBeacon by Bluetooth Low Energy

This is the demo beacon for ARM TechCon 2014.

Based on the original library, this demo reads the onboard switches and temperature sensor and beacons them out as a BLE advertisment.

Committer:
ktownsend
Date:
Wed Apr 02 18:36:52 2014 +0000
Revision:
2:90b493cdcb1f
Parent:
0:7613d21e5974
Child:
4:0ce8d2dd62f9
Code cleanup

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"
ktownsend 0:7613d21e5974 18 #include "nRF51822n.h"
ktownsend 0:7613d21e5974 19
ktownsend 0:7613d21e5974 20 nRF51822n nrf; /* BLE radio driver */
ktownsend 0:7613d21e5974 21
ktownsend 0:7613d21e5974 22 DigitalOut led1(LED1);
ktownsend 0:7613d21e5974 23 DigitalOut led2(LED2);
ktownsend 0:7613d21e5974 24 Ticker flipper;
ktownsend 0:7613d21e5974 25 Serial pc(USBTX,USBRX);
ktownsend 0:7613d21e5974 26
ktownsend 0:7613d21e5974 27 void tickerCallback(void);
ktownsend 0:7613d21e5974 28
ktownsend 0:7613d21e5974 29 /**************************************************************************/
ktownsend 0:7613d21e5974 30 /*!
ktownsend 0:7613d21e5974 31 @brief Program entry point
ktownsend 0:7613d21e5974 32 */
ktownsend 0:7613d21e5974 33 /**************************************************************************/
ktownsend 0:7613d21e5974 34 int main(void)
ktownsend 0:7613d21e5974 35 {
ktownsend 0:7613d21e5974 36 *(uint32_t *)0x40000504 = 0xC007FFDF;
ktownsend 0:7613d21e5974 37 *(uint32_t *)0x40006C18 = 0x00008000;
ktownsend 0:7613d21e5974 38
ktownsend 0:7613d21e5974 39 /* Setup blinky: led1 is toggled in main, led2 is toggled via Ticker */
ktownsend 0:7613d21e5974 40 led1=1;
ktownsend 0:7613d21e5974 41 led2=1;
ktownsend 0:7613d21e5974 42 flipper.attach(&tickerCallback, 1.0);
ktownsend 0:7613d21e5974 43
ktownsend 0:7613d21e5974 44 /* Initialise the nRF51822 */
ktownsend 0:7613d21e5974 45 pc.printf("Initialising the nRF51822\n\r");
ktownsend 0:7613d21e5974 46 nrf.init();
ktownsend 0:7613d21e5974 47
ktownsend 0:7613d21e5974 48 GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED );
ktownsend 0:7613d21e5974 49 GapAdvertisingData advData;
ktownsend 0:7613d21e5974 50 GapAdvertisingData scanResponse;
ktownsend 0:7613d21e5974 51
ktownsend 2:90b493cdcb1f 52 /* Define an Beacon payload
ktownsend 0:7613d21e5974 53 --------------------------------------------------------------
ktownsend 0:7613d21e5974 54 128-Bit UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
ktownsend 0:7613d21e5974 55 Major/Minor = 0000 / 0000
ktownsend 0:7613d21e5974 56 Tx Power = C8
ktownsend 0:7613d21e5974 57 */
ktownsend 0:7613d21e5974 58 uint8_t iBeaconPayload[25] = { 0x4C, 0x00, 0x02, 0x15, 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61, 0x00, 0x00, 0x00, 0x00, 0xC8 };
ktownsend 0:7613d21e5974 59
ktownsend 0:7613d21e5974 60 /* Make sure we get a clean start */
ktownsend 0:7613d21e5974 61 nrf.reset();
ktownsend 0:7613d21e5974 62
ktownsend 2:90b493cdcb1f 63 /* Beacon includes the FLAG and MSD fields */
ktownsend 0:7613d21e5974 64 advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
ktownsend 0:7613d21e5974 65 advData.addData(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, iBeaconPayload, sizeof(iBeaconPayload));
ktownsend 0:7613d21e5974 66
ktownsend 0:7613d21e5974 67 /* Start advertising! */
ktownsend 0:7613d21e5974 68 nrf.getGap().setAdvertisingData(advData, scanResponse);
ktownsend 0:7613d21e5974 69 nrf.getGap().startAdvertising(advParams);
ktownsend 0:7613d21e5974 70
ktownsend 0:7613d21e5974 71 /* Do blinky on LED1 while we're waiting for BLE events */
ktownsend 0:7613d21e5974 72 for (;;)
ktownsend 0:7613d21e5974 73 {
ktownsend 0:7613d21e5974 74 led1 = !led1;
ktownsend 0:7613d21e5974 75 wait(1);
ktownsend 0:7613d21e5974 76 }
ktownsend 0:7613d21e5974 77 }
ktownsend 0:7613d21e5974 78
ktownsend 0:7613d21e5974 79 /**************************************************************************/
ktownsend 0:7613d21e5974 80 /*!
ktownsend 0:7613d21e5974 81 @brief Ticker callback to switch led2 state
ktownsend 0:7613d21e5974 82 */
ktownsend 0:7613d21e5974 83 /**************************************************************************/
ktownsend 0:7613d21e5974 84 void tickerCallback(void)
ktownsend 0:7613d21e5974 85 {
ktownsend 0:7613d21e5974 86 led2 = !led2;
ktownsend 0:7613d21e5974 87 }