BLE EddystoneService example

This example is a fork of the following mbed-os example:

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-EddystoneService/

Please read the documentation in this page.

Committer:
Vincent Coubard
Date:
Thu Jul 28 23:27:37 2016 +0100
Revision:
2:9ee673e0b86a
Parent:
1:9db4d46bb63f
Child:
3:5120491ba317
Sync with mbed-os-5.1.0-rc3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vincent Coubard 2:9ee673e0b86a 1 /* mbed Microcontroller Library
Vincent Coubard 2:9ee673e0b86a 2 * Copyright (c) 2006-2015 ARM Limited
Vincent Coubard 2:9ee673e0b86a 3 *
Vincent Coubard 2:9ee673e0b86a 4 * Licensed under the Apache License, Version 2.0 (the "License");
Vincent Coubard 2:9ee673e0b86a 5 * you may not use this file except in compliance with the License.
Vincent Coubard 2:9ee673e0b86a 6 * You may obtain a copy of the License at
Vincent Coubard 2:9ee673e0b86a 7 *
Vincent Coubard 2:9ee673e0b86a 8 * http://www.apache.org/licenses/LICENSE-2.0
Vincent Coubard 2:9ee673e0b86a 9 *
Vincent Coubard 2:9ee673e0b86a 10 * Unless required by applicable law or agreed to in writing, software
Vincent Coubard 2:9ee673e0b86a 11 * distributed under the License is distributed on an "AS IS" BASIS,
Vincent Coubard 2:9ee673e0b86a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Vincent Coubard 2:9ee673e0b86a 13 * See the License for the specific language governing permissions and
Vincent Coubard 2:9ee673e0b86a 14 * limitations under the License.
Vincent Coubard 2:9ee673e0b86a 15 */
Vincent Coubard 2:9ee673e0b86a 16
Vincent Coubard 2:9ee673e0b86a 17 #ifndef __EDDYSTONETYPES_H__
Vincent Coubard 2:9ee673e0b86a 18 #define __EDDYSTONETYPES_H__
Vincent Coubard 2:9ee673e0b86a 19
Vincent Coubard 2:9ee673e0b86a 20 #include <stdint.h>
Vincent Coubard 2:9ee673e0b86a 21 #include <stddef.h>
Vincent Coubard 2:9ee673e0b86a 22
Vincent Coubard 2:9ee673e0b86a 23 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_DEVICE_NAME
Vincent Coubard 2:9ee673e0b86a 24 #define YOTTA_CFG_EDDYSTONE_DEFAULT_DEVICE_NAME "EDDYSTONE CONFIG"
Vincent Coubard 2:9ee673e0b86a 25 #endif
Vincent Coubard 2:9ee673e0b86a 26
Vincent Coubard 2:9ee673e0b86a 27 #ifndef YOTTA_CFG_EDDYSTONE_DEFAULT_URL
Vincent Coubard 2:9ee673e0b86a 28 #define YOTTA_CFG_EDDYSTONE_DEFAULT_URL "https://www.mbed.com/"
Vincent Coubard 2:9ee673e0b86a 29 #endif
Vincent Coubard 2:9ee673e0b86a 30
Vincent Coubard 2:9ee673e0b86a 31 /**
Vincent Coubard 2:9ee673e0b86a 32 * Macro to expand a 16-bit Eddystone UUID to 128-bit UUID.
Vincent Coubard 2:9ee673e0b86a 33 */
Vincent Coubard 2:9ee673e0b86a 34 #define UUID_URL_BEACON(FIRST, SECOND) { \
Vincent Coubard 2:9ee673e0b86a 35 0xee, 0x0c, FIRST, SECOND, 0x87, 0x86, 0x40, 0xba, \
Vincent Coubard 2:9ee673e0b86a 36 0xab, 0x96, 0x99, 0xb9, 0x1a, 0xc9, 0x81, 0xd8, \
Vincent Coubard 2:9ee673e0b86a 37 }
Vincent Coubard 2:9ee673e0b86a 38
Vincent Coubard 2:9ee673e0b86a 39 /**
Vincent Coubard 2:9ee673e0b86a 40 * Eddystone 16-bit UUID.
Vincent Coubard 2:9ee673e0b86a 41 */
Vincent Coubard 2:9ee673e0b86a 42 const uint8_t EDDYSTONE_UUID[] = {0xAA, 0xFE};
Vincent Coubard 2:9ee673e0b86a 43
Vincent Coubard 2:9ee673e0b86a 44 /**
Vincent Coubard 2:9ee673e0b86a 45 * 128-bit UUID for Eddystone-URL Configuration Service.
Vincent Coubard 2:9ee673e0b86a 46 */
Vincent Coubard 2:9ee673e0b86a 47 const uint8_t UUID_URL_BEACON_SERVICE[] = UUID_URL_BEACON(0x20, 0x80);
Vincent Coubard 2:9ee673e0b86a 48 /**
Vincent Coubard 2:9ee673e0b86a 49 * 128-bit UUID for Eddystone-URL Configuration Service Lock State
Vincent Coubard 2:9ee673e0b86a 50 * characteristic.
Vincent Coubard 2:9ee673e0b86a 51 */
Vincent Coubard 2:9ee673e0b86a 52 const uint8_t UUID_LOCK_STATE_CHAR[] = UUID_URL_BEACON(0x20, 0x81);
Vincent Coubard 2:9ee673e0b86a 53 /**
Vincent Coubard 2:9ee673e0b86a 54 * 128-bit UUID for Eddystone-URL Configuration Service Lock
Vincent Coubard 2:9ee673e0b86a 55 * characteristic.
Vincent Coubard 2:9ee673e0b86a 56 */
Vincent Coubard 2:9ee673e0b86a 57 const uint8_t UUID_LOCK_CHAR[] = UUID_URL_BEACON(0x20, 0x82);
Vincent Coubard 2:9ee673e0b86a 58 /**
Vincent Coubard 2:9ee673e0b86a 59 * 128-bit UUID for Eddystone-URL Configuration Service Unlock
Vincent Coubard 2:9ee673e0b86a 60 * characteristic.
Vincent Coubard 2:9ee673e0b86a 61 */
Vincent Coubard 2:9ee673e0b86a 62 const uint8_t UUID_UNLOCK_CHAR[] = UUID_URL_BEACON(0x20, 0x83);
Vincent Coubard 2:9ee673e0b86a 63 /**
Vincent Coubard 2:9ee673e0b86a 64 * 128-bit UUID for Eddystone-URL Configuration Service URI Data
Vincent Coubard 2:9ee673e0b86a 65 * characteristic.
Vincent Coubard 2:9ee673e0b86a 66 */
Vincent Coubard 2:9ee673e0b86a 67 const uint8_t UUID_URL_DATA_CHAR[] = UUID_URL_BEACON(0x20, 0x84);
Vincent Coubard 2:9ee673e0b86a 68 /**
Vincent Coubard 2:9ee673e0b86a 69 * 128-bit UUID for Eddystone-URL Configuration Service Flags
Vincent Coubard 2:9ee673e0b86a 70 * characteristic.
Vincent Coubard 2:9ee673e0b86a 71 */
Vincent Coubard 2:9ee673e0b86a 72 const uint8_t UUID_FLAGS_CHAR[] = UUID_URL_BEACON(0x20, 0x85);
Vincent Coubard 2:9ee673e0b86a 73 /**
Vincent Coubard 2:9ee673e0b86a 74 * 128-bit UUID for Eddystone-URL Configuration Service Advertised TX Power
Vincent Coubard 2:9ee673e0b86a 75 * Levels characteristic.
Vincent Coubard 2:9ee673e0b86a 76 */
Vincent Coubard 2:9ee673e0b86a 77 const uint8_t UUID_ADV_POWER_LEVELS_CHAR[] = UUID_URL_BEACON(0x20, 0x86);
Vincent Coubard 2:9ee673e0b86a 78 /**
Vincent Coubard 2:9ee673e0b86a 79 * 128-bit UUID for Eddystone-URL Configuration Service TX Power Mode
Vincent Coubard 2:9ee673e0b86a 80 * characteristic.
Vincent Coubard 2:9ee673e0b86a 81 */
Vincent Coubard 2:9ee673e0b86a 82 const uint8_t UUID_TX_POWER_MODE_CHAR[] = UUID_URL_BEACON(0x20, 0x87);
Vincent Coubard 2:9ee673e0b86a 83 /**
Vincent Coubard 2:9ee673e0b86a 84 * 128-bit UUID for Eddystone-URL Configuration Service Beacon Period
Vincent Coubard 2:9ee673e0b86a 85 * characteristic.
Vincent Coubard 2:9ee673e0b86a 86 */
Vincent Coubard 2:9ee673e0b86a 87 const uint8_t UUID_BEACON_PERIOD_CHAR[] = UUID_URL_BEACON(0x20, 0x88);
Vincent Coubard 2:9ee673e0b86a 88 /**
Vincent Coubard 2:9ee673e0b86a 89 * 128-bit UUID for Eddystone-URL Configuration Service Reset
Vincent Coubard 2:9ee673e0b86a 90 * characteristic.
Vincent Coubard 2:9ee673e0b86a 91 */
Vincent Coubard 2:9ee673e0b86a 92 const uint8_t UUID_RESET_CHAR[] = UUID_URL_BEACON(0x20, 0x89);
Vincent Coubard 2:9ee673e0b86a 93
Vincent Coubard 2:9ee673e0b86a 94 /**
Vincent Coubard 2:9ee673e0b86a 95 * Default name for the BLE Device Name characteristic.
Vincent Coubard 2:9ee673e0b86a 96 */
Vincent Coubard 2:9ee673e0b86a 97 const char DEFAULT_DEVICE_NAME[] = YOTTA_CFG_EDDYSTONE_DEFAULT_DEVICE_NAME;
Vincent Coubard 2:9ee673e0b86a 98
Vincent Coubard 2:9ee673e0b86a 99 /**
Vincent Coubard 2:9ee673e0b86a 100 * Default URL used by EddystoneService.
Vincent Coubard 2:9ee673e0b86a 101 */
Vincent Coubard 2:9ee673e0b86a 102 const char DEFAULT_URL[] = YOTTA_CFG_EDDYSTONE_DEFAULT_URL;
Vincent Coubard 2:9ee673e0b86a 103
Vincent Coubard 2:9ee673e0b86a 104 /**
Vincent Coubard 2:9ee673e0b86a 105 * Enumeration that defines the Eddystone power levels for the Eddystone-URL
Vincent Coubard 2:9ee673e0b86a 106 * Configuration Service TX Power Mode characteristic. Refer to
Vincent Coubard 2:9ee673e0b86a 107 * https://github.com/google/eddystone/blob/master/eddystone-url/docs/config-service-spec.md#37-tx-power-mode.
Vincent Coubard 2:9ee673e0b86a 108 */
Vincent Coubard 2:9ee673e0b86a 109 enum PowerModes {
Vincent Coubard 2:9ee673e0b86a 110 /**
Vincent Coubard 2:9ee673e0b86a 111 * Lowest transmit power mode.
Vincent Coubard 2:9ee673e0b86a 112 */
Vincent Coubard 2:9ee673e0b86a 113 TX_POWER_MODE_LOWEST,
Vincent Coubard 2:9ee673e0b86a 114 /**
Vincent Coubard 2:9ee673e0b86a 115 * Low transmit power mode.
Vincent Coubard 2:9ee673e0b86a 116 */
Vincent Coubard 2:9ee673e0b86a 117 TX_POWER_MODE_LOW,
Vincent Coubard 2:9ee673e0b86a 118 /**
Vincent Coubard 2:9ee673e0b86a 119 * Medium transmit power mode.
Vincent Coubard 2:9ee673e0b86a 120 */
Vincent Coubard 2:9ee673e0b86a 121 TX_POWER_MODE_MEDIUM,
Vincent Coubard 2:9ee673e0b86a 122 /**
Vincent Coubard 2:9ee673e0b86a 123 * Highest transmit power mode.
Vincent Coubard 2:9ee673e0b86a 124 */
Vincent Coubard 2:9ee673e0b86a 125 TX_POWER_MODE_HIGH,
Vincent Coubard 2:9ee673e0b86a 126 /**
Vincent Coubard 2:9ee673e0b86a 127 * Total number of power modes.
Vincent Coubard 2:9ee673e0b86a 128 */
Vincent Coubard 2:9ee673e0b86a 129 NUM_POWER_MODES
Vincent Coubard 2:9ee673e0b86a 130 };
Vincent Coubard 2:9ee673e0b86a 131
Vincent Coubard 2:9ee673e0b86a 132 /**
Vincent Coubard 2:9ee673e0b86a 133 * Type for the 128-bit for Eddystone-URL Configuration Service Lock and Unlock
Vincent Coubard 2:9ee673e0b86a 134 * characteristic value.
Vincent Coubard 2:9ee673e0b86a 135 */
Vincent Coubard 2:9ee673e0b86a 136 typedef uint8_t Lock_t[16];
Vincent Coubard 2:9ee673e0b86a 137 /**
Vincent Coubard 2:9ee673e0b86a 138 * Type for the 128-bit for Eddystone-URL Configuration Service Advertised TX
Vincent Coubard 2:9ee673e0b86a 139 * Power Levels characteristic value.
Vincent Coubard 2:9ee673e0b86a 140 */
Vincent Coubard 2:9ee673e0b86a 141 typedef int8_t PowerLevels_t[NUM_POWER_MODES];
Vincent Coubard 2:9ee673e0b86a 142
Vincent Coubard 2:9ee673e0b86a 143 /**
Vincent Coubard 2:9ee673e0b86a 144 * Maximum length of an encoded URL for Eddystone.
Vincent Coubard 2:9ee673e0b86a 145 */
Vincent Coubard 2:9ee673e0b86a 146 const uint16_t URL_DATA_MAX = 18;
Vincent Coubard 2:9ee673e0b86a 147 /**
Vincent Coubard 2:9ee673e0b86a 148 * Type for an encoded URL for Eddystone.
Vincent Coubard 2:9ee673e0b86a 149 */
Vincent Coubard 2:9ee673e0b86a 150 typedef uint8_t UrlData_t[URL_DATA_MAX];
Vincent Coubard 2:9ee673e0b86a 151
Vincent Coubard 2:9ee673e0b86a 152 /**
Vincent Coubard 2:9ee673e0b86a 153 * Size in bytes of UID namespace ID.
Vincent Coubard 2:9ee673e0b86a 154 */
Vincent Coubard 2:9ee673e0b86a 155 const size_t UID_NAMESPACEID_SIZE = 10;
Vincent Coubard 2:9ee673e0b86a 156 /**
Vincent Coubard 2:9ee673e0b86a 157 * Type for the UID namespace ID.
Vincent Coubard 2:9ee673e0b86a 158 */
Vincent Coubard 2:9ee673e0b86a 159 typedef uint8_t UIDNamespaceID_t[UID_NAMESPACEID_SIZE];
Vincent Coubard 2:9ee673e0b86a 160 /**
Vincent Coubard 2:9ee673e0b86a 161 * Size in bytes of UID instance ID.
Vincent Coubard 2:9ee673e0b86a 162 */
Vincent Coubard 2:9ee673e0b86a 163 const size_t UID_INSTANCEID_SIZE = 6;
Vincent Coubard 2:9ee673e0b86a 164 /**
Vincent Coubard 2:9ee673e0b86a 165 * Type for the UID instance ID.
Vincent Coubard 2:9ee673e0b86a 166 */
Vincent Coubard 2:9ee673e0b86a 167 typedef uint8_t UIDInstanceID_t[UID_INSTANCEID_SIZE];
Vincent Coubard 2:9ee673e0b86a 168
Vincent Coubard 2:9ee673e0b86a 169 /**
Vincent Coubard 2:9ee673e0b86a 170 * Type for callbacks to update Eddystone-TLM frame Batery Voltage and Beacon
Vincent Coubard 2:9ee673e0b86a 171 * Temperature.
Vincent Coubard 2:9ee673e0b86a 172 */
Vincent Coubard 2:9ee673e0b86a 173 typedef uint16_t (*TlmUpdateCallback_t) (uint16_t);
Vincent Coubard 2:9ee673e0b86a 174
Vincent Coubard 2:9ee673e0b86a 175 /**
Vincent Coubard 2:9ee673e0b86a 176 * Size of Eddystone UUID. Needed to construct all frames raw bytes.
Vincent Coubard 2:9ee673e0b86a 177 */
Vincent Coubard 2:9ee673e0b86a 178 const uint16_t EDDYSTONE_UUID_SIZE = sizeof(EDDYSTONE_UUID);
Vincent Coubard 2:9ee673e0b86a 179
Vincent Coubard 2:9ee673e0b86a 180 #endif /* __EDDYSTONETYPES_H__ */