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