From 6d906beffe7dbcc78cdeed1cfae4811758ecfda8 Mon Sep 17 00:00:00 2001 From: George Hawkins Date: Mon, 18 May 2015 21:09:05 +0200 Subject: [PATCH] Moved iBeacon logic from example into separate iBeacon class. --- examples/ibeacon/ibeacon.ino | 34 ++++------------------------------ iBeacon.cpp | 33 +++++++++++++++++++++++++++++++++ iBeacon.h | 16 ++++++++++++++++ 3 files changed, 53 insertions(+), 30 deletions(-) create mode 100644 iBeacon.cpp create mode 100644 iBeacon.h diff --git a/examples/ibeacon/ibeacon.ino b/examples/ibeacon/ibeacon.ino index 000bc52..5ac1197 100644 --- a/examples/ibeacon/ibeacon.ino +++ b/examples/ibeacon/ibeacon.ino @@ -1,5 +1,5 @@ #include -#include +#include #if !defined(NRF51) && !defined(__RFduino__) #error "This example only works with nRF51 boards" @@ -7,39 +7,13 @@ static BLEPeripheral blePeripheral(0, 0, 0); -static void setIBeaconData(BLEPeripheral& peripheral, const char* uuidString, uint16_t major, uint16_t minor, int8_t measuredPower) { - unsigned char manufacturerData[MAX_UUID_LENGTH + 9]; // 4 bytes of header and 5 bytes of trailer. - BLEUuid uuid(uuidString); - int i = 0; - - // 0x004c = Apple, see https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers - manufacturerData[i++] = 0x4c; // Apple Company Identifier LE (16 bit) - manufacturerData[i++] = 0x00; - - // See "Beacon type" in "Building Applications with IBeacon". - manufacturerData[i++] = 0x02; - manufacturerData[i++] = uuid.length() + 5; - - for (int j = (uuid.length() - 1); j >= 0; j--) { - manufacturerData[i++] = uuid.data()[j]; - } - - manufacturerData[i++] = major >> 8; - manufacturerData[i++] = major; - manufacturerData[i++] = minor >> 8; - manufacturerData[i++] = minor; - manufacturerData[i++] = measuredPower; - - peripheral.setManufacturerData(manufacturerData, i); -} - void setup() { - char* uuidString = "a196c876-de8c-4c47-ab5a-d7afd5ae7127"; + char* uuid = "a196c876-de8c-4c47-ab5a-d7afd5ae7127"; uint16_t major = 0; uint16_t minor = 0; int8_t measuredPower = -55; - - setIBeaconData(blePeripheral, uuidString, major, minor, measuredPower); + + iBeacon::setData(blePeripheral, uuid, major, minor, measuredPower); blePeripheral.begin(); } diff --git a/iBeacon.cpp b/iBeacon.cpp new file mode 100644 index 0000000..c1abf69 --- /dev/null +++ b/iBeacon.cpp @@ -0,0 +1,33 @@ +#if defined(NRF51) || defined(__RFduino__) + +#include + +#include "iBeacon.h" + +void iBeacon::setData(BLEPeripheral& peripheral, const char* uuidString, uint16_t major, uint16_t minor, int8_t measuredPower) { + unsigned char manufacturerData[MAX_UUID_LENGTH + 9]; // 4 bytes of header and 5 bytes of trailer. + BLEUuid uuid(uuidString); + int i = 0; + + // 0x004c = Apple, see https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers + manufacturerData[i++] = 0x4c; // Apple Company Identifier LE (16 bit) + manufacturerData[i++] = 0x00; + + // See "Beacon type" in "Building Applications with IBeacon". + manufacturerData[i++] = 0x02; + manufacturerData[i++] = uuid.length() + 5; + + for (int j = (uuid.length() - 1); j >= 0; j--) { + manufacturerData[i++] = uuid.data()[j]; + } + + manufacturerData[i++] = major >> 8; + manufacturerData[i++] = major; + manufacturerData[i++] = minor >> 8; + manufacturerData[i++] = minor; + manufacturerData[i++] = measuredPower; + + peripheral.setManufacturerData(manufacturerData, i); +} + +#endif diff --git a/iBeacon.h b/iBeacon.h new file mode 100644 index 0000000..a5a756c --- /dev/null +++ b/iBeacon.h @@ -0,0 +1,16 @@ +#ifndef _I_BEACON_H_ +#define _I_BEACON_H_ + +#if defined(NRF51) || !defined(__RFduino__) + +#include "BLEPeripheral.h" + +class iBeacon +{ + public: + static void setData(BLEPeripheral& peripheral, const char* uuidString, uint16_t major, uint16_t minor, int8_t measuredPower); +}; + +#endif + +#endif