From 0e3a0c45a430ef7e8db7369d2b74c9a93c091f92 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 9 Dec 2015 21:18:54 +0100 Subject: [PATCH] arduino: link UUID to iBeacon Advertisement and free it together --- platforms/arduino/BTstack.cpp | 18 +++++++++++++----- platforms/arduino/BTstack.h | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/platforms/arduino/BTstack.cpp b/platforms/arduino/BTstack.cpp index 71baa3d1e..8dcf28800 100644 --- a/platforms/arduino/BTstack.cpp +++ b/platforms/arduino/BTstack.cpp @@ -374,7 +374,8 @@ BD_ADDR_TYPE BD_ADDR::getAddressType(void){ BLEAdvertisement::BLEAdvertisement(uint8_t * event_packet) : advertising_event_type(event_packet[2]), rssi(event_packet[10]), -data_length(event_packet[11]) +data_length(event_packet[11]), +iBeacon_UUID(NULL) { bd_addr_t addr; bt_flip_addr(addr, &event_packet[4]); @@ -382,6 +383,10 @@ data_length(event_packet[11]) memcpy(data, &event_packet[12], LE_ADVERTISING_DATA_SIZE); } +BLEAdvertisement::~BLEAdvertisement(){ + if (iBeacon_UUID) delete(iBeacon_UUID); +} + const uint8_t * BLEAdvertisement::getAdvData(void){ return data; } @@ -426,15 +431,18 @@ bool BLEAdvertisement::isIBeacon(void){ } const UUID * BLEAdvertisement::getIBeaconUUID(void){ - return new UUID(&data[9]); + if (!iBeacon_UUID){ + iBeacon_UUID = new UUID(&data[9]); + } + return iBeacon_UUID; }; -uint16_t BLEAdvertisement::getIBeaconMajorID(void){ +uint16_t BLEAdvertisement::getIBeaconMajorID(void){ return READ_NET_16(data, 25); }; -uint16_t BLEAdvertisement::getIBecaonMinorID(void){ +uint16_t BLEAdvertisement::getIBecaonMinorID(void){ return READ_NET_16(data, 27); }; -uint8_t BLEAdvertisement::getiBeaconMeasuredPower(void){ +uint8_t BLEAdvertisement::getiBeaconMeasuredPower(void){ return data[29]; } diff --git a/platforms/arduino/BTstack.h b/platforms/arduino/BTstack.h index a87cd88a4..ccb398afa 100644 --- a/platforms/arduino/BTstack.h +++ b/platforms/arduino/BTstack.h @@ -57,8 +57,10 @@ private: uint8_t data_length; uint8_t data[10 + LE_ADVERTISING_DATA_SIZE]; BD_ADDR bd_addr; + UUID * iBeacon_UUID; public: BLEAdvertisement(uint8_t * event_packet); + ~BLEAdvertisement(); BD_ADDR * getBdAddr(); BD_ADDR_TYPE getBdAddrType(); int getRssi();