takashi kadono / Mbed OS Nucleo_446

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

Who changed what in which revision?

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