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.
source/EddystoneTypes.h@2:9ee673e0b86a, 2016-07-28 (annotated)
- 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?
User | Revision | Line number | New 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__ */ |