1 /* 2 * Copyright (c) 2021 Chipsea Technologies (Shenzhen) Corp., Ltd. All rights reserved. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef _HAL_ATT_H 16 #define _HAL_ATT_H 17 18 #include <stdint.h> 19 20 /// Macro used to convert CPU integer define to LSB first 16-bits UUID 21 #define ATT_UUID_16(uuid) (uuid) 22 23 /// Invalid attribute handle 24 #define ATT_INVALID_HDL (0x0000) 25 /// Invalid attribute idx (used for profiles) 26 #define ATT_INVALID_IDX (0xff) 27 28 #define ATT_1ST_REQ_START_HDL 0x0001 29 #define ATT_1ST_REQ_END_HDL 0xFFFF 30 31 /// Maximum possible attribute handle 32 #define ATT_MAX_ATTR_HDL ATT_1ST_REQ_END_HDL 33 34 /// Offset of value in signed PDU 35 #define ATT_SIGNED_PDU_VAL_OFFSET 0x03 36 37 /// Attribute Features 38 #define ATT_SERVER_CONFIG 0x0001 39 #define ATT_SERVICE_DISC 0x0002 40 #define ATT_RELATIONSHIP_DISC 0x0004 41 #define ATT_CHAR_DISC 0x0008 42 #define ATT_CHAR_DESC_DISC 0x0010 43 #define ATT_RD_CHAR_VALUE 0x0020 44 #define ATT_WR_CHAR_VALUE 0x0040 45 #define ATT_NOTIF_CHAR_VALUE 0x0080 46 #define ATT_IND_CHAR_VALUE 0x0100 47 #define ATT_RD_CHAR_DESC 0x0200 48 #define ATT_WR_CHAR_DESC 0x0400 49 50 /// Length, number, offset defines 51 #define ATT_SVC_VALUE_MAX_LEN 0x0030 52 #define ATT_CHAR_NAME_MAX_LEN 0x0030 53 #define ATT_UUID_16_LEN 0x0002 54 #define ATT_UUID_32_LEN 0x0004 55 #define ATT_UUID_128_LEN 0x0010 56 57 /// offset - l2cap header and ATT code 58 #define ATT_PDU_DATA_OFFSET 0x05 59 60 /// Characteristic Properties Bit 61 #define ATT_CHAR_PROP_BCAST 0x01 62 #define ATT_CHAR_PROP_RD 0x02 63 #define ATT_CHAR_PROP_WR_NO_RESP 0x04 64 #define ATT_CHAR_PROP_WR 0x08 65 #define ATT_CHAR_PROP_NTF 0x10 66 #define ATT_CHAR_PROP_IND 0x20 67 #define ATT_CHAR_PROP_AUTH 0x40 68 #define ATT_CHAR_PROP_EXT_PROP 0x80 69 /// Invalid Attribute Handle 70 #define ATT_INVALID_SEARCH_HANDLE 0x0000 71 #define ATT_INVALID_HANDLE 0x0000 72 /// Read Information Request 73 #define ATT_UUID_FILTER_0 0x00 74 #define ATT_UUID_FILTER_2 0x02 75 #define ATT_UUID_FILTER_16 0x10 76 /// Read Information Response 77 #define ATT_FORMAT_LEN 0x0001 78 #define ATT_FORMAT_16BIT_UUID 0x01 79 #define ATT_FORMAT_128BIT_UUID 0x02 80 /// For No fix length PDU 81 #define ATT_HANDLE_LEN 0x0002 82 #define ATT_EACHLEN_LEN 0x0001 83 #define ATT_PROP_LEN 0x0001 84 #define ATT_CODE_LEN 0x0001 85 #define ATT_CODE_AND_DATA_LEN 0x0002 86 #define ATT_CODE_AND_HANDLE_LEN 0x0003 87 #define ATT_CODE_AND_HANDLE_LEN_AND_OFFSET 0x0005 88 #define ATT_SIGNATURE_LEN 0x0C 89 90 /// extended characteristics 91 #define ATT_EXT_RELIABLE_WRITE 0x0001 92 #define ATT_EXT_WRITABLE_AUX 0x0002 93 #define ATT_EXT_RFU 0xFFFC 94 95 /// PDU size for error response 96 #define ATT_ERROR_RESP_LEN 0x05 97 98 /// Offset of value in signed PDU 99 #define ATT_SIGNED_PDU_VAL_OFFSET 0x03 100 101 /// Attribute operation code - Method (bit 5 - 0) 102 #define ATT_OPCODE_METHOD_MASK 0x3F 103 #define ATT_OPCODE_METHOD_LSB 0 104 /// Attribute operation code - Command Flag (bit 6) 105 #define ATT_OPCODE_CMD_FLAG_BIT 0x40 106 #define ATT_OPCODE_CMD_FLAG_POS 6 107 /// Attribute operation code - Authentication Signature Flag (bit 7) 108 #define ATT_OPCODE_AUTH_SIGNATURE_FLAG_BIT 0x80 109 #define ATT_OPCODE_AUTH_SIGNATURE_FLAG_POS 7 110 111 #define ATT_BT_UUID_128 {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, \ 112 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} 113 114 115 116 /* Attribute Specification Defines */ 117 118 /// Common 16-bit Universal Unique Identifier 119 enum { 120 ATT_INVALID_UUID = ATT_UUID_16(0x0000), 121 /*----------------- SERVICES ---------------------*/ 122 /// Generic Access Profile 123 ATT_SVC_GENERIC_ACCESS = ATT_UUID_16(0x1800), 124 /// Attribute Profile 125 ATT_SVC_GENERIC_ATTRIBUTE = ATT_UUID_16(0x1801), 126 /// Immediate alert Service 127 ATT_SVC_IMMEDIATE_ALERT = ATT_UUID_16(0x1802), 128 /// Link Loss Service 129 ATT_SVC_LINK_LOSS = ATT_UUID_16(0x1803), 130 /// Tx Power Service 131 ATT_SVC_TX_POWER = ATT_UUID_16(0x1804), 132 /// Current Time Service Service 133 ATT_SVC_CURRENT_TIME = ATT_UUID_16(0x1805), 134 /// Reference Time Update Service 135 ATT_SVC_REF_TIME_UPDATE = ATT_UUID_16(0x1806), 136 /// Next DST Change Service 137 ATT_SVC_NEXT_DST_CHANGE = ATT_UUID_16(0x1807), 138 /// Glucose Service 139 ATT_SVC_GLUCOSE = ATT_UUID_16(0x1808), 140 /// Health Thermometer Service 141 ATT_SVC_HEALTH_THERMOM = ATT_UUID_16(0x1809), 142 /// Device Information Service 143 ATT_SVC_DEVICE_INFO = ATT_UUID_16(0x180A), 144 /// Heart Rate Service 145 ATT_SVC_HEART_RATE = ATT_UUID_16(0x180D), 146 /// Phone Alert Status Service 147 ATT_SVC_PHONE_ALERT_STATUS = ATT_UUID_16(0x180E), 148 /// Battery Service 149 ATT_SVC_BATTERY_SERVICE = ATT_UUID_16(0x180F), 150 /// Blood Pressure Service 151 ATT_SVC_BLOOD_PRESSURE = ATT_UUID_16(0x1810), 152 /// Alert Notification Service 153 ATT_SVC_ALERT_NTF = ATT_UUID_16(0x1811), 154 /// HID Service 155 ATT_SVC_HID = ATT_UUID_16(0x1812), 156 /// Scan Parameters Service 157 ATT_SVC_SCAN_PARAMETERS = ATT_UUID_16(0x1813), 158 /// Running Speed and Cadence Service 159 ATT_SVC_RUNNING_SPEED_CADENCE = ATT_UUID_16(0x1814), 160 /// Cycling Speed and Cadence Service 161 ATT_SVC_CYCLING_SPEED_CADENCE = ATT_UUID_16(0x1816), 162 /// Cycling Power Service 163 ATT_SVC_CYCLING_POWER = ATT_UUID_16(0x1818), 164 /// Location and Navigation Service 165 ATT_SVC_LOCATION_AND_NAVIGATION = ATT_UUID_16(0x1819), 166 /// Environmental Sensing Service 167 ATT_SVC_ENVIRONMENTAL_SENSING = ATT_UUID_16(0x181A), 168 /// Body Composition Service 169 ATT_SVC_BODY_COMPOSITION = ATT_UUID_16(0x181B), 170 /// User Data Service 171 ATT_SVC_USER_DATA = ATT_UUID_16(0x181C), 172 /// Weight Scale Service 173 ATT_SVC_WEIGHT_SCALE = ATT_UUID_16(0x181D), 174 /// Bond Management Service 175 ATT_SVC_BOND_MANAGEMENT = ATT_UUID_16(0x181E), 176 /// Continuous Glucose Monitoring Service 177 ATT_SVC_CONTINUOUS_GLUCOSE_MONITORING = ATT_UUID_16(0x181F), 178 /// Internet Protocol Support Service 179 ATT_SVC_IP_SUPPORT = ATT_UUID_16(0x1820), 180 /// Indoor Positioning Service 181 ATT_SVC_INDOOR_POSITIONING = ATT_UUID_16(0x1821), 182 /// Pulse Oximeter Service 183 ATT_SVC_PULSE_OXIMETER = ATT_UUID_16(0x1822), 184 /// HTTP Proxy Service 185 ATT_SVC_HTTP_PROXY = ATT_UUID_16(0x1823), 186 /// Transport Discovery Service 187 ATT_SVC_TRANSPORT_DISCOVERY = ATT_UUID_16(0x1824), 188 /// Object Transfer Service 189 ATT_SVC_OBJECT_TRANSFER = ATT_UUID_16(0x1825), 190 /// Mesh Provisioning Service 191 ATT_SVC_MESH_PROVISIONING = ATT_UUID_16(0x1827), 192 /// Mesh Proxy Service 193 ATT_SVC_MESH_PROXY = ATT_UUID_16(0x1828), 194 195 /*------------------- UNITS ---------------------*/ 196 /// No defined unit 197 ATT_UNIT_UNITLESS = ATT_UUID_16(0x2700), 198 /// Length Unit - Metre 199 ATT_UNIT_METRE = ATT_UUID_16(0x2701), 200 ///Mass unit - Kilogram 201 ATT_UNIT_KG = ATT_UUID_16(0x2702), 202 ///Time unit - second 203 ATT_UNIT_SECOND = ATT_UUID_16(0x2703), 204 ///Electric current unit - Ampere 205 ATT_UNIT_AMPERE = ATT_UUID_16(0x2704), 206 ///Thermodynamic Temperature unit - Kelvin 207 ATT_UNIT_KELVIN = ATT_UUID_16(0x2705), 208 /// Amount of substance unit - mole 209 ATT_UNIT_MOLE = ATT_UUID_16(0x2706), 210 ///Luminous intensity unit - candela 211 ATT_UNIT_CANDELA = ATT_UUID_16(0x2707), 212 ///Area unit - square metres 213 ATT_UNIT_SQ_METRE = ATT_UUID_16(0x2710), 214 ///Colume unit - cubic metres 215 ATT_UNIT_CUBIC_METRE = ATT_UUID_16(0x2710), 216 ///Velocity unit - metres per second 217 ATT_UNIT_METRE_PER_SECOND = ATT_UUID_16(0x2711), 218 ///Acceleration unit - metres per second squared 219 ATT_UNIT_METRES_PER_SEC_SQ = ATT_UUID_16(0x2712), 220 ///Wavenumber unit - reciprocal metre 221 ATT_UNIT_RECIPROCAL_METRE = ATT_UUID_16(0x2713), 222 ///Density unit - kilogram per cubic metre 223 ATT_UNIT_DENS_KG_PER_CUBIC_METRE = ATT_UUID_16(0x2714), 224 ///Surface density unit - kilogram per square metre 225 ATT_UNIT_KG_PER_SQ_METRE = ATT_UUID_16(0x2715), 226 ///Specific volume unit - cubic metre per kilogram 227 ATT_UNIT_CUBIC_METRE_PER_KG = ATT_UUID_16(0x2716), 228 ///Current density unit - ampere per square metre 229 ATT_UNIT_AMPERE_PER_SQ_METRE = ATT_UUID_16(0x2717), 230 ///Magnetic field strength unit - Ampere per metre 231 ATT_UNIT_AMPERE_PER_METRE = ATT_UUID_16(0x2718), 232 ///Amount concentration unit - mole per cubic metre 233 ATT_UNIT_MOLE_PER_CUBIC_METRE = ATT_UUID_16(0x2719), 234 ///Mass Concentration unit - kilogram per cubic metre 235 ATT_UNIT_MASS_KG_PER_CUBIC_METRE = ATT_UUID_16(0x271A), 236 ///Luminance unit - candela per square metre 237 ATT_UNIT_CANDELA_PER_SQ_METRE = ATT_UUID_16(0x271B), 238 ///Refractive index unit 239 ATT_UNIT_REFRACTIVE_INDEX = ATT_UUID_16(0x271C), 240 ///Relative permeability unit 241 ATT_UNIT_RELATIVE_PERMEABILITY = ATT_UUID_16(0x271D), 242 ///Plane angle unit - radian 243 ATT_UNIT_RADIAN = ATT_UUID_16(0x2720), 244 ///Solid angle unit - steradian 245 ATT_UNIT_STERADIAN = ATT_UUID_16(0x2721), 246 ///Frequency unit - Hertz 247 ATT_UNIT_HERTZ = ATT_UUID_16(0x2722), 248 ///Force unit - Newton 249 ATT_UNIT_NEWTON = ATT_UUID_16(0x2723), 250 ///Pressure unit - Pascal 251 ATT_UNIT_PASCAL = ATT_UUID_16(0x2724), 252 ///Energy unit - Joule 253 ATT_UNIT_JOULE = ATT_UUID_16(0x2725), 254 ///Power unit - Watt 255 ATT_UNIT_WATT = ATT_UUID_16(0x2726), 256 ///electric Charge unit - Coulomb 257 ATT_UNIT_COULOMB = ATT_UUID_16(0x2727), 258 ///Electric potential difference - Volt 259 ATT_UNIT_VOLT = ATT_UUID_16(0x2728), 260 ///Capacitance unit - Farad 261 ATT_UNIT_FARAD = ATT_UUID_16(0x2729), 262 ///electric resistance unit - Ohm 263 ATT_UNIT_OHM = ATT_UUID_16(0x272A), 264 ///Electric conductance - Siemens 265 ATT_UNIT_SIEMENS = ATT_UUID_16(0x272B), 266 ///Magnetic flux unit - Weber 267 ATT_UNIT_WEBER = ATT_UUID_16(0x272C), 268 ///Magnetic flux density unit - Tesla 269 ATT_UNIT_TESLA = ATT_UUID_16(0x272D), 270 ///Inductance unit - Henry 271 ATT_UNIT_HENRY = ATT_UUID_16(0x272E), 272 ///Temperature unit - degree Celsius 273 ATT_UNIT_CELSIUS = ATT_UUID_16(0x272F), 274 ///Luminous flux unit - lumen 275 ATT_UNIT_LUMEN = ATT_UUID_16(0x2730), 276 ///Illuminance unit - lux 277 ATT_UNIT_LUX = ATT_UUID_16(0x2731), 278 ///Activity referred to a radionuclide unit - becquerel 279 ATT_UNIT_BECQUEREL = ATT_UUID_16(0x2732), 280 ///Absorbed dose unit - Gray 281 ATT_UNIT_GRAY = ATT_UUID_16(0x2733), 282 ///Dose equivalent unit - Sievert 283 ATT_UNIT_SIEVERT = ATT_UUID_16(0x2734), 284 ///Catalytic activity unit - Katal 285 ATT_UNIT_KATAL = ATT_UUID_16(0x2735), 286 ///Synamic viscosity unit - Pascal second 287 ATT_UNIT_PASCAL_SECOND = ATT_UUID_16(0x2740), 288 ///Moment of force unit - Newton metre 289 ATT_UNIT_NEWTON_METRE = ATT_UUID_16(0x2741), 290 ///surface tension unit - Newton per metre 291 ATT_UNIT_NEWTON_PER_METRE = ATT_UUID_16(0x2742), 292 ///Angular velocity unit - radian per second 293 ATT_UNIT_RADIAN_PER_SECOND = ATT_UUID_16(0x2743), 294 ///Angular acceleration unit - radian per second squared 295 ATT_UNIT_RADIAN_PER_SECOND_SQ = ATT_UUID_16(0x2744), 296 ///Heat flux density unit - Watt per square metre 297 ATT_UNIT_WATT_PER_SQ_METRE = ATT_UUID_16(0x2745), 298 ///HEat capacity unit - Joule per Kelvin 299 ATT_UNIT_JOULE_PER_KELVIN = ATT_UUID_16(0x2746), 300 ///Specific heat capacity unit - Joule per kilogram kelvin 301 ATT_UNIT_JOULE_PER_KG_KELVIN = ATT_UUID_16(0x2747), 302 ///Specific Energy unit - Joule per kilogram 303 ATT_UNIT_JOULE_PER_KG = ATT_UUID_16(0x2748), 304 ///Thermal conductivity - Watt per metre Kelvin 305 ATT_UNIT_WATT_PER_METRE_KELVIN = ATT_UUID_16(0x2749), 306 ///Energy Density unit - joule per cubic metre 307 ATT_UNIT_JOULE_PER_CUBIC_METRE = ATT_UUID_16(0x274A), 308 ///Electric field strength unit - volt per metre 309 ATT_UNIT_VOLT_PER_METRE = ATT_UUID_16(0x274B), 310 ///Electric charge density unit - coulomb per cubic metre 311 ATT_UNIT_COULOMB_PER_CUBIC_METRE = ATT_UUID_16(0x274C), 312 ///Surface charge density unit - coulomb per square metre 313 ATT_UNIT_SURF_COULOMB_PER_SQ_METRE = ATT_UUID_16(0x274D), 314 ///Electric flux density unit - coulomb per square metre 315 ATT_UNIT_FLUX_COULOMB_PER_SQ_METRE = ATT_UUID_16(0x274E), 316 ///Permittivity unit - farad per metre 317 ATT_UNIT_FARAD_PER_METRE = ATT_UUID_16(0x274F), 318 ///Permeability unit - henry per metre 319 ATT_UNIT_HENRY_PER_METRE = ATT_UUID_16(0x2750), 320 ///Molar energy unit - joule per mole 321 ATT_UNIT_JOULE_PER_MOLE = ATT_UUID_16(0x2751), 322 ///Molar entropy unit - joule per mole kelvin 323 ATT_UNIT_JOULE_PER_MOLE_KELVIN = ATT_UUID_16(0x2752), 324 ///Exposure unit - coulomb per kilogram 325 ATT_UNIT_COULOMB_PER_KG = ATT_UUID_16(0x2753), 326 ///Absorbed dose rate unit - gray per second 327 ATT_UNIT_GRAY_PER_SECOND = ATT_UUID_16(0x2754), 328 ///Radiant intensity unit - watt per steradian 329 ATT_UNIT_WATT_PER_STERADIAN = ATT_UUID_16(0x2755), 330 ///Radiance unit - watt per square meter steradian 331 ATT_UNIT_WATT_PER_SQ_METRE_STERADIAN = ATT_UUID_16(0x2756), 332 ///Catalytic activity concentration unit - katal per cubic metre 333 ATT_UNIT_KATAL_PER_CUBIC_METRE = ATT_UUID_16(0x2757), 334 ///Time unit - minute 335 ATT_UNIT_MINUTE = ATT_UUID_16(0x2760), 336 ///Time unit - hour 337 ATT_UNIT_HOUR = ATT_UUID_16(0x2761), 338 ///Time unit - day 339 ATT_UNIT_DAY = ATT_UUID_16(0x2762), 340 ///Plane angle unit - degree 341 ATT_UNIT_ANGLE_DEGREE = ATT_UUID_16(0x2763), 342 ///Plane angle unit - minute 343 ATT_UNIT_ANGLE_MINUTE = ATT_UUID_16(0x2764), 344 ///Plane angle unit - second 345 ATT_UNIT_ANGLE_SECOND = ATT_UUID_16(0x2765), 346 ///Area unit - hectare 347 ATT_UNIT_HECTARE = ATT_UUID_16(0x2766), 348 ///Volume unit - litre 349 ATT_UNIT_LITRE = ATT_UUID_16(0x2767), 350 ///Mass unit - tonne 351 ATT_UNIT_TONNE = ATT_UUID_16(0x2768), 352 ///Pressure unit - bar 353 ATT_UNIT_BAR = ATT_UUID_16(0x2780), 354 ///Pressure unit - millimetre of mercury 355 ATT_UNIT_MM_MERCURY = ATT_UUID_16(0x2781), 356 ///Length unit - angstrom 357 ATT_UNIT_ANGSTROM = ATT_UUID_16(0x2782), 358 ///Length unit - nautical mile 359 ATT_UNIT_NAUTICAL_MILE = ATT_UUID_16(0x2783), 360 ///Area unit - barn 361 ATT_UNIT_BARN = ATT_UUID_16(0x2784), 362 ///Velocity unit - knot 363 ATT_UNIT_KNOT = ATT_UUID_16(0x2785), 364 ///Logarithmic radio quantity unit - neper 365 ATT_UNIT_NEPER = ATT_UUID_16(0x2786), 366 ///Logarithmic radio quantity unit - bel 367 ATT_UNIT_BEL = ATT_UUID_16(0x2787), 368 ///Length unit - yard 369 ATT_UNIT_YARD = ATT_UUID_16(0x27A0), 370 ///Length unit - parsec 371 ATT_UNIT_PARSEC = ATT_UUID_16(0x27A1), 372 ///length unit - inch 373 ATT_UNIT_INCH = ATT_UUID_16(0x27A2), 374 ///length unit - foot 375 ATT_UNIT_FOOT = ATT_UUID_16(0x27A3), 376 ///length unit - mile 377 ATT_UNIT_MILE = ATT_UUID_16(0x27A4), 378 ///pressure unit - pound-force per square inch 379 ATT_UNIT_POUND_FORCE_PER_SQ_INCH = ATT_UUID_16(0x27A5), 380 ///velocity unit - kilometre per hour 381 ATT_UNIT_KM_PER_HOUR = ATT_UUID_16(0x27A6), 382 ///velocity unit - mile per hour 383 ATT_UNIT_MILE_PER_HOUR = ATT_UUID_16(0x27A7), 384 ///angular velocity unit - revolution per minute 385 ATT_UNIT_REVOLUTION_PER_MINUTE = ATT_UUID_16(0x27A8), 386 ///energy unit - gram calorie 387 ATT_UNIT_GRAM_CALORIE = ATT_UUID_16(0x27A9), 388 ///energy unit - kilogram calorie 389 ATT_UNIT_KG_CALORIE = ATT_UUID_16(0x27AA), 390 /// energy unit - kilowatt hour 391 ATT_UNIT_KILOWATT_HOUR = ATT_UUID_16(0x27AB), 392 ///thermodynamic temperature unit - degree Fahrenheit 393 ATT_UNIT_FAHRENHEIT = ATT_UUID_16(0x27AC), 394 ///percentage 395 ATT_UNIT_PERCENTAGE = ATT_UUID_16(0x27AD), 396 ///per mille 397 ATT_UNIT_PER_MILLE = ATT_UUID_16(0x27AE), 398 ///period unit - beats per minute) 399 ATT_UNIT_BEATS_PER_MINUTE = ATT_UUID_16(0x27AF), 400 ///electric charge unit - ampere hours 401 ATT_UNIT_AMPERE_HOURS = ATT_UUID_16(0x27B0), 402 ///mass density unit - milligram per decilitre 403 ATT_UNIT_MILLIGRAM_PER_DECILITRE = ATT_UUID_16(0x27B1), 404 ///mass density unit - millimole per litre 405 ATT_UNIT_MILLIMOLE_PER_LITRE = ATT_UUID_16(0x27B2), 406 ///time unit - year 407 ATT_UNIT_YEAR = ATT_UUID_16(0x27B3), 408 ////time unit - month 409 ATT_UNIT_MONTH = ATT_UUID_16(0x27B4), 410 411 412 /*---------------- DECLARATIONS -----------------*/ 413 /// Primary service Declaration 414 ATT_DECL_PRIMARY_SERVICE = ATT_UUID_16(0x2800), 415 /// Secondary service Declaration 416 ATT_DECL_SECONDARY_SERVICE = ATT_UUID_16(0x2801), 417 /// Include Declaration 418 ATT_DECL_INCLUDE = ATT_UUID_16(0x2802), 419 /// Characteristic Declaration 420 ATT_DECL_CHARACTERISTIC = ATT_UUID_16(0x2803), 421 422 423 /*----------------- DESCRIPTORS -----------------*/ 424 /// Characteristic extended properties 425 ATT_DESC_CHAR_EXT_PROPERTIES = ATT_UUID_16(0x2900), 426 /// Characteristic user description 427 ATT_DESC_CHAR_USER_DESCRIPTION = ATT_UUID_16(0x2901), 428 /// Client characteristic configuration 429 ATT_DESC_CLIENT_CHAR_CFG = ATT_UUID_16(0x2902), 430 /// Server characteristic configuration 431 ATT_DESC_SERVER_CHAR_CFG = ATT_UUID_16(0x2903), 432 /// Characteristic Presentation Format 433 ATT_DESC_CHAR_PRES_FORMAT = ATT_UUID_16(0x2904), 434 /// Characteristic Aggregate Format 435 ATT_DESC_CHAR_AGGREGATE_FORMAT = ATT_UUID_16(0x2905), 436 /// Valid Range 437 ATT_DESC_VALID_RANGE = ATT_UUID_16(0x2906), 438 /// External Report Reference 439 ATT_DESC_EXT_REPORT_REF = ATT_UUID_16(0x2907), 440 /// Report Reference 441 ATT_DESC_REPORT_REF = ATT_UUID_16(0x2908), 442 /// Environmental Sensing Configuration 443 ATT_DESC_ES_CONFIGURATION = ATT_UUID_16(0x290B), 444 /// Environmental Sensing Measurement 445 ATT_DESC_ES_MEASUREMENT = ATT_UUID_16(0x290C), 446 /// Environmental Sensing Trigger Setting 447 ATT_DESC_ES_TRIGGER_SETTING = ATT_UUID_16(0x290D), 448 449 450 /*--------------- CHARACTERISTICS ---------------*/ 451 /// Device name 452 ATT_CHAR_DEVICE_NAME = ATT_UUID_16(0x2A00), 453 /// Appearance 454 ATT_CHAR_APPEARANCE = ATT_UUID_16(0x2A01), 455 /// Privacy flag 456 ATT_CHAR_PRIVACY_FLAG = ATT_UUID_16(0x2A02), 457 /// Reconnection address 458 ATT_CHAR_RECONNECTION_ADDR = ATT_UUID_16(0x2A03), 459 /// Peripheral preferred connection parameters 460 ATT_CHAR_PERIPH_PREF_CON_PARAM = ATT_UUID_16(0x2A04), 461 /// Service handles changed 462 ATT_CHAR_SERVICE_CHANGED = ATT_UUID_16(0x2A05), 463 /// Alert Level characteristic 464 ATT_CHAR_ALERT_LEVEL = ATT_UUID_16(0x2A06), 465 /// Tx Power Level 466 ATT_CHAR_TX_POWER_LEVEL = ATT_UUID_16(0x2A07), 467 /// Date Time 468 ATT_CHAR_DATE_TIME = ATT_UUID_16(0x2A08), 469 /// Day of Week 470 ATT_CHAR_DAY_WEEK = ATT_UUID_16(0x2A09), 471 /// Day Date Time 472 ATT_CHAR_DAY_DATE_TIME = ATT_UUID_16(0x2A0A), 473 /// Exact time 256 474 ATT_CHAR_EXACT_TIME_256 = ATT_UUID_16(0x2A0C), 475 /// DST Offset 476 ATT_CHAR_DST_OFFSET = ATT_UUID_16(0x2A0D), 477 /// Time zone 478 ATT_CHAR_TIME_ZONE = ATT_UUID_16(0x2A0E), 479 /// Local time Information 480 ATT_CHAR_LOCAL_TIME_INFO = ATT_UUID_16(0x2A0F), 481 /// Time with DST 482 ATT_CHAR_TIME_WITH_DST = ATT_UUID_16(0x2A11), 483 /// Time Accuracy 484 ATT_CHAR_TIME_ACCURACY = ATT_UUID_16(0x2A12), 485 ///Time Source 486 ATT_CHAR_TIME_SOURCE = ATT_UUID_16(0x2A13), 487 /// Reference Time Information 488 ATT_CHAR_REFERENCE_TIME_INFO = ATT_UUID_16(0x2A14), 489 /// Time Update Control Point 490 ATT_CHAR_TIME_UPDATE_CNTL_POINT = ATT_UUID_16(0x2A16), 491 /// Time Update State 492 ATT_CHAR_TIME_UPDATE_STATE = ATT_UUID_16(0x2A17), 493 /// Glucose Measurement 494 ATT_CHAR_GLUCOSE_MEAS = ATT_UUID_16(0x2A18), 495 /// Battery Level 496 ATT_CHAR_BATTERY_LEVEL = ATT_UUID_16(0x2A19), 497 /// Temperature Measurement 498 ATT_CHAR_TEMPERATURE_MEAS = ATT_UUID_16(0x2A1C), 499 /// Temperature Type 500 ATT_CHAR_TEMPERATURE_TYPE = ATT_UUID_16(0x2A1D), 501 /// Intermediate Temperature 502 ATT_CHAR_INTERMED_TEMPERATURE = ATT_UUID_16(0x2A1E), 503 /// Measurement Interval 504 ATT_CHAR_MEAS_INTERVAL = ATT_UUID_16(0x2A21), 505 /// Boot Keyboard Input Report 506 ATT_CHAR_BOOT_KB_IN_REPORT = ATT_UUID_16(0x2A22), 507 /// System ID 508 ATT_CHAR_SYS_ID = ATT_UUID_16(0x2A23), 509 /// Model Number String 510 ATT_CHAR_MODEL_NB = ATT_UUID_16(0x2A24), 511 /// Serial Number String 512 ATT_CHAR_SERIAL_NB = ATT_UUID_16(0x2A25), 513 /// Firmware Revision String 514 ATT_CHAR_FW_REV = ATT_UUID_16(0x2A26), 515 /// Hardware revision String 516 ATT_CHAR_HW_REV = ATT_UUID_16(0x2A27), 517 /// Software Revision String 518 ATT_CHAR_SW_REV = ATT_UUID_16(0x2A28), 519 /// Manufacturer Name String 520 ATT_CHAR_MANUF_NAME = ATT_UUID_16(0x2A29), 521 /// IEEE Regulatory Certification Data List 522 ATT_CHAR_IEEE_CERTIF = ATT_UUID_16(0x2A2A), 523 /// CT Time 524 ATT_CHAR_CT_TIME = ATT_UUID_16(0x2A2B), 525 /// Magnetic Declination 526 ATT_CHAR_MAGN_DECLINE = ATT_UUID_16(0x2A2C), 527 /// Scan Refresh 528 ATT_CHAR_SCAN_REFRESH = ATT_UUID_16(0x2A31), 529 /// Boot Keyboard Output Report 530 ATT_CHAR_BOOT_KB_OUT_REPORT = ATT_UUID_16(0x2A32), 531 /// Boot Mouse Input Report 532 ATT_CHAR_BOOT_MOUSE_IN_REPORT = ATT_UUID_16(0x2A33), 533 /// Glucose Measurement Context 534 ATT_CHAR_GLUCOSE_MEAS_CTX = ATT_UUID_16(0x2A34), 535 /// Blood Pressure Measurement 536 ATT_CHAR_BLOOD_PRESSURE_MEAS = ATT_UUID_16(0x2A35), 537 /// Intermediate Cuff Pressure 538 ATT_CHAR_INTERMEDIATE_CUFF_PRESSURE = ATT_UUID_16(0x2A36), 539 /// Heart Rate Measurement 540 ATT_CHAR_HEART_RATE_MEAS = ATT_UUID_16(0x2A37), 541 /// Body Sensor Location 542 ATT_CHAR_BODY_SENSOR_LOCATION = ATT_UUID_16(0x2A38), 543 /// Heart Rate Control Point 544 ATT_CHAR_HEART_RATE_CNTL_POINT = ATT_UUID_16(0x2A39), 545 /// Alert Status 546 ATT_CHAR_ALERT_STATUS = ATT_UUID_16(0x2A3F), 547 /// Ringer Control Point 548 ATT_CHAR_RINGER_CNTL_POINT = ATT_UUID_16(0x2A40), 549 /// Ringer Setting 550 ATT_CHAR_RINGER_SETTING = ATT_UUID_16(0x2A41), 551 /// Alert Category ID Bit Mask 552 ATT_CHAR_ALERT_CAT_ID_BIT_MASK = ATT_UUID_16(0x2A42), 553 /// Alert Category ID 554 ATT_CHAR_ALERT_CAT_ID = ATT_UUID_16(0x2A43), 555 /// Alert Notification Control Point 556 ATT_CHAR_ALERT_NTF_CTNL_PT = ATT_UUID_16(0x2A44), 557 /// Unread Alert Status 558 ATT_CHAR_UNREAD_ALERT_STATUS = ATT_UUID_16(0x2A45), 559 /// New Alert 560 ATT_CHAR_NEW_ALERT = ATT_UUID_16(0x2A46), 561 /// Supported New Alert Category 562 ATT_CHAR_SUP_NEW_ALERT_CAT = ATT_UUID_16(0x2A47), 563 /// Supported Unread Alert Category 564 ATT_CHAR_SUP_UNREAD_ALERT_CAT = ATT_UUID_16(0x2A48), 565 /// Blood Pressure Feature 566 ATT_CHAR_BLOOD_PRESSURE_FEATURE = ATT_UUID_16(0x2A49), 567 /// HID Information 568 ATT_CHAR_HID_INFO = ATT_UUID_16(0x2A4A), 569 /// Report Map 570 ATT_CHAR_REPORT_MAP = ATT_UUID_16(0x2A4B), 571 /// HID Control Point 572 ATT_CHAR_HID_CTNL_PT = ATT_UUID_16(0x2A4C), 573 /// Report 574 ATT_CHAR_REPORT = ATT_UUID_16(0x2A4D), 575 /// Protocol Mode 576 ATT_CHAR_PROTOCOL_MODE = ATT_UUID_16(0x2A4E), 577 /// Scan Interval Window 578 ATT_CHAR_SCAN_INTV_WD = ATT_UUID_16(0x2A4F), 579 /// PnP ID 580 ATT_CHAR_PNP_ID = ATT_UUID_16(0x2A50), 581 /// Glucose Feature 582 ATT_CHAR_GLUCOSE_FEATURE = ATT_UUID_16(0x2A51), 583 /// Record access control point 584 ATT_CHAR_REC_ACCESS_CTRL_PT = ATT_UUID_16(0x2A52), 585 /// RSC Measurement 586 ATT_CHAR_RSC_MEAS = ATT_UUID_16(0x2A53), 587 /// RSC Feature 588 ATT_CHAR_RSC_FEAT = ATT_UUID_16(0x2A54), 589 /// SC Control Point 590 ATT_CHAR_SC_CNTL_PT = ATT_UUID_16(0x2A55), 591 /// CSC Measurement 592 ATT_CHAR_CSC_MEAS = ATT_UUID_16(0x2A5B), 593 /// CSC Feature 594 ATT_CHAR_CSC_FEAT = ATT_UUID_16(0x2A5C), 595 /// Sensor Location 596 ATT_CHAR_SENSOR_LOC = ATT_UUID_16(0x2A5D), 597 /// PLX Spot-Check Measurement 598 ATT_CHAR_PLX_SPOT_CHECK_MEASUREMENT_LOC = ATT_UUID_16(0x2A5E), 599 /// PLX Continuous Measurement 600 ATT_CHAR_PLX_CONTINUOUS_MEASUREMENT_LOC = ATT_UUID_16(0x2A5F), 601 /// PLX Features 602 ATT_CHAR_PLX_FEATURES_LOC = ATT_UUID_16(0x2A60), 603 /// CP Measurement 604 ATT_CHAR_CP_MEAS = ATT_UUID_16(0x2A63), 605 /// CP Vector 606 ATT_CHAR_CP_VECTOR = ATT_UUID_16(0x2A64), 607 /// CP Feature 608 ATT_CHAR_CP_FEAT = ATT_UUID_16(0x2A65), 609 /// CP Control Point 610 ATT_CHAR_CP_CNTL_PT = ATT_UUID_16(0x2A66), 611 /// Location and Speed 612 ATT_CHAR_LOC_SPEED = ATT_UUID_16(0x2A67), 613 /// Navigation 614 ATT_CHAR_NAVIGATION = ATT_UUID_16(0x2A68), 615 /// Position Quality 616 ATT_CHAR_POS_QUALITY = ATT_UUID_16(0x2A69), 617 /// LN Feature 618 ATT_CHAR_LN_FEAT = ATT_UUID_16(0x2A6A), 619 /// LN Control Point 620 ATT_CHAR_LN_CNTL_PT = ATT_UUID_16(0x2A6B), 621 /// Elevation 622 ATT_CHAR_ELEVATION = ATT_UUID_16(0x2A6C), 623 /// Pressure 624 ATT_CHAR_PRESSURE = ATT_UUID_16(0x2A6D), 625 /// Temperature 626 ATT_CHAR_TEMPERATURE = ATT_UUID_16(0x2A6E), 627 /// Humidity 628 ATT_CHAR_HUMIDITY = ATT_UUID_16(0x2A6F), 629 /// True Wind Speed 630 ATT_CHAR_TRUE_WIND_SPEED = ATT_UUID_16(0x2A70), 631 /// True Wind Direction 632 ATT_CHAR_TRUE_WIND_DIR = ATT_UUID_16(0x2A71), 633 /// Apparent Wind Speed 634 ATT_CHAR_APRNT_WIND_SPEED = ATT_UUID_16(0x2A72), 635 /// Apparent Wind Direction 636 ATT_CHAR_APRNT_WIND_DIRECTION = ATT_UUID_16(0x2A73), 637 /// Gust Factor 638 ATT_CHAR_GUST_FACTOR = ATT_UUID_16(0x2A74), 639 /// Pollen Concentration 640 ATT_CHAR_POLLEN_CONC = ATT_UUID_16(0x2A75), 641 /// UV Index 642 ATT_CHAR_UV_INDEX = ATT_UUID_16(0x2A76), 643 /// Irradiance 644 ATT_CHAR_IRRADIANCE = ATT_UUID_16(0x2A77), 645 /// Rainfall 646 ATT_CHAR_RAINFALL = ATT_UUID_16(0x2A78), 647 /// Wind Chill 648 ATT_CHAR_WIND_CHILL = ATT_UUID_16(0x2A79), 649 /// Heat Index 650 ATT_CHAR_HEAT_INDEX = ATT_UUID_16(0x2A7A), 651 /// Dew Point 652 ATT_CHAR_DEW_POINT = ATT_UUID_16(0x2A7B), 653 /// Descriptor Value Changed 654 ATT_CHAR_DESCRIPTOR_VALUE_CHANGED = ATT_UUID_16(0x2A7D), 655 /// Aerobic Heart Rate Lower Limit 656 ATT_CHAR_AEROBIC_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A7E), 657 /// Aerobic Threshhold 658 ATT_CHAR_AEROBIC_THRESHHOLD = ATT_UUID_16(0x2A7F), 659 /// Age 660 ATT_CHAR_AGE = ATT_UUID_16(0x2A80), 661 /// Anaerobic Heart Rate Lower Limit 662 ATT_CHAR_ANAEROBIC_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A81), 663 /// Anaerobic Heart Rate Upper Limit 664 ATT_CHAR_ANAEROBIC_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A82), 665 /// Anaerobic Threshhold 666 ATT_CHAR_ANAEROBIC_THRESHHOLD = ATT_UUID_16(0x2A83), 667 /// Aerobic Heart Rate Upper Limit 668 ATT_CHAR_AEROBIC_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A84), 669 /// Date Of Birth 670 ATT_CHAR_DATE_OF_BIRTH = ATT_UUID_16(0x2A85), 671 /// Date Of Threshold Assessment 672 ATT_CHAR_DATE_OF_THRESHOLD_ASSESSMENT = ATT_UUID_16(0x2A86), 673 /// Email Address 674 ATT_CHAR_EMAIL_ADDRESS = ATT_UUID_16(0x2A87), 675 /// Fat Burn Heart Rate Lower Limit 676 ATT_CHAR_FAT_BURN_HEART_RATE_LOWER_LIMIT = ATT_UUID_16(0x2A88), 677 /// Fat Burn Heart Rate Upper Limit 678 ATT_CHAR_FAT_BURN_HEART_RATE_UPPER_LIMIT = ATT_UUID_16(0x2A89), 679 /// First Name 680 ATT_CHAR_FIRST_NAME = ATT_UUID_16(0x2A8A), 681 /// Five Zone Heart Rate Limits 682 ATT_CHAR_FIVE_ZONE_HEART_RATE_LIMITS = ATT_UUID_16(0x2A8B), 683 /// Gender 684 ATT_CHAR_GENDER = ATT_UUID_16(0x2A8C), 685 /// Max Heart Rate 686 ATT_CHAR_MAX_HEART_RATE = ATT_UUID_16(0x2A8D), 687 /// Height 688 ATT_CHAR_HEIGHT = ATT_UUID_16(0x2A8E), 689 /// Hip Circumference 690 ATT_CHAR_HIP_CIRCUMFERENCE = ATT_UUID_16(0x2A8F), 691 /// Last Name 692 ATT_CHAR_LAST_NAME = ATT_UUID_16(0x2A90), 693 /// Maximum Recommended Heart Rate 694 ATT_CHAR_MAXIMUM_RECOMMENDED_HEART_RATE = ATT_UUID_16(0x2A91), 695 /// Resting Heart Rate 696 ATT_CHAR_RESTING_HEART_RATE = ATT_UUID_16(0x2A92), 697 /// Sport Type For Aerobic And Anaerobic Thresholds 698 ATT_CHAR_SPORT_TYPE_FOR_AEROBIC_AND_ANAEROBIC_THRESHOLDS = ATT_UUID_16(0x2A93), 699 /// Three Zone Heart Rate Limits 700 ATT_CHAR_THREE_ZONE_HEART_RATE_LIMITS = ATT_UUID_16(0x2A94), 701 /// Two Zone Heart Rate Limit 702 ATT_CHAR_TWO_ZONE_HEART_RATE_LIMIT = ATT_UUID_16(0x2A95), 703 /// Vo2 Max 704 ATT_CHAR_VO2_MAX = ATT_UUID_16(0x2A96), 705 /// Waist Circumference 706 ATT_CHAR_WAIST_CIRCUMFERENCE = ATT_UUID_16(0x2A97), 707 /// Weight 708 ATT_CHAR_WEIGHT = ATT_UUID_16(0x2A98), 709 /// Database Change Increment 710 ATT_CHAR_DATABASE_CHANGE_INCREMENT = ATT_UUID_16(0x2A99), 711 /// User Index 712 ATT_CHAR_USER_INDEX = ATT_UUID_16(0x2A9A), 713 /// Body Composition Feature 714 ATT_CHAR_BODY_COMPOSITION_FEATURE = ATT_UUID_16(0x2A9B), 715 /// Body Composition Measurement 716 ATT_CHAR_BODY_COMPOSITION_MEASUREMENT = ATT_UUID_16(0x2A9C), 717 /// Weight Measurement 718 ATT_CHAR_WEIGHT_MEASUREMENT = ATT_UUID_16(0x2A9D), 719 /// Weight Scale Feature 720 ATT_CHAR_WEIGHT_SCALE_FEATURE = ATT_UUID_16(0x2A9E), 721 /// User Control Point 722 ATT_CHAR_USER_CONTROL_POINT = ATT_UUID_16(0x2A9F), 723 /// Flux Density - 2D 724 ATT_CHAR_MAGN_FLUX_2D = ATT_UUID_16(0x2AA0), 725 /// Magnetic Flux Density - 3D 726 ATT_CHAR_MAGN_FLUX_3D = ATT_UUID_16(0x2AA1), 727 /// Language string 728 ATT_CHAR_LANGUAGE = ATT_UUID_16(0x2AA2), 729 /// Barometric Pressure Trend 730 ATT_CHAR_BAR_PRES_TREND = ATT_UUID_16(0x2AA3), 731 /// Central Address Resolution Support 732 ATT_CHAR_CTL_ADDR_RESOL_SUPP = ATT_UUID_16(0x2AA6), 733 /// CGM Measurement 734 ATT_CHAR_CGM_MEASUREMENT = ATT_UUID_16(0x2AA7), 735 /// CGM Features 736 ATT_CHAR_CGM_FEATURES = ATT_UUID_16(0x2AA8), 737 /// CGM Status 738 ATT_CHAR_CGM_STATUS = ATT_UUID_16(0x2AA9), 739 /// CGM Session Start 740 ATT_CHAR_CGM_SESSION_START = ATT_UUID_16(0x2AAA), 741 /// CGM Session Run 742 ATT_CHAR_CGM_SESSION_RUN = ATT_UUID_16(0x2AAB), 743 /// CGM Specific Ops Control Point 744 ATT_CHAR_CGM_SPECIFIC_OPS_CTRL_PT = ATT_UUID_16(0x2AAC), 745 /// Resolvable Private Address only 746 ATT_CHAR_RSLV_PRIV_ADDR_ONLY = ATT_UUID_16(0x2AC9), 747 /// Mesh Provisioning Data In 748 ATT_CHAR_MESH_PROV_DATA_IN = ATT_UUID_16(0x2ADB), 749 /// Mesh Provisioning Data Out 750 ATT_CHAR_MESH_PROV_DATA_OUT = ATT_UUID_16(0x2ADC), 751 /// Mesh Proxy Data In 752 ATT_CHAR_MESH_PROXY_DATA_IN = ATT_UUID_16(0x2ADD), 753 /// Mesh Proxy Data Out 754 ATT_CHAR_MESH_PROXY_DATA_OUT = ATT_UUID_16(0x2ADE), 755 }; 756 757 /// Format for Characteristic Presentation 758 enum { 759 /// unsigned 1-bit: true or false 760 ATT_FORMAT_BOOL = 0x01, 761 /// unsigned 2-bit integer 762 ATT_FORMAT_2BIT, 763 /// unsigned 4-bit integer 764 ATT_FORMAT_NIBBLE, 765 /// unsigned 8-bit integer 766 ATT_FORMAT_UINT8, 767 /// unsigned 12-bit integer 768 ATT_FORMAT_UINT12, 769 /// unsigned 16-bit integer 770 ATT_FORMAT_UINT16, 771 /// unsigned 24-bit integer 772 ATT_FORMAT_UINT24, 773 /// unsigned 32-bit integer 774 ATT_FORMAT_UINT32, 775 /// unsigned 48-bit integer 776 ATT_FORMAT_UINT48, 777 /// unsigned 64-bit integer 778 ATT_FORMAT_UINT64, 779 /// unsigned 128-bit integer 780 ATT_FORMAT_UINT128, 781 /// signed 8-bit integer 782 ATT_FORMAT_SINT8, 783 /// signed 12-bit integer 784 ATT_FORMAT_SINT12, 785 /// signed 16-bit integer 786 ATT_FORMAT_SINT16, 787 /// signed 24-bit integer 788 ATT_FORMAT_SINT24, 789 /// signed 32-bit integer 790 ATT_FORMAT_SINT32, 791 /// signed 48-bit integer 792 ATT_FORMAT_SINT48, 793 /// signed 64-bit integer 794 ATT_FORMAT_SINT64, 795 /// signed 128-bit integer 796 ATT_FORMAT_SINT128, 797 /// IEEE-754 32-bit floating point 798 ATT_FORMAT_FLOAT32, 799 /// IEEE-754 64-bit floating point 800 ATT_FORMAT_FLOAT64, 801 /// IEEE-11073 16-bit SFLOAT 802 ATT_FORMAT_SFLOAT, 803 /// IEEE-11073 32-bit FLOAT 804 ATT_FORMAT_FLOAT, 805 /// IEEE-20601 format 806 ATT_FORMAT_DUINT16, 807 /// UTF-8 string 808 ATT_FORMAT_UTF8S, 809 /// UTF-16 string 810 ATT_FORMAT_UTF16S, 811 /// Opaque structure 812 ATT_FORMAT_STRUCT, 813 /// Last format 814 ATT_FORMAT_LAST 815 }; 816 817 818 /// Client Characteristic Configuration Codes 819 enum att_ccc_val 820 { 821 /// Stop notification/indication 822 ATT_CCC_STOP_NTFIND = 0x0000, 823 /// Start notification 824 ATT_CCC_START_NTF, 825 /// Start indication 826 ATT_CCC_START_IND 827 }; 828 829 /* 830 * Type Definition 831 **************************************************************************************** 832 */ 833 834 /// Attribute length type 835 typedef uint16_t att_size_t; 836 837 838 /// UUID - 128-bit type 839 struct att_uuid_128 840 { 841 /// 128-bit UUID 842 uint8_t uuid[ATT_UUID_128_LEN]; 843 }; 844 845 /// UUID - 32-bit type 846 struct att_uuid_32 847 { 848 /// 32-bit UUID 849 uint8_t uuid[ATT_UUID_32_LEN]; 850 }; 851 852 853 854 /// Characteristic Value Descriptor 855 struct att_char_desc 856 { 857 /// properties 858 uint8_t prop; 859 /// attribute handle 860 uint8_t attr_hdl[ATT_HANDLE_LEN]; 861 /// attribute type 862 uint8_t attr_type[ATT_UUID_16_LEN]; 863 }; 864 865 /// Characteristic Value Descriptor 866 struct att_char128_desc 867 { 868 /// properties 869 uint8_t prop; 870 /// attribute handle 871 uint8_t attr_hdl[ATT_HANDLE_LEN]; 872 /// attribute type 873 uint8_t attr_type[ATT_UUID_128_LEN]; 874 }; 875 876 /// Service Value Descriptor - 16-bit 877 typedef uint16_t att_svc_desc_t; 878 879 /// include service entry element 880 struct att_incl_desc 881 { 882 /// start handle value of included service 883 uint16_t start_hdl; 884 /// end handle value of included service 885 uint16_t end_hdl; 886 /// attribute value UUID 887 uint16_t uuid; 888 }; 889 890 /// include service entry element 891 struct att_incl128_desc 892 { 893 /// start handle value of included service 894 uint16_t start_hdl; 895 /// end handle value of included service 896 uint16_t end_hdl; 897 }; 898 899 900 // -------------------------- PDU HANDLER Definition -------------------------- 901 902 /// used to know if PDU handler has been found 903 #define ATT_PDU_HANDLER_NOT_FOUND (0xff) 904 905 /// Format of a pdu handler function 906 typedef int (*att_func_t)(uint8_t conidx, void *pdu); 907 908 /// Element of a pdu handler table. 909 struct att_pdu_handler 910 { 911 /// PDU identifier of the message 912 uint8_t pdu_id; 913 /// Pointer to the handler function for the pdu above. 914 att_func_t handler; 915 }; 916 917 918 // --------------------------- Database permissions ----------------------------- 919 920 /// Macro used to retrieve access permission rights 921 #define PERM_GET(perm, access)\ 922 (((perm) & (PERM_MASK_ ## access)) >> (PERM_POS_ ## access)) 923 924 /// Macro used to set a permission value 925 #define PERM_SET(perm, access, value)\ 926 perm = ((perm & ~(PERM_MASK_ ## access)) | ((value << (PERM_POS_ ## access)) & (PERM_MASK_ ## access))) 927 928 /// Macro used to retrieve permission value from access and rights on attribute. 929 #define PERM(access, right) \ 930 (((PERM_RIGHT_ ## right) << (PERM_POS_ ## access)) & (PERM_MASK_ ## access)) 931 932 /// Macro used know if permission is set or not. 933 #define PERM_IS_SET(perm, access, right) \ 934 (((perm) & (((PERM_RIGHT_ ## right) << (PERM_POS_ ## access))) \ 935 & (PERM_MASK_ ## access)) == PERM(access, right)) 936 937 /// Macro used to create permission value 938 #define PERM_VAL(access, perm) \ 939 ((((perm) << (PERM_POS_ ## access))) & (PERM_MASK_ ## access)) 940 941 942 943 /// Retrieve attribute security level from attribute right and service right 944 #define ATT_GET_SEC_LVL(att_right, svc_right) \ 945 co_max(((att_right) & PERM_RIGHT_AUTH), ((svc_right) & PERM_RIGHT_AUTH)); 946 947 /// Retrieve UUID LEN from UUID Length Permission 948 #define ATT_UUID_LEN(uuid_len_perm) ((uuid_len_perm == 0) ? ATT_UUID_16_LEN : \ 949 ((uuid_len_perm == 1) ? ATT_UUID_32_LEN : \ 950 ((uuid_len_perm == 2) ? ATT_UUID_128_LEN : 0))) 951 952 /// Initialization of attribute element 953 #define ATT_ELEMT_INIT {{NULL}, false} 954 955 /** 956 * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 957 * +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 958 * |EXT | WS | I | N | WR | WC | RD | B | NP | IP | WP | RP | 959 * +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 960 * 961 * Bit [0-1] : Read Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON) 962 * Bit [2-3] : Write Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON) 963 * Bit [4-5] : Indication Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON) 964 * Bit [6-7] : Notification Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = SEC_CON) 965 * 966 * Bit [8] : Extended properties present (only relevant for a characteristic value) 967 * Bit [9] : Broadcast permission (only relevant for a characteristic value) 968 * Bit [10] : Write Command accepted 969 * Bit [11] : Write Signed accepted 970 * Bit [12] : Write Request accepted 971 * Bit [13] : Encryption key Size must be 16 bytes 972 */ 973 enum attm_perm_mask 974 { 975 /// retrieve all permission info 976 PERM_MASK_ALL = 0x0000, 977 /// Read Permission Mask 978 PERM_MASK_RP = 0x0003, 979 PERM_POS_RP = 0, 980 /// Write Permission Mask 981 PERM_MASK_WP = 0x000C, 982 PERM_POS_WP = 2, 983 /// Indication Access Mask 984 PERM_MASK_IP = 0x0030, 985 PERM_POS_IP = 4, 986 /// Notification Access Mask 987 PERM_MASK_NP = 0x00C0, 988 PERM_POS_NP = 6, 989 /// Broadcast descriptor present 990 PERM_MASK_BROADCAST = 0x0100, 991 PERM_POS_BROADCAST = 8, 992 /// Read Access Mask 993 PERM_MASK_RD = 0x0200, 994 PERM_POS_RD = 9, 995 /// Write Command Enabled attribute Mask 996 PERM_MASK_WRITE_COMMAND = 0x0400, 997 PERM_POS_WRITE_COMMAND = 10, 998 /// Write Request Enabled attribute Mask 999 PERM_MASK_WRITE_REQ = 0x0800, 1000 PERM_POS_WRITE_REQ = 11, 1001 /// Notification Access Mask 1002 PERM_MASK_NTF = 0x1000, 1003 PERM_POS_NTF = 12, 1004 /// Indication Access Mask 1005 PERM_MASK_IND = 0x2000, 1006 PERM_POS_IND = 13, 1007 /// Write Signed Enabled attribute Mask 1008 PERM_MASK_WRITE_SIGNED = 0x4000, 1009 PERM_POS_WRITE_SIGNED = 14, 1010 /// Extended properties descriptor present 1011 PERM_MASK_EXT = 0x8000, 1012 PERM_POS_EXT = 15, 1013 1014 /// Properties 1015 PERM_MASK_PROP = 0xFF00, 1016 PERM_POS_PROP = 8, 1017 }; 1018 1019 /** 1020 * Value permission bit field 1021 * 1022 * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1023 * +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 1024 * | RI |UUID_LEN |EKS | MAX_LEN (RI = 1) / Value Offset (RI = 0) | 1025 * +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ 1026 * 1027 * Bit [0-11] : Maximum Attribute Length or Value Offset pointer 1028 * Bit [12] : Encryption key Size must be 16 bytes 1029 * Bit [14-13]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU) 1030 * Bit [15] : Trigger Read Indication (0 = Value present in Database, 1 = Value not present in Database) 1031 */ 1032 enum attm_value_perm_mask 1033 { 1034 /// Maximum Attribute Length 1035 PERM_MASK_MAX_LEN = 0x0FFF, 1036 PERM_POS_MAX_LEN = 0, 1037 /// Attribute value Offset 1038 PERM_MASK_VAL_OFFSET = 0x0FFF, 1039 PERM_POS_VAL_OFFSET = 0, 1040 /// Check Encryption key size Mask 1041 PERM_MASK_EKS = 0x1000, 1042 PERM_POS_EKS = 12, 1043 /// UUID Length 1044 PERM_MASK_UUID_LEN = 0x6000, 1045 PERM_POS_UUID_LEN = 13, 1046 /// Read trigger Indication 1047 PERM_MASK_RI = 0x8000, 1048 PERM_POS_RI = 15, 1049 }; 1050 1051 1052 /** 1053 * Service permissions 1054 * 1055 * 7 6 5 4 3 2 1 0 1056 * +----+----+----+----+----+----+----+----+ 1057 * |SEC |UUID_LEN |DIS | AUTH |EKS | MI | 1058 * +----+----+----+----+----+----+----+----+ 1059 * 1060 * Bit [0] : Task that manage service is multi-instantiated (Connection index is conveyed) 1061 * Bit [1] : Encryption key Size must be 16 bytes 1062 * Bit [2-3]: Service Permission (0 = NO_AUTH, 1 = UNAUTH, 2 = AUTH, 3 = Secure Connect) 1063 * Bit [4] : Disable the service 1064 * Bit [5-6]: UUID Length (0 = 16 bits, 1 = 32 bits, 2 = 128 bits, 3 = RFU) 1065 * Bit [7] : Secondary Service (0 = Primary Service, 1 = Secondary Service) 1066 */ 1067 enum attm_svc_perm_mask 1068 { 1069 /// Task that manage service is multi-instantiated 1070 PERM_MASK_SVC_MI = 0x01, 1071 PERM_POS_SVC_MI = 0, 1072 /// Check Encryption key size for service Access 1073 PERM_MASK_SVC_EKS = 0x02, 1074 PERM_POS_SVC_EKS = 1, 1075 /// Service Permission authentication 1076 PERM_MASK_SVC_AUTH = 0x0C, 1077 PERM_POS_SVC_AUTH = 2, 1078 /// Disable the service 1079 PERM_MASK_SVC_DIS = 0x10, 1080 PERM_POS_SVC_DIS = 4, 1081 /// Service UUID Length 1082 PERM_MASK_SVC_UUID_LEN = 0x60, 1083 PERM_POS_SVC_UUID_LEN = 5, 1084 /// Service type Secondary 1085 PERM_MASK_SVC_SECONDARY = 0x80, 1086 PERM_POS_SVC_SECONDARY = 7, 1087 }; 1088 1089 /// Attribute & Service access mode 1090 enum 1091 { 1092 /// Disable access 1093 PERM_RIGHT_DISABLE = 0, 1094 /// Enable access 1095 PERM_RIGHT_ENABLE = 1, 1096 }; 1097 1098 /// Attribute & Service access rights 1099 enum 1100 { 1101 /// No Authentication 1102 PERM_RIGHT_NO_AUTH = 0, 1103 /// Access Requires Unauthenticated link 1104 PERM_RIGHT_UNAUTH = 1, 1105 /// Access Requires Authenticated link 1106 PERM_RIGHT_AUTH = 2, 1107 /// Access Requires Secure Connection link 1108 PERM_RIGHT_SEC_CON = 3, 1109 }; 1110 1111 /// Attribute & Service UUID Length 1112 enum 1113 { 1114 /// 16 bits UUID 1115 PERM_UUID_16 = 0, 1116 PERM_RIGHT_UUID_16 = 0, 1117 /// 32 bits UUID 1118 PERM_UUID_32 = 1, 1119 PERM_RIGHT_UUID_32 = 1, 1120 /// 128 bits UUID 1121 PERM_UUID_128 = 2, 1122 PERM_RIGHT_UUID_128 = 2, 1123 /// Invalid 1124 PERM_UUID_RFU = 3, 1125 }; 1126 1127 /// execute flags 1128 enum 1129 { 1130 /// Cancel All the Reliable Writes 1131 ATT_CANCEL_ALL_PREPARED_WRITES = 0x00, 1132 /// Write All the Reliable Writes 1133 ATT_EXECUTE_ALL_PREPARED_WRITES 1134 }; 1135 1136 #endif // _HAL_ATT_H 1137