Rizky Ardi Maulana / mbed-os
Committer:
elessair
Date:
Sun Oct 23 15:10:02 2016 +0000
Revision:
0:f269e3021894
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 /* mbed Microcontroller Library
elessair 0:f269e3021894 2 * Copyright (c) 2006-2015 ARM Limited
elessair 0:f269e3021894 3 *
elessair 0:f269e3021894 4 * Licensed under the Apache License, Version 2.0 (the "License");
elessair 0:f269e3021894 5 * you may not use this file except in compliance with the License.
elessair 0:f269e3021894 6 * You may obtain a copy of the License at
elessair 0:f269e3021894 7 *
elessair 0:f269e3021894 8 * http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 9 *
elessair 0:f269e3021894 10 * Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 11 * distributed under the License is distributed on an "AS IS" BASIS,
elessair 0:f269e3021894 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 13 * See the License for the specific language governing permissions and
elessair 0:f269e3021894 14 * limitations under the License.
elessair 0:f269e3021894 15 */
elessair 0:f269e3021894 16 #ifndef __BLE_IBEACON_H__
elessair 0:f269e3021894 17 #define __BLE_IBEACON_H__
elessair 0:f269e3021894 18
elessair 0:f269e3021894 19 #include "core_cmInstr.h"
elessair 0:f269e3021894 20 #include "ble/BLE.h"
elessair 0:f269e3021894 21
elessair 0:f269e3021894 22 /**
elessair 0:f269e3021894 23 * @class iBeacon
elessair 0:f269e3021894 24 * @brief iBeacon Service. This sets up a device to broadcast advertising packets to mimic an iBeacon.
elessair 0:f269e3021894 25 */
elessair 0:f269e3021894 26 class iBeacon
elessair 0:f269e3021894 27 {
elessair 0:f269e3021894 28 public:
elessair 0:f269e3021894 29 typedef const uint8_t LocationUUID_t[16];
elessair 0:f269e3021894 30
elessair 0:f269e3021894 31 union Payload {
elessair 0:f269e3021894 32 uint8_t raw[25];
elessair 0:f269e3021894 33 struct {
elessair 0:f269e3021894 34 uint16_t companyID;
elessair 0:f269e3021894 35 uint8_t ID;
elessair 0:f269e3021894 36 uint8_t len;
elessair 0:f269e3021894 37 uint8_t proximityUUID[16];
elessair 0:f269e3021894 38 uint16_t majorNumber;
elessair 0:f269e3021894 39 uint16_t minorNumber;
elessair 0:f269e3021894 40 uint8_t txPower;
elessair 0:f269e3021894 41 };
elessair 0:f269e3021894 42
elessair 0:f269e3021894 43 Payload(LocationUUID_t uuid, uint16_t majNum, uint16_t minNum, uint8_t transmitPower, uint16_t companyIDIn) :
elessair 0:f269e3021894 44 companyID(companyIDIn), ID(0x02), len(0x15), majorNumber(__REV16(majNum)), minorNumber(__REV16(minNum)), txPower(transmitPower)
elessair 0:f269e3021894 45 {
elessair 0:f269e3021894 46 memcpy(proximityUUID, uuid, sizeof(LocationUUID_t));
elessair 0:f269e3021894 47 }
elessair 0:f269e3021894 48 };
elessair 0:f269e3021894 49
elessair 0:f269e3021894 50 public:
elessair 0:f269e3021894 51 iBeacon(BLE &_ble,
elessair 0:f269e3021894 52 LocationUUID_t uuid,
elessair 0:f269e3021894 53 uint16_t majNum,
elessair 0:f269e3021894 54 uint16_t minNum,
elessair 0:f269e3021894 55 uint8_t txP = 0xC8,
elessair 0:f269e3021894 56 uint16_t compID = 0x004C) :
elessair 0:f269e3021894 57 ble(_ble), data(uuid, majNum, minNum, txP, compID)
elessair 0:f269e3021894 58 {
elessair 0:f269e3021894 59 // Generate the 0x020106 part of the iBeacon Prefix.
elessair 0:f269e3021894 60 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE );
elessair 0:f269e3021894 61 // Generate the 0x1AFF part of the iBeacon Prefix.
elessair 0:f269e3021894 62 ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, data.raw, sizeof(data.raw));
elessair 0:f269e3021894 63
elessair 0:f269e3021894 64 // Set advertising type.
elessair 0:f269e3021894 65 ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
elessair 0:f269e3021894 66 }
elessair 0:f269e3021894 67
elessair 0:f269e3021894 68 protected:
elessair 0:f269e3021894 69 BLE &ble;
elessair 0:f269e3021894 70 Payload data;
elessair 0:f269e3021894 71 };
elessair 0:f269e3021894 72
elessair 0:f269e3021894 73 typedef iBeacon iBeaconService; /* This type-alias is deprecated. Please use iBeacon directly. This alias may be dropped from a future release. */
elessair 0:f269e3021894 74
elessair 0:f269e3021894 75 #endif //__BLE_IBEACON_H__