mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

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