The eddystone config service allows you to configure the eddystone frame data over BLE for a set period of time and then starts an eddystone beacon. This example defaults to 30 seconds of config time.

Dependencies:   BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1

Fork of BLE_EddystoneBeaconConfigServiceRelease by Austin Blackstone

This is the eddystone config service. This code starts up and for a user configured time period (default 30 seconds) will advertise the configuration service.

The configuration service allows for modifying various frames of the eddystone specification.

For more details on the Configuration Service please see : https://github.com/google/eddystone/blob/master/eddystone-url/docs/config-service-spec.md

Committer:
Vincent Coubard
Date:
Tue Sep 20 14:21:04 2016 +0100
Revision:
8:f53d48e5d64f
Parent:
6:321047f0190a
Update libraries and add support of ST shield.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andresag 6:321047f0190a 1 /* mbed Microcontroller Library
andresag 6:321047f0190a 2 * Copyright (c) 2006-2015 ARM Limited
andresag 6:321047f0190a 3 *
andresag 6:321047f0190a 4 * Licensed under the Apache License, Version 2.0 (the "License");
andresag 6:321047f0190a 5 * you may not use this file except in compliance with the License.
andresag 6:321047f0190a 6 * You may obtain a copy of the License at
andresag 6:321047f0190a 7 *
andresag 6:321047f0190a 8 * http://www.apache.org/licenses/LICENSE-2.0
andresag 6:321047f0190a 9 *
andresag 6:321047f0190a 10 * Unless required by applicable law or agreed to in writing, software
andresag 6:321047f0190a 11 * distributed under the License is distributed on an "AS IS" BASIS,
andresag 6:321047f0190a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
andresag 6:321047f0190a 13 * See the License for the specific language governing permissions and
andresag 6:321047f0190a 14 * limitations under the License.
andresag 6:321047f0190a 15 */
andresag 6:321047f0190a 16
andresag 6:321047f0190a 17 #include "UIDFrame.h"
andresag 6:321047f0190a 18
andresag 6:321047f0190a 19 UIDFrame::UIDFrame(void)
andresag 6:321047f0190a 20 {
andresag 6:321047f0190a 21 memset(uidNamespaceID, 0, sizeof(UIDNamespaceID_t));
andresag 6:321047f0190a 22 memset(uidInstanceID, 0, sizeof(UIDInstanceID_t));
andresag 6:321047f0190a 23 }
andresag 6:321047f0190a 24
andresag 6:321047f0190a 25 UIDFrame::UIDFrame(const UIDNamespaceID_t uidNamespaceIDIn, const UIDInstanceID_t uidInstanceIDIn)
andresag 6:321047f0190a 26 {
andresag 6:321047f0190a 27 memcpy(uidNamespaceID, uidNamespaceIDIn, sizeof(UIDNamespaceID_t));
andresag 6:321047f0190a 28 memcpy(uidInstanceID, uidInstanceIDIn, sizeof(UIDInstanceID_t));
andresag 6:321047f0190a 29 }
andresag 6:321047f0190a 30
andresag 6:321047f0190a 31 void UIDFrame::setUIDData(const UIDNamespaceID_t *uidNamespaceIDIn, const UIDInstanceID_t *uidInstanceIDIn)
andresag 6:321047f0190a 32 {
andresag 6:321047f0190a 33 memcpy(uidNamespaceID, uidNamespaceIDIn, sizeof(UIDNamespaceID_t));
andresag 6:321047f0190a 34 memcpy(uidInstanceID, uidInstanceIDIn, sizeof(UIDInstanceID_t));
andresag 6:321047f0190a 35 }
andresag 6:321047f0190a 36
andresag 6:321047f0190a 37 void UIDFrame::constructUIDFrame(uint8_t *rawFrame, int8_t advPowerLevel)
andresag 6:321047f0190a 38 {
andresag 6:321047f0190a 39 size_t index = 0;
andresag 6:321047f0190a 40
andresag 6:321047f0190a 41 rawFrame[index++] = EDDYSTONE_UUID[0]; // 16-bit Eddystone UUID
andresag 6:321047f0190a 42 rawFrame[index++] = EDDYSTONE_UUID[1];
andresag 6:321047f0190a 43 rawFrame[index++] = FRAME_TYPE_UID; // 1B Type
andresag 6:321047f0190a 44 rawFrame[index++] = advPowerLevel; // 1B Power @ 0meter
andresag 6:321047f0190a 45
andresag 6:321047f0190a 46 memcpy(rawFrame + index, uidNamespaceID, sizeof(UIDNamespaceID_t)); // 10B Namespace ID
andresag 6:321047f0190a 47 index += sizeof(UIDNamespaceID_t);
andresag 6:321047f0190a 48 memcpy(rawFrame + index, uidInstanceID, sizeof(UIDInstanceID_t)); // 6B Instance ID
andresag 6:321047f0190a 49 index += sizeof(UIDInstanceID_t);
andresag 6:321047f0190a 50
andresag 6:321047f0190a 51 memset(rawFrame + index, 0, 2 * sizeof(uint8_t)); // 2B RFU, which are unused
andresag 6:321047f0190a 52 }
andresag 6:321047f0190a 53
andresag 6:321047f0190a 54 size_t UIDFrame::getRawFrameSize(void) const
andresag 6:321047f0190a 55 {
andresag 6:321047f0190a 56 return FRAME_SIZE_UID + EDDYSTONE_UUID_SIZE;
andresag 6:321047f0190a 57 }
andresag 6:321047f0190a 58
andresag 6:321047f0190a 59 uint8_t* UIDFrame::getUIDNamespaceID(void)
andresag 6:321047f0190a 60 {
andresag 6:321047f0190a 61 return uidNamespaceID;
andresag 6:321047f0190a 62 }
andresag 6:321047f0190a 63
andresag 6:321047f0190a 64 uint8_t* UIDFrame::getUIDInstanceID(void)
andresag 6:321047f0190a 65 {
andresag 6:321047f0190a 66 return uidInstanceID;
andresag 6:321047f0190a 67 }