EddyStone Beacon demo for the BLE API using the nRF51822 native mode drivers

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_iBeacon by Bluetooth Low Energy

Revision:
73:4793c5b3a7be
Parent:
72:eb4de3de66b8
--- a/main.cpp	Wed Jul 22 07:45:18 2015 +0000
+++ b/main.cpp	Mon Sep 28 03:40:33 2015 +0000
@@ -1,47 +1,109 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2015 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// mbed HRM1017 Eddystone
+// Programed by Kazuyuki Eguchi
 
 #include "mbed.h"
-#include "ble/services/iBeacon.h"
+#include "BLE.h"
+
+BLEDevice ble;
+
+static const uint16_t uuid16_list[]        = {0xFEAA};
+
+const static uint8_t beaconPayload_uid[] = {
+    0xaa,
+    0xfe,
+
+    // UID
+
+    0x00, // Frame Type
+    0x00, // Ranging Data
+
+    0x01, // NID[0]
+    0x02, // NID[1]
+    0x03, // NID[2]
+    0x04, // NID[3]
+    0x05, // NID[4]
+    0x06, // NID[5]
+    0x07, // NID[6]
+    0x08, // NID[7]
+    0x09, // NID[8]
+    0x0A, // NID[9]
+
+    0x11, // BID[0] 
+    0x22, // BID[1]
+    0x33, // BID[2]
+    0x44, // BID[3]
+    0x55, // BID[4]
+    0x66, // BID[5]
+    0x00, // RFU
+    0x00  // RFU
+};
+
+const static uint8_t beaconPayload_url[] = {
+    0xaa,
+    0xfe,
 
-BLE ble;
+    // URL
+
+    0x10, // Frame Type
+    0x00, // Ranging Data
+    0x02, // URL Scheme (http:// = 0x02)
+
+    'c',
+    'u',
+    'b',
+    'e',
+    'a',
+    'c',
+    'o',
+    'n',
+    '.',
+    'c',
+    'o',
+    'm'
+};
+
+const static uint8_t beaconPayload_tlm[] = {
+    0xaa,
+    0xfe,
+
+    // TLM
+
+    0x20, // Frame Type
+    0x00, // Version
+    0x01, // VBATT[0]
+    0x00, // VBATT[1]
+    0x02, // TEMP[0]
+    0x00, // TEMP[1]
+    0x03, // ADV[0]
+    0x00, // ADV[1]
+    0x00, // ADV[2]
+    0x00, // ADV[3]
+    0x04, // SEC_CNT[0]
+    0x00, // SEC_CNT[1]
+    0x00, // SEC_CNT[2]
+    0x00 // SEC_CNT[3]
+};
+
 
 int main(void)
 {
     ble.init();
 
-    /**
-     * The Beacon payload has the following composition:
-     * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61
-     * Major/Minor  = 0x1122 / 0x3344
-     * Tx Power     = 0xC8 = 200, 2's compliment is 256-200 = (-56dB)
-     *
-     * Note: please remember to calibrate your beacons TX Power for more accurate results.
-     */
-    const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4,
-                            0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61};
-    uint16_t majorNumber = 1122;
-    uint16_t minorNumber = 3344;
-    uint16_t txPower     = 0xC8;
-    iBeacon ibeacon(ble, uuid, majorNumber, minorNumber, txPower);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA,beaconPayload_uid, sizeof(beaconPayload_uid));
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA,beaconPayload_url, sizeof(beaconPayload_url));
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA,beaconPayload_tlm, sizeof(beaconPayload_tlm));
 
-    ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
-    ble.gap().startAdvertising();
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
+
+    ble.setAdvertisingInterval(160);
 
-    while (true) {
-        ble.waitForEvent(); // allows or low power operation
+    ble.startAdvertising();
+
+    for (;;) {
+        ble.waitForEvent();
     }
-}
+}
\ No newline at end of file