Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE_API by
Diff: services/iBeaconService.h
- Revision:
- 288:1956023d42fb
- Parent:
- 286:898ff71b9502
- Child:
- 528:8d21604fe31d
diff -r cca148e535b1 -r 1956023d42fb services/iBeaconService.h
--- a/services/iBeaconService.h Fri Feb 13 16:37:42 2015 +0000
+++ b/services/iBeaconService.h Fri Feb 13 16:37:42 2015 +0000
@@ -16,6 +16,7 @@
#ifndef __BLE_IBEACON_SERVICE_H__
#define __BLE_IBEACON_SERVICE_H__
+#include "core_cmInstr.h"
#include "BLEDevice.h"
/**
@@ -26,33 +27,9 @@
class iBeaconService
{
public:
- iBeaconService(BLEDevice &_ble, uint8_t proxUUID[16],uint16_t majNum,uint16_t minNum,uint8_t txP=0xC8, uint16_t compID=0x004C):
- ble(_ble)
- {
- data.ID = 0x02; // Optional ID field
- data.len = 0x15; // Len of remaining stuff (16B UUID, 2B Maj, 2B Min, 1B TxP)
- data.majorNumber = ((majNum<<8) | (majNum >>8));
- data.minorNumber = ((minNum<<8) | (minNum >>8));
- data.txPower = txP; // The user should calibrate this to ~1meter fromt he device
- data.companyID = compID; // Note: all iBeacons use the Apple ID of 0x004C
+ typedef const uint8_t LocationUUID_t[16];
- // copy across proximity UUID
- for(int x=0; x<sizeof(data.proximityUUID); x++) {
- data.proximityUUID[x]=proxUUID[x];
- }
-
- // Set up iBeacon data
- // Generate the 0x020106 part of the iBeacon Prefix
- ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE );
- // Generate the 0x1AFF part of the iBeacon Prefix
- ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, data.raw, sizeof(data.raw));
-
- // Set advertising type
- ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
- }
-
-public:
- union {
+ union Payload {
uint8_t raw[25];
struct {
uint16_t companyID;
@@ -63,11 +40,35 @@
uint16_t minorNumber;
uint8_t txPower;
};
- } data;
+
+ Payload(LocationUUID_t uuid, uint16_t majNum, uint16_t minNum, uint8_t transmitPower, uint16_t companyIDIn) :
+ companyID(companyIDIn), ID(0x02), len(0x15), majorNumber(__REV16(majNum)), minorNumber(__REV16(minNum)), txPower(transmitPower)
+ {
+ memcpy(proximityUUID, uuid, sizeof(LocationUUID_t));
+ }
+ };
+
+public:
+ iBeaconService(BLEDevice &_ble,
+ LocationUUID_t uuid,
+ uint16_t majNum,
+ uint16_t minNum,
+ uint8_t txP = 0xC8,
+ uint16_t compID = 0x004C) :
+ ble(_ble), data(uuid, majNum, minNum, txP, compID)
+ {
+ // Generate the 0x020106 part of the iBeacon Prefix
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE );
+ // Generate the 0x1AFF part of the iBeacon Prefix
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, data.raw, sizeof(data.raw));
+
+ // Set advertising type
+ ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
+ }
private:
BLEDevice &ble;
-
+ Payload data;
};
#endif //__BLE_IBEACON_SERVICE_H__
\ No newline at end of file
