Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/features/FEATURE_BLE/ble/GattCharacteristic.h@0:9b3d4731edbb, 2018-06-21 (annotated)
- Committer:
- WFKnight
- Date:
- Thu Jun 21 13:51:43 2018 +0000
- Revision:
- 0:9b3d4731edbb
UART, RTOS, LED
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| WFKnight | 0:9b3d4731edbb | 1 | /* mbed Microcontroller Library |
| WFKnight | 0:9b3d4731edbb | 2 | * Copyright (c) 2006-2013 ARM Limited |
| WFKnight | 0:9b3d4731edbb | 3 | * |
| WFKnight | 0:9b3d4731edbb | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| WFKnight | 0:9b3d4731edbb | 5 | * you may not use this file except in compliance with the License. |
| WFKnight | 0:9b3d4731edbb | 6 | * You may obtain a copy of the License at |
| WFKnight | 0:9b3d4731edbb | 7 | * |
| WFKnight | 0:9b3d4731edbb | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| WFKnight | 0:9b3d4731edbb | 9 | * |
| WFKnight | 0:9b3d4731edbb | 10 | * Unless required by applicable law or agreed to in writing, software |
| WFKnight | 0:9b3d4731edbb | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| WFKnight | 0:9b3d4731edbb | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| WFKnight | 0:9b3d4731edbb | 13 | * See the License for the specific language governing permissions and |
| WFKnight | 0:9b3d4731edbb | 14 | * limitations under the License. |
| WFKnight | 0:9b3d4731edbb | 15 | */ |
| WFKnight | 0:9b3d4731edbb | 16 | |
| WFKnight | 0:9b3d4731edbb | 17 | #ifndef __GATT_CHARACTERISTIC_H__ |
| WFKnight | 0:9b3d4731edbb | 18 | #define __GATT_CHARACTERISTIC_H__ |
| WFKnight | 0:9b3d4731edbb | 19 | |
| WFKnight | 0:9b3d4731edbb | 20 | #include "Gap.h" |
| WFKnight | 0:9b3d4731edbb | 21 | #include "SecurityManager.h" |
| WFKnight | 0:9b3d4731edbb | 22 | #include "GattAttribute.h" |
| WFKnight | 0:9b3d4731edbb | 23 | #include "GattCallbackParamTypes.h" |
| WFKnight | 0:9b3d4731edbb | 24 | #include "FunctionPointerWithContext.h" |
| WFKnight | 0:9b3d4731edbb | 25 | |
| WFKnight | 0:9b3d4731edbb | 26 | /** |
| WFKnight | 0:9b3d4731edbb | 27 | * @addtogroup ble |
| WFKnight | 0:9b3d4731edbb | 28 | * @{ |
| WFKnight | 0:9b3d4731edbb | 29 | * @addtogroup gatt |
| WFKnight | 0:9b3d4731edbb | 30 | * @{ |
| WFKnight | 0:9b3d4731edbb | 31 | * @addtogroup server |
| WFKnight | 0:9b3d4731edbb | 32 | * @{ |
| WFKnight | 0:9b3d4731edbb | 33 | */ |
| WFKnight | 0:9b3d4731edbb | 34 | |
| WFKnight | 0:9b3d4731edbb | 35 | /** |
| WFKnight | 0:9b3d4731edbb | 36 | * Representation of a GattServer characteristic. |
| WFKnight | 0:9b3d4731edbb | 37 | * |
| WFKnight | 0:9b3d4731edbb | 38 | * A characteristic is a typed value enclosed in a GATT service (GattService). |
| WFKnight | 0:9b3d4731edbb | 39 | * |
| WFKnight | 0:9b3d4731edbb | 40 | * @par Type |
| WFKnight | 0:9b3d4731edbb | 41 | * |
| WFKnight | 0:9b3d4731edbb | 42 | * The type of the value defines the purpose of the characteristic, and a |
| WFKnight | 0:9b3d4731edbb | 43 | * UUID represents it. Standard characteristic types may be consulted at |
| WFKnight | 0:9b3d4731edbb | 44 | * https://www.bluetooth.com/specifications/gatt/characteristics |
| WFKnight | 0:9b3d4731edbb | 45 | * |
| WFKnight | 0:9b3d4731edbb | 46 | * @par Supported operations |
| WFKnight | 0:9b3d4731edbb | 47 | * A set of properties define what client operations the characteristic |
| WFKnight | 0:9b3d4731edbb | 48 | * supports. See GattServer::Properties_t |
| WFKnight | 0:9b3d4731edbb | 49 | * |
| WFKnight | 0:9b3d4731edbb | 50 | * @par Descriptors |
| WFKnight | 0:9b3d4731edbb | 51 | * |
| WFKnight | 0:9b3d4731edbb | 52 | * Additional information, such as the unit of the characteristic value, a |
| WFKnight | 0:9b3d4731edbb | 53 | * description string or a client control point, can be added to the |
| WFKnight | 0:9b3d4731edbb | 54 | * characteristic. |
| WFKnight | 0:9b3d4731edbb | 55 | * |
| WFKnight | 0:9b3d4731edbb | 56 | * See BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] - 3.3.1.1 |
| WFKnight | 0:9b3d4731edbb | 57 | * |
| WFKnight | 0:9b3d4731edbb | 58 | * One of the most important types of descriptor is the Client Characteristic |
| WFKnight | 0:9b3d4731edbb | 59 | * Configuration Descriptor (CCCD) that must be present if the characteristic |
| WFKnight | 0:9b3d4731edbb | 60 | * properties allow a client to subscribe to updates of the characteristic |
| WFKnight | 0:9b3d4731edbb | 61 | * value. |
| WFKnight | 0:9b3d4731edbb | 62 | * |
| WFKnight | 0:9b3d4731edbb | 63 | * @par Characteristic breakdown |
| WFKnight | 0:9b3d4731edbb | 64 | * |
| WFKnight | 0:9b3d4731edbb | 65 | * A characteristic is composed of several GATT attributes (GattAttribute): |
| WFKnight | 0:9b3d4731edbb | 66 | * - Characteristic declaration: It contains the properties of the |
| WFKnight | 0:9b3d4731edbb | 67 | * characteristic, its type and the handle of its value. |
| WFKnight | 0:9b3d4731edbb | 68 | * - Characteristic value: The value of the characteristic. |
| WFKnight | 0:9b3d4731edbb | 69 | * - Descriptors: A single GATT attribute stores each descriptor. |
| WFKnight | 0:9b3d4731edbb | 70 | * |
| WFKnight | 0:9b3d4731edbb | 71 | * When the GattService containing the characteristic is registered in the |
| WFKnight | 0:9b3d4731edbb | 72 | * GattServer, a unique attribute handle is assigned to the various attributes |
| WFKnight | 0:9b3d4731edbb | 73 | * of the characteristic. Clients use this handle to interact with the |
| WFKnight | 0:9b3d4731edbb | 74 | * characteristic. This handle is used locally in GattServer APIs. |
| WFKnight | 0:9b3d4731edbb | 75 | * |
| WFKnight | 0:9b3d4731edbb | 76 | * @par Security requirements |
| WFKnight | 0:9b3d4731edbb | 77 | * |
| WFKnight | 0:9b3d4731edbb | 78 | * Verification of security requirements happens whenever a client request to |
| WFKnight | 0:9b3d4731edbb | 79 | * read the characteristic; write it or even register to its updates. Different |
| WFKnight | 0:9b3d4731edbb | 80 | * requirements may be defined for these three type of operation. As an example: |
| WFKnight | 0:9b3d4731edbb | 81 | * it is possible to define a characteristic that do not require security to be |
| WFKnight | 0:9b3d4731edbb | 82 | * read and require an authenticated link to be written. |
| WFKnight | 0:9b3d4731edbb | 83 | * |
| WFKnight | 0:9b3d4731edbb | 84 | * By default all security requirements are set to att_security_requirement_t::NONE |
| WFKnight | 0:9b3d4731edbb | 85 | * except if the characteristic supports signed write; in such case the security |
| WFKnight | 0:9b3d4731edbb | 86 | * requirement for write operations is set to att_security_requirement_t::UNAUTHENTICATED. |
| WFKnight | 0:9b3d4731edbb | 87 | * |
| WFKnight | 0:9b3d4731edbb | 88 | * @note If a peer uses an operation that is not set in the characteristic |
| WFKnight | 0:9b3d4731edbb | 89 | * properties then the request request is discarded regardless of the security |
| WFKnight | 0:9b3d4731edbb | 90 | * requirements and current security level. The only exception being signed |
| WFKnight | 0:9b3d4731edbb | 91 | * write: signed write are converted into regular write without response if |
| WFKnight | 0:9b3d4731edbb | 92 | * the link is encrypted. |
| WFKnight | 0:9b3d4731edbb | 93 | */ |
| WFKnight | 0:9b3d4731edbb | 94 | class GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 95 | public: |
| WFKnight | 0:9b3d4731edbb | 96 | |
| WFKnight | 0:9b3d4731edbb | 97 | /* |
| WFKnight | 0:9b3d4731edbb | 98 | * Enumeration of characteristic UUID defined by the Bluetooth body. |
| WFKnight | 0:9b3d4731edbb | 99 | */ |
| WFKnight | 0:9b3d4731edbb | 100 | enum { |
| WFKnight | 0:9b3d4731edbb | 101 | /** |
| WFKnight | 0:9b3d4731edbb | 102 | * Not used in actual BLE service. |
| WFKnight | 0:9b3d4731edbb | 103 | */ |
| WFKnight | 0:9b3d4731edbb | 104 | UUID_BATTERY_LEVEL_STATE_CHAR = 0x2A1B, |
| WFKnight | 0:9b3d4731edbb | 105 | |
| WFKnight | 0:9b3d4731edbb | 106 | /** |
| WFKnight | 0:9b3d4731edbb | 107 | * Not used in actual BLE service. |
| WFKnight | 0:9b3d4731edbb | 108 | */ |
| WFKnight | 0:9b3d4731edbb | 109 | UUID_BATTERY_POWER_STATE_CHAR = 0x2A1A, |
| WFKnight | 0:9b3d4731edbb | 110 | |
| WFKnight | 0:9b3d4731edbb | 111 | /** |
| WFKnight | 0:9b3d4731edbb | 112 | * Not used in actual BLE service. |
| WFKnight | 0:9b3d4731edbb | 113 | */ |
| WFKnight | 0:9b3d4731edbb | 114 | UUID_REMOVABLE_CHAR = 0x2A3A, |
| WFKnight | 0:9b3d4731edbb | 115 | |
| WFKnight | 0:9b3d4731edbb | 116 | /** |
| WFKnight | 0:9b3d4731edbb | 117 | * Not used in actual BLE service. |
| WFKnight | 0:9b3d4731edbb | 118 | */ |
| WFKnight | 0:9b3d4731edbb | 119 | UUID_SERVICE_REQUIRED_CHAR = 0x2A3B, |
| WFKnight | 0:9b3d4731edbb | 120 | |
| WFKnight | 0:9b3d4731edbb | 121 | /** |
| WFKnight | 0:9b3d4731edbb | 122 | * Not used as a characteristic UUID. |
| WFKnight | 0:9b3d4731edbb | 123 | */ |
| WFKnight | 0:9b3d4731edbb | 124 | UUID_ALERT_CATEGORY_ID_CHAR = 0x2A43, |
| WFKnight | 0:9b3d4731edbb | 125 | |
| WFKnight | 0:9b3d4731edbb | 126 | /** |
| WFKnight | 0:9b3d4731edbb | 127 | * Not used as a characteristic UUID. |
| WFKnight | 0:9b3d4731edbb | 128 | */ |
| WFKnight | 0:9b3d4731edbb | 129 | UUID_ALERT_CATEGORY_ID_BIT_MASK_CHAR = 0x2A42, |
| WFKnight | 0:9b3d4731edbb | 130 | |
| WFKnight | 0:9b3d4731edbb | 131 | /** |
| WFKnight | 0:9b3d4731edbb | 132 | * Control point of the Immediate Alert service that allows the client to |
| WFKnight | 0:9b3d4731edbb | 133 | * command the server to alert to a given level. |
| WFKnight | 0:9b3d4731edbb | 134 | */ |
| WFKnight | 0:9b3d4731edbb | 135 | UUID_ALERT_LEVEL_CHAR = 0x2A06, |
| WFKnight | 0:9b3d4731edbb | 136 | |
| WFKnight | 0:9b3d4731edbb | 137 | /** |
| WFKnight | 0:9b3d4731edbb | 138 | * Control point of the Alert Notification service that allows the client |
| WFKnight | 0:9b3d4731edbb | 139 | * finely tune the notification configuration. |
| WFKnight | 0:9b3d4731edbb | 140 | */ |
| WFKnight | 0:9b3d4731edbb | 141 | UUID_ALERT_NOTIFICATION_CONTROL_POINT_CHAR = 0x2A44, |
| WFKnight | 0:9b3d4731edbb | 142 | |
| WFKnight | 0:9b3d4731edbb | 143 | /** |
| WFKnight | 0:9b3d4731edbb | 144 | * Part of the Alert Notification service, which exposes the count of |
| WFKnight | 0:9b3d4731edbb | 145 | * unread alert events existing in the server. |
| WFKnight | 0:9b3d4731edbb | 146 | */ |
| WFKnight | 0:9b3d4731edbb | 147 | UUID_ALERT_STATUS_CHAR = 0x2A3F, |
| WFKnight | 0:9b3d4731edbb | 148 | |
| WFKnight | 0:9b3d4731edbb | 149 | /** |
| WFKnight | 0:9b3d4731edbb | 150 | * Characteristic of the Battery service, which exposes the current |
| WFKnight | 0:9b3d4731edbb | 151 | * battery level as a percentage. |
| WFKnight | 0:9b3d4731edbb | 152 | */ |
| WFKnight | 0:9b3d4731edbb | 153 | UUID_BATTERY_LEVEL_CHAR = 0x2A19, |
| WFKnight | 0:9b3d4731edbb | 154 | |
| WFKnight | 0:9b3d4731edbb | 155 | /** |
| WFKnight | 0:9b3d4731edbb | 156 | * Describe the features supported by the blood pressure sensor exposed |
| WFKnight | 0:9b3d4731edbb | 157 | * by the Blood Pressure service. |
| WFKnight | 0:9b3d4731edbb | 158 | */ |
| WFKnight | 0:9b3d4731edbb | 159 | UUID_BLOOD_PRESSURE_FEATURE_CHAR = 0x2A49, |
| WFKnight | 0:9b3d4731edbb | 160 | |
| WFKnight | 0:9b3d4731edbb | 161 | /** |
| WFKnight | 0:9b3d4731edbb | 162 | * Characteristic of the Blood Pressure service that exposes the |
| WFKnight | 0:9b3d4731edbb | 163 | * measurement of the blood sensor. |
| WFKnight | 0:9b3d4731edbb | 164 | */ |
| WFKnight | 0:9b3d4731edbb | 165 | UUID_BLOOD_PRESSURE_MEASUREMENT_CHAR = 0x2A35, |
| WFKnight | 0:9b3d4731edbb | 166 | |
| WFKnight | 0:9b3d4731edbb | 167 | /** |
| WFKnight | 0:9b3d4731edbb | 168 | * Characteristic of the Heart Rate service that indicate the intended |
| WFKnight | 0:9b3d4731edbb | 169 | * location of the heart rate monitor. |
| WFKnight | 0:9b3d4731edbb | 170 | */ |
| WFKnight | 0:9b3d4731edbb | 171 | UUID_BODY_SENSOR_LOCATION_CHAR = 0x2A38, |
| WFKnight | 0:9b3d4731edbb | 172 | |
| WFKnight | 0:9b3d4731edbb | 173 | /** |
| WFKnight | 0:9b3d4731edbb | 174 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 175 | */ |
| WFKnight | 0:9b3d4731edbb | 176 | UUID_BOOT_KEYBOARD_INPUT_REPORT_CHAR = 0x2A22, |
| WFKnight | 0:9b3d4731edbb | 177 | |
| WFKnight | 0:9b3d4731edbb | 178 | /** |
| WFKnight | 0:9b3d4731edbb | 179 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 180 | */ |
| WFKnight | 0:9b3d4731edbb | 181 | UUID_BOOT_KEYBOARD_OUTPUT_REPORT_CHAR = 0x2A32, |
| WFKnight | 0:9b3d4731edbb | 182 | |
| WFKnight | 0:9b3d4731edbb | 183 | /** |
| WFKnight | 0:9b3d4731edbb | 184 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 185 | */ |
| WFKnight | 0:9b3d4731edbb | 186 | UUID_BOOT_MOUSE_INPUT_REPORT_CHAR = 0x2A33, |
| WFKnight | 0:9b3d4731edbb | 187 | |
| WFKnight | 0:9b3d4731edbb | 188 | /** |
| WFKnight | 0:9b3d4731edbb | 189 | * Characteristic of the Current Time service that contains the current |
| WFKnight | 0:9b3d4731edbb | 190 | * time. |
| WFKnight | 0:9b3d4731edbb | 191 | */ |
| WFKnight | 0:9b3d4731edbb | 192 | UUID_CURRENT_TIME_CHAR = 0x2A2B, |
| WFKnight | 0:9b3d4731edbb | 193 | |
| WFKnight | 0:9b3d4731edbb | 194 | /** |
| WFKnight | 0:9b3d4731edbb | 195 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 196 | */ |
| WFKnight | 0:9b3d4731edbb | 197 | UUID_DATE_TIME_CHAR = 0x2A08, |
| WFKnight | 0:9b3d4731edbb | 198 | |
| WFKnight | 0:9b3d4731edbb | 199 | /** |
| WFKnight | 0:9b3d4731edbb | 200 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 201 | */ |
| WFKnight | 0:9b3d4731edbb | 202 | UUID_DAY_DATE_TIME_CHAR = 0x2A0A, |
| WFKnight | 0:9b3d4731edbb | 203 | |
| WFKnight | 0:9b3d4731edbb | 204 | /** |
| WFKnight | 0:9b3d4731edbb | 205 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 206 | */ |
| WFKnight | 0:9b3d4731edbb | 207 | UUID_DAY_OF_WEEK_CHAR = 0x2A09, |
| WFKnight | 0:9b3d4731edbb | 208 | |
| WFKnight | 0:9b3d4731edbb | 209 | /** |
| WFKnight | 0:9b3d4731edbb | 210 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 211 | */ |
| WFKnight | 0:9b3d4731edbb | 212 | UUID_DST_OFFSET_CHAR = 0x2A0D, |
| WFKnight | 0:9b3d4731edbb | 213 | |
| WFKnight | 0:9b3d4731edbb | 214 | /** |
| WFKnight | 0:9b3d4731edbb | 215 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 216 | */ |
| WFKnight | 0:9b3d4731edbb | 217 | UUID_EXACT_TIME_256_CHAR = 0x2A0C, |
| WFKnight | 0:9b3d4731edbb | 218 | |
| WFKnight | 0:9b3d4731edbb | 219 | /** |
| WFKnight | 0:9b3d4731edbb | 220 | * Characteristic of the Device Information Service that contains a |
| WFKnight | 0:9b3d4731edbb | 221 | * UTF8 string representing the firmware revision for the firmware within |
| WFKnight | 0:9b3d4731edbb | 222 | * the device. |
| WFKnight | 0:9b3d4731edbb | 223 | */ |
| WFKnight | 0:9b3d4731edbb | 224 | UUID_FIRMWARE_REVISION_STRING_CHAR = 0x2A26, |
| WFKnight | 0:9b3d4731edbb | 225 | |
| WFKnight | 0:9b3d4731edbb | 226 | /** |
| WFKnight | 0:9b3d4731edbb | 227 | * Characteristic of the Glucose service that exposes features supported |
| WFKnight | 0:9b3d4731edbb | 228 | * by the server. |
| WFKnight | 0:9b3d4731edbb | 229 | */ |
| WFKnight | 0:9b3d4731edbb | 230 | UUID_GLUCOSE_FEATURE_CHAR = 0x2A51, |
| WFKnight | 0:9b3d4731edbb | 231 | |
| WFKnight | 0:9b3d4731edbb | 232 | /** |
| WFKnight | 0:9b3d4731edbb | 233 | * Characteristic of the Glucose service that exposes glucose |
| WFKnight | 0:9b3d4731edbb | 234 | * measurements. |
| WFKnight | 0:9b3d4731edbb | 235 | */ |
| WFKnight | 0:9b3d4731edbb | 236 | UUID_GLUCOSE_MEASUREMENT_CHAR = 0x2A18, |
| WFKnight | 0:9b3d4731edbb | 237 | |
| WFKnight | 0:9b3d4731edbb | 238 | /** |
| WFKnight | 0:9b3d4731edbb | 239 | * Characteristic of the Glucose service that sends additional |
| WFKnight | 0:9b3d4731edbb | 240 | * information related to the glucose measurements. |
| WFKnight | 0:9b3d4731edbb | 241 | */ |
| WFKnight | 0:9b3d4731edbb | 242 | UUID_GLUCOSE_MEASUREMENT_CONTEXT_CHAR = 0x2A34, |
| WFKnight | 0:9b3d4731edbb | 243 | |
| WFKnight | 0:9b3d4731edbb | 244 | /** |
| WFKnight | 0:9b3d4731edbb | 245 | * Characteristic of the Device Information Service that contains a |
| WFKnight | 0:9b3d4731edbb | 246 | * UTF8 string representing the hardware revision of the device. |
| WFKnight | 0:9b3d4731edbb | 247 | */ |
| WFKnight | 0:9b3d4731edbb | 248 | UUID_HARDWARE_REVISION_STRING_CHAR = 0x2A27, |
| WFKnight | 0:9b3d4731edbb | 249 | |
| WFKnight | 0:9b3d4731edbb | 250 | /** |
| WFKnight | 0:9b3d4731edbb | 251 | * Characteristic of the Heart Rate service used by the client to control |
| WFKnight | 0:9b3d4731edbb | 252 | * the service behavior. |
| WFKnight | 0:9b3d4731edbb | 253 | */ |
| WFKnight | 0:9b3d4731edbb | 254 | UUID_HEART_RATE_CONTROL_POINT_CHAR = 0x2A39, |
| WFKnight | 0:9b3d4731edbb | 255 | |
| WFKnight | 0:9b3d4731edbb | 256 | /** |
| WFKnight | 0:9b3d4731edbb | 257 | * Characteristic of the Heart Rate that sends heart rate measurements to |
| WFKnight | 0:9b3d4731edbb | 258 | * registered clients. |
| WFKnight | 0:9b3d4731edbb | 259 | */ |
| WFKnight | 0:9b3d4731edbb | 260 | UUID_HEART_RATE_MEASUREMENT_CHAR = 0x2A37, |
| WFKnight | 0:9b3d4731edbb | 261 | |
| WFKnight | 0:9b3d4731edbb | 262 | /** |
| WFKnight | 0:9b3d4731edbb | 263 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 264 | */ |
| WFKnight | 0:9b3d4731edbb | 265 | UUID_HID_CONTROL_POINT_CHAR = 0x2A4C, |
| WFKnight | 0:9b3d4731edbb | 266 | |
| WFKnight | 0:9b3d4731edbb | 267 | /** |
| WFKnight | 0:9b3d4731edbb | 268 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 269 | */ |
| WFKnight | 0:9b3d4731edbb | 270 | UUID_HID_INFORMATION_CHAR = 0x2A4A, |
| WFKnight | 0:9b3d4731edbb | 271 | |
| WFKnight | 0:9b3d4731edbb | 272 | /** |
| WFKnight | 0:9b3d4731edbb | 273 | * Characteristic of the Environmental Sensing service, which exposes |
| WFKnight | 0:9b3d4731edbb | 274 | * humidity measurements. |
| WFKnight | 0:9b3d4731edbb | 275 | */ |
| WFKnight | 0:9b3d4731edbb | 276 | UUID_HUMIDITY_CHAR = 0x2A6F, |
| WFKnight | 0:9b3d4731edbb | 277 | |
| WFKnight | 0:9b3d4731edbb | 278 | /** |
| WFKnight | 0:9b3d4731edbb | 279 | * Characteristic of the Device Information Service, which exposes |
| WFKnight | 0:9b3d4731edbb | 280 | * various regulatory or certification compliance items to which the |
| WFKnight | 0:9b3d4731edbb | 281 | * device claims adherence. |
| WFKnight | 0:9b3d4731edbb | 282 | */ |
| WFKnight | 0:9b3d4731edbb | 283 | UUID_IEEE_REGULATORY_CERTIFICATION_DATA_LIST_CHAR = 0x2A2A, |
| WFKnight | 0:9b3d4731edbb | 284 | |
| WFKnight | 0:9b3d4731edbb | 285 | /** |
| WFKnight | 0:9b3d4731edbb | 286 | * Characteristic of the Blood Pressure service, which exposes intermediate |
| WFKnight | 0:9b3d4731edbb | 287 | * cuff pressure measurements. |
| WFKnight | 0:9b3d4731edbb | 288 | */ |
| WFKnight | 0:9b3d4731edbb | 289 | UUID_INTERMEDIATE_CUFF_PRESSURE_CHAR = 0x2A36, |
| WFKnight | 0:9b3d4731edbb | 290 | |
| WFKnight | 0:9b3d4731edbb | 291 | /** |
| WFKnight | 0:9b3d4731edbb | 292 | * Characteristic of the Health Thermometer service that sends intermediate |
| WFKnight | 0:9b3d4731edbb | 293 | * temperature values while the measurement is in progress. |
| WFKnight | 0:9b3d4731edbb | 294 | */ |
| WFKnight | 0:9b3d4731edbb | 295 | UUID_INTERMEDIATE_TEMPERATURE_CHAR = 0x2A1E, |
| WFKnight | 0:9b3d4731edbb | 296 | |
| WFKnight | 0:9b3d4731edbb | 297 | /** |
| WFKnight | 0:9b3d4731edbb | 298 | * Characteristic of the current Time service that exposes information |
| WFKnight | 0:9b3d4731edbb | 299 | * about the local time. |
| WFKnight | 0:9b3d4731edbb | 300 | */ |
| WFKnight | 0:9b3d4731edbb | 301 | UUID_LOCAL_TIME_INFORMATION_CHAR = 0x2A0F, |
| WFKnight | 0:9b3d4731edbb | 302 | |
| WFKnight | 0:9b3d4731edbb | 303 | /** |
| WFKnight | 0:9b3d4731edbb | 304 | * Characteristic of the Device Information Service that contains a |
| WFKnight | 0:9b3d4731edbb | 305 | * UTF8 string representing the manufacturer name of the device. |
| WFKnight | 0:9b3d4731edbb | 306 | */ |
| WFKnight | 0:9b3d4731edbb | 307 | UUID_MANUFACTURER_NAME_STRING_CHAR = 0x2A29, |
| WFKnight | 0:9b3d4731edbb | 308 | |
| WFKnight | 0:9b3d4731edbb | 309 | /** |
| WFKnight | 0:9b3d4731edbb | 310 | * Characteristic of the Health Thermometer service that exposes the |
| WFKnight | 0:9b3d4731edbb | 311 | * interval time between two measurements. |
| WFKnight | 0:9b3d4731edbb | 312 | */ |
| WFKnight | 0:9b3d4731edbb | 313 | UUID_MEASUREMENT_INTERVAL_CHAR = 0x2A21, |
| WFKnight | 0:9b3d4731edbb | 314 | |
| WFKnight | 0:9b3d4731edbb | 315 | /** |
| WFKnight | 0:9b3d4731edbb | 316 | * Characteristic of the Device Information Service that contains a |
| WFKnight | 0:9b3d4731edbb | 317 | * UTF8 string representing the model number of the device assigned by |
| WFKnight | 0:9b3d4731edbb | 318 | * the vendor. |
| WFKnight | 0:9b3d4731edbb | 319 | */ |
| WFKnight | 0:9b3d4731edbb | 320 | UUID_MODEL_NUMBER_STRING_CHAR = 0x2A24, |
| WFKnight | 0:9b3d4731edbb | 321 | |
| WFKnight | 0:9b3d4731edbb | 322 | /** |
| WFKnight | 0:9b3d4731edbb | 323 | * Characteristic of the Alert Notification Service that shows how many |
| WFKnight | 0:9b3d4731edbb | 324 | * numbers of unread alerts exist in the specific category in the device. |
| WFKnight | 0:9b3d4731edbb | 325 | */ |
| WFKnight | 0:9b3d4731edbb | 326 | UUID_UNREAD_ALERT_CHAR = 0x2A45, |
| WFKnight | 0:9b3d4731edbb | 327 | |
| WFKnight | 0:9b3d4731edbb | 328 | /** |
| WFKnight | 0:9b3d4731edbb | 329 | * Characteristic of the Alert Notification Service that defines the |
| WFKnight | 0:9b3d4731edbb | 330 | * category of the alert and how many new alerts of that category have |
| WFKnight | 0:9b3d4731edbb | 331 | * occurred in the server. |
| WFKnight | 0:9b3d4731edbb | 332 | */ |
| WFKnight | 0:9b3d4731edbb | 333 | UUID_NEW_ALERT_CHAR = 0x2A46, |
| WFKnight | 0:9b3d4731edbb | 334 | |
| WFKnight | 0:9b3d4731edbb | 335 | /** |
| WFKnight | 0:9b3d4731edbb | 336 | * Characteristic of the Device Information Service; it is a set of |
| WFKnight | 0:9b3d4731edbb | 337 | * values used to create a device ID that is unique for this device. |
| WFKnight | 0:9b3d4731edbb | 338 | */ |
| WFKnight | 0:9b3d4731edbb | 339 | UUID_PNP_ID_CHAR = 0x2A50, |
| WFKnight | 0:9b3d4731edbb | 340 | |
| WFKnight | 0:9b3d4731edbb | 341 | /** |
| WFKnight | 0:9b3d4731edbb | 342 | * Characteristic of the Environmental Sensing Service that exposes the |
| WFKnight | 0:9b3d4731edbb | 343 | * pressure measured. |
| WFKnight | 0:9b3d4731edbb | 344 | */ |
| WFKnight | 0:9b3d4731edbb | 345 | UUID_PRESSURE_CHAR = 0x2A6D, |
| WFKnight | 0:9b3d4731edbb | 346 | |
| WFKnight | 0:9b3d4731edbb | 347 | /** |
| WFKnight | 0:9b3d4731edbb | 348 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 349 | */ |
| WFKnight | 0:9b3d4731edbb | 350 | UUID_PROTOCOL_MODE_CHAR = 0x2A4E, |
| WFKnight | 0:9b3d4731edbb | 351 | |
| WFKnight | 0:9b3d4731edbb | 352 | /** |
| WFKnight | 0:9b3d4731edbb | 353 | * Pulse Oxymeter, Glucose and Continuous Glucose Monitoring services |
| WFKnight | 0:9b3d4731edbb | 354 | * use this control point to provide basic management of the patient |
| WFKnight | 0:9b3d4731edbb | 355 | * record database. |
| WFKnight | 0:9b3d4731edbb | 356 | */ |
| WFKnight | 0:9b3d4731edbb | 357 | UUID_RECORD_ACCESS_CONTROL_POINT_CHAR = 0x2A52, |
| WFKnight | 0:9b3d4731edbb | 358 | |
| WFKnight | 0:9b3d4731edbb | 359 | /** |
| WFKnight | 0:9b3d4731edbb | 360 | * Characteristic of the Current Time service that exposes information |
| WFKnight | 0:9b3d4731edbb | 361 | * related to the current time served (accuracy, source, hours since |
| WFKnight | 0:9b3d4731edbb | 362 | * update and so on). |
| WFKnight | 0:9b3d4731edbb | 363 | */ |
| WFKnight | 0:9b3d4731edbb | 364 | UUID_REFERENCE_TIME_INFORMATION_CHAR = 0x2A14, |
| WFKnight | 0:9b3d4731edbb | 365 | |
| WFKnight | 0:9b3d4731edbb | 366 | /** |
| WFKnight | 0:9b3d4731edbb | 367 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 368 | */ |
| WFKnight | 0:9b3d4731edbb | 369 | UUID_REPORT_CHAR = 0x2A4D, |
| WFKnight | 0:9b3d4731edbb | 370 | |
| WFKnight | 0:9b3d4731edbb | 371 | /** |
| WFKnight | 0:9b3d4731edbb | 372 | * Part of the Human Interface Device service. |
| WFKnight | 0:9b3d4731edbb | 373 | */ |
| WFKnight | 0:9b3d4731edbb | 374 | UUID_REPORT_MAP_CHAR = 0x2A4B, |
| WFKnight | 0:9b3d4731edbb | 375 | |
| WFKnight | 0:9b3d4731edbb | 376 | /** |
| WFKnight | 0:9b3d4731edbb | 377 | * Characteristic of the Phone Alert Status service that allows a client |
| WFKnight | 0:9b3d4731edbb | 378 | * to configure operating mode. |
| WFKnight | 0:9b3d4731edbb | 379 | */ |
| WFKnight | 0:9b3d4731edbb | 380 | UUID_RINGER_CONTROL_POINT_CHAR = 0x2A40, |
| WFKnight | 0:9b3d4731edbb | 381 | |
| WFKnight | 0:9b3d4731edbb | 382 | /** |
| WFKnight | 0:9b3d4731edbb | 383 | * Characteristic of the Phone Alert Status service that returns the |
| WFKnight | 0:9b3d4731edbb | 384 | * ringer setting when read. |
| WFKnight | 0:9b3d4731edbb | 385 | */ |
| WFKnight | 0:9b3d4731edbb | 386 | UUID_RINGER_SETTING_CHAR = 0x2A41, |
| WFKnight | 0:9b3d4731edbb | 387 | |
| WFKnight | 0:9b3d4731edbb | 388 | /** |
| WFKnight | 0:9b3d4731edbb | 389 | * Characteristic of the Scan Parameter service that stores the client's |
| WFKnight | 0:9b3d4731edbb | 390 | * scan parameters (scan interval and scan window). |
| WFKnight | 0:9b3d4731edbb | 391 | */ |
| WFKnight | 0:9b3d4731edbb | 392 | UUID_SCAN_INTERVAL_WINDOW_CHAR = 0x2A4F, |
| WFKnight | 0:9b3d4731edbb | 393 | |
| WFKnight | 0:9b3d4731edbb | 394 | /** |
| WFKnight | 0:9b3d4731edbb | 395 | * Characteristic of the Scan Parameter service that sends a notification |
| WFKnight | 0:9b3d4731edbb | 396 | * to a client when the server requires its latest scan parameters. |
| WFKnight | 0:9b3d4731edbb | 397 | */ |
| WFKnight | 0:9b3d4731edbb | 398 | UUID_SCAN_REFRESH_CHAR = 0x2A31, |
| WFKnight | 0:9b3d4731edbb | 399 | |
| WFKnight | 0:9b3d4731edbb | 400 | /** |
| WFKnight | 0:9b3d4731edbb | 401 | * Characteristic of the Device Information Service that contains a |
| WFKnight | 0:9b3d4731edbb | 402 | * UTF8 string representing the serial number of the device. |
| WFKnight | 0:9b3d4731edbb | 403 | */ |
| WFKnight | 0:9b3d4731edbb | 404 | UUID_SERIAL_NUMBER_STRING_CHAR = 0x2A25, |
| WFKnight | 0:9b3d4731edbb | 405 | |
| WFKnight | 0:9b3d4731edbb | 406 | /** |
| WFKnight | 0:9b3d4731edbb | 407 | * Characteristic of the Device Information Service that contains an |
| WFKnight | 0:9b3d4731edbb | 408 | * UTF8 string representing the software revision of the device. |
| WFKnight | 0:9b3d4731edbb | 409 | */ |
| WFKnight | 0:9b3d4731edbb | 410 | UUID_SOFTWARE_REVISION_STRING_CHAR = 0x2A28, |
| WFKnight | 0:9b3d4731edbb | 411 | |
| WFKnight | 0:9b3d4731edbb | 412 | /** |
| WFKnight | 0:9b3d4731edbb | 413 | * Characteristic of the Alert Notification Service that notifies the |
| WFKnight | 0:9b3d4731edbb | 414 | * count of new alerts for a given category to a subscribed client. |
| WFKnight | 0:9b3d4731edbb | 415 | */ |
| WFKnight | 0:9b3d4731edbb | 416 | UUID_SUPPORTED_NEW_ALERT_CATEGORY_CHAR = 0x2A47, |
| WFKnight | 0:9b3d4731edbb | 417 | |
| WFKnight | 0:9b3d4731edbb | 418 | /** |
| WFKnight | 0:9b3d4731edbb | 419 | * Characteristic of the Alert Notification service, which exposes |
| WFKnight | 0:9b3d4731edbb | 420 | * categories of unread alert supported by the server. |
| WFKnight | 0:9b3d4731edbb | 421 | */ |
| WFKnight | 0:9b3d4731edbb | 422 | UUID_SUPPORTED_UNREAD_ALERT_CATEGORY_CHAR = 0x2A48, |
| WFKnight | 0:9b3d4731edbb | 423 | |
| WFKnight | 0:9b3d4731edbb | 424 | /** |
| WFKnight | 0:9b3d4731edbb | 425 | * Characteristic of the Device Information Service that exposes a |
| WFKnight | 0:9b3d4731edbb | 426 | * structure containing an Organizationally Unique Identifier (OUI) |
| WFKnight | 0:9b3d4731edbb | 427 | * followed by a manufacturer-defined identifier. The value of the |
| WFKnight | 0:9b3d4731edbb | 428 | * structure is unique for each individual instance of the product. |
| WFKnight | 0:9b3d4731edbb | 429 | */ |
| WFKnight | 0:9b3d4731edbb | 430 | UUID_SYSTEM_ID_CHAR = 0x2A23, |
| WFKnight | 0:9b3d4731edbb | 431 | |
| WFKnight | 0:9b3d4731edbb | 432 | /** |
| WFKnight | 0:9b3d4731edbb | 433 | * Characteristic of the Environmental Sensing service that exposes the |
| WFKnight | 0:9b3d4731edbb | 434 | * temperature measurement with a resolution of 0.01 degree Celsius. |
| WFKnight | 0:9b3d4731edbb | 435 | */ |
| WFKnight | 0:9b3d4731edbb | 436 | UUID_TEMPERATURE_CHAR = 0x2A6E, |
| WFKnight | 0:9b3d4731edbb | 437 | |
| WFKnight | 0:9b3d4731edbb | 438 | /** |
| WFKnight | 0:9b3d4731edbb | 439 | * Characteristic of the Health Thermometer service that sends temperature |
| WFKnight | 0:9b3d4731edbb | 440 | * measurement to clients. |
| WFKnight | 0:9b3d4731edbb | 441 | */ |
| WFKnight | 0:9b3d4731edbb | 442 | UUID_TEMPERATURE_MEASUREMENT_CHAR = 0x2A1C, |
| WFKnight | 0:9b3d4731edbb | 443 | |
| WFKnight | 0:9b3d4731edbb | 444 | /** |
| WFKnight | 0:9b3d4731edbb | 445 | * Characteristic of the Health Thermometer service that describes |
| WFKnight | 0:9b3d4731edbb | 446 | * where the measurement takes place. |
| WFKnight | 0:9b3d4731edbb | 447 | */ |
| WFKnight | 0:9b3d4731edbb | 448 | UUID_TEMPERATURE_TYPE_CHAR = 0x2A1D, |
| WFKnight | 0:9b3d4731edbb | 449 | |
| WFKnight | 0:9b3d4731edbb | 450 | /** |
| WFKnight | 0:9b3d4731edbb | 451 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 452 | */ |
| WFKnight | 0:9b3d4731edbb | 453 | UUID_TIME_ACCURACY_CHAR = 0x2A12, |
| WFKnight | 0:9b3d4731edbb | 454 | |
| WFKnight | 0:9b3d4731edbb | 455 | /** |
| WFKnight | 0:9b3d4731edbb | 456 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 457 | */ |
| WFKnight | 0:9b3d4731edbb | 458 | UUID_TIME_SOURCE_CHAR = 0x2A13, |
| WFKnight | 0:9b3d4731edbb | 459 | |
| WFKnight | 0:9b3d4731edbb | 460 | /** |
| WFKnight | 0:9b3d4731edbb | 461 | * Characteristic of the Reference Time service that allows clients to |
| WFKnight | 0:9b3d4731edbb | 462 | * control time update. |
| WFKnight | 0:9b3d4731edbb | 463 | */ |
| WFKnight | 0:9b3d4731edbb | 464 | UUID_TIME_UPDATE_CONTROL_POINT_CHAR = 0x2A16, |
| WFKnight | 0:9b3d4731edbb | 465 | |
| WFKnight | 0:9b3d4731edbb | 466 | /** |
| WFKnight | 0:9b3d4731edbb | 467 | * Characteristic of the Reference Time service that informs clients of |
| WFKnight | 0:9b3d4731edbb | 468 | * the status of the time update operation. |
| WFKnight | 0:9b3d4731edbb | 469 | */ |
| WFKnight | 0:9b3d4731edbb | 470 | UUID_TIME_UPDATE_STATE_CHAR = 0x2A17, |
| WFKnight | 0:9b3d4731edbb | 471 | |
| WFKnight | 0:9b3d4731edbb | 472 | /** |
| WFKnight | 0:9b3d4731edbb | 473 | * Characteristic of the Next DST Change service that returns to clients |
| WFKnight | 0:9b3d4731edbb | 474 | * the time with DST. |
| WFKnight | 0:9b3d4731edbb | 475 | */ |
| WFKnight | 0:9b3d4731edbb | 476 | UUID_TIME_WITH_DST_CHAR = 0x2A11, |
| WFKnight | 0:9b3d4731edbb | 477 | |
| WFKnight | 0:9b3d4731edbb | 478 | /** |
| WFKnight | 0:9b3d4731edbb | 479 | * Not used in a service as a characteristic. |
| WFKnight | 0:9b3d4731edbb | 480 | */ |
| WFKnight | 0:9b3d4731edbb | 481 | UUID_TIME_ZONE_CHAR = 0x2A0E, |
| WFKnight | 0:9b3d4731edbb | 482 | |
| WFKnight | 0:9b3d4731edbb | 483 | /** |
| WFKnight | 0:9b3d4731edbb | 484 | * Characteristic of the TX Power service that exposes the current |
| WFKnight | 0:9b3d4731edbb | 485 | * transmission power in dBm. |
| WFKnight | 0:9b3d4731edbb | 486 | */ |
| WFKnight | 0:9b3d4731edbb | 487 | UUID_TX_POWER_LEVEL_CHAR = 0x2A07, |
| WFKnight | 0:9b3d4731edbb | 488 | |
| WFKnight | 0:9b3d4731edbb | 489 | /** |
| WFKnight | 0:9b3d4731edbb | 490 | * Characteristic of the Cycling Speed and Cadence (CSC) service that |
| WFKnight | 0:9b3d4731edbb | 491 | * exposes features supported by the server. |
| WFKnight | 0:9b3d4731edbb | 492 | */ |
| WFKnight | 0:9b3d4731edbb | 493 | UUID_CSC_FEATURE_CHAR = 0x2A5C, |
| WFKnight | 0:9b3d4731edbb | 494 | |
| WFKnight | 0:9b3d4731edbb | 495 | /** |
| WFKnight | 0:9b3d4731edbb | 496 | * Characteristic of the Cycling Speed and Cadence (CSC) service that |
| WFKnight | 0:9b3d4731edbb | 497 | * exposes measurements made by the server. |
| WFKnight | 0:9b3d4731edbb | 498 | */ |
| WFKnight | 0:9b3d4731edbb | 499 | UUID_CSC_MEASUREMENT_CHAR = 0x2A5B, |
| WFKnight | 0:9b3d4731edbb | 500 | |
| WFKnight | 0:9b3d4731edbb | 501 | /** |
| WFKnight | 0:9b3d4731edbb | 502 | * Characteristic of the Running Speed and Cadence (RSC) service that |
| WFKnight | 0:9b3d4731edbb | 503 | * exposes features supported by the server. |
| WFKnight | 0:9b3d4731edbb | 504 | */ |
| WFKnight | 0:9b3d4731edbb | 505 | UUID_RSC_FEATURE_CHAR = 0x2A54, |
| WFKnight | 0:9b3d4731edbb | 506 | |
| WFKnight | 0:9b3d4731edbb | 507 | /** |
| WFKnight | 0:9b3d4731edbb | 508 | * Characteristic of the Running Speed and Cadence (RSC) service that |
| WFKnight | 0:9b3d4731edbb | 509 | * exposes measurements made by the server. |
| WFKnight | 0:9b3d4731edbb | 510 | */ |
| WFKnight | 0:9b3d4731edbb | 511 | UUID_RSC_MEASUREMENT_CHAR = 0x2A53 |
| WFKnight | 0:9b3d4731edbb | 512 | }; |
| WFKnight | 0:9b3d4731edbb | 513 | |
| WFKnight | 0:9b3d4731edbb | 514 | /** |
| WFKnight | 0:9b3d4731edbb | 515 | * Unit type of a characteristic value. |
| WFKnight | 0:9b3d4731edbb | 516 | * |
| WFKnight | 0:9b3d4731edbb | 517 | * These unit types are used to describe what the raw numeric data in a |
| WFKnight | 0:9b3d4731edbb | 518 | * characteristic actually represents. A server can expose that information |
| WFKnight | 0:9b3d4731edbb | 519 | * to its clients by adding a Characteristic Presentation Format descriptor |
| WFKnight | 0:9b3d4731edbb | 520 | * to relevant characteristics. |
| WFKnight | 0:9b3d4731edbb | 521 | * |
| WFKnight | 0:9b3d4731edbb | 522 | * @note See https://developer.bluetooth.org/gatt/units/Pages/default.aspx |
| WFKnight | 0:9b3d4731edbb | 523 | */ |
| WFKnight | 0:9b3d4731edbb | 524 | enum { |
| WFKnight | 0:9b3d4731edbb | 525 | |
| WFKnight | 0:9b3d4731edbb | 526 | /** |
| WFKnight | 0:9b3d4731edbb | 527 | * No specified unit type. |
| WFKnight | 0:9b3d4731edbb | 528 | */ |
| WFKnight | 0:9b3d4731edbb | 529 | BLE_GATT_UNIT_NONE = 0x2700, |
| WFKnight | 0:9b3d4731edbb | 530 | |
| WFKnight | 0:9b3d4731edbb | 531 | /** |
| WFKnight | 0:9b3d4731edbb | 532 | * Length, meter. |
| WFKnight | 0:9b3d4731edbb | 533 | */ |
| WFKnight | 0:9b3d4731edbb | 534 | BLE_GATT_UNIT_LENGTH_METRE = 0x2701, |
| WFKnight | 0:9b3d4731edbb | 535 | |
| WFKnight | 0:9b3d4731edbb | 536 | /** |
| WFKnight | 0:9b3d4731edbb | 537 | * Mass, kilogram. |
| WFKnight | 0:9b3d4731edbb | 538 | */ |
| WFKnight | 0:9b3d4731edbb | 539 | BLE_GATT_UNIT_MASS_KILOGRAM = 0x2702, |
| WFKnight | 0:9b3d4731edbb | 540 | |
| WFKnight | 0:9b3d4731edbb | 541 | /** |
| WFKnight | 0:9b3d4731edbb | 542 | * Time, second. |
| WFKnight | 0:9b3d4731edbb | 543 | */ |
| WFKnight | 0:9b3d4731edbb | 544 | BLE_GATT_UNIT_TIME_SECOND = 0x2703, |
| WFKnight | 0:9b3d4731edbb | 545 | |
| WFKnight | 0:9b3d4731edbb | 546 | /** |
| WFKnight | 0:9b3d4731edbb | 547 | * Electric current, ampere. |
| WFKnight | 0:9b3d4731edbb | 548 | */ |
| WFKnight | 0:9b3d4731edbb | 549 | BLE_GATT_UNIT_ELECTRIC_CURRENT_AMPERE = 0x2704, |
| WFKnight | 0:9b3d4731edbb | 550 | |
| WFKnight | 0:9b3d4731edbb | 551 | /** |
| WFKnight | 0:9b3d4731edbb | 552 | * Thermodynamic temperature, kelvin. |
| WFKnight | 0:9b3d4731edbb | 553 | */ |
| WFKnight | 0:9b3d4731edbb | 554 | BLE_GATT_UNIT_THERMODYNAMIC_TEMPERATURE_KELVIN = 0x2705, |
| WFKnight | 0:9b3d4731edbb | 555 | |
| WFKnight | 0:9b3d4731edbb | 556 | /** Amount of substance, mole. |
| WFKnight | 0:9b3d4731edbb | 557 | * |
| WFKnight | 0:9b3d4731edbb | 558 | */ |
| WFKnight | 0:9b3d4731edbb | 559 | BLE_GATT_UNIT_AMOUNT_OF_SUBSTANCE_MOLE = 0x2706, |
| WFKnight | 0:9b3d4731edbb | 560 | |
| WFKnight | 0:9b3d4731edbb | 561 | /** |
| WFKnight | 0:9b3d4731edbb | 562 | * Luminous intensity, candela. |
| WFKnight | 0:9b3d4731edbb | 563 | */ |
| WFKnight | 0:9b3d4731edbb | 564 | BLE_GATT_UNIT_LUMINOUS_INTENSITY_CANDELA = 0x2707, |
| WFKnight | 0:9b3d4731edbb | 565 | |
| WFKnight | 0:9b3d4731edbb | 566 | /** |
| WFKnight | 0:9b3d4731edbb | 567 | * Area, square meters. |
| WFKnight | 0:9b3d4731edbb | 568 | */ |
| WFKnight | 0:9b3d4731edbb | 569 | BLE_GATT_UNIT_AREA_SQUARE_METRES = 0x2710, |
| WFKnight | 0:9b3d4731edbb | 570 | |
| WFKnight | 0:9b3d4731edbb | 571 | /** |
| WFKnight | 0:9b3d4731edbb | 572 | * Volume, cubic meters. |
| WFKnight | 0:9b3d4731edbb | 573 | */ |
| WFKnight | 0:9b3d4731edbb | 574 | BLE_GATT_UNIT_VOLUME_CUBIC_METRES = 0x2711, |
| WFKnight | 0:9b3d4731edbb | 575 | |
| WFKnight | 0:9b3d4731edbb | 576 | /** |
| WFKnight | 0:9b3d4731edbb | 577 | * Velocity, meters per second. |
| WFKnight | 0:9b3d4731edbb | 578 | */ |
| WFKnight | 0:9b3d4731edbb | 579 | BLE_GATT_UNIT_VELOCITY_METRES_PER_SECOND = 0x2712, |
| WFKnight | 0:9b3d4731edbb | 580 | |
| WFKnight | 0:9b3d4731edbb | 581 | /** |
| WFKnight | 0:9b3d4731edbb | 582 | * Acceleration, meters per second squared. |
| WFKnight | 0:9b3d4731edbb | 583 | */ |
| WFKnight | 0:9b3d4731edbb | 584 | BLE_GATT_UNIT_ACCELERATION_METRES_PER_SECOND_SQUARED = 0x2713, |
| WFKnight | 0:9b3d4731edbb | 585 | |
| WFKnight | 0:9b3d4731edbb | 586 | /** |
| WFKnight | 0:9b3d4731edbb | 587 | * Wave number reciprocal, meter. |
| WFKnight | 0:9b3d4731edbb | 588 | */ |
| WFKnight | 0:9b3d4731edbb | 589 | BLE_GATT_UNIT_WAVENUMBER_RECIPROCAL_METRE = 0x2714, |
| WFKnight | 0:9b3d4731edbb | 590 | |
| WFKnight | 0:9b3d4731edbb | 591 | /** |
| WFKnight | 0:9b3d4731edbb | 592 | * Density, kilogram per cubic meter. |
| WFKnight | 0:9b3d4731edbb | 593 | */ |
| WFKnight | 0:9b3d4731edbb | 594 | BLE_GATT_UNIT_DENSITY_KILOGRAM_PER_CUBIC_METRE = 0x2715, |
| WFKnight | 0:9b3d4731edbb | 595 | |
| WFKnight | 0:9b3d4731edbb | 596 | /** |
| WFKnight | 0:9b3d4731edbb | 597 | * Surface density (kilogram per square meter). |
| WFKnight | 0:9b3d4731edbb | 598 | */ |
| WFKnight | 0:9b3d4731edbb | 599 | BLE_GATT_UNIT_SURFACE_DENSITY_KILOGRAM_PER_SQUARE_METRE = 0x2716, |
| WFKnight | 0:9b3d4731edbb | 600 | |
| WFKnight | 0:9b3d4731edbb | 601 | /** |
| WFKnight | 0:9b3d4731edbb | 602 | * Specific volume (cubic meter per kilogram). |
| WFKnight | 0:9b3d4731edbb | 603 | */ |
| WFKnight | 0:9b3d4731edbb | 604 | BLE_GATT_UNIT_SPECIFIC_VOLUME_CUBIC_METRE_PER_KILOGRAM = 0x2717, |
| WFKnight | 0:9b3d4731edbb | 605 | |
| WFKnight | 0:9b3d4731edbb | 606 | /** |
| WFKnight | 0:9b3d4731edbb | 607 | * Current density (ampere per square meter). |
| WFKnight | 0:9b3d4731edbb | 608 | */ |
| WFKnight | 0:9b3d4731edbb | 609 | BLE_GATT_UNIT_CURRENT_DENSITY_AMPERE_PER_SQUARE_METRE = 0x2718, |
| WFKnight | 0:9b3d4731edbb | 610 | |
| WFKnight | 0:9b3d4731edbb | 611 | /** |
| WFKnight | 0:9b3d4731edbb | 612 | * Magnetic field strength, ampere per meter. |
| WFKnight | 0:9b3d4731edbb | 613 | */ |
| WFKnight | 0:9b3d4731edbb | 614 | BLE_GATT_UNIT_MAGNETIC_FIELD_STRENGTH_AMPERE_PER_METRE = 0x2719, |
| WFKnight | 0:9b3d4731edbb | 615 | |
| WFKnight | 0:9b3d4731edbb | 616 | /** |
| WFKnight | 0:9b3d4731edbb | 617 | * Amount concentration (mole per cubic meter). |
| WFKnight | 0:9b3d4731edbb | 618 | */ |
| WFKnight | 0:9b3d4731edbb | 619 | BLE_GATT_UNIT_AMOUNT_CONCENTRATION_MOLE_PER_CUBIC_METRE = 0x271A, |
| WFKnight | 0:9b3d4731edbb | 620 | |
| WFKnight | 0:9b3d4731edbb | 621 | /** |
| WFKnight | 0:9b3d4731edbb | 622 | * Mass concentration (kilogram per cubic meter). |
| WFKnight | 0:9b3d4731edbb | 623 | */ |
| WFKnight | 0:9b3d4731edbb | 624 | BLE_GATT_UNIT_MASS_CONCENTRATION_KILOGRAM_PER_CUBIC_METRE = 0x271B, |
| WFKnight | 0:9b3d4731edbb | 625 | |
| WFKnight | 0:9b3d4731edbb | 626 | /** |
| WFKnight | 0:9b3d4731edbb | 627 | * Luminance (candela per square meter). |
| WFKnight | 0:9b3d4731edbb | 628 | */ |
| WFKnight | 0:9b3d4731edbb | 629 | BLE_GATT_UNIT_LUMINANCE_CANDELA_PER_SQUARE_METRE = 0x271C, |
| WFKnight | 0:9b3d4731edbb | 630 | |
| WFKnight | 0:9b3d4731edbb | 631 | /** |
| WFKnight | 0:9b3d4731edbb | 632 | * Refractive index. |
| WFKnight | 0:9b3d4731edbb | 633 | */ |
| WFKnight | 0:9b3d4731edbb | 634 | BLE_GATT_UNIT_REFRACTIVE_INDEX = 0x271D, |
| WFKnight | 0:9b3d4731edbb | 635 | |
| WFKnight | 0:9b3d4731edbb | 636 | /** |
| WFKnight | 0:9b3d4731edbb | 637 | * Relative permeability. |
| WFKnight | 0:9b3d4731edbb | 638 | */ |
| WFKnight | 0:9b3d4731edbb | 639 | BLE_GATT_UNIT_RELATIVE_PERMEABILITY = 0x271E, |
| WFKnight | 0:9b3d4731edbb | 640 | |
| WFKnight | 0:9b3d4731edbb | 641 | /** |
| WFKnight | 0:9b3d4731edbb | 642 | * Plane angle (radian). |
| WFKnight | 0:9b3d4731edbb | 643 | */ |
| WFKnight | 0:9b3d4731edbb | 644 | BLE_GATT_UNIT_PLANE_ANGLE_RADIAN = 0x2720, |
| WFKnight | 0:9b3d4731edbb | 645 | |
| WFKnight | 0:9b3d4731edbb | 646 | /** |
| WFKnight | 0:9b3d4731edbb | 647 | * Solid angle (steradian). |
| WFKnight | 0:9b3d4731edbb | 648 | */ |
| WFKnight | 0:9b3d4731edbb | 649 | BLE_GATT_UNIT_SOLID_ANGLE_STERADIAN = 0x2721, |
| WFKnight | 0:9b3d4731edbb | 650 | |
| WFKnight | 0:9b3d4731edbb | 651 | /** |
| WFKnight | 0:9b3d4731edbb | 652 | * Frequency, hertz. |
| WFKnight | 0:9b3d4731edbb | 653 | */ |
| WFKnight | 0:9b3d4731edbb | 654 | BLE_GATT_UNIT_FREQUENCY_HERTZ = 0x2722, |
| WFKnight | 0:9b3d4731edbb | 655 | |
| WFKnight | 0:9b3d4731edbb | 656 | /** |
| WFKnight | 0:9b3d4731edbb | 657 | * Force, newton. |
| WFKnight | 0:9b3d4731edbb | 658 | */ |
| WFKnight | 0:9b3d4731edbb | 659 | BLE_GATT_UNIT_FORCE_NEWTON = 0x2723, |
| WFKnight | 0:9b3d4731edbb | 660 | |
| WFKnight | 0:9b3d4731edbb | 661 | /** |
| WFKnight | 0:9b3d4731edbb | 662 | * Pressure, pascal. |
| WFKnight | 0:9b3d4731edbb | 663 | */ |
| WFKnight | 0:9b3d4731edbb | 664 | BLE_GATT_UNIT_PRESSURE_PASCAL = 0x2724, |
| WFKnight | 0:9b3d4731edbb | 665 | |
| WFKnight | 0:9b3d4731edbb | 666 | /** |
| WFKnight | 0:9b3d4731edbb | 667 | * Energy, joule. |
| WFKnight | 0:9b3d4731edbb | 668 | */ |
| WFKnight | 0:9b3d4731edbb | 669 | BLE_GATT_UNIT_ENERGY_JOULE = 0x2725, |
| WFKnight | 0:9b3d4731edbb | 670 | |
| WFKnight | 0:9b3d4731edbb | 671 | /** |
| WFKnight | 0:9b3d4731edbb | 672 | * Power, watt. |
| WFKnight | 0:9b3d4731edbb | 673 | */ |
| WFKnight | 0:9b3d4731edbb | 674 | BLE_GATT_UNIT_POWER_WATT = 0x2726, |
| WFKnight | 0:9b3d4731edbb | 675 | |
| WFKnight | 0:9b3d4731edbb | 676 | /** |
| WFKnight | 0:9b3d4731edbb | 677 | * Electrical charge, coulomb. |
| WFKnight | 0:9b3d4731edbb | 678 | */ |
| WFKnight | 0:9b3d4731edbb | 679 | BLE_GATT_UNIT_ELECTRIC_CHARGE_COULOMB = 0x2727, |
| WFKnight | 0:9b3d4731edbb | 680 | |
| WFKnight | 0:9b3d4731edbb | 681 | /** |
| WFKnight | 0:9b3d4731edbb | 682 | * Electrical potential difference, voltage. |
| WFKnight | 0:9b3d4731edbb | 683 | */ |
| WFKnight | 0:9b3d4731edbb | 684 | BLE_GATT_UNIT_ELECTRIC_POTENTIAL_DIFFERENCE_VOLT = 0x2728, |
| WFKnight | 0:9b3d4731edbb | 685 | |
| WFKnight | 0:9b3d4731edbb | 686 | /** |
| WFKnight | 0:9b3d4731edbb | 687 | * Capacitance, farad. |
| WFKnight | 0:9b3d4731edbb | 688 | */ |
| WFKnight | 0:9b3d4731edbb | 689 | BLE_GATT_UNIT_CAPACITANCE_FARAD = 0x2729, |
| WFKnight | 0:9b3d4731edbb | 690 | |
| WFKnight | 0:9b3d4731edbb | 691 | /** |
| WFKnight | 0:9b3d4731edbb | 692 | * Electric resistance, ohm. |
| WFKnight | 0:9b3d4731edbb | 693 | */ |
| WFKnight | 0:9b3d4731edbb | 694 | BLE_GATT_UNIT_ELECTRIC_RESISTANCE_OHM = 0x272A, |
| WFKnight | 0:9b3d4731edbb | 695 | |
| WFKnight | 0:9b3d4731edbb | 696 | /** |
| WFKnight | 0:9b3d4731edbb | 697 | * Electric conductance, siemens. |
| WFKnight | 0:9b3d4731edbb | 698 | */ |
| WFKnight | 0:9b3d4731edbb | 699 | BLE_GATT_UNIT_ELECTRIC_CONDUCTANCE_SIEMENS = 0x272B, |
| WFKnight | 0:9b3d4731edbb | 700 | |
| WFKnight | 0:9b3d4731edbb | 701 | /** |
| WFKnight | 0:9b3d4731edbb | 702 | * Magnetic flux, weber. |
| WFKnight | 0:9b3d4731edbb | 703 | */ |
| WFKnight | 0:9b3d4731edbb | 704 | BLE_GATT_UNIT_MAGNETIC_FLEX_WEBER = 0x272C, |
| WFKnight | 0:9b3d4731edbb | 705 | |
| WFKnight | 0:9b3d4731edbb | 706 | /** |
| WFKnight | 0:9b3d4731edbb | 707 | * Magnetic flux density, tesla. |
| WFKnight | 0:9b3d4731edbb | 708 | */ |
| WFKnight | 0:9b3d4731edbb | 709 | BLE_GATT_UNIT_MAGNETIC_FLEX_DENSITY_TESLA = 0x272D, |
| WFKnight | 0:9b3d4731edbb | 710 | |
| WFKnight | 0:9b3d4731edbb | 711 | /** |
| WFKnight | 0:9b3d4731edbb | 712 | * Inductance, henry. |
| WFKnight | 0:9b3d4731edbb | 713 | */ |
| WFKnight | 0:9b3d4731edbb | 714 | BLE_GATT_UNIT_INDUCTANCE_HENRY = 0x272E, |
| WFKnight | 0:9b3d4731edbb | 715 | |
| WFKnight | 0:9b3d4731edbb | 716 | /** |
| WFKnight | 0:9b3d4731edbb | 717 | * Celsius temperature, degree Celsius. |
| WFKnight | 0:9b3d4731edbb | 718 | */ |
| WFKnight | 0:9b3d4731edbb | 719 | BLE_GATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_CELSIUS = 0x272F, |
| WFKnight | 0:9b3d4731edbb | 720 | |
| WFKnight | 0:9b3d4731edbb | 721 | /** |
| WFKnight | 0:9b3d4731edbb | 722 | * Luminous flux, lumen. |
| WFKnight | 0:9b3d4731edbb | 723 | */ |
| WFKnight | 0:9b3d4731edbb | 724 | BLE_GATT_UNIT_LUMINOUS_FLUX_LUMEN = 0x2730, |
| WFKnight | 0:9b3d4731edbb | 725 | |
| WFKnight | 0:9b3d4731edbb | 726 | /** |
| WFKnight | 0:9b3d4731edbb | 727 | * Illuminance, lux. |
| WFKnight | 0:9b3d4731edbb | 728 | */ |
| WFKnight | 0:9b3d4731edbb | 729 | BLE_GATT_UNIT_ILLUMINANCE_LUX = 0x2731, |
| WFKnight | 0:9b3d4731edbb | 730 | |
| WFKnight | 0:9b3d4731edbb | 731 | /** |
| WFKnight | 0:9b3d4731edbb | 732 | * Activity referred to a radionuclide, becquerel. |
| WFKnight | 0:9b3d4731edbb | 733 | */ |
| WFKnight | 0:9b3d4731edbb | 734 | BLE_GATT_UNIT_ACTIVITY_REFERRED_TO_A_RADIONUCLIDE_BECQUEREL = 0x2732, |
| WFKnight | 0:9b3d4731edbb | 735 | |
| WFKnight | 0:9b3d4731edbb | 736 | /** |
| WFKnight | 0:9b3d4731edbb | 737 | * Absorbed dose, gray. |
| WFKnight | 0:9b3d4731edbb | 738 | */ |
| WFKnight | 0:9b3d4731edbb | 739 | BLE_GATT_UNIT_ABSORBED_DOSE_GRAY = 0x2733, |
| WFKnight | 0:9b3d4731edbb | 740 | |
| WFKnight | 0:9b3d4731edbb | 741 | /** |
| WFKnight | 0:9b3d4731edbb | 742 | * Dose equivalent, sievert. |
| WFKnight | 0:9b3d4731edbb | 743 | */ |
| WFKnight | 0:9b3d4731edbb | 744 | BLE_GATT_UNIT_DOSE_EQUIVALENT_SIEVERT = 0x2734, |
| WFKnight | 0:9b3d4731edbb | 745 | |
| WFKnight | 0:9b3d4731edbb | 746 | /** |
| WFKnight | 0:9b3d4731edbb | 747 | * Catalytic activity, katal. |
| WFKnight | 0:9b3d4731edbb | 748 | */ |
| WFKnight | 0:9b3d4731edbb | 749 | BLE_GATT_UNIT_CATALYTIC_ACTIVITY_KATAL = 0x2735, |
| WFKnight | 0:9b3d4731edbb | 750 | |
| WFKnight | 0:9b3d4731edbb | 751 | /** |
| WFKnight | 0:9b3d4731edbb | 752 | * Dynamic viscosity, pascal second. |
| WFKnight | 0:9b3d4731edbb | 753 | */ |
| WFKnight | 0:9b3d4731edbb | 754 | BLE_GATT_UNIT_DYNAMIC_VISCOSITY_PASCAL_SECOND = 0x2740, |
| WFKnight | 0:9b3d4731edbb | 755 | |
| WFKnight | 0:9b3d4731edbb | 756 | /** |
| WFKnight | 0:9b3d4731edbb | 757 | * Moment of force, newton meter. |
| WFKnight | 0:9b3d4731edbb | 758 | */ |
| WFKnight | 0:9b3d4731edbb | 759 | BLE_GATT_UNIT_MOMENT_OF_FORCE_NEWTON_METRE = 0x2741, |
| WFKnight | 0:9b3d4731edbb | 760 | |
| WFKnight | 0:9b3d4731edbb | 761 | /** |
| WFKnight | 0:9b3d4731edbb | 762 | * Surface tension, newton per meter. |
| WFKnight | 0:9b3d4731edbb | 763 | */ |
| WFKnight | 0:9b3d4731edbb | 764 | BLE_GATT_UNIT_SURFACE_TENSION_NEWTON_PER_METRE = 0x2742, |
| WFKnight | 0:9b3d4731edbb | 765 | |
| WFKnight | 0:9b3d4731edbb | 766 | /** |
| WFKnight | 0:9b3d4731edbb | 767 | * Angular velocity, radian per second. |
| WFKnight | 0:9b3d4731edbb | 768 | */ |
| WFKnight | 0:9b3d4731edbb | 769 | BLE_GATT_UNIT_ANGULAR_VELOCITY_RADIAN_PER_SECOND = 0x2743, |
| WFKnight | 0:9b3d4731edbb | 770 | |
| WFKnight | 0:9b3d4731edbb | 771 | /** |
| WFKnight | 0:9b3d4731edbb | 772 | * Angular acceleration, radian per second squared. |
| WFKnight | 0:9b3d4731edbb | 773 | */ |
| WFKnight | 0:9b3d4731edbb | 774 | BLE_GATT_UNIT_ANGULAR_ACCELERATION_RADIAN_PER_SECOND_SQUARED = 0x2744, |
| WFKnight | 0:9b3d4731edbb | 775 | |
| WFKnight | 0:9b3d4731edbb | 776 | /** |
| WFKnight | 0:9b3d4731edbb | 777 | * Heat flux density, watt per square meter. |
| WFKnight | 0:9b3d4731edbb | 778 | */ |
| WFKnight | 0:9b3d4731edbb | 779 | BLE_GATT_UNIT_HEAT_FLUX_DENSITY_WATT_PER_SQUARE_METRE = 0x2745, |
| WFKnight | 0:9b3d4731edbb | 780 | |
| WFKnight | 0:9b3d4731edbb | 781 | /** |
| WFKnight | 0:9b3d4731edbb | 782 | * Heat capacity, joule per kelvin. |
| WFKnight | 0:9b3d4731edbb | 783 | */ |
| WFKnight | 0:9b3d4731edbb | 784 | BLE_GATT_UNIT_HEAT_CAPACITY_JOULE_PER_KELVIN = 0x2746, |
| WFKnight | 0:9b3d4731edbb | 785 | |
| WFKnight | 0:9b3d4731edbb | 786 | /** |
| WFKnight | 0:9b3d4731edbb | 787 | * Specific heat capacity, joule per kilogram kelvin. |
| WFKnight | 0:9b3d4731edbb | 788 | */ |
| WFKnight | 0:9b3d4731edbb | 789 | BLE_GATT_UNIT_SPECIFIC_HEAT_CAPACITY_JOULE_PER_KILOGRAM_KELVIN = 0x2747, |
| WFKnight | 0:9b3d4731edbb | 790 | |
| WFKnight | 0:9b3d4731edbb | 791 | /** |
| WFKnight | 0:9b3d4731edbb | 792 | * Specific energy, joule per kilogram. |
| WFKnight | 0:9b3d4731edbb | 793 | */ |
| WFKnight | 0:9b3d4731edbb | 794 | BLE_GATT_UNIT_SPECIFIC_ENERGY_JOULE_PER_KILOGRAM = 0x2748, |
| WFKnight | 0:9b3d4731edbb | 795 | |
| WFKnight | 0:9b3d4731edbb | 796 | /** |
| WFKnight | 0:9b3d4731edbb | 797 | * Thermal conductivity, watt per meter kelvin. |
| WFKnight | 0:9b3d4731edbb | 798 | */ |
| WFKnight | 0:9b3d4731edbb | 799 | BLE_GATT_UNIT_THERMAL_CONDUCTIVITY_WATT_PER_METRE_KELVIN = 0x2749, |
| WFKnight | 0:9b3d4731edbb | 800 | |
| WFKnight | 0:9b3d4731edbb | 801 | /** |
| WFKnight | 0:9b3d4731edbb | 802 | * Energy density, joule per cubic meter. |
| WFKnight | 0:9b3d4731edbb | 803 | */ |
| WFKnight | 0:9b3d4731edbb | 804 | BLE_GATT_UNIT_ENERGY_DENSITY_JOULE_PER_CUBIC_METRE = 0x274A, |
| WFKnight | 0:9b3d4731edbb | 805 | |
| WFKnight | 0:9b3d4731edbb | 806 | /** |
| WFKnight | 0:9b3d4731edbb | 807 | * Electric field strength, volt per meter. |
| WFKnight | 0:9b3d4731edbb | 808 | */ |
| WFKnight | 0:9b3d4731edbb | 809 | BLE_GATT_UNIT_ELECTRIC_FIELD_STRENGTH_VOLT_PER_METRE = 0x274B, |
| WFKnight | 0:9b3d4731edbb | 810 | |
| WFKnight | 0:9b3d4731edbb | 811 | /** |
| WFKnight | 0:9b3d4731edbb | 812 | * Electric charge density, coulomb per cubic meter. |
| WFKnight | 0:9b3d4731edbb | 813 | */ |
| WFKnight | 0:9b3d4731edbb | 814 | BLE_GATT_UNIT_ELECTRIC_CHARGE_DENSITY_COULOMB_PER_CUBIC_METRE = 0x274C, |
| WFKnight | 0:9b3d4731edbb | 815 | |
| WFKnight | 0:9b3d4731edbb | 816 | /** |
| WFKnight | 0:9b3d4731edbb | 817 | * Surface charge density, coulomb per square meter. |
| WFKnight | 0:9b3d4731edbb | 818 | */ |
| WFKnight | 0:9b3d4731edbb | 819 | BLE_GATT_UNIT_SURFACE_CHARGE_DENSITY_COULOMB_PER_SQUARE_METRE = 0x274D, |
| WFKnight | 0:9b3d4731edbb | 820 | |
| WFKnight | 0:9b3d4731edbb | 821 | /** |
| WFKnight | 0:9b3d4731edbb | 822 | * Electric flux density, coulomb per square meter. |
| WFKnight | 0:9b3d4731edbb | 823 | */ |
| WFKnight | 0:9b3d4731edbb | 824 | BLE_GATT_UNIT_ELECTRIC_FLUX_DENSITY_COULOMB_PER_SQUARE_METRE = 0x274E, |
| WFKnight | 0:9b3d4731edbb | 825 | |
| WFKnight | 0:9b3d4731edbb | 826 | /** |
| WFKnight | 0:9b3d4731edbb | 827 | * Permittivity, farad per meter. |
| WFKnight | 0:9b3d4731edbb | 828 | */ |
| WFKnight | 0:9b3d4731edbb | 829 | BLE_GATT_UNIT_PERMITTIVITY_FARAD_PER_METRE = 0x274F, |
| WFKnight | 0:9b3d4731edbb | 830 | |
| WFKnight | 0:9b3d4731edbb | 831 | /** |
| WFKnight | 0:9b3d4731edbb | 832 | * Permeability, henry per meter. |
| WFKnight | 0:9b3d4731edbb | 833 | */ |
| WFKnight | 0:9b3d4731edbb | 834 | BLE_GATT_UNIT_PERMEABILITY_HENRY_PER_METRE = 0x2750, |
| WFKnight | 0:9b3d4731edbb | 835 | |
| WFKnight | 0:9b3d4731edbb | 836 | /** |
| WFKnight | 0:9b3d4731edbb | 837 | * Molar energy, joule per mole. |
| WFKnight | 0:9b3d4731edbb | 838 | */ |
| WFKnight | 0:9b3d4731edbb | 839 | BLE_GATT_UNIT_MOLAR_ENERGY_JOULE_PER_MOLE = 0x2751, |
| WFKnight | 0:9b3d4731edbb | 840 | |
| WFKnight | 0:9b3d4731edbb | 841 | /** |
| WFKnight | 0:9b3d4731edbb | 842 | * Molar entropy, joule per mole kelvin. |
| WFKnight | 0:9b3d4731edbb | 843 | */ |
| WFKnight | 0:9b3d4731edbb | 844 | BLE_GATT_UNIT_MOLAR_ENTROPY_JOULE_PER_MOLE_KELVIN = 0x2752, |
| WFKnight | 0:9b3d4731edbb | 845 | |
| WFKnight | 0:9b3d4731edbb | 846 | /** |
| WFKnight | 0:9b3d4731edbb | 847 | * Exposure, coulomb per kilogram. |
| WFKnight | 0:9b3d4731edbb | 848 | */ |
| WFKnight | 0:9b3d4731edbb | 849 | BLE_GATT_UNIT_EXPOSURE_COULOMB_PER_KILOGRAM = 0x2753, |
| WFKnight | 0:9b3d4731edbb | 850 | |
| WFKnight | 0:9b3d4731edbb | 851 | /** |
| WFKnight | 0:9b3d4731edbb | 852 | * Absorbed dose rate, gray per second. |
| WFKnight | 0:9b3d4731edbb | 853 | */ |
| WFKnight | 0:9b3d4731edbb | 854 | BLE_GATT_UNIT_ABSORBED_DOSE_RATE_GRAY_PER_SECOND = 0x2754, |
| WFKnight | 0:9b3d4731edbb | 855 | |
| WFKnight | 0:9b3d4731edbb | 856 | /** |
| WFKnight | 0:9b3d4731edbb | 857 | * Radiant intensity, watt per steradian. |
| WFKnight | 0:9b3d4731edbb | 858 | */ |
| WFKnight | 0:9b3d4731edbb | 859 | BLE_GATT_UNIT_RADIANT_INTENSITY_WATT_PER_STERADIAN = 0x2755, |
| WFKnight | 0:9b3d4731edbb | 860 | |
| WFKnight | 0:9b3d4731edbb | 861 | /** |
| WFKnight | 0:9b3d4731edbb | 862 | * Radiance, watt per square meter steradian. |
| WFKnight | 0:9b3d4731edbb | 863 | */ |
| WFKnight | 0:9b3d4731edbb | 864 | BLE_GATT_UNIT_RADIANCE_WATT_PER_SQUARE_METRE_STERADIAN = 0x2756, |
| WFKnight | 0:9b3d4731edbb | 865 | |
| WFKnight | 0:9b3d4731edbb | 866 | /** |
| WFKnight | 0:9b3d4731edbb | 867 | * Catalytic activity concentration, katal per cubic meter. |
| WFKnight | 0:9b3d4731edbb | 868 | */ |
| WFKnight | 0:9b3d4731edbb | 869 | BLE_GATT_UNIT_CATALYTIC_ACTIVITY_CONCENTRATION_KATAL_PER_CUBIC_METRE = 0x2757, |
| WFKnight | 0:9b3d4731edbb | 870 | |
| WFKnight | 0:9b3d4731edbb | 871 | /** |
| WFKnight | 0:9b3d4731edbb | 872 | * Time, minute. |
| WFKnight | 0:9b3d4731edbb | 873 | */ |
| WFKnight | 0:9b3d4731edbb | 874 | BLE_GATT_UNIT_TIME_MINUTE = 0x2760, |
| WFKnight | 0:9b3d4731edbb | 875 | |
| WFKnight | 0:9b3d4731edbb | 876 | /** |
| WFKnight | 0:9b3d4731edbb | 877 | * Time, hour. |
| WFKnight | 0:9b3d4731edbb | 878 | */ |
| WFKnight | 0:9b3d4731edbb | 879 | BLE_GATT_UNIT_TIME_HOUR = 0x2761, |
| WFKnight | 0:9b3d4731edbb | 880 | |
| WFKnight | 0:9b3d4731edbb | 881 | /** |
| WFKnight | 0:9b3d4731edbb | 882 | * Time, day. |
| WFKnight | 0:9b3d4731edbb | 883 | */ |
| WFKnight | 0:9b3d4731edbb | 884 | BLE_GATT_UNIT_TIME_DAY = 0x2762, |
| WFKnight | 0:9b3d4731edbb | 885 | |
| WFKnight | 0:9b3d4731edbb | 886 | /** |
| WFKnight | 0:9b3d4731edbb | 887 | * Plane angle, degree. |
| WFKnight | 0:9b3d4731edbb | 888 | */ |
| WFKnight | 0:9b3d4731edbb | 889 | BLE_GATT_UNIT_PLANE_ANGLE_DEGREE = 0x2763, |
| WFKnight | 0:9b3d4731edbb | 890 | |
| WFKnight | 0:9b3d4731edbb | 891 | /** |
| WFKnight | 0:9b3d4731edbb | 892 | * Plane angle, minute. |
| WFKnight | 0:9b3d4731edbb | 893 | */ |
| WFKnight | 0:9b3d4731edbb | 894 | BLE_GATT_UNIT_PLANE_ANGLE_MINUTE = 0x2764, |
| WFKnight | 0:9b3d4731edbb | 895 | |
| WFKnight | 0:9b3d4731edbb | 896 | /** |
| WFKnight | 0:9b3d4731edbb | 897 | * Plane angle, seconds. |
| WFKnight | 0:9b3d4731edbb | 898 | */ |
| WFKnight | 0:9b3d4731edbb | 899 | BLE_GATT_UNIT_PLANE_ANGLE_SECOND = 0x2765, |
| WFKnight | 0:9b3d4731edbb | 900 | |
| WFKnight | 0:9b3d4731edbb | 901 | /** |
| WFKnight | 0:9b3d4731edbb | 902 | * Area, hectare. |
| WFKnight | 0:9b3d4731edbb | 903 | */ |
| WFKnight | 0:9b3d4731edbb | 904 | BLE_GATT_UNIT_AREA_HECTARE = 0x2766, |
| WFKnight | 0:9b3d4731edbb | 905 | |
| WFKnight | 0:9b3d4731edbb | 906 | /** |
| WFKnight | 0:9b3d4731edbb | 907 | * Volume, liter. |
| WFKnight | 0:9b3d4731edbb | 908 | */ |
| WFKnight | 0:9b3d4731edbb | 909 | BLE_GATT_UNIT_VOLUME_LITRE = 0x2767, |
| WFKnight | 0:9b3d4731edbb | 910 | |
| WFKnight | 0:9b3d4731edbb | 911 | /** |
| WFKnight | 0:9b3d4731edbb | 912 | * Mass, ton. |
| WFKnight | 0:9b3d4731edbb | 913 | */ |
| WFKnight | 0:9b3d4731edbb | 914 | BLE_GATT_UNIT_MASS_TONNE = 0x2768, |
| WFKnight | 0:9b3d4731edbb | 915 | |
| WFKnight | 0:9b3d4731edbb | 916 | /** |
| WFKnight | 0:9b3d4731edbb | 917 | * Pressure, bar. |
| WFKnight | 0:9b3d4731edbb | 918 | */ |
| WFKnight | 0:9b3d4731edbb | 919 | BLE_GATT_UNIT_PRESSURE_BAR = 0x2780, |
| WFKnight | 0:9b3d4731edbb | 920 | |
| WFKnight | 0:9b3d4731edbb | 921 | /** |
| WFKnight | 0:9b3d4731edbb | 922 | * Pressure, millimeter of mercury. |
| WFKnight | 0:9b3d4731edbb | 923 | */ |
| WFKnight | 0:9b3d4731edbb | 924 | BLE_GATT_UNIT_PRESSURE_MILLIMETRE_OF_MERCURY = 0x2781, |
| WFKnight | 0:9b3d4731edbb | 925 | |
| WFKnight | 0:9b3d4731edbb | 926 | /** |
| WFKnight | 0:9b3d4731edbb | 927 | * Length, ngstrm. |
| WFKnight | 0:9b3d4731edbb | 928 | */ |
| WFKnight | 0:9b3d4731edbb | 929 | BLE_GATT_UNIT_LENGTH_ANGSTROM = 0x2782, |
| WFKnight | 0:9b3d4731edbb | 930 | |
| WFKnight | 0:9b3d4731edbb | 931 | /** |
| WFKnight | 0:9b3d4731edbb | 932 | * Length, nautical mile. |
| WFKnight | 0:9b3d4731edbb | 933 | */ |
| WFKnight | 0:9b3d4731edbb | 934 | BLE_GATT_UNIT_LENGTH_NAUTICAL_MILE = 0x2783, |
| WFKnight | 0:9b3d4731edbb | 935 | |
| WFKnight | 0:9b3d4731edbb | 936 | /** |
| WFKnight | 0:9b3d4731edbb | 937 | * Area, barn. |
| WFKnight | 0:9b3d4731edbb | 938 | */ |
| WFKnight | 0:9b3d4731edbb | 939 | BLE_GATT_UNIT_AREA_BARN = 0x2784, |
| WFKnight | 0:9b3d4731edbb | 940 | |
| WFKnight | 0:9b3d4731edbb | 941 | /** |
| WFKnight | 0:9b3d4731edbb | 942 | * Velocity, knot. |
| WFKnight | 0:9b3d4731edbb | 943 | */ |
| WFKnight | 0:9b3d4731edbb | 944 | BLE_GATT_UNIT_VELOCITY_KNOT = 0x2785, |
| WFKnight | 0:9b3d4731edbb | 945 | |
| WFKnight | 0:9b3d4731edbb | 946 | /** |
| WFKnight | 0:9b3d4731edbb | 947 | * Logarithmic radio quantity, neper. |
| WFKnight | 0:9b3d4731edbb | 948 | */ |
| WFKnight | 0:9b3d4731edbb | 949 | BLE_GATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_NEPER = 0x2786, |
| WFKnight | 0:9b3d4731edbb | 950 | |
| WFKnight | 0:9b3d4731edbb | 951 | /** |
| WFKnight | 0:9b3d4731edbb | 952 | * Logarithmic radio quantity, bel. |
| WFKnight | 0:9b3d4731edbb | 953 | */ |
| WFKnight | 0:9b3d4731edbb | 954 | BLE_GATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_BEL = 0x2787, |
| WFKnight | 0:9b3d4731edbb | 955 | |
| WFKnight | 0:9b3d4731edbb | 956 | /** |
| WFKnight | 0:9b3d4731edbb | 957 | * Length, yard. |
| WFKnight | 0:9b3d4731edbb | 958 | */ |
| WFKnight | 0:9b3d4731edbb | 959 | BLE_GATT_UNIT_LENGTH_YARD = 0x27A0, |
| WFKnight | 0:9b3d4731edbb | 960 | |
| WFKnight | 0:9b3d4731edbb | 961 | /** |
| WFKnight | 0:9b3d4731edbb | 962 | * Length, parsec. |
| WFKnight | 0:9b3d4731edbb | 963 | */ |
| WFKnight | 0:9b3d4731edbb | 964 | BLE_GATT_UNIT_LENGTH_PARSEC = 0x27A1, |
| WFKnight | 0:9b3d4731edbb | 965 | |
| WFKnight | 0:9b3d4731edbb | 966 | /** |
| WFKnight | 0:9b3d4731edbb | 967 | * Length, inch. |
| WFKnight | 0:9b3d4731edbb | 968 | */ |
| WFKnight | 0:9b3d4731edbb | 969 | BLE_GATT_UNIT_LENGTH_INCH = 0x27A2, |
| WFKnight | 0:9b3d4731edbb | 970 | |
| WFKnight | 0:9b3d4731edbb | 971 | /** |
| WFKnight | 0:9b3d4731edbb | 972 | * Length, foot. |
| WFKnight | 0:9b3d4731edbb | 973 | */ |
| WFKnight | 0:9b3d4731edbb | 974 | BLE_GATT_UNIT_LENGTH_FOOT = 0x27A3, |
| WFKnight | 0:9b3d4731edbb | 975 | |
| WFKnight | 0:9b3d4731edbb | 976 | /** |
| WFKnight | 0:9b3d4731edbb | 977 | * Length, mile. |
| WFKnight | 0:9b3d4731edbb | 978 | */ |
| WFKnight | 0:9b3d4731edbb | 979 | BLE_GATT_UNIT_LENGTH_MILE = 0x27A4, |
| WFKnight | 0:9b3d4731edbb | 980 | |
| WFKnight | 0:9b3d4731edbb | 981 | /** |
| WFKnight | 0:9b3d4731edbb | 982 | * Pressure, pound-force per square inch. |
| WFKnight | 0:9b3d4731edbb | 983 | */ |
| WFKnight | 0:9b3d4731edbb | 984 | BLE_GATT_UNIT_PRESSURE_POUND_FORCE_PER_SQUARE_INCH = 0x27A5, |
| WFKnight | 0:9b3d4731edbb | 985 | |
| WFKnight | 0:9b3d4731edbb | 986 | /** |
| WFKnight | 0:9b3d4731edbb | 987 | * Velocity, kilometer per hour. |
| WFKnight | 0:9b3d4731edbb | 988 | */ |
| WFKnight | 0:9b3d4731edbb | 989 | BLE_GATT_UNIT_VELOCITY_KILOMETRE_PER_HOUR = 0x27A6, |
| WFKnight | 0:9b3d4731edbb | 990 | |
| WFKnight | 0:9b3d4731edbb | 991 | /** Velocity, mile per hour. |
| WFKnight | 0:9b3d4731edbb | 992 | * |
| WFKnight | 0:9b3d4731edbb | 993 | */ |
| WFKnight | 0:9b3d4731edbb | 994 | BLE_GATT_UNIT_VELOCITY_MILE_PER_HOUR = 0x27A7, |
| WFKnight | 0:9b3d4731edbb | 995 | |
| WFKnight | 0:9b3d4731edbb | 996 | /** |
| WFKnight | 0:9b3d4731edbb | 997 | * Angular Velocity, revolution per minute. |
| WFKnight | 0:9b3d4731edbb | 998 | */ |
| WFKnight | 0:9b3d4731edbb | 999 | BLE_GATT_UNIT_ANGULAR_VELOCITY_REVOLUTION_PER_MINUTE = 0x27A8, |
| WFKnight | 0:9b3d4731edbb | 1000 | |
| WFKnight | 0:9b3d4731edbb | 1001 | /** |
| WFKnight | 0:9b3d4731edbb | 1002 | * Energy, gram calorie. |
| WFKnight | 0:9b3d4731edbb | 1003 | */ |
| WFKnight | 0:9b3d4731edbb | 1004 | BLE_GATT_UNIT_ENERGY_GRAM_CALORIE = 0x27A9, |
| WFKnight | 0:9b3d4731edbb | 1005 | |
| WFKnight | 0:9b3d4731edbb | 1006 | /** |
| WFKnight | 0:9b3d4731edbb | 1007 | * Energy, kilogram calorie. |
| WFKnight | 0:9b3d4731edbb | 1008 | */ |
| WFKnight | 0:9b3d4731edbb | 1009 | BLE_GATT_UNIT_ENERGY_KILOGRAM_CALORIE = 0x27AA, |
| WFKnight | 0:9b3d4731edbb | 1010 | |
| WFKnight | 0:9b3d4731edbb | 1011 | /** |
| WFKnight | 0:9b3d4731edbb | 1012 | * Energy, killowatt hour. |
| WFKnight | 0:9b3d4731edbb | 1013 | */ |
| WFKnight | 0:9b3d4731edbb | 1014 | BLE_GATT_UNIT_ENERGY_KILOWATT_HOUR = 0x27AB, |
| WFKnight | 0:9b3d4731edbb | 1015 | |
| WFKnight | 0:9b3d4731edbb | 1016 | /** |
| WFKnight | 0:9b3d4731edbb | 1017 | * Thermodynamic temperature, degree Fahrenheit. |
| WFKnight | 0:9b3d4731edbb | 1018 | */ |
| WFKnight | 0:9b3d4731edbb | 1019 | BLE_GATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_FAHRENHEIT = 0x27AC, |
| WFKnight | 0:9b3d4731edbb | 1020 | |
| WFKnight | 0:9b3d4731edbb | 1021 | /** |
| WFKnight | 0:9b3d4731edbb | 1022 | * Percentage. |
| WFKnight | 0:9b3d4731edbb | 1023 | */ |
| WFKnight | 0:9b3d4731edbb | 1024 | BLE_GATT_UNIT_PERCENTAGE = 0x27AD, |
| WFKnight | 0:9b3d4731edbb | 1025 | |
| WFKnight | 0:9b3d4731edbb | 1026 | /** |
| WFKnight | 0:9b3d4731edbb | 1027 | * Per mille. |
| WFKnight | 0:9b3d4731edbb | 1028 | */ |
| WFKnight | 0:9b3d4731edbb | 1029 | BLE_GATT_UNIT_PER_MILLE = 0x27AE, |
| WFKnight | 0:9b3d4731edbb | 1030 | |
| WFKnight | 0:9b3d4731edbb | 1031 | /** |
| WFKnight | 0:9b3d4731edbb | 1032 | * Period, beats per minute. |
| WFKnight | 0:9b3d4731edbb | 1033 | */ |
| WFKnight | 0:9b3d4731edbb | 1034 | BLE_GATT_UNIT_PERIOD_BEATS_PER_MINUTE = 0x27AF, |
| WFKnight | 0:9b3d4731edbb | 1035 | |
| WFKnight | 0:9b3d4731edbb | 1036 | /** |
| WFKnight | 0:9b3d4731edbb | 1037 | * Electric charge, ampere hours. |
| WFKnight | 0:9b3d4731edbb | 1038 | */ |
| WFKnight | 0:9b3d4731edbb | 1039 | BLE_GATT_UNIT_ELECTRIC_CHARGE_AMPERE_HOURS = 0x27B0, |
| WFKnight | 0:9b3d4731edbb | 1040 | |
| WFKnight | 0:9b3d4731edbb | 1041 | /** |
| WFKnight | 0:9b3d4731edbb | 1042 | * Mass density, milligram per deciliter. |
| WFKnight | 0:9b3d4731edbb | 1043 | */ |
| WFKnight | 0:9b3d4731edbb | 1044 | BLE_GATT_UNIT_MASS_DENSITY_MILLIGRAM_PER_DECILITRE = 0x27B1, |
| WFKnight | 0:9b3d4731edbb | 1045 | |
| WFKnight | 0:9b3d4731edbb | 1046 | /** |
| WFKnight | 0:9b3d4731edbb | 1047 | * Mass density, millimole per liter. |
| WFKnight | 0:9b3d4731edbb | 1048 | */ |
| WFKnight | 0:9b3d4731edbb | 1049 | BLE_GATT_UNIT_MASS_DENSITY_MILLIMOLE_PER_LITRE = 0x27B2, |
| WFKnight | 0:9b3d4731edbb | 1050 | |
| WFKnight | 0:9b3d4731edbb | 1051 | /** |
| WFKnight | 0:9b3d4731edbb | 1052 | * Time, year. |
| WFKnight | 0:9b3d4731edbb | 1053 | */ |
| WFKnight | 0:9b3d4731edbb | 1054 | BLE_GATT_UNIT_TIME_YEAR = 0x27B3, |
| WFKnight | 0:9b3d4731edbb | 1055 | |
| WFKnight | 0:9b3d4731edbb | 1056 | /** |
| WFKnight | 0:9b3d4731edbb | 1057 | * Time, month. |
| WFKnight | 0:9b3d4731edbb | 1058 | */ |
| WFKnight | 0:9b3d4731edbb | 1059 | BLE_GATT_UNIT_TIME_MONTH = 0x27B4, |
| WFKnight | 0:9b3d4731edbb | 1060 | |
| WFKnight | 0:9b3d4731edbb | 1061 | /** |
| WFKnight | 0:9b3d4731edbb | 1062 | * Concentration, count per cubic meter. |
| WFKnight | 0:9b3d4731edbb | 1063 | */ |
| WFKnight | 0:9b3d4731edbb | 1064 | BLE_GATT_UNIT_CONCENTRATION_COUNT_PER_CUBIC_METRE = 0x27B5, |
| WFKnight | 0:9b3d4731edbb | 1065 | |
| WFKnight | 0:9b3d4731edbb | 1066 | /** |
| WFKnight | 0:9b3d4731edbb | 1067 | * Irradiance, watt per square meter. |
| WFKnight | 0:9b3d4731edbb | 1068 | */ |
| WFKnight | 0:9b3d4731edbb | 1069 | BLE_GATT_UNIT_IRRADIANCE_WATT_PER_SQUARE_METRE = 0x27B6 |
| WFKnight | 0:9b3d4731edbb | 1070 | }; |
| WFKnight | 0:9b3d4731edbb | 1071 | |
| WFKnight | 0:9b3d4731edbb | 1072 | /** |
| WFKnight | 0:9b3d4731edbb | 1073 | * Presentation format of a characteristic. |
| WFKnight | 0:9b3d4731edbb | 1074 | * |
| WFKnight | 0:9b3d4731edbb | 1075 | * It determines how the value of a characteristic is formatted. A server |
| WFKnight | 0:9b3d4731edbb | 1076 | * can expose that information to its clients by adding a Characteristic |
| WFKnight | 0:9b3d4731edbb | 1077 | * Presentation Format descriptor to relevant characteristics. |
| WFKnight | 0:9b3d4731edbb | 1078 | * |
| WFKnight | 0:9b3d4731edbb | 1079 | * @note See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5.2. |
| WFKnight | 0:9b3d4731edbb | 1080 | */ |
| WFKnight | 0:9b3d4731edbb | 1081 | enum { |
| WFKnight | 0:9b3d4731edbb | 1082 | /** |
| WFKnight | 0:9b3d4731edbb | 1083 | * Reserved for future use. |
| WFKnight | 0:9b3d4731edbb | 1084 | */ |
| WFKnight | 0:9b3d4731edbb | 1085 | BLE_GATT_FORMAT_RFU = 0x00, |
| WFKnight | 0:9b3d4731edbb | 1086 | |
| WFKnight | 0:9b3d4731edbb | 1087 | /** |
| WFKnight | 0:9b3d4731edbb | 1088 | * Boolean. |
| WFKnight | 0:9b3d4731edbb | 1089 | */ |
| WFKnight | 0:9b3d4731edbb | 1090 | BLE_GATT_FORMAT_BOOLEAN = 0x01, |
| WFKnight | 0:9b3d4731edbb | 1091 | |
| WFKnight | 0:9b3d4731edbb | 1092 | /** |
| WFKnight | 0:9b3d4731edbb | 1093 | * Unsigned 2-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1094 | */ |
| WFKnight | 0:9b3d4731edbb | 1095 | BLE_GATT_FORMAT_2BIT = 0x02, |
| WFKnight | 0:9b3d4731edbb | 1096 | |
| WFKnight | 0:9b3d4731edbb | 1097 | /** |
| WFKnight | 0:9b3d4731edbb | 1098 | * Unsigned 4-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1099 | */ |
| WFKnight | 0:9b3d4731edbb | 1100 | BLE_GATT_FORMAT_NIBBLE = 0x03, |
| WFKnight | 0:9b3d4731edbb | 1101 | |
| WFKnight | 0:9b3d4731edbb | 1102 | /** |
| WFKnight | 0:9b3d4731edbb | 1103 | * Unsigned 8-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1104 | */ |
| WFKnight | 0:9b3d4731edbb | 1105 | BLE_GATT_FORMAT_UINT8 = 0x04, |
| WFKnight | 0:9b3d4731edbb | 1106 | |
| WFKnight | 0:9b3d4731edbb | 1107 | /** |
| WFKnight | 0:9b3d4731edbb | 1108 | * Unsigned 12-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1109 | */ |
| WFKnight | 0:9b3d4731edbb | 1110 | BLE_GATT_FORMAT_UINT12 = 0x05, |
| WFKnight | 0:9b3d4731edbb | 1111 | |
| WFKnight | 0:9b3d4731edbb | 1112 | /** |
| WFKnight | 0:9b3d4731edbb | 1113 | * Unsigned 16-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1114 | */ |
| WFKnight | 0:9b3d4731edbb | 1115 | BLE_GATT_FORMAT_UINT16 = 0x06, |
| WFKnight | 0:9b3d4731edbb | 1116 | |
| WFKnight | 0:9b3d4731edbb | 1117 | /** |
| WFKnight | 0:9b3d4731edbb | 1118 | * Unsigned 24-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1119 | */ |
| WFKnight | 0:9b3d4731edbb | 1120 | BLE_GATT_FORMAT_UINT24 = 0x07, |
| WFKnight | 0:9b3d4731edbb | 1121 | |
| WFKnight | 0:9b3d4731edbb | 1122 | /** |
| WFKnight | 0:9b3d4731edbb | 1123 | * Unsigned 32-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1124 | */ |
| WFKnight | 0:9b3d4731edbb | 1125 | BLE_GATT_FORMAT_UINT32 = 0x08, |
| WFKnight | 0:9b3d4731edbb | 1126 | |
| WFKnight | 0:9b3d4731edbb | 1127 | /** |
| WFKnight | 0:9b3d4731edbb | 1128 | * Unsigned 48-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1129 | */ |
| WFKnight | 0:9b3d4731edbb | 1130 | BLE_GATT_FORMAT_UINT48 = 0x09, |
| WFKnight | 0:9b3d4731edbb | 1131 | |
| WFKnight | 0:9b3d4731edbb | 1132 | /** |
| WFKnight | 0:9b3d4731edbb | 1133 | * Unsigned 64-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1134 | */ |
| WFKnight | 0:9b3d4731edbb | 1135 | BLE_GATT_FORMAT_UINT64 = 0x0A, |
| WFKnight | 0:9b3d4731edbb | 1136 | |
| WFKnight | 0:9b3d4731edbb | 1137 | /** |
| WFKnight | 0:9b3d4731edbb | 1138 | * Unsigned 128-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1139 | */ |
| WFKnight | 0:9b3d4731edbb | 1140 | BLE_GATT_FORMAT_UINT128 = 0x0B, |
| WFKnight | 0:9b3d4731edbb | 1141 | |
| WFKnight | 0:9b3d4731edbb | 1142 | /** |
| WFKnight | 0:9b3d4731edbb | 1143 | * Signed 8-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1144 | */ |
| WFKnight | 0:9b3d4731edbb | 1145 | BLE_GATT_FORMAT_SINT8 = 0x0C, |
| WFKnight | 0:9b3d4731edbb | 1146 | |
| WFKnight | 0:9b3d4731edbb | 1147 | /** |
| WFKnight | 0:9b3d4731edbb | 1148 | * Signed 12-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1149 | */ |
| WFKnight | 0:9b3d4731edbb | 1150 | BLE_GATT_FORMAT_SINT12 = 0x0D, |
| WFKnight | 0:9b3d4731edbb | 1151 | |
| WFKnight | 0:9b3d4731edbb | 1152 | /** |
| WFKnight | 0:9b3d4731edbb | 1153 | * Signed 16-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1154 | */ |
| WFKnight | 0:9b3d4731edbb | 1155 | BLE_GATT_FORMAT_SINT16 = 0x0E, |
| WFKnight | 0:9b3d4731edbb | 1156 | |
| WFKnight | 0:9b3d4731edbb | 1157 | /** |
| WFKnight | 0:9b3d4731edbb | 1158 | * Signed 24-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1159 | */ |
| WFKnight | 0:9b3d4731edbb | 1160 | BLE_GATT_FORMAT_SINT24 = 0x0F, |
| WFKnight | 0:9b3d4731edbb | 1161 | |
| WFKnight | 0:9b3d4731edbb | 1162 | /** |
| WFKnight | 0:9b3d4731edbb | 1163 | * Signed 32-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1164 | */ |
| WFKnight | 0:9b3d4731edbb | 1165 | BLE_GATT_FORMAT_SINT32 = 0x10, |
| WFKnight | 0:9b3d4731edbb | 1166 | |
| WFKnight | 0:9b3d4731edbb | 1167 | /** |
| WFKnight | 0:9b3d4731edbb | 1168 | * Signed 48-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1169 | */ |
| WFKnight | 0:9b3d4731edbb | 1170 | BLE_GATT_FORMAT_SINT48 = 0x11, |
| WFKnight | 0:9b3d4731edbb | 1171 | |
| WFKnight | 0:9b3d4731edbb | 1172 | /** |
| WFKnight | 0:9b3d4731edbb | 1173 | * Signed 64-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1174 | */ |
| WFKnight | 0:9b3d4731edbb | 1175 | BLE_GATT_FORMAT_SINT64 = 0x12, |
| WFKnight | 0:9b3d4731edbb | 1176 | |
| WFKnight | 0:9b3d4731edbb | 1177 | /** |
| WFKnight | 0:9b3d4731edbb | 1178 | * Signed 128-bit integer. |
| WFKnight | 0:9b3d4731edbb | 1179 | */ |
| WFKnight | 0:9b3d4731edbb | 1180 | BLE_GATT_FORMAT_SINT128 = 0x13, |
| WFKnight | 0:9b3d4731edbb | 1181 | |
| WFKnight | 0:9b3d4731edbb | 1182 | /** |
| WFKnight | 0:9b3d4731edbb | 1183 | * IEEE-754 32-bit floating point. |
| WFKnight | 0:9b3d4731edbb | 1184 | */ |
| WFKnight | 0:9b3d4731edbb | 1185 | BLE_GATT_FORMAT_FLOAT32 = 0x14, |
| WFKnight | 0:9b3d4731edbb | 1186 | |
| WFKnight | 0:9b3d4731edbb | 1187 | /** |
| WFKnight | 0:9b3d4731edbb | 1188 | * IEEE-754 64-bit floating point. |
| WFKnight | 0:9b3d4731edbb | 1189 | */ |
| WFKnight | 0:9b3d4731edbb | 1190 | BLE_GATT_FORMAT_FLOAT64 = 0x15, |
| WFKnight | 0:9b3d4731edbb | 1191 | |
| WFKnight | 0:9b3d4731edbb | 1192 | /** |
| WFKnight | 0:9b3d4731edbb | 1193 | * IEEE-11073 16-bit SFLOAT. |
| WFKnight | 0:9b3d4731edbb | 1194 | */ |
| WFKnight | 0:9b3d4731edbb | 1195 | BLE_GATT_FORMAT_SFLOAT = 0x16, |
| WFKnight | 0:9b3d4731edbb | 1196 | |
| WFKnight | 0:9b3d4731edbb | 1197 | /** |
| WFKnight | 0:9b3d4731edbb | 1198 | * IEEE-11073 32-bit FLOAT. |
| WFKnight | 0:9b3d4731edbb | 1199 | */ |
| WFKnight | 0:9b3d4731edbb | 1200 | BLE_GATT_FORMAT_FLOAT = 0x17, |
| WFKnight | 0:9b3d4731edbb | 1201 | |
| WFKnight | 0:9b3d4731edbb | 1202 | /** |
| WFKnight | 0:9b3d4731edbb | 1203 | * IEEE-20601 format. |
| WFKnight | 0:9b3d4731edbb | 1204 | */ |
| WFKnight | 0:9b3d4731edbb | 1205 | BLE_GATT_FORMAT_DUINT16 = 0x18, |
| WFKnight | 0:9b3d4731edbb | 1206 | |
| WFKnight | 0:9b3d4731edbb | 1207 | /** |
| WFKnight | 0:9b3d4731edbb | 1208 | * UTF8 string. |
| WFKnight | 0:9b3d4731edbb | 1209 | */ |
| WFKnight | 0:9b3d4731edbb | 1210 | BLE_GATT_FORMAT_UTF8S = 0x19, |
| WFKnight | 0:9b3d4731edbb | 1211 | |
| WFKnight | 0:9b3d4731edbb | 1212 | /** |
| WFKnight | 0:9b3d4731edbb | 1213 | * UTF16 string. |
| WFKnight | 0:9b3d4731edbb | 1214 | */ |
| WFKnight | 0:9b3d4731edbb | 1215 | BLE_GATT_FORMAT_UTF16S = 0x1A, |
| WFKnight | 0:9b3d4731edbb | 1216 | |
| WFKnight | 0:9b3d4731edbb | 1217 | /** |
| WFKnight | 0:9b3d4731edbb | 1218 | * Opaque Structure. |
| WFKnight | 0:9b3d4731edbb | 1219 | */ |
| WFKnight | 0:9b3d4731edbb | 1220 | BLE_GATT_FORMAT_STRUCT = 0x1B |
| WFKnight | 0:9b3d4731edbb | 1221 | }; |
| WFKnight | 0:9b3d4731edbb | 1222 | |
| WFKnight | 0:9b3d4731edbb | 1223 | /*! |
| WFKnight | 0:9b3d4731edbb | 1224 | * Characteristic properties. |
| WFKnight | 0:9b3d4731edbb | 1225 | * |
| WFKnight | 0:9b3d4731edbb | 1226 | * It is a bitfield that determines how a characteristic value can be used. |
| WFKnight | 0:9b3d4731edbb | 1227 | * |
| WFKnight | 0:9b3d4731edbb | 1228 | * @note See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.1.1 |
| WFKnight | 0:9b3d4731edbb | 1229 | * and Section 3.3.3.1 for Extended Properties. |
| WFKnight | 0:9b3d4731edbb | 1230 | */ |
| WFKnight | 0:9b3d4731edbb | 1231 | enum Properties_t { |
| WFKnight | 0:9b3d4731edbb | 1232 | /** |
| WFKnight | 0:9b3d4731edbb | 1233 | * No property defined. |
| WFKnight | 0:9b3d4731edbb | 1234 | */ |
| WFKnight | 0:9b3d4731edbb | 1235 | BLE_GATT_CHAR_PROPERTIES_NONE = 0x00, |
| WFKnight | 0:9b3d4731edbb | 1236 | |
| WFKnight | 0:9b3d4731edbb | 1237 | /** |
| WFKnight | 0:9b3d4731edbb | 1238 | * Permits broadcasts of the characteristic value using the Server |
| WFKnight | 0:9b3d4731edbb | 1239 | * Characteristic Configuration descriptor. |
| WFKnight | 0:9b3d4731edbb | 1240 | */ |
| WFKnight | 0:9b3d4731edbb | 1241 | BLE_GATT_CHAR_PROPERTIES_BROADCAST = 0x01, |
| WFKnight | 0:9b3d4731edbb | 1242 | |
| WFKnight | 0:9b3d4731edbb | 1243 | /** |
| WFKnight | 0:9b3d4731edbb | 1244 | * Permits reads of the characteristic value. |
| WFKnight | 0:9b3d4731edbb | 1245 | */ |
| WFKnight | 0:9b3d4731edbb | 1246 | BLE_GATT_CHAR_PROPERTIES_READ = 0x02, |
| WFKnight | 0:9b3d4731edbb | 1247 | |
| WFKnight | 0:9b3d4731edbb | 1248 | /** |
| WFKnight | 0:9b3d4731edbb | 1249 | * Permits writes of the characteristic value without response. |
| WFKnight | 0:9b3d4731edbb | 1250 | */ |
| WFKnight | 0:9b3d4731edbb | 1251 | BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE = 0x04, |
| WFKnight | 0:9b3d4731edbb | 1252 | |
| WFKnight | 0:9b3d4731edbb | 1253 | /** |
| WFKnight | 0:9b3d4731edbb | 1254 | * Permits writes of the characteristic value with response. |
| WFKnight | 0:9b3d4731edbb | 1255 | */ |
| WFKnight | 0:9b3d4731edbb | 1256 | BLE_GATT_CHAR_PROPERTIES_WRITE = 0x08, |
| WFKnight | 0:9b3d4731edbb | 1257 | |
| WFKnight | 0:9b3d4731edbb | 1258 | /** |
| WFKnight | 0:9b3d4731edbb | 1259 | * Permits notifications of a characteristic value without acknowledgment. |
| WFKnight | 0:9b3d4731edbb | 1260 | */ |
| WFKnight | 0:9b3d4731edbb | 1261 | BLE_GATT_CHAR_PROPERTIES_NOTIFY = 0x10, |
| WFKnight | 0:9b3d4731edbb | 1262 | |
| WFKnight | 0:9b3d4731edbb | 1263 | /** |
| WFKnight | 0:9b3d4731edbb | 1264 | * Permits indications of a characteristic value with acknowledgment. |
| WFKnight | 0:9b3d4731edbb | 1265 | */ |
| WFKnight | 0:9b3d4731edbb | 1266 | BLE_GATT_CHAR_PROPERTIES_INDICATE = 0x20, |
| WFKnight | 0:9b3d4731edbb | 1267 | |
| WFKnight | 0:9b3d4731edbb | 1268 | /** |
| WFKnight | 0:9b3d4731edbb | 1269 | * Permits signed writes to the characteristic value. |
| WFKnight | 0:9b3d4731edbb | 1270 | */ |
| WFKnight | 0:9b3d4731edbb | 1271 | BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES = 0x40, |
| WFKnight | 0:9b3d4731edbb | 1272 | |
| WFKnight | 0:9b3d4731edbb | 1273 | /** |
| WFKnight | 0:9b3d4731edbb | 1274 | * The Characteristic Extended Properties descriptor |
| WFKnight | 0:9b3d4731edbb | 1275 | * defines additional characteristic properties. |
| WFKnight | 0:9b3d4731edbb | 1276 | */ |
| WFKnight | 0:9b3d4731edbb | 1277 | BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES = 0x80 |
| WFKnight | 0:9b3d4731edbb | 1278 | }; |
| WFKnight | 0:9b3d4731edbb | 1279 | |
| WFKnight | 0:9b3d4731edbb | 1280 | /** |
| WFKnight | 0:9b3d4731edbb | 1281 | * Indicates if the properties has at least one of the writable flags. |
| WFKnight | 0:9b3d4731edbb | 1282 | * |
| WFKnight | 0:9b3d4731edbb | 1283 | * @param[in] properties The properties to inspect. |
| WFKnight | 0:9b3d4731edbb | 1284 | * |
| WFKnight | 0:9b3d4731edbb | 1285 | * @return True if the properties set at least one of the writable flags and |
| WFKnight | 0:9b3d4731edbb | 1286 | * false otherwise. |
| WFKnight | 0:9b3d4731edbb | 1287 | */ |
| WFKnight | 0:9b3d4731edbb | 1288 | static bool isWritable(uint8_t properties) |
| WFKnight | 0:9b3d4731edbb | 1289 | { |
| WFKnight | 0:9b3d4731edbb | 1290 | const uint8_t writable = |
| WFKnight | 0:9b3d4731edbb | 1291 | BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | |
| WFKnight | 0:9b3d4731edbb | 1292 | BLE_GATT_CHAR_PROPERTIES_WRITE | |
| WFKnight | 0:9b3d4731edbb | 1293 | BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES; |
| WFKnight | 0:9b3d4731edbb | 1294 | |
| WFKnight | 0:9b3d4731edbb | 1295 | return properties & writable; |
| WFKnight | 0:9b3d4731edbb | 1296 | } |
| WFKnight | 0:9b3d4731edbb | 1297 | |
| WFKnight | 0:9b3d4731edbb | 1298 | /** |
| WFKnight | 0:9b3d4731edbb | 1299 | * Indicates if the properties is readable. |
| WFKnight | 0:9b3d4731edbb | 1300 | * |
| WFKnight | 0:9b3d4731edbb | 1301 | * @param[in] properties The properties to inspect. |
| WFKnight | 0:9b3d4731edbb | 1302 | * |
| WFKnight | 0:9b3d4731edbb | 1303 | * @return True if the properties has its readable flag set and false |
| WFKnight | 0:9b3d4731edbb | 1304 | * otherwise. |
| WFKnight | 0:9b3d4731edbb | 1305 | */ |
| WFKnight | 0:9b3d4731edbb | 1306 | static bool isReadable(uint8_t properties) |
| WFKnight | 0:9b3d4731edbb | 1307 | { |
| WFKnight | 0:9b3d4731edbb | 1308 | const uint8_t readable = BLE_GATT_CHAR_PROPERTIES_READ; |
| WFKnight | 0:9b3d4731edbb | 1309 | return properties & readable; |
| WFKnight | 0:9b3d4731edbb | 1310 | } |
| WFKnight | 0:9b3d4731edbb | 1311 | |
| WFKnight | 0:9b3d4731edbb | 1312 | /** |
| WFKnight | 0:9b3d4731edbb | 1313 | * Value of a Characteristic Presentation Format descriptor. |
| WFKnight | 0:9b3d4731edbb | 1314 | * |
| WFKnight | 0:9b3d4731edbb | 1315 | * Characteristic Presentation Format descriptor expresses the format of a |
| WFKnight | 0:9b3d4731edbb | 1316 | * characteristic value. |
| WFKnight | 0:9b3d4731edbb | 1317 | * |
| WFKnight | 0:9b3d4731edbb | 1318 | * @note See Bluetooth Specification 4.0 (Vol. 3), Part G, Section 3.3.3.5. |
| WFKnight | 0:9b3d4731edbb | 1319 | */ |
| WFKnight | 0:9b3d4731edbb | 1320 | struct PresentationFormat_t { |
| WFKnight | 0:9b3d4731edbb | 1321 | /** |
| WFKnight | 0:9b3d4731edbb | 1322 | * Format of the value. |
| WFKnight | 0:9b3d4731edbb | 1323 | */ |
| WFKnight | 0:9b3d4731edbb | 1324 | uint8_t gatt_format; |
| WFKnight | 0:9b3d4731edbb | 1325 | |
| WFKnight | 0:9b3d4731edbb | 1326 | /** |
| WFKnight | 0:9b3d4731edbb | 1327 | * Exponent for integer data types. |
| WFKnight | 0:9b3d4731edbb | 1328 | * |
| WFKnight | 0:9b3d4731edbb | 1329 | * Example: if Exponent = -3 and the char value is 3892, the actual |
| WFKnight | 0:9b3d4731edbb | 1330 | * value is 3.892 |
| WFKnight | 0:9b3d4731edbb | 1331 | */ |
| WFKnight | 0:9b3d4731edbb | 1332 | int8_t exponent; |
| WFKnight | 0:9b3d4731edbb | 1333 | |
| WFKnight | 0:9b3d4731edbb | 1334 | /** |
| WFKnight | 0:9b3d4731edbb | 1335 | * Unit of the characteristic value. |
| WFKnight | 0:9b3d4731edbb | 1336 | * |
| WFKnight | 0:9b3d4731edbb | 1337 | * It is a UUID from Bluetooth Assigned Numbers. |
| WFKnight | 0:9b3d4731edbb | 1338 | */ |
| WFKnight | 0:9b3d4731edbb | 1339 | uint16_t gatt_unit; |
| WFKnight | 0:9b3d4731edbb | 1340 | |
| WFKnight | 0:9b3d4731edbb | 1341 | /** |
| WFKnight | 0:9b3d4731edbb | 1342 | * Namespace of the description field. |
| WFKnight | 0:9b3d4731edbb | 1343 | * |
| WFKnight | 0:9b3d4731edbb | 1344 | * This field identifies the organization that is responsible for |
| WFKnight | 0:9b3d4731edbb | 1345 | * defining the enumerations for the description field. |
| WFKnight | 0:9b3d4731edbb | 1346 | * |
| WFKnight | 0:9b3d4731edbb | 1347 | * The namespace of the Bluetooth Body is 0x01. |
| WFKnight | 0:9b3d4731edbb | 1348 | */ |
| WFKnight | 0:9b3d4731edbb | 1349 | uint8_t gatt_namespace; |
| WFKnight | 0:9b3d4731edbb | 1350 | |
| WFKnight | 0:9b3d4731edbb | 1351 | /** |
| WFKnight | 0:9b3d4731edbb | 1352 | * Description. |
| WFKnight | 0:9b3d4731edbb | 1353 | * |
| WFKnight | 0:9b3d4731edbb | 1354 | * @note The value 0x0000 means unknown in the Bluetooth namespace. |
| WFKnight | 0:9b3d4731edbb | 1355 | */ |
| WFKnight | 0:9b3d4731edbb | 1356 | uint16_t gatt_nsdesc; |
| WFKnight | 0:9b3d4731edbb | 1357 | |
| WFKnight | 0:9b3d4731edbb | 1358 | }; |
| WFKnight | 0:9b3d4731edbb | 1359 | |
| WFKnight | 0:9b3d4731edbb | 1360 | /** |
| WFKnight | 0:9b3d4731edbb | 1361 | * Security level applied to GATT operations. |
| WFKnight | 0:9b3d4731edbb | 1362 | */ |
| WFKnight | 0:9b3d4731edbb | 1363 | typedef ble::att_security_requirement_t SecurityRequirement_t; |
| WFKnight | 0:9b3d4731edbb | 1364 | |
| WFKnight | 0:9b3d4731edbb | 1365 | /** |
| WFKnight | 0:9b3d4731edbb | 1366 | * @brief Constructs a new GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1367 | * |
| WFKnight | 0:9b3d4731edbb | 1368 | * @param[in] uuid The UUID of this characteristic. |
| WFKnight | 0:9b3d4731edbb | 1369 | * @param[in] valuePtr Memory buffer holding the initial value. The value is |
| WFKnight | 0:9b3d4731edbb | 1370 | * copied into the Bluetooth subsytem when the enclosing service is added. |
| WFKnight | 0:9b3d4731edbb | 1371 | * Thereafter, the stack maintains it internally. |
| WFKnight | 0:9b3d4731edbb | 1372 | * @param[in] len The length in bytes of this characteristic's value. |
| WFKnight | 0:9b3d4731edbb | 1373 | * @param[in] maxLen The capacity in bytes of the characteristic value |
| WFKnight | 0:9b3d4731edbb | 1374 | * buffer. |
| WFKnight | 0:9b3d4731edbb | 1375 | * @param[in] props An 8-bit field that contains the characteristic's |
| WFKnight | 0:9b3d4731edbb | 1376 | * properties. |
| WFKnight | 0:9b3d4731edbb | 1377 | * @param[in] descriptors A pointer to an array of descriptors to be included |
| WFKnight | 0:9b3d4731edbb | 1378 | * within this characteristic. The caller owns the memory for the descriptor |
| WFKnight | 0:9b3d4731edbb | 1379 | * array, which must remain valid at least until the enclosing service is |
| WFKnight | 0:9b3d4731edbb | 1380 | * added to the GATT table. |
| WFKnight | 0:9b3d4731edbb | 1381 | * @param[in] numDescriptors The number of descriptors presents in @p |
| WFKnight | 0:9b3d4731edbb | 1382 | * descriptors array. |
| WFKnight | 0:9b3d4731edbb | 1383 | * @param[in] hasVariableLen Flag that indicates if the attribute's value |
| WFKnight | 0:9b3d4731edbb | 1384 | * length can change throughout time. |
| WFKnight | 0:9b3d4731edbb | 1385 | * |
| WFKnight | 0:9b3d4731edbb | 1386 | * @note If valuePtr is NULL, length is equal to 0 and the characteristic |
| WFKnight | 0:9b3d4731edbb | 1387 | * is readable, then that particular characteristic may be considered |
| WFKnight | 0:9b3d4731edbb | 1388 | * optional and dropped while instantiating the service with the underlying |
| WFKnight | 0:9b3d4731edbb | 1389 | * BLE stack. |
| WFKnight | 0:9b3d4731edbb | 1390 | * |
| WFKnight | 0:9b3d4731edbb | 1391 | * @note A Client Characteristic Configuration Descriptor (CCCD) should not |
| WFKnight | 0:9b3d4731edbb | 1392 | * be allocated if either the notify or indicate flag in the @p props bit |
| WFKnight | 0:9b3d4731edbb | 1393 | * field; the underlying BLE stack handles it. |
| WFKnight | 0:9b3d4731edbb | 1394 | * |
| WFKnight | 0:9b3d4731edbb | 1395 | * @attention GattCharacteristic registered in a GattServer must remain |
| WFKnight | 0:9b3d4731edbb | 1396 | * valid for the lifetime of the GattServer. |
| WFKnight | 0:9b3d4731edbb | 1397 | */ |
| WFKnight | 0:9b3d4731edbb | 1398 | GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 1399 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 1400 | uint8_t *valuePtr = NULL, |
| WFKnight | 0:9b3d4731edbb | 1401 | uint16_t len = 0, |
| WFKnight | 0:9b3d4731edbb | 1402 | uint16_t maxLen = 0, |
| WFKnight | 0:9b3d4731edbb | 1403 | uint8_t props = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 1404 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 1405 | unsigned numDescriptors = 0, |
| WFKnight | 0:9b3d4731edbb | 1406 | bool hasVariableLen = true |
| WFKnight | 0:9b3d4731edbb | 1407 | ) : _valueAttribute(uuid, valuePtr, len, maxLen, hasVariableLen), |
| WFKnight | 0:9b3d4731edbb | 1408 | _properties(props), |
| WFKnight | 0:9b3d4731edbb | 1409 | _descriptors(descriptors), |
| WFKnight | 0:9b3d4731edbb | 1410 | _descriptorCount(numDescriptors), |
| WFKnight | 0:9b3d4731edbb | 1411 | readAuthorizationCallback(), |
| WFKnight | 0:9b3d4731edbb | 1412 | writeAuthorizationCallback(), |
| WFKnight | 0:9b3d4731edbb | 1413 | _update_security(SecurityRequirement_t::NONE) { |
| WFKnight | 0:9b3d4731edbb | 1414 | _valueAttribute.allowWrite(isWritable(_properties)); |
| WFKnight | 0:9b3d4731edbb | 1415 | _valueAttribute.allowRead(isReadable(_properties)); |
| WFKnight | 0:9b3d4731edbb | 1416 | |
| WFKnight | 0:9b3d4731edbb | 1417 | // signed writes requires at least an unauthenticated CSRK or an |
| WFKnight | 0:9b3d4731edbb | 1418 | // unauthenticated ltk if the link is encrypted. |
| WFKnight | 0:9b3d4731edbb | 1419 | if (_properties & BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES) { |
| WFKnight | 0:9b3d4731edbb | 1420 | _valueAttribute.setWriteSecurityRequirement( |
| WFKnight | 0:9b3d4731edbb | 1421 | SecurityRequirement_t::UNAUTHENTICATED |
| WFKnight | 0:9b3d4731edbb | 1422 | ); |
| WFKnight | 0:9b3d4731edbb | 1423 | } |
| WFKnight | 0:9b3d4731edbb | 1424 | } |
| WFKnight | 0:9b3d4731edbb | 1425 | |
| WFKnight | 0:9b3d4731edbb | 1426 | public: |
| WFKnight | 0:9b3d4731edbb | 1427 | /** |
| WFKnight | 0:9b3d4731edbb | 1428 | * Set up the minimum security (mode and level) requirements for access to |
| WFKnight | 0:9b3d4731edbb | 1429 | * the characteristic's value attribute. |
| WFKnight | 0:9b3d4731edbb | 1430 | * |
| WFKnight | 0:9b3d4731edbb | 1431 | * @param[in] securityMode Can be one of encryption or signing, with or |
| WFKnight | 0:9b3d4731edbb | 1432 | * without protection for man in the middle attacks (MITM). |
| WFKnight | 0:9b3d4731edbb | 1433 | * |
| WFKnight | 0:9b3d4731edbb | 1434 | * @deprecated Fine grained security check has been added to with mbed OS |
| WFKnight | 0:9b3d4731edbb | 1435 | * 5.9. It is possible to set independently security requirements for read, |
| WFKnight | 0:9b3d4731edbb | 1436 | * write and update operations. In the meantime SecurityManager::SecurityMode_t |
| WFKnight | 0:9b3d4731edbb | 1437 | * is not used anymore to represent security requirements as it maps |
| WFKnight | 0:9b3d4731edbb | 1438 | * incorrectly the Bluetooth standard. |
| WFKnight | 0:9b3d4731edbb | 1439 | */ |
| WFKnight | 0:9b3d4731edbb | 1440 | MBED_DEPRECATED_SINCE( |
| WFKnight | 0:9b3d4731edbb | 1441 | "mbed-os-5.9", |
| WFKnight | 0:9b3d4731edbb | 1442 | "Use setWriteSecurityRequirements, setReadSecurityRequirements and " |
| WFKnight | 0:9b3d4731edbb | 1443 | "setUpdateSecurityRequirements" |
| WFKnight | 0:9b3d4731edbb | 1444 | ) |
| WFKnight | 0:9b3d4731edbb | 1445 | void requireSecurity(SecurityManager::SecurityMode_t securityMode) |
| WFKnight | 0:9b3d4731edbb | 1446 | { |
| WFKnight | 0:9b3d4731edbb | 1447 | SecurityRequirement_t sec_requirements = SecurityModeToAttSecurity(securityMode); |
| WFKnight | 0:9b3d4731edbb | 1448 | |
| WFKnight | 0:9b3d4731edbb | 1449 | _valueAttribute.setReadSecurityRequirement(sec_requirements); |
| WFKnight | 0:9b3d4731edbb | 1450 | _valueAttribute.setWriteSecurityRequirement(sec_requirements); |
| WFKnight | 0:9b3d4731edbb | 1451 | _update_security = sec_requirements.value(); |
| WFKnight | 0:9b3d4731edbb | 1452 | } |
| WFKnight | 0:9b3d4731edbb | 1453 | |
| WFKnight | 0:9b3d4731edbb | 1454 | /** |
| WFKnight | 0:9b3d4731edbb | 1455 | * Set all security requirements of the characteristic. |
| WFKnight | 0:9b3d4731edbb | 1456 | * |
| WFKnight | 0:9b3d4731edbb | 1457 | * @param read_security The security requirement of the read operations. |
| WFKnight | 0:9b3d4731edbb | 1458 | * @param write_security The security requirement of write operations. |
| WFKnight | 0:9b3d4731edbb | 1459 | * @param update_security The security requirement of update operations. |
| WFKnight | 0:9b3d4731edbb | 1460 | */ |
| WFKnight | 0:9b3d4731edbb | 1461 | void setSecurityRequirements( |
| WFKnight | 0:9b3d4731edbb | 1462 | SecurityRequirement_t read_security, |
| WFKnight | 0:9b3d4731edbb | 1463 | SecurityRequirement_t write_security, |
| WFKnight | 0:9b3d4731edbb | 1464 | SecurityRequirement_t update_security |
| WFKnight | 0:9b3d4731edbb | 1465 | ) { |
| WFKnight | 0:9b3d4731edbb | 1466 | setReadSecurityRequirement(read_security); |
| WFKnight | 0:9b3d4731edbb | 1467 | setWriteSecurityRequirement(write_security); |
| WFKnight | 0:9b3d4731edbb | 1468 | setUpdateSecurityRequirement(update_security); |
| WFKnight | 0:9b3d4731edbb | 1469 | } |
| WFKnight | 0:9b3d4731edbb | 1470 | |
| WFKnight | 0:9b3d4731edbb | 1471 | /** |
| WFKnight | 0:9b3d4731edbb | 1472 | * Set the security of the read operation. |
| WFKnight | 0:9b3d4731edbb | 1473 | * |
| WFKnight | 0:9b3d4731edbb | 1474 | * @param[in] security The security requirement of the read operation. |
| WFKnight | 0:9b3d4731edbb | 1475 | */ |
| WFKnight | 0:9b3d4731edbb | 1476 | void setReadSecurityRequirement(SecurityRequirement_t security) |
| WFKnight | 0:9b3d4731edbb | 1477 | { |
| WFKnight | 0:9b3d4731edbb | 1478 | _valueAttribute.setReadSecurityRequirement(security); |
| WFKnight | 0:9b3d4731edbb | 1479 | } |
| WFKnight | 0:9b3d4731edbb | 1480 | |
| WFKnight | 0:9b3d4731edbb | 1481 | /** |
| WFKnight | 0:9b3d4731edbb | 1482 | * Get the security requirement of the read operation. |
| WFKnight | 0:9b3d4731edbb | 1483 | * |
| WFKnight | 0:9b3d4731edbb | 1484 | * @return The security requirement of the read operation. |
| WFKnight | 0:9b3d4731edbb | 1485 | */ |
| WFKnight | 0:9b3d4731edbb | 1486 | SecurityRequirement_t getReadSecurityRequirement() const |
| WFKnight | 0:9b3d4731edbb | 1487 | { |
| WFKnight | 0:9b3d4731edbb | 1488 | return _valueAttribute.getReadSecurityRequirement(); |
| WFKnight | 0:9b3d4731edbb | 1489 | } |
| WFKnight | 0:9b3d4731edbb | 1490 | |
| WFKnight | 0:9b3d4731edbb | 1491 | /** |
| WFKnight | 0:9b3d4731edbb | 1492 | * Set the security requirement of the write operations. |
| WFKnight | 0:9b3d4731edbb | 1493 | * |
| WFKnight | 0:9b3d4731edbb | 1494 | * @note If the signed write flag is set in the characteristic properties |
| WFKnight | 0:9b3d4731edbb | 1495 | * then the security requirement applied to write operation must be either |
| WFKnight | 0:9b3d4731edbb | 1496 | * AUTHENTICATED or UNAUTHENTICATED. Security requirements NONE and |
| WFKnight | 0:9b3d4731edbb | 1497 | * SC_AUTHENTICATED are not applicable to signing operation. |
| WFKnight | 0:9b3d4731edbb | 1498 | * |
| WFKnight | 0:9b3d4731edbb | 1499 | * @param[in] security The security requirement of write operations. |
| WFKnight | 0:9b3d4731edbb | 1500 | */ |
| WFKnight | 0:9b3d4731edbb | 1501 | void setWriteSecurityRequirement(SecurityRequirement_t security) |
| WFKnight | 0:9b3d4731edbb | 1502 | { |
| WFKnight | 0:9b3d4731edbb | 1503 | MBED_ASSERT( |
| WFKnight | 0:9b3d4731edbb | 1504 | ((_properties & BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES) && |
| WFKnight | 0:9b3d4731edbb | 1505 | ((security == SecurityRequirement_t::NONE) || |
| WFKnight | 0:9b3d4731edbb | 1506 | (security == SecurityRequirement_t::SC_AUTHENTICATED))) == false |
| WFKnight | 0:9b3d4731edbb | 1507 | ); |
| WFKnight | 0:9b3d4731edbb | 1508 | _valueAttribute.setWriteSecurityRequirement(security); |
| WFKnight | 0:9b3d4731edbb | 1509 | } |
| WFKnight | 0:9b3d4731edbb | 1510 | |
| WFKnight | 0:9b3d4731edbb | 1511 | /** |
| WFKnight | 0:9b3d4731edbb | 1512 | * Get the security requirement of write operations. |
| WFKnight | 0:9b3d4731edbb | 1513 | * |
| WFKnight | 0:9b3d4731edbb | 1514 | * @return The security requirement of write operations. |
| WFKnight | 0:9b3d4731edbb | 1515 | */ |
| WFKnight | 0:9b3d4731edbb | 1516 | SecurityRequirement_t getWriteSecurityRequirement() const |
| WFKnight | 0:9b3d4731edbb | 1517 | { |
| WFKnight | 0:9b3d4731edbb | 1518 | return _valueAttribute.getWriteSecurityRequirement(); |
| WFKnight | 0:9b3d4731edbb | 1519 | } |
| WFKnight | 0:9b3d4731edbb | 1520 | |
| WFKnight | 0:9b3d4731edbb | 1521 | /** |
| WFKnight | 0:9b3d4731edbb | 1522 | * Set the security requirement of update operations. |
| WFKnight | 0:9b3d4731edbb | 1523 | * |
| WFKnight | 0:9b3d4731edbb | 1524 | * @note This security requirement is also applied to the write operation of |
| WFKnight | 0:9b3d4731edbb | 1525 | * the Client Characteristic Configuration Descriptor. |
| WFKnight | 0:9b3d4731edbb | 1526 | * |
| WFKnight | 0:9b3d4731edbb | 1527 | * @param[in] security The security requirement that must be met to send |
| WFKnight | 0:9b3d4731edbb | 1528 | * updates and accept write of the CCCD. |
| WFKnight | 0:9b3d4731edbb | 1529 | */ |
| WFKnight | 0:9b3d4731edbb | 1530 | void setUpdateSecurityRequirement(SecurityRequirement_t security) |
| WFKnight | 0:9b3d4731edbb | 1531 | { |
| WFKnight | 0:9b3d4731edbb | 1532 | _update_security = security.value(); |
| WFKnight | 0:9b3d4731edbb | 1533 | } |
| WFKnight | 0:9b3d4731edbb | 1534 | |
| WFKnight | 0:9b3d4731edbb | 1535 | /** |
| WFKnight | 0:9b3d4731edbb | 1536 | * Get the security requirement of update operations. |
| WFKnight | 0:9b3d4731edbb | 1537 | * |
| WFKnight | 0:9b3d4731edbb | 1538 | * @note This security requirement is also applied to the write operation of |
| WFKnight | 0:9b3d4731edbb | 1539 | * the Client Characteristic Configuration Descriptor. |
| WFKnight | 0:9b3d4731edbb | 1540 | * |
| WFKnight | 0:9b3d4731edbb | 1541 | * @return The security requirement that must be met to send updates and |
| WFKnight | 0:9b3d4731edbb | 1542 | * accept write of the CCCD. |
| WFKnight | 0:9b3d4731edbb | 1543 | */ |
| WFKnight | 0:9b3d4731edbb | 1544 | SecurityRequirement_t getUpdateSecurityRequirement() const |
| WFKnight | 0:9b3d4731edbb | 1545 | { |
| WFKnight | 0:9b3d4731edbb | 1546 | return static_cast<SecurityRequirement_t::type>(_update_security); |
| WFKnight | 0:9b3d4731edbb | 1547 | } |
| WFKnight | 0:9b3d4731edbb | 1548 | |
| WFKnight | 0:9b3d4731edbb | 1549 | public: |
| WFKnight | 0:9b3d4731edbb | 1550 | /** |
| WFKnight | 0:9b3d4731edbb | 1551 | * Register a callback handling client's write requests or commands. |
| WFKnight | 0:9b3d4731edbb | 1552 | * |
| WFKnight | 0:9b3d4731edbb | 1553 | * The callback registered is invoked when the client attempts to write the |
| WFKnight | 0:9b3d4731edbb | 1554 | * characteristic value; the event handler can accept or reject the write |
| WFKnight | 0:9b3d4731edbb | 1555 | * request with the appropriate error code. |
| WFKnight | 0:9b3d4731edbb | 1556 | * |
| WFKnight | 0:9b3d4731edbb | 1557 | * @param[in] callback Event handler being registered. |
| WFKnight | 0:9b3d4731edbb | 1558 | */ |
| WFKnight | 0:9b3d4731edbb | 1559 | void setWriteAuthorizationCallback( |
| WFKnight | 0:9b3d4731edbb | 1560 | void (*callback)(GattWriteAuthCallbackParams *) |
| WFKnight | 0:9b3d4731edbb | 1561 | ) { |
| WFKnight | 0:9b3d4731edbb | 1562 | writeAuthorizationCallback.attach(callback); |
| WFKnight | 0:9b3d4731edbb | 1563 | } |
| WFKnight | 0:9b3d4731edbb | 1564 | |
| WFKnight | 0:9b3d4731edbb | 1565 | /** |
| WFKnight | 0:9b3d4731edbb | 1566 | * Register a callback handling client's write requests or commands. |
| WFKnight | 0:9b3d4731edbb | 1567 | * |
| WFKnight | 0:9b3d4731edbb | 1568 | * The callback registered is invoked when the client attempts to write the |
| WFKnight | 0:9b3d4731edbb | 1569 | * characteristic value; the event handler can accept or reject the write |
| WFKnight | 0:9b3d4731edbb | 1570 | * request with the appropriate error code. |
| WFKnight | 0:9b3d4731edbb | 1571 | * |
| WFKnight | 0:9b3d4731edbb | 1572 | * @param[in] object Pointer to the object of a class defining the event |
| WFKnight | 0:9b3d4731edbb | 1573 | * handler (@p member). It must remain valid for the lifetime of the |
| WFKnight | 0:9b3d4731edbb | 1574 | * GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1575 | * @param[in] member The member function that handles the write event. |
| WFKnight | 0:9b3d4731edbb | 1576 | */ |
| WFKnight | 0:9b3d4731edbb | 1577 | template <typename T> |
| WFKnight | 0:9b3d4731edbb | 1578 | void setWriteAuthorizationCallback( |
| WFKnight | 0:9b3d4731edbb | 1579 | T *object, |
| WFKnight | 0:9b3d4731edbb | 1580 | void (T::*member)(GattWriteAuthCallbackParams *) |
| WFKnight | 0:9b3d4731edbb | 1581 | ) { |
| WFKnight | 0:9b3d4731edbb | 1582 | writeAuthorizationCallback.attach(object, member); |
| WFKnight | 0:9b3d4731edbb | 1583 | } |
| WFKnight | 0:9b3d4731edbb | 1584 | |
| WFKnight | 0:9b3d4731edbb | 1585 | /** |
| WFKnight | 0:9b3d4731edbb | 1586 | * Register the read requests event handler. |
| WFKnight | 0:9b3d4731edbb | 1587 | * |
| WFKnight | 0:9b3d4731edbb | 1588 | * The callback registered is invoked when the client attempts to read the |
| WFKnight | 0:9b3d4731edbb | 1589 | * characteristic value; the event handler can accept or reject the read |
| WFKnight | 0:9b3d4731edbb | 1590 | * request with the appropriate error code. It can also set specific outgoing |
| WFKnight | 0:9b3d4731edbb | 1591 | * data. |
| WFKnight | 0:9b3d4731edbb | 1592 | * |
| WFKnight | 0:9b3d4731edbb | 1593 | * @param[in] callback Event handler being registered. |
| WFKnight | 0:9b3d4731edbb | 1594 | */ |
| WFKnight | 0:9b3d4731edbb | 1595 | void setReadAuthorizationCallback( |
| WFKnight | 0:9b3d4731edbb | 1596 | void (*callback)(GattReadAuthCallbackParams *) |
| WFKnight | 0:9b3d4731edbb | 1597 | ) { |
| WFKnight | 0:9b3d4731edbb | 1598 | readAuthorizationCallback.attach(callback); |
| WFKnight | 0:9b3d4731edbb | 1599 | } |
| WFKnight | 0:9b3d4731edbb | 1600 | |
| WFKnight | 0:9b3d4731edbb | 1601 | /** |
| WFKnight | 0:9b3d4731edbb | 1602 | * Register the read requests event handler. |
| WFKnight | 0:9b3d4731edbb | 1603 | * |
| WFKnight | 0:9b3d4731edbb | 1604 | * The callback registered is invoked when the client attempts to read the |
| WFKnight | 0:9b3d4731edbb | 1605 | * characteristic value; the event handler can accept or reject the read |
| WFKnight | 0:9b3d4731edbb | 1606 | * request with the appropriate error code. It can also set specific outgoing |
| WFKnight | 0:9b3d4731edbb | 1607 | * data. |
| WFKnight | 0:9b3d4731edbb | 1608 | * |
| WFKnight | 0:9b3d4731edbb | 1609 | * @param[in] object Pointer to the object of a class defining the event |
| WFKnight | 0:9b3d4731edbb | 1610 | * handler (@p member). It must remain valid for the lifetime of the |
| WFKnight | 0:9b3d4731edbb | 1611 | * GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1612 | * @param[in] member The member function that handles the read event. |
| WFKnight | 0:9b3d4731edbb | 1613 | */ |
| WFKnight | 0:9b3d4731edbb | 1614 | template <typename T> |
| WFKnight | 0:9b3d4731edbb | 1615 | void setReadAuthorizationCallback( |
| WFKnight | 0:9b3d4731edbb | 1616 | T *object, |
| WFKnight | 0:9b3d4731edbb | 1617 | void (T::*member)(GattReadAuthCallbackParams *) |
| WFKnight | 0:9b3d4731edbb | 1618 | ) { |
| WFKnight | 0:9b3d4731edbb | 1619 | readAuthorizationCallback.attach(object, member); |
| WFKnight | 0:9b3d4731edbb | 1620 | } |
| WFKnight | 0:9b3d4731edbb | 1621 | |
| WFKnight | 0:9b3d4731edbb | 1622 | /** |
| WFKnight | 0:9b3d4731edbb | 1623 | * Invoke the write authorization callback. |
| WFKnight | 0:9b3d4731edbb | 1624 | * |
| WFKnight | 0:9b3d4731edbb | 1625 | * This function is a helper that calls the registered write handler to |
| WFKnight | 0:9b3d4731edbb | 1626 | * determine the authorization reply for a write request. |
| WFKnight | 0:9b3d4731edbb | 1627 | * |
| WFKnight | 0:9b3d4731edbb | 1628 | * @attention This function is not meant to be called by user code. |
| WFKnight | 0:9b3d4731edbb | 1629 | * |
| WFKnight | 0:9b3d4731edbb | 1630 | * @param[in] params Context of the write-auth request; it contains an |
| WFKnight | 0:9b3d4731edbb | 1631 | * out-parameter used as a reply. |
| WFKnight | 0:9b3d4731edbb | 1632 | * |
| WFKnight | 0:9b3d4731edbb | 1633 | * @return A GattAuthCallbackReply_t value indicating whether authorization |
| WFKnight | 0:9b3d4731edbb | 1634 | * is granted. |
| WFKnight | 0:9b3d4731edbb | 1635 | */ |
| WFKnight | 0:9b3d4731edbb | 1636 | GattAuthCallbackReply_t authorizeWrite(GattWriteAuthCallbackParams *params) |
| WFKnight | 0:9b3d4731edbb | 1637 | { |
| WFKnight | 0:9b3d4731edbb | 1638 | if (!isWriteAuthorizationEnabled()) { |
| WFKnight | 0:9b3d4731edbb | 1639 | return AUTH_CALLBACK_REPLY_SUCCESS; |
| WFKnight | 0:9b3d4731edbb | 1640 | } |
| WFKnight | 0:9b3d4731edbb | 1641 | |
| WFKnight | 0:9b3d4731edbb | 1642 | /* Initialized to no-error by default. */ |
| WFKnight | 0:9b3d4731edbb | 1643 | params->authorizationReply = AUTH_CALLBACK_REPLY_SUCCESS; |
| WFKnight | 0:9b3d4731edbb | 1644 | writeAuthorizationCallback.call(params); |
| WFKnight | 0:9b3d4731edbb | 1645 | return params->authorizationReply; |
| WFKnight | 0:9b3d4731edbb | 1646 | } |
| WFKnight | 0:9b3d4731edbb | 1647 | |
| WFKnight | 0:9b3d4731edbb | 1648 | /** |
| WFKnight | 0:9b3d4731edbb | 1649 | * Invoke the read authorization callback. |
| WFKnight | 0:9b3d4731edbb | 1650 | * |
| WFKnight | 0:9b3d4731edbb | 1651 | * This function is a helper that calls the registered read handler to |
| WFKnight | 0:9b3d4731edbb | 1652 | * determine the authorization reply for a read request. |
| WFKnight | 0:9b3d4731edbb | 1653 | * |
| WFKnight | 0:9b3d4731edbb | 1654 | * @attention This function is not meant to be called by user code. |
| WFKnight | 0:9b3d4731edbb | 1655 | * |
| WFKnight | 0:9b3d4731edbb | 1656 | * @param[in] params Context of the read-auth request; it contains an |
| WFKnight | 0:9b3d4731edbb | 1657 | * out-parameter used as a reply and the handler can fill it with outgoing |
| WFKnight | 0:9b3d4731edbb | 1658 | * data. |
| WFKnight | 0:9b3d4731edbb | 1659 | * |
| WFKnight | 0:9b3d4731edbb | 1660 | * @return A GattAuthCallbackReply_t value indicating whether authorization |
| WFKnight | 0:9b3d4731edbb | 1661 | * is granted. |
| WFKnight | 0:9b3d4731edbb | 1662 | * |
| WFKnight | 0:9b3d4731edbb | 1663 | * @note If the read request is approved and params->data remains NULL, then |
| WFKnight | 0:9b3d4731edbb | 1664 | * the current characteristic value is used in the read response payload. |
| WFKnight | 0:9b3d4731edbb | 1665 | * |
| WFKnight | 0:9b3d4731edbb | 1666 | * @note If the read is approved, the event handler can specify an outgoing |
| WFKnight | 0:9b3d4731edbb | 1667 | * value directly with the help of the fields |
| WFKnight | 0:9b3d4731edbb | 1668 | * GattReadAuthCallbackParams::data and GattReadAuthCallbackParams::len. |
| WFKnight | 0:9b3d4731edbb | 1669 | */ |
| WFKnight | 0:9b3d4731edbb | 1670 | GattAuthCallbackReply_t authorizeRead(GattReadAuthCallbackParams *params) |
| WFKnight | 0:9b3d4731edbb | 1671 | { |
| WFKnight | 0:9b3d4731edbb | 1672 | if (!isReadAuthorizationEnabled()) { |
| WFKnight | 0:9b3d4731edbb | 1673 | return AUTH_CALLBACK_REPLY_SUCCESS; |
| WFKnight | 0:9b3d4731edbb | 1674 | } |
| WFKnight | 0:9b3d4731edbb | 1675 | |
| WFKnight | 0:9b3d4731edbb | 1676 | /* Initialized to no-error by default. */ |
| WFKnight | 0:9b3d4731edbb | 1677 | params->authorizationReply = AUTH_CALLBACK_REPLY_SUCCESS; |
| WFKnight | 0:9b3d4731edbb | 1678 | readAuthorizationCallback.call(params); |
| WFKnight | 0:9b3d4731edbb | 1679 | return params->authorizationReply; |
| WFKnight | 0:9b3d4731edbb | 1680 | } |
| WFKnight | 0:9b3d4731edbb | 1681 | |
| WFKnight | 0:9b3d4731edbb | 1682 | public: |
| WFKnight | 0:9b3d4731edbb | 1683 | /** |
| WFKnight | 0:9b3d4731edbb | 1684 | * Get the characteristic's value attribute. |
| WFKnight | 0:9b3d4731edbb | 1685 | * |
| WFKnight | 0:9b3d4731edbb | 1686 | * @return A reference to the characteristic's value attribute. |
| WFKnight | 0:9b3d4731edbb | 1687 | */ |
| WFKnight | 0:9b3d4731edbb | 1688 | GattAttribute& getValueAttribute() |
| WFKnight | 0:9b3d4731edbb | 1689 | { |
| WFKnight | 0:9b3d4731edbb | 1690 | return _valueAttribute; |
| WFKnight | 0:9b3d4731edbb | 1691 | } |
| WFKnight | 0:9b3d4731edbb | 1692 | |
| WFKnight | 0:9b3d4731edbb | 1693 | /** |
| WFKnight | 0:9b3d4731edbb | 1694 | * Get the characteristic's value attribute. |
| WFKnight | 0:9b3d4731edbb | 1695 | * |
| WFKnight | 0:9b3d4731edbb | 1696 | * @return A const reference to the characteristic's value attribute. |
| WFKnight | 0:9b3d4731edbb | 1697 | */ |
| WFKnight | 0:9b3d4731edbb | 1698 | const GattAttribute& getValueAttribute() const |
| WFKnight | 0:9b3d4731edbb | 1699 | { |
| WFKnight | 0:9b3d4731edbb | 1700 | return _valueAttribute; |
| WFKnight | 0:9b3d4731edbb | 1701 | } |
| WFKnight | 0:9b3d4731edbb | 1702 | |
| WFKnight | 0:9b3d4731edbb | 1703 | /** |
| WFKnight | 0:9b3d4731edbb | 1704 | * Get the characteristic's value attribute handle in the ATT table. |
| WFKnight | 0:9b3d4731edbb | 1705 | * |
| WFKnight | 0:9b3d4731edbb | 1706 | * @return The value attribute handle. |
| WFKnight | 0:9b3d4731edbb | 1707 | * |
| WFKnight | 0:9b3d4731edbb | 1708 | * @note The underlying BLE stack assigns the attribute handle when the |
| WFKnight | 0:9b3d4731edbb | 1709 | * enclosing service is added. |
| WFKnight | 0:9b3d4731edbb | 1710 | */ |
| WFKnight | 0:9b3d4731edbb | 1711 | GattAttribute::Handle_t getValueHandle(void) const |
| WFKnight | 0:9b3d4731edbb | 1712 | { |
| WFKnight | 0:9b3d4731edbb | 1713 | return getValueAttribute().getHandle(); |
| WFKnight | 0:9b3d4731edbb | 1714 | } |
| WFKnight | 0:9b3d4731edbb | 1715 | |
| WFKnight | 0:9b3d4731edbb | 1716 | /** |
| WFKnight | 0:9b3d4731edbb | 1717 | * Get the characteristic's properties. |
| WFKnight | 0:9b3d4731edbb | 1718 | * |
| WFKnight | 0:9b3d4731edbb | 1719 | * @note Refer to GattCharacteristic::Properties_t. |
| WFKnight | 0:9b3d4731edbb | 1720 | * |
| WFKnight | 0:9b3d4731edbb | 1721 | * @return The characteristic's properties. |
| WFKnight | 0:9b3d4731edbb | 1722 | */ |
| WFKnight | 0:9b3d4731edbb | 1723 | uint8_t getProperties(void) const |
| WFKnight | 0:9b3d4731edbb | 1724 | { |
| WFKnight | 0:9b3d4731edbb | 1725 | return _properties; |
| WFKnight | 0:9b3d4731edbb | 1726 | } |
| WFKnight | 0:9b3d4731edbb | 1727 | |
| WFKnight | 0:9b3d4731edbb | 1728 | /** |
| WFKnight | 0:9b3d4731edbb | 1729 | * Get the characteristic's required security. |
| WFKnight | 0:9b3d4731edbb | 1730 | * |
| WFKnight | 0:9b3d4731edbb | 1731 | * @return The characteristic's required security. |
| WFKnight | 0:9b3d4731edbb | 1732 | * |
| WFKnight | 0:9b3d4731edbb | 1733 | * @deprecated Fine grained security check has been added to with mbed OS |
| WFKnight | 0:9b3d4731edbb | 1734 | * 5.9. It is possible to set independently security requirements for read, |
| WFKnight | 0:9b3d4731edbb | 1735 | * write and update operations. In the meantime SecurityManager::SecurityMode_t |
| WFKnight | 0:9b3d4731edbb | 1736 | * is not used anymore to represent security requirements as it maps |
| WFKnight | 0:9b3d4731edbb | 1737 | * incorrectly the Bluetooth standard. |
| WFKnight | 0:9b3d4731edbb | 1738 | */ |
| WFKnight | 0:9b3d4731edbb | 1739 | MBED_DEPRECATED_SINCE( |
| WFKnight | 0:9b3d4731edbb | 1740 | "mbed-os-5.9", |
| WFKnight | 0:9b3d4731edbb | 1741 | "Use getWriteSecurityRequirements, getReadSecurityRequirements and " |
| WFKnight | 0:9b3d4731edbb | 1742 | "getUpdateSecurityRequirements" |
| WFKnight | 0:9b3d4731edbb | 1743 | ) |
| WFKnight | 0:9b3d4731edbb | 1744 | SecurityManager::SecurityMode_t getRequiredSecurity() const |
| WFKnight | 0:9b3d4731edbb | 1745 | { |
| WFKnight | 0:9b3d4731edbb | 1746 | SecurityRequirement_t max_sec = std::max( |
| WFKnight | 0:9b3d4731edbb | 1747 | std::max( |
| WFKnight | 0:9b3d4731edbb | 1748 | getReadSecurityRequirement(), |
| WFKnight | 0:9b3d4731edbb | 1749 | getWriteSecurityRequirement() |
| WFKnight | 0:9b3d4731edbb | 1750 | ), |
| WFKnight | 0:9b3d4731edbb | 1751 | getUpdateSecurityRequirement() |
| WFKnight | 0:9b3d4731edbb | 1752 | ); |
| WFKnight | 0:9b3d4731edbb | 1753 | |
| WFKnight | 0:9b3d4731edbb | 1754 | bool needs_signing = |
| WFKnight | 0:9b3d4731edbb | 1755 | _properties & BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES; |
| WFKnight | 0:9b3d4731edbb | 1756 | |
| WFKnight | 0:9b3d4731edbb | 1757 | switch(max_sec.value()) { |
| WFKnight | 0:9b3d4731edbb | 1758 | case SecurityRequirement_t::NONE: |
| WFKnight | 0:9b3d4731edbb | 1759 | MBED_ASSERT(needs_signing == false); |
| WFKnight | 0:9b3d4731edbb | 1760 | return SecurityManager::SECURITY_MODE_ENCRYPTION_OPEN_LINK; |
| WFKnight | 0:9b3d4731edbb | 1761 | |
| WFKnight | 0:9b3d4731edbb | 1762 | case SecurityRequirement_t::UNAUTHENTICATED: |
| WFKnight | 0:9b3d4731edbb | 1763 | return (needs_signing) ? |
| WFKnight | 0:9b3d4731edbb | 1764 | SecurityManager::SECURITY_MODE_SIGNED_NO_MITM : |
| WFKnight | 0:9b3d4731edbb | 1765 | SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM; |
| WFKnight | 0:9b3d4731edbb | 1766 | |
| WFKnight | 0:9b3d4731edbb | 1767 | case SecurityRequirement_t::AUTHENTICATED: |
| WFKnight | 0:9b3d4731edbb | 1768 | return (needs_signing) ? |
| WFKnight | 0:9b3d4731edbb | 1769 | SecurityManager::SECURITY_MODE_SIGNED_WITH_MITM : |
| WFKnight | 0:9b3d4731edbb | 1770 | SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM; |
| WFKnight | 0:9b3d4731edbb | 1771 | |
| WFKnight | 0:9b3d4731edbb | 1772 | case SecurityRequirement_t::SC_AUTHENTICATED: |
| WFKnight | 0:9b3d4731edbb | 1773 | MBED_ASSERT(needs_signing == false); |
| WFKnight | 0:9b3d4731edbb | 1774 | // fallback to encryption with MITM |
| WFKnight | 0:9b3d4731edbb | 1775 | return SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM; |
| WFKnight | 0:9b3d4731edbb | 1776 | default: |
| WFKnight | 0:9b3d4731edbb | 1777 | MBED_ASSERT(false); |
| WFKnight | 0:9b3d4731edbb | 1778 | return SecurityManager::SECURITY_MODE_NO_ACCESS; |
| WFKnight | 0:9b3d4731edbb | 1779 | } |
| WFKnight | 0:9b3d4731edbb | 1780 | } |
| WFKnight | 0:9b3d4731edbb | 1781 | |
| WFKnight | 0:9b3d4731edbb | 1782 | /** |
| WFKnight | 0:9b3d4731edbb | 1783 | * Get the total number of descriptors within this characteristic. |
| WFKnight | 0:9b3d4731edbb | 1784 | * |
| WFKnight | 0:9b3d4731edbb | 1785 | * @return The total number of descriptors. |
| WFKnight | 0:9b3d4731edbb | 1786 | */ |
| WFKnight | 0:9b3d4731edbb | 1787 | uint8_t getDescriptorCount(void) const |
| WFKnight | 0:9b3d4731edbb | 1788 | { |
| WFKnight | 0:9b3d4731edbb | 1789 | return _descriptorCount; |
| WFKnight | 0:9b3d4731edbb | 1790 | } |
| WFKnight | 0:9b3d4731edbb | 1791 | |
| WFKnight | 0:9b3d4731edbb | 1792 | /** |
| WFKnight | 0:9b3d4731edbb | 1793 | * Check whether read authorization is enabled. |
| WFKnight | 0:9b3d4731edbb | 1794 | * |
| WFKnight | 0:9b3d4731edbb | 1795 | * Read authorization is enabled when a read authorization event handler is |
| WFKnight | 0:9b3d4731edbb | 1796 | * set up. |
| WFKnight | 0:9b3d4731edbb | 1797 | * |
| WFKnight | 0:9b3d4731edbb | 1798 | * @return true if read authorization is enabled and false otherwise. |
| WFKnight | 0:9b3d4731edbb | 1799 | */ |
| WFKnight | 0:9b3d4731edbb | 1800 | bool isReadAuthorizationEnabled() const |
| WFKnight | 0:9b3d4731edbb | 1801 | { |
| WFKnight | 0:9b3d4731edbb | 1802 | return readAuthorizationCallback; |
| WFKnight | 0:9b3d4731edbb | 1803 | } |
| WFKnight | 0:9b3d4731edbb | 1804 | |
| WFKnight | 0:9b3d4731edbb | 1805 | /** |
| WFKnight | 0:9b3d4731edbb | 1806 | * Check whether write authorization is enabled. |
| WFKnight | 0:9b3d4731edbb | 1807 | * |
| WFKnight | 0:9b3d4731edbb | 1808 | * Write authorization is enabled when a write authorization event handler is |
| WFKnight | 0:9b3d4731edbb | 1809 | * set up. |
| WFKnight | 0:9b3d4731edbb | 1810 | * |
| WFKnight | 0:9b3d4731edbb | 1811 | * @return true if write authorization is enabled, false otherwise. |
| WFKnight | 0:9b3d4731edbb | 1812 | */ |
| WFKnight | 0:9b3d4731edbb | 1813 | bool isWriteAuthorizationEnabled() const |
| WFKnight | 0:9b3d4731edbb | 1814 | { |
| WFKnight | 0:9b3d4731edbb | 1815 | return writeAuthorizationCallback; |
| WFKnight | 0:9b3d4731edbb | 1816 | } |
| WFKnight | 0:9b3d4731edbb | 1817 | |
| WFKnight | 0:9b3d4731edbb | 1818 | /** |
| WFKnight | 0:9b3d4731edbb | 1819 | * Get this characteristic's descriptor at a specific index. |
| WFKnight | 0:9b3d4731edbb | 1820 | * |
| WFKnight | 0:9b3d4731edbb | 1821 | * @param[in] index The index of the descriptor to get. |
| WFKnight | 0:9b3d4731edbb | 1822 | * |
| WFKnight | 0:9b3d4731edbb | 1823 | * @return A pointer the requested descriptor if @p index is within the |
| WFKnight | 0:9b3d4731edbb | 1824 | * range of the descriptor array or NULL otherwise. |
| WFKnight | 0:9b3d4731edbb | 1825 | */ |
| WFKnight | 0:9b3d4731edbb | 1826 | GattAttribute *getDescriptor(uint8_t index) |
| WFKnight | 0:9b3d4731edbb | 1827 | { |
| WFKnight | 0:9b3d4731edbb | 1828 | if (index >= _descriptorCount) { |
| WFKnight | 0:9b3d4731edbb | 1829 | return NULL; |
| WFKnight | 0:9b3d4731edbb | 1830 | } |
| WFKnight | 0:9b3d4731edbb | 1831 | |
| WFKnight | 0:9b3d4731edbb | 1832 | return _descriptors[index]; |
| WFKnight | 0:9b3d4731edbb | 1833 | } |
| WFKnight | 0:9b3d4731edbb | 1834 | |
| WFKnight | 0:9b3d4731edbb | 1835 | private: |
| WFKnight | 0:9b3d4731edbb | 1836 | |
| WFKnight | 0:9b3d4731edbb | 1837 | /** |
| WFKnight | 0:9b3d4731edbb | 1838 | * Loosely convert a SecurityManager::SecurityMode_t into a |
| WFKnight | 0:9b3d4731edbb | 1839 | * SecurityRequirement_t. |
| WFKnight | 0:9b3d4731edbb | 1840 | * |
| WFKnight | 0:9b3d4731edbb | 1841 | * @param[in] mode The security mode to convert |
| WFKnight | 0:9b3d4731edbb | 1842 | * |
| WFKnight | 0:9b3d4731edbb | 1843 | * @return The security requirement equivalent to the security mode in input. |
| WFKnight | 0:9b3d4731edbb | 1844 | */ |
| WFKnight | 0:9b3d4731edbb | 1845 | SecurityRequirement_t SecurityModeToAttSecurity( |
| WFKnight | 0:9b3d4731edbb | 1846 | SecurityManager::SecurityMode_t mode |
| WFKnight | 0:9b3d4731edbb | 1847 | ) { |
| WFKnight | 0:9b3d4731edbb | 1848 | switch(mode) { |
| WFKnight | 0:9b3d4731edbb | 1849 | case SecurityManager::SECURITY_MODE_ENCRYPTION_OPEN_LINK: |
| WFKnight | 0:9b3d4731edbb | 1850 | case SecurityManager::SECURITY_MODE_NO_ACCESS: |
| WFKnight | 0:9b3d4731edbb | 1851 | // assuming access is managed by property and orthogonal to |
| WFKnight | 0:9b3d4731edbb | 1852 | // security mode ... |
| WFKnight | 0:9b3d4731edbb | 1853 | return SecurityRequirement_t::NONE; |
| WFKnight | 0:9b3d4731edbb | 1854 | |
| WFKnight | 0:9b3d4731edbb | 1855 | case SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM: |
| WFKnight | 0:9b3d4731edbb | 1856 | case SecurityManager::SECURITY_MODE_SIGNED_NO_MITM: |
| WFKnight | 0:9b3d4731edbb | 1857 | return SecurityRequirement_t::UNAUTHENTICATED; |
| WFKnight | 0:9b3d4731edbb | 1858 | |
| WFKnight | 0:9b3d4731edbb | 1859 | case SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM: |
| WFKnight | 0:9b3d4731edbb | 1860 | case SecurityManager::SECURITY_MODE_SIGNED_WITH_MITM: |
| WFKnight | 0:9b3d4731edbb | 1861 | return SecurityRequirement_t::AUTHENTICATED; |
| WFKnight | 0:9b3d4731edbb | 1862 | |
| WFKnight | 0:9b3d4731edbb | 1863 | default: |
| WFKnight | 0:9b3d4731edbb | 1864 | // should not happens; makes the compiler happy. |
| WFKnight | 0:9b3d4731edbb | 1865 | return SecurityRequirement_t::NONE; |
| WFKnight | 0:9b3d4731edbb | 1866 | } |
| WFKnight | 0:9b3d4731edbb | 1867 | } |
| WFKnight | 0:9b3d4731edbb | 1868 | |
| WFKnight | 0:9b3d4731edbb | 1869 | /** |
| WFKnight | 0:9b3d4731edbb | 1870 | * Attribute that contains the actual value of this characteristic. |
| WFKnight | 0:9b3d4731edbb | 1871 | */ |
| WFKnight | 0:9b3d4731edbb | 1872 | GattAttribute _valueAttribute; |
| WFKnight | 0:9b3d4731edbb | 1873 | |
| WFKnight | 0:9b3d4731edbb | 1874 | /** |
| WFKnight | 0:9b3d4731edbb | 1875 | * The characteristic's properties. Refer to |
| WFKnight | 0:9b3d4731edbb | 1876 | * GattCharacteristic::Properties_t. |
| WFKnight | 0:9b3d4731edbb | 1877 | */ |
| WFKnight | 0:9b3d4731edbb | 1878 | uint8_t _properties; |
| WFKnight | 0:9b3d4731edbb | 1879 | |
| WFKnight | 0:9b3d4731edbb | 1880 | /** |
| WFKnight | 0:9b3d4731edbb | 1881 | * The characteristic's descriptor attributes. |
| WFKnight | 0:9b3d4731edbb | 1882 | */ |
| WFKnight | 0:9b3d4731edbb | 1883 | GattAttribute **_descriptors; |
| WFKnight | 0:9b3d4731edbb | 1884 | |
| WFKnight | 0:9b3d4731edbb | 1885 | /** |
| WFKnight | 0:9b3d4731edbb | 1886 | * The number of descriptors in this characteristic. |
| WFKnight | 0:9b3d4731edbb | 1887 | */ |
| WFKnight | 0:9b3d4731edbb | 1888 | uint8_t _descriptorCount; |
| WFKnight | 0:9b3d4731edbb | 1889 | |
| WFKnight | 0:9b3d4731edbb | 1890 | /** |
| WFKnight | 0:9b3d4731edbb | 1891 | * The registered callback handler for read authorization reply. |
| WFKnight | 0:9b3d4731edbb | 1892 | */ |
| WFKnight | 0:9b3d4731edbb | 1893 | FunctionPointerWithContext<GattReadAuthCallbackParams *> |
| WFKnight | 0:9b3d4731edbb | 1894 | readAuthorizationCallback; |
| WFKnight | 0:9b3d4731edbb | 1895 | |
| WFKnight | 0:9b3d4731edbb | 1896 | /** |
| WFKnight | 0:9b3d4731edbb | 1897 | * The registered callback handler for write authorization reply. |
| WFKnight | 0:9b3d4731edbb | 1898 | */ |
| WFKnight | 0:9b3d4731edbb | 1899 | FunctionPointerWithContext<GattWriteAuthCallbackParams *> |
| WFKnight | 0:9b3d4731edbb | 1900 | writeAuthorizationCallback; |
| WFKnight | 0:9b3d4731edbb | 1901 | |
| WFKnight | 0:9b3d4731edbb | 1902 | /** |
| WFKnight | 0:9b3d4731edbb | 1903 | * Security requirements of update operations. |
| WFKnight | 0:9b3d4731edbb | 1904 | * |
| WFKnight | 0:9b3d4731edbb | 1905 | * The peer must meet the security requirement to enable, disable and |
| WFKnight | 0:9b3d4731edbb | 1906 | * receive updates |
| WFKnight | 0:9b3d4731edbb | 1907 | */ |
| WFKnight | 0:9b3d4731edbb | 1908 | uint8_t _update_security: SecurityRequirement_t::size; |
| WFKnight | 0:9b3d4731edbb | 1909 | |
| WFKnight | 0:9b3d4731edbb | 1910 | private: |
| WFKnight | 0:9b3d4731edbb | 1911 | /* Disallow copy and assignment. */ |
| WFKnight | 0:9b3d4731edbb | 1912 | GattCharacteristic(const GattCharacteristic &); |
| WFKnight | 0:9b3d4731edbb | 1913 | GattCharacteristic& operator=(const GattCharacteristic &); |
| WFKnight | 0:9b3d4731edbb | 1914 | }; |
| WFKnight | 0:9b3d4731edbb | 1915 | |
| WFKnight | 0:9b3d4731edbb | 1916 | /** |
| WFKnight | 0:9b3d4731edbb | 1917 | * Helper class that represents a read only GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1918 | */ |
| WFKnight | 0:9b3d4731edbb | 1919 | template <typename T> |
| WFKnight | 0:9b3d4731edbb | 1920 | class ReadOnlyGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 1921 | public: |
| WFKnight | 0:9b3d4731edbb | 1922 | /** |
| WFKnight | 0:9b3d4731edbb | 1923 | * Construct a ReadOnlyGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1924 | * |
| WFKnight | 0:9b3d4731edbb | 1925 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 1926 | * @param[in] valuePtr Pointer to the characteristic's initial value. The |
| WFKnight | 0:9b3d4731edbb | 1927 | * pointer is reinterpreted as a pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 1928 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 1929 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 1930 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_READ. |
| WFKnight | 0:9b3d4731edbb | 1931 | * @param[in] descriptors An array of pointers to descriptors to be added |
| WFKnight | 0:9b3d4731edbb | 1932 | * to the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 1933 | * @param[in] numDescriptors The total number of descriptors in @p |
| WFKnight | 0:9b3d4731edbb | 1934 | * descriptors. |
| WFKnight | 0:9b3d4731edbb | 1935 | * |
| WFKnight | 0:9b3d4731edbb | 1936 | * @note Instances of ReadOnlyGattCharacteristic have a fixed length |
| WFKnight | 0:9b3d4731edbb | 1937 | * attribute value that equals sizeof(T). For a variable length alternative, |
| WFKnight | 0:9b3d4731edbb | 1938 | * use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 1939 | */ |
| WFKnight | 0:9b3d4731edbb | 1940 | ReadOnlyGattCharacteristic<T>( |
| WFKnight | 0:9b3d4731edbb | 1941 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 1942 | T *valuePtr, |
| WFKnight | 0:9b3d4731edbb | 1943 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 1944 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 1945 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 1946 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 1947 | uuid, |
| WFKnight | 0:9b3d4731edbb | 1948 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 1949 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 1950 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 1951 | BLE_GATT_CHAR_PROPERTIES_READ | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 1952 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 1953 | numDescriptors, |
| WFKnight | 0:9b3d4731edbb | 1954 | false |
| WFKnight | 0:9b3d4731edbb | 1955 | ) { |
| WFKnight | 0:9b3d4731edbb | 1956 | } |
| WFKnight | 0:9b3d4731edbb | 1957 | }; |
| WFKnight | 0:9b3d4731edbb | 1958 | |
| WFKnight | 0:9b3d4731edbb | 1959 | /** |
| WFKnight | 0:9b3d4731edbb | 1960 | * Helper class that represents a write only GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1961 | */ |
| WFKnight | 0:9b3d4731edbb | 1962 | template <typename T> |
| WFKnight | 0:9b3d4731edbb | 1963 | class WriteOnlyGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 1964 | public: |
| WFKnight | 0:9b3d4731edbb | 1965 | /** |
| WFKnight | 0:9b3d4731edbb | 1966 | * Construct a WriteOnlyGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 1967 | * |
| WFKnight | 0:9b3d4731edbb | 1968 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 1969 | * @param[in] valuePtr Pointer to the characteristic's initial value. The |
| WFKnight | 0:9b3d4731edbb | 1970 | * pointer is reinterpreted as a pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 1971 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 1972 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 1973 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE. |
| WFKnight | 0:9b3d4731edbb | 1974 | * @param[in] descriptors An array of pointers to descriptors to be added to |
| WFKnight | 0:9b3d4731edbb | 1975 | * the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 1976 | * @param[in] numDescriptors The total number of descriptors in @p |
| WFKnight | 0:9b3d4731edbb | 1977 | * descriptors. |
| WFKnight | 0:9b3d4731edbb | 1978 | * |
| WFKnight | 0:9b3d4731edbb | 1979 | * @note Instances of WriteOnlyGattCharacteristic have variable length |
| WFKnight | 0:9b3d4731edbb | 1980 | * attribute value with maximum size equal to sizeof(T). For a fixed length |
| WFKnight | 0:9b3d4731edbb | 1981 | * alternative, use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 1982 | */ |
| WFKnight | 0:9b3d4731edbb | 1983 | WriteOnlyGattCharacteristic<T>( |
| WFKnight | 0:9b3d4731edbb | 1984 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 1985 | T *valuePtr, |
| WFKnight | 0:9b3d4731edbb | 1986 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 1987 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 1988 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 1989 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 1990 | uuid, |
| WFKnight | 0:9b3d4731edbb | 1991 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 1992 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 1993 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 1994 | BLE_GATT_CHAR_PROPERTIES_WRITE | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 1995 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 1996 | numDescriptors |
| WFKnight | 0:9b3d4731edbb | 1997 | ) { |
| WFKnight | 0:9b3d4731edbb | 1998 | } |
| WFKnight | 0:9b3d4731edbb | 1999 | }; |
| WFKnight | 0:9b3d4731edbb | 2000 | |
| WFKnight | 0:9b3d4731edbb | 2001 | /** |
| WFKnight | 0:9b3d4731edbb | 2002 | * Helper class that represents a readable and writable GattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 2003 | */ |
| WFKnight | 0:9b3d4731edbb | 2004 | template <typename T> |
| WFKnight | 0:9b3d4731edbb | 2005 | class ReadWriteGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 2006 | public: |
| WFKnight | 0:9b3d4731edbb | 2007 | /** |
| WFKnight | 0:9b3d4731edbb | 2008 | * Construct a ReadWriteGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 2009 | * |
| WFKnight | 0:9b3d4731edbb | 2010 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 2011 | * @param[in] valuePtr Pointer to the characteristic's initial value. The |
| WFKnight | 0:9b3d4731edbb | 2012 | * pointer is reinterpreted as a pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 2013 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 2014 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 2015 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE and |
| WFKnight | 0:9b3d4731edbb | 2016 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_READ. |
| WFKnight | 0:9b3d4731edbb | 2017 | * @param[in] descriptors An array of pointers to descriptors to be added to |
| WFKnight | 0:9b3d4731edbb | 2018 | * the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 2019 | * @param[in] numDescriptors The total number of descriptors in @p descriptors. |
| WFKnight | 0:9b3d4731edbb | 2020 | * |
| WFKnight | 0:9b3d4731edbb | 2021 | * @note Instances of ReadWriteGattCharacteristic have variable length |
| WFKnight | 0:9b3d4731edbb | 2022 | * attribute value with maximum size equal to sizeof(T). For a fixed length |
| WFKnight | 0:9b3d4731edbb | 2023 | * alternative, use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 2024 | */ |
| WFKnight | 0:9b3d4731edbb | 2025 | ReadWriteGattCharacteristic<T>( |
| WFKnight | 0:9b3d4731edbb | 2026 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 2027 | T *valuePtr, |
| WFKnight | 0:9b3d4731edbb | 2028 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 2029 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 2030 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 2031 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 2032 | uuid, |
| WFKnight | 0:9b3d4731edbb | 2033 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 2034 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 2035 | sizeof(T), |
| WFKnight | 0:9b3d4731edbb | 2036 | BLE_GATT_CHAR_PROPERTIES_READ | BLE_GATT_CHAR_PROPERTIES_WRITE | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 2037 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 2038 | numDescriptors |
| WFKnight | 0:9b3d4731edbb | 2039 | ) { |
| WFKnight | 0:9b3d4731edbb | 2040 | } |
| WFKnight | 0:9b3d4731edbb | 2041 | }; |
| WFKnight | 0:9b3d4731edbb | 2042 | |
| WFKnight | 0:9b3d4731edbb | 2043 | /** |
| WFKnight | 0:9b3d4731edbb | 2044 | * Helper class that represents a write-only GattCharacteristic with an array |
| WFKnight | 0:9b3d4731edbb | 2045 | * value. |
| WFKnight | 0:9b3d4731edbb | 2046 | */ |
| WFKnight | 0:9b3d4731edbb | 2047 | template <typename T, unsigned NUM_ELEMENTS> |
| WFKnight | 0:9b3d4731edbb | 2048 | class WriteOnlyArrayGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 2049 | public: |
| WFKnight | 0:9b3d4731edbb | 2050 | /** |
| WFKnight | 0:9b3d4731edbb | 2051 | * Construct a WriteOnlyGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 2052 | * |
| WFKnight | 0:9b3d4731edbb | 2053 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 2054 | * @param[in] valuePtr Pointer to an array of length NUM_ELEMENTS containing |
| WFKnight | 0:9b3d4731edbb | 2055 | * the characteristic's initial value. The pointer is reinterpreted as a |
| WFKnight | 0:9b3d4731edbb | 2056 | * pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 2057 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 2058 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 2059 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE. |
| WFKnight | 0:9b3d4731edbb | 2060 | * @param[in] descriptors An array of pointers to descriptors to be added to |
| WFKnight | 0:9b3d4731edbb | 2061 | * the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 2062 | * @param[in] numDescriptors The total number of descriptors in @p descriptors. |
| WFKnight | 0:9b3d4731edbb | 2063 | * |
| WFKnight | 0:9b3d4731edbb | 2064 | * @note Instances of WriteOnlyGattCharacteristic have variable length |
| WFKnight | 0:9b3d4731edbb | 2065 | * attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS. |
| WFKnight | 0:9b3d4731edbb | 2066 | * For a fixed length alternative, use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 2067 | */ |
| WFKnight | 0:9b3d4731edbb | 2068 | WriteOnlyArrayGattCharacteristic<T, NUM_ELEMENTS>( |
| WFKnight | 0:9b3d4731edbb | 2069 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 2070 | T valuePtr[NUM_ELEMENTS], |
| WFKnight | 0:9b3d4731edbb | 2071 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 2072 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 2073 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 2074 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 2075 | uuid, |
| WFKnight | 0:9b3d4731edbb | 2076 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 2077 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2078 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2079 | BLE_GATT_CHAR_PROPERTIES_WRITE | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 2080 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 2081 | numDescriptors |
| WFKnight | 0:9b3d4731edbb | 2082 | ) { |
| WFKnight | 0:9b3d4731edbb | 2083 | } |
| WFKnight | 0:9b3d4731edbb | 2084 | }; |
| WFKnight | 0:9b3d4731edbb | 2085 | |
| WFKnight | 0:9b3d4731edbb | 2086 | /** |
| WFKnight | 0:9b3d4731edbb | 2087 | * Helper class that represents a read-only GattCharacteristic with an array |
| WFKnight | 0:9b3d4731edbb | 2088 | * value. |
| WFKnight | 0:9b3d4731edbb | 2089 | */ |
| WFKnight | 0:9b3d4731edbb | 2090 | template <typename T, unsigned NUM_ELEMENTS> |
| WFKnight | 0:9b3d4731edbb | 2091 | class ReadOnlyArrayGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 2092 | public: |
| WFKnight | 0:9b3d4731edbb | 2093 | /** |
| WFKnight | 0:9b3d4731edbb | 2094 | * Construct a ReadOnlyGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 2095 | * |
| WFKnight | 0:9b3d4731edbb | 2096 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 2097 | * @param[in] valuePtr Pointer to an array of length NUM_ELEMENTS containing |
| WFKnight | 0:9b3d4731edbb | 2098 | * the characteristic's initial value. The pointer is reinterpreted as a |
| WFKnight | 0:9b3d4731edbb | 2099 | * pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 2100 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 2101 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 2102 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_READ. |
| WFKnight | 0:9b3d4731edbb | 2103 | * @param[in] descriptors An array of pointers to descriptors to be added to |
| WFKnight | 0:9b3d4731edbb | 2104 | * the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 2105 | * @param[in] numDescriptors The total number of descriptors in @p |
| WFKnight | 0:9b3d4731edbb | 2106 | * descriptors. |
| WFKnight | 0:9b3d4731edbb | 2107 | * |
| WFKnight | 0:9b3d4731edbb | 2108 | * @note Instances of ReadOnlyGattCharacteristic have fixed length |
| WFKnight | 0:9b3d4731edbb | 2109 | * attribute value that equals sizeof(T) * NUM_ELEMENTS. For a variable |
| WFKnight | 0:9b3d4731edbb | 2110 | * length alternative, use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 2111 | */ |
| WFKnight | 0:9b3d4731edbb | 2112 | ReadOnlyArrayGattCharacteristic<T, NUM_ELEMENTS>( |
| WFKnight | 0:9b3d4731edbb | 2113 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 2114 | T valuePtr[NUM_ELEMENTS], |
| WFKnight | 0:9b3d4731edbb | 2115 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 2116 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 2117 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 2118 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 2119 | uuid, |
| WFKnight | 0:9b3d4731edbb | 2120 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 2121 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2122 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2123 | BLE_GATT_CHAR_PROPERTIES_READ | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 2124 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 2125 | numDescriptors, |
| WFKnight | 0:9b3d4731edbb | 2126 | false |
| WFKnight | 0:9b3d4731edbb | 2127 | ) { |
| WFKnight | 0:9b3d4731edbb | 2128 | } |
| WFKnight | 0:9b3d4731edbb | 2129 | }; |
| WFKnight | 0:9b3d4731edbb | 2130 | |
| WFKnight | 0:9b3d4731edbb | 2131 | /** |
| WFKnight | 0:9b3d4731edbb | 2132 | * Helper class that represents a readable and writable GattCharacteristic with |
| WFKnight | 0:9b3d4731edbb | 2133 | * an array value. |
| WFKnight | 0:9b3d4731edbb | 2134 | */ |
| WFKnight | 0:9b3d4731edbb | 2135 | template <typename T, unsigned NUM_ELEMENTS> |
| WFKnight | 0:9b3d4731edbb | 2136 | class ReadWriteArrayGattCharacteristic : public GattCharacteristic { |
| WFKnight | 0:9b3d4731edbb | 2137 | public: |
| WFKnight | 0:9b3d4731edbb | 2138 | /** |
| WFKnight | 0:9b3d4731edbb | 2139 | * Construct a ReadWriteGattCharacteristic. |
| WFKnight | 0:9b3d4731edbb | 2140 | * |
| WFKnight | 0:9b3d4731edbb | 2141 | * @param[in] uuid The characteristic's UUID. |
| WFKnight | 0:9b3d4731edbb | 2142 | * @param[in] valuePtr Pointer to an array of length NUM_ELEMENTS containing |
| WFKnight | 0:9b3d4731edbb | 2143 | * the characteristic's initial value. The pointer is reinterpreted as a |
| WFKnight | 0:9b3d4731edbb | 2144 | * pointer to an uint8_t buffer. |
| WFKnight | 0:9b3d4731edbb | 2145 | * @param[in] additionalProperties Additional characteristic properties. By |
| WFKnight | 0:9b3d4731edbb | 2146 | * default, the properties are set to |
| WFKnight | 0:9b3d4731edbb | 2147 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_WRITE | |
| WFKnight | 0:9b3d4731edbb | 2148 | * Properties_t::BLE_GATT_CHAR_PROPERTIES_READ. |
| WFKnight | 0:9b3d4731edbb | 2149 | * @param[in] descriptors An array of pointers to descriptors to be added to |
| WFKnight | 0:9b3d4731edbb | 2150 | * the new characteristic. |
| WFKnight | 0:9b3d4731edbb | 2151 | * @param[in] numDescriptors The total number of descriptors in @p descriptors. |
| WFKnight | 0:9b3d4731edbb | 2152 | * |
| WFKnight | 0:9b3d4731edbb | 2153 | * @note Instances of ReadWriteGattCharacteristic have variable length |
| WFKnight | 0:9b3d4731edbb | 2154 | * attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS. |
| WFKnight | 0:9b3d4731edbb | 2155 | * For a fixed length alternative, use GattCharacteristic directly. |
| WFKnight | 0:9b3d4731edbb | 2156 | */ |
| WFKnight | 0:9b3d4731edbb | 2157 | ReadWriteArrayGattCharacteristic<T, NUM_ELEMENTS>( |
| WFKnight | 0:9b3d4731edbb | 2158 | const UUID &uuid, |
| WFKnight | 0:9b3d4731edbb | 2159 | T valuePtr[NUM_ELEMENTS], |
| WFKnight | 0:9b3d4731edbb | 2160 | uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, |
| WFKnight | 0:9b3d4731edbb | 2161 | GattAttribute *descriptors[] = NULL, |
| WFKnight | 0:9b3d4731edbb | 2162 | unsigned numDescriptors = 0 |
| WFKnight | 0:9b3d4731edbb | 2163 | ) : GattCharacteristic( |
| WFKnight | 0:9b3d4731edbb | 2164 | uuid, |
| WFKnight | 0:9b3d4731edbb | 2165 | reinterpret_cast<uint8_t *>(valuePtr), |
| WFKnight | 0:9b3d4731edbb | 2166 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2167 | sizeof(T) * NUM_ELEMENTS, |
| WFKnight | 0:9b3d4731edbb | 2168 | BLE_GATT_CHAR_PROPERTIES_READ | BLE_GATT_CHAR_PROPERTIES_WRITE | additionalProperties, |
| WFKnight | 0:9b3d4731edbb | 2169 | descriptors, |
| WFKnight | 0:9b3d4731edbb | 2170 | numDescriptors |
| WFKnight | 0:9b3d4731edbb | 2171 | ) { |
| WFKnight | 0:9b3d4731edbb | 2172 | } |
| WFKnight | 0:9b3d4731edbb | 2173 | }; |
| WFKnight | 0:9b3d4731edbb | 2174 | |
| WFKnight | 0:9b3d4731edbb | 2175 | /** |
| WFKnight | 0:9b3d4731edbb | 2176 | * @} |
| WFKnight | 0:9b3d4731edbb | 2177 | * @} |
| WFKnight | 0:9b3d4731edbb | 2178 | * @} |
| WFKnight | 0:9b3d4731edbb | 2179 | */ |
| WFKnight | 0:9b3d4731edbb | 2180 | |
| WFKnight | 0:9b3d4731edbb | 2181 | #endif /* ifndef __GATT_CHARACTERISTIC_H__ */ |