bthledef.h (16152B) - Raw
1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 7 #ifndef __BTHLEDEF_H__ 8 #define __BTHLEDEF_H__ 9 10 #include <winapifamily.h> 11 #include <minwindef.h> 12 13 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 14 15 #if NTDDI_VERSION >= NTDDI_WIN8 16 17 DEFINE_GUID(GUID_BLUETOOTHLE_DEVICE_INTERFACE, 0x781aee18, 0x7733, 0x4ce4, 0xad, 0xd0, 0x91, 0xf4, 0x1c, 0x67, 0xb5, 0x92); 18 DEFINE_GUID(GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE, 0x6e3bb679, 0x4372, 0x40c8, 0x9e, 0xaa, 0x45, 0x09, 0xdf, 0x26, 0x0c, 0xd8); 19 DEFINE_GUID(BTH_LE_ATT_BLUETOOTH_BASE_GUID, 0x00000000, 0x0000, 0x1000, 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb); 20 21 #define BTH_LE_SERVICE_GAP (0x1800) 22 #define BTH_LE_SERVICE_GATT (0x1801) 23 24 #define BTH_LE_GATT_ATTRIBUTE_TYPE_PRIMARY_SERVICE (0x2800) 25 #define BTH_LE_GATT_ATTRIBUTE_TYPE_SECONDARY_SERVICE (0x2801) 26 #define BTH_LE_GATT_ATTRIBUTE_TYPE_INCLUDE (0x2802) 27 #define BTH_LE_GATT_ATTRIBUTE_TYPE_CHARACTERISTIC (0x2803) 28 29 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_EXTENDED_PROPERTIES (0x2900) 30 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_USER_DESCRIPTION (0x2901) 31 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_CLIENT_CONFIGURATION (0x2902) 32 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_SERVER_CONFIGURATION (0x2903) 33 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_FORMAT (0x2904) 34 #define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_AGGREGATE_FORMAT (0x2905) 35 36 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_DEVICE_NAME (0x2a00) 37 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_APPEARANCE (0x2a01) 38 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PRIVACY_FLAG (0x2a02) 39 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_RECONNECTION_ADDRESS (0x2a03) 40 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PREFERED_CONNECTION_PARAMETER (0x2a04) 41 #define BTH_LE_GATT_CHARACTERISTIC_TYPE_SERVICE_CHANGED (0x2a05) 42 43 #define BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET 0x6 44 #define BTH_LE_GAP_APPEARANCE_CATEGORY_MASK 0x3ff 45 #define BTH_LE_GAP_APPEARANCE_GET_CATEGORY(a) ((a >> BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET) & BTH_LE_GAP_APPEARANCE_CATEGORY_MASK) 46 #define BTH_LE_GAP_APPEARANCE_SET_CATEGORY(a, c) a = ((a & ~BTH_LE_GAP_APPEARANCE_CATEGORY_MASK) | (c << BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET)) 47 #define BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK 0x3f 48 #define BTH_LE_GAP_APPEARANCE_GET_SUB_CATEGORY(a) ((UCHAR)(a & BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK)) 49 #define BTH_LE_GAP_APPEARANCE_SET_SUB_CATEGORY(a, s) a = ((a & ~BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK) | s) 50 51 #define BTH_LE_GAP_APPEARANCE_CATEGORY_UNCATEGORIZED 0x0000 52 #define BTH_LE_GAP_APPEARANCE_CATEGORY_PHONE 0x0001 53 #define BTH_LE_GAP_APPEARANCE_CATEGORY_COMPUTER 0x0002 54 #define BTH_LE_GAP_APPEARANCE_CATEGORY_WATCH 0x0003 55 #define BTH_LE_GAP_APPEARANCE_CATEGORY_CLOCK 0x0004 56 #define BTH_LE_GAP_APPEARANCE_CATEGORY_DISPLAY 0x0005 57 #define BTH_LE_GAP_APPEARANCE_CATEGORY_REMOTE_CONTROL 0x0006 58 #define BTH_LE_GAP_APPEARANCE_CATEGORY_EYE_GLASSES 0x0007 59 #define BTH_LE_GAP_APPEARANCE_CATEGORY_TAG 0x0008 60 #define BTH_LE_GAP_APPEARANCE_CATEGORY_KEYRING 0x0009 61 #define BTH_LE_GAP_APPEARANCE_CATEGORY_MEDIA_PLAYER 0x000a 62 #define BTH_LE_GAP_APPEARANCE_CATEGORY_BARCODE_SCANNER 0x000b 63 #define BTH_LE_GAP_APPEARANCE_CATEGORY_THERMOMETER 0x000c 64 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HEART_RATE 0x000d 65 #define BTH_LE_GAP_APPEARANCE_CATEGORY_BLOOD_PRESSURE 0x000e 66 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HID 0x000f 67 #define BTH_LE_GAP_APPEARANCE_CATEGORY_GLUCOSE_METER 0x0010 68 #define BTH_LE_GAP_APPEARANCE_CATEGORY_RUNNING_WALKING_SENSOR 0x0011 69 #define BTH_LE_GAP_APPEARANCE_CATEGORY_CYCLING 0x0012 70 #define BTH_LE_GAP_APPEARANCE_CATEGORY_CONTROL_DEVICE 0x0013 71 #define BTH_LE_GAP_APPEARANCE_CATEGORY_NETWORK_DEVICE 0x0014 72 #define BTH_LE_GAP_APPEARANCE_CATEGORY_SENSOR 0x0015 73 #define BTH_LE_GAP_APPEARANCE_CATEGORY_LIGHT_FIXTURES 0x0016 74 #define BTH_LE_GAP_APPEARANCE_CATEGORY_FAN 0x0017 75 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HVAC 0x0018 76 #define BTH_LE_GAP_APPEARANCE_CATEGORY_AIR_CONDITIONING 0x0019 77 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HUMIDIFIER 0x001a 78 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HEATING 0x001b 79 #define BTH_LE_GAP_APPEARANCE_CATEGORY_ACCESS_CONTROL 0x001c 80 #define BTH_LE_GAP_APPEARANCE_CATEGORY_MOTORIZED_DEVICE 0x001d 81 #define BTH_LE_GAP_APPEARANCE_CATEGORY_POWER_DEVICE 0x001e 82 #define BTH_LE_GAP_APPEARANCE_CATEGORY_LIGHT_SOURCE 0x001f 83 #define BTH_LE_GAP_APPEARANCE_CATEGORY_WINDOW_COVERING 0x0020 84 #define BTH_LE_GAP_APPEARANCE_CATEGORY_AUDIO_SINK 0x0021 85 #define BTH_LE_GAP_APPEARANCE_CATEGORY_AUDIO_SOURCE 0x0022 86 #define BTH_LE_GAP_APPEARANCE_CATEGORY_MOTORIZED_VEHICLE 0x0023 87 #define BTH_LE_GAP_APPEARANCE_CATEGORY_DOMESTIC_APPLIANCE 0x0024 88 #define BTH_LE_GAP_APPEARANCE_CATEGORY_WEARABLE_AUDIO_DEVICE 0x0025 89 #define BTH_LE_GAP_APPEARANCE_CATEGORY_AIRCRAFT 0x0026 90 #define BTH_LE_GAP_APPEARANCE_CATEGORY_AV_EQUIPMENT 0x0027 91 #define BTH_LE_GAP_APPEARANCE_CATEGORY_DISPLAY_EQUIPMENT 0x0028 92 #define BTH_LE_GAP_APPEARANCE_CATEGORY_HEARING_AID 0x0029 93 #define BTH_LE_GAP_APPEARANCE_CATEGORY_GAMING 0x002a 94 #define BTH_LE_GAP_APPEARANCE_CATEGORY_SIGNAGE 0x002b 95 #define BTH_LE_GAP_APPEARANCE_CATEGORY_PLUSE_OXIMETER 0x0031 96 #define BTH_LE_GAP_APPEARANCE_CATEGORY_WEIGHT_SCALE 0x0032 97 #define BTH_LE_GAP_APPEARANCE_CATEGORY_PERSONAL_MOBILITY_DEVICE 0x0033 98 #define BTH_LE_GAP_APPEARANCE_CATEGORY_CONTINUOUS_GLUCOSE_MONITOR 0x0034 99 #define BTH_LE_GAP_APPEARANCE_CATEGORY_INSULIN_PUMP 0x0035 100 #define BTH_LE_GAP_APPEARANCE_CATEGORY_MEDICATION_DELIVERY 0x0036 101 #define BTH_LE_GAP_APPEARANCE_CATEGORY_OUTDOOR_SPORTS_ACTIVITY 0x0051 102 #define BTH_LE_GAP_APPEARANCE_SUBCATEGORY_GENERIC 0x00 103 #define BTH_LE_GAP_APPEARANCE_WATCH_SUBCATEGORY_SPORTS_WATCH 0x01 104 #define BTH_LE_GAP_APPEARANCE_THERMOMETER_SUBCATEGORY_EAR 0x01 105 #define BTH_LE_GAP_APPEARANCE_HEART_RATE_SUBCATEGORY_HEART_RATE_BELT 0x01 106 #define BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_ARM 0x01 107 #define BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_WRIST 0x02 108 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_KEYBOARD 0x01 109 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_MOUSE 0x02 110 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_JOYSTICK 0x03 111 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_GAMEPAD 0x04 112 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITIZER_TABLET 0x05 113 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_CARD_READER 0x06 114 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITAL_PEN 0x07 115 #define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_BARCODE_SCANNER 0x08 116 #define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_IN_SHOE 0x01 117 #define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_SHOE 0x02 118 #define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_HIP 0x03 119 #define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CYCLING_COMPUTER 0x01 120 #define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_SENSOR 0x02 121 #define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CADENCE_SENSOR 0x03 122 #define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_POWER_SENSOR 0x04 123 #define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_AND_CADENCE_SENSOR 0x05 124 #define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_STANDALONE_SPEAKER 0x01 125 #define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_SOUNDBAR 0x02 126 #define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_BOOKSHELF_SPEAKER 0x03 127 #define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_STANDMOUNTED_SPEAKER 0x04 128 #define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_SPEAKERPHONE 0x05 129 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_MICROPHONE 0x01 130 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_ALARM 0x02 131 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BELL 0x03 132 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_HORN 0x04 133 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BROADCASTING_DEVICE 0x05 134 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_SERVICE_DESK 0x06 135 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_KIOSK 0x07 136 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BROADCASTING_ROOM 0x08 137 #define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_AUDITORIUM 0x09 138 #define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_EARBUD 0x01 139 #define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_HEADSET 0x02 140 #define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_HEADPHONES 0x03 141 #define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_NECKBAND 0x04 142 #define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_IN_EAR_HEARING_AID 0x01 143 #define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_BEHIND_EAR_HEARING_AID 0x02 144 #define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_COCHLEAR_IMPLANT 0x03 145 #define BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_FINGERTIP 0x01 146 #define BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_WRIST_WORN 0x02 147 #define BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_DISPLAY_DEVICE 0x01 148 #define BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_DISPLAY_DEVICE 0x02 149 #define BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_POD 0x03 150 #define BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_POD 0x04 151 152 #define BTH_LE_GATT_DEFAULT_MAX_INCLUDED_SERVICES_DEPTH (3) 153 154 #define BTH_LE_ATT_TRANSACTION_TIMEOUT 30 155 156 #define BTH_LE_ATT_MAX_VALUE_SIZE 512 157 158 #define BTH_LE_ATT_CID (0x0004) 159 160 #define BTHLEENUM_ATT_MTU_MIN (23) 161 #define BTHLEENUM_ATT_MTU_MAX (0xffff) 162 #define BTHLEENUM_ATT_MTU_DEFAULT (BTHLEENUM_ATT_MTU_MIN) 163 #define BTHLEENUM_ATT_MTU_INITIAL_NEGOTIATION (525) 164 165 #define BTH_LE_ERROR_INVALID_HANDLE (0x01) 166 #define BTH_LE_ERROR_READ_NOT_PERMITTED (0x02) 167 #define BTH_LE_ERROR_WRITE_NOT_PERMITTED (0x03) 168 #define BTH_LE_ERROR_INVALID_PDU (0x04) 169 #define BTH_LE_ERROR_INSUFFICIENT_AUTHENTICATION (0x05) 170 #define BTH_LE_ERROR_REQUEST_NOT_SUPPORTED (0x06) 171 #define BTH_LE_ERROR_INVALID_OFFSET (0x07) 172 #define BTH_LE_ERROR_INSUFFICIENT_AUTHORIZATION (0x08) 173 #define BTH_LE_ERROR_PREPARE_QUEUE_FULL (0x09) 174 #define BTH_LE_ERROR_ATTRIBUTE_NOT_FOUND (0x0a) 175 #define BTH_LE_ERROR_ATTRIBUTE_NOT_LONG (0x0b) 176 #define BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE (0x0c) 177 #define BTH_LE_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH (0x0d) 178 #define BTH_LE_ERROR_UNLIKELY (0x0e) 179 #define BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION (0x0f) 180 #define BTH_LE_ERROR_UNSUPPORTED_GROUP_TYPE (0x10) 181 #define BTH_LE_ERROR_INSUFFICIENT_RESOURCES (0x11) 182 #define BTH_LE_ERROR_UNKNOWN (0x1000) 183 184 #define BLUETOOTH_GATT_FLAG_NONE 0x00000000 185 #define BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED 0x00000001 186 #define BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED 0x00000002 187 #define BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE 0x00000004 188 #define BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE 0x00000008 189 #define BLUETOOTH_GATT_FLAG_SIGNED_WRITE 0x00000010 190 #define BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE 0x00000020 191 #define BLUETOOTH_GATT_FLAG_RETURN_ALL 0x00000040 192 #define BLUETOOTH_GATT_FLAG_VALID_MASK (BLUETOOTH_GATT_FLAG_NONE | BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED | BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED | BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE | BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE | BLUETOOTH_GATT_FLAG_SIGNED_WRITE | BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE | BLUETOOTH_GATT_FLAG_RETURN_ALL) 193 194 #define IS_BLUETOOTH_GATT_FLAG_VALID(f) (0 == (f & ~BLUETOOTH_GATT_FLAG_VALID_MASK)) 195 196 typedef HANDLE BLUETOOTH_GATT_EVENT_HANDLE; 197 198 typedef struct _BTH_LE_UUID { 199 BOOLEAN IsShortUuid; 200 #ifdef __WIDL__ 201 [switch_type(BOOLEAN), switch_is((BOOLEAN)IsShortUuid)] 202 #endif 203 union { 204 #ifdef __WIDL__ 205 [case(TRUE)] 206 #endif 207 USHORT ShortUuid; 208 #ifdef __WIDL__ 209 [case(FALSE)] 210 #endif 211 GUID LongUuid; 212 } Value; 213 } BTH_LE_UUID, *PBTH_LE_UUID; 214 215 typedef struct _BTH_LE_GATT_SERVICE { 216 BTH_LE_UUID ServiceUuid; 217 USHORT AttributeHandle; 218 } BTH_LE_GATT_SERVICE, *PBTH_LE_GATT_SERVICE; 219 220 typedef enum _BTH_LE_GATT_DESCRIPTOR_TYPE { 221 CharacteristicExtendedProperties, 222 CharacteristicUserDescription, 223 ClientCharacteristicConfiguration, 224 ServerCharacteristicConfiguration, 225 CharacteristicFormat, 226 CharacteristicAggregateFormat, 227 CustomDescriptor 228 } BTH_LE_GATT_DESCRIPTOR_TYPE, *PBTH_LE_GATT_DESCRIPTOR_TYPE; 229 230 typedef struct _BTH_LE_GATT_CHARACTERISTIC { 231 USHORT ServiceHandle; 232 BTH_LE_UUID CharacteristicUuid; 233 USHORT AttributeHandle; 234 USHORT CharacteristicValueHandle; 235 BOOLEAN IsBroadcastable; 236 BOOLEAN IsReadable; 237 BOOLEAN IsWritable; 238 BOOLEAN IsWritableWithoutResponse; 239 BOOLEAN IsSignedWritable; 240 BOOLEAN IsNotifiable; 241 BOOLEAN IsIndicatable; 242 BOOLEAN HasExtendedProperties; 243 } BTH_LE_GATT_CHARACTERISTIC, *PBTH_LE_GATT_CHARACTERISTIC; 244 245 typedef struct _BTH_LE_GATT_CHARACTERISTIC_VALUE { 246 ULONG DataSize; 247 #ifdef __WIDL__ 248 [size_is(DataSize)] UCHAR Data[*]; 249 #else 250 UCHAR Data[1]; 251 #endif 252 } BTH_LE_GATT_CHARACTERISTIC_VALUE, *PBTH_LE_GATT_CHARACTERISTIC_VALUE; 253 254 typedef struct _BTH_LE_GATT_DESCRIPTOR { 255 USHORT ServiceHandle; 256 USHORT CharacteristicHandle; 257 BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 258 BTH_LE_UUID DescriptorUuid; 259 USHORT AttributeHandle; 260 } BTH_LE_GATT_DESCRIPTOR, *PBTH_LE_GATT_DESCRIPTOR; 261 262 typedef struct _BTH_LE_GATT_DESCRIPTOR_VALUE { 263 BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 264 BTH_LE_UUID DescriptorUuid; 265 #ifdef __WIDL__ 266 [switch_type(BTH_LE_GATT_DESCRIPTOR_TYPE), switch_is((BTH_LE_GATT_DESCRIPTOR_TYPE)DescriptorType)] 267 #endif 268 __C89_NAMELESS union { 269 #ifdef __WIDL__ 270 [case(CharacteristicExtendedProperties)] 271 #endif 272 struct { 273 BOOLEAN IsReliableWriteEnabled; 274 BOOLEAN IsAuxiliariesWritable; 275 } CharacteristicExtendedProperties; 276 #ifdef __WIDL__ 277 [case(ClientCharacteristicConfiguration)] 278 #endif 279 struct { 280 BOOLEAN IsSubscribeToNotification; 281 BOOLEAN IsSubscribeToIndication; 282 } ClientCharacteristicConfiguration; 283 #ifdef __WIDL__ 284 [case(ServerCharacteristicConfiguration)] 285 #endif 286 struct { 287 BOOLEAN IsBroadcast; 288 } ServerCharacteristicConfiguration; 289 #ifdef __WIDL__ 290 [case(CharacteristicFormat)] 291 #endif 292 struct { 293 UCHAR Format; 294 UCHAR Exponent; 295 BTH_LE_UUID Unit; 296 UCHAR NameSpace; 297 BTH_LE_UUID Description; 298 } CharacteristicFormat; 299 #ifdef __WIDL__ 300 [default] 301 ; 302 #endif 303 }; 304 ULONG DataSize; 305 #ifdef __WIDL__ 306 [size_is(DataSize)] UCHAR Data[*]; 307 #else 308 UCHAR Data[1]; 309 #endif 310 } BTH_LE_GATT_DESCRIPTOR_VALUE, *PBTH_LE_GATT_DESCRIPTOR_VALUE; 311 312 typedef enum _BTH_LE_GATT_EVENT_TYPE { 313 CharacteristicValueChangedEvent 314 } BTH_LE_GATT_EVENT_TYPE; 315 316 typedef VOID (CALLBACK *PFNBLUETOOTH_GATT_EVENT_CALLBACK)(BTH_LE_GATT_EVENT_TYPE EventType, PVOID EventOutParameter, PVOID Context); 317 318 typedef struct _BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION { 319 USHORT NumCharacteristics; 320 BTH_LE_GATT_CHARACTERISTIC Characteristics[1]; 321 } BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION, *PBLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION; 322 323 typedef struct _BLUETOOTH_GATT_VALUE_CHANGED_EVENT { 324 USHORT ChangedAttributeHandle; 325 size_t CharacteristicValueDataSize; 326 PBTH_LE_GATT_CHARACTERISTIC_VALUE CharacteristicValue; 327 } BLUETOOTH_GATT_VALUE_CHANGED_EVENT, *PBLUETOOTH_GATT_VALUE_CHANGED_EVENT; 328 329 typedef ULONG64 BTH_LE_GATT_RELIABLE_WRITE_CONTEXT, *PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT; 330 331 #ifdef __cplusplus 332 extern "C"{ 333 #endif 334 335 FORCEINLINE BOOLEAN IsBthLEUuidMatch(BTH_LE_UUID uuid1, BTH_LE_UUID uuid2) { 336 BTH_LE_UUID tempLongUuid = {0}; 337 tempLongUuid.IsShortUuid = FALSE; 338 tempLongUuid.Value.LongUuid = BTH_LE_ATT_BLUETOOTH_BASE_GUID; 339 if (uuid1.IsShortUuid && uuid2.IsShortUuid) { 340 return (uuid1.Value.ShortUuid == uuid2.Value.ShortUuid); 341 } else if (!uuid1.IsShortUuid && !uuid2.IsShortUuid) { 342 return (0 == memcmp(&uuid1.Value.LongUuid, &uuid2.Value.LongUuid, sizeof(GUID))); 343 } else if (uuid1.IsShortUuid) { 344 tempLongUuid.Value.LongUuid.Data1 += uuid1.Value.ShortUuid; 345 return (0 == memcmp(&tempLongUuid, &uuid2.Value.LongUuid, sizeof(GUID))); 346 } else if (uuid2.IsShortUuid) { 347 tempLongUuid.Value.LongUuid.Data1 += uuid2.Value.ShortUuid; 348 return (0 == memcmp(&uuid1.Value.LongUuid, &tempLongUuid.Value.LongUuid, sizeof(GUID))); 349 } 350 return FALSE; 351 } 352 353 #ifdef __cplusplus 354 } 355 #endif 356 357 #endif /* NTDDI_WIN8 */ 358 359 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ 360 361 #endif /* __BTHLEDEF_H__ */