From 2139679a1a9e5ed3cfaa54eb7b24d76fb91887df Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <[email protected]>
Date: Mon, 21 Aug 2023 20:19:44 +0530
Subject: [PATCH 1/2] headers: Add bthledef.h

Signed-off-by: Biswapriyo Nath <[email protected]>
---
 mingw-w64-headers/include/bthledef.h | 361 +++++++++++++++++++++++++++
 1 file changed, 361 insertions(+)
 create mode 100644 mingw-w64-headers/include/bthledef.h

diff --git a/mingw-w64-headers/include/bthledef.h 
b/mingw-w64-headers/include/bthledef.h
new file mode 100644
index 0000000..0918d42
--- /dev/null
+++ b/mingw-w64-headers/include/bthledef.h
@@ -0,0 +1,361 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef __BTHLEDEF_H__
+#define __BTHLEDEF_H__
+
+#include <winapifamily.h>
+#include <minwindef.h>
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#if NTDDI_VERSION >= NTDDI_WIN8
+
+DEFINE_GUID(GUID_BLUETOOTHLE_DEVICE_INTERFACE, 0x781aee18, 0x7733, 0x4ce4, 
0xad, 0xd0, 0x91, 0xf4, 0x1c, 0x67, 0xb5, 0x92);
+DEFINE_GUID(GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE, 0x6e3bb679, 0x4372, 
0x40c8, 0x9e, 0xaa, 0x45, 0x09, 0xdf, 0x26, 0x0c, 0xd8);
+DEFINE_GUID(BTH_LE_ATT_BLUETOOTH_BASE_GUID, 0x00000000, 0x0000, 0x1000, 0x80, 
0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb);
+
+#define BTH_LE_SERVICE_GAP (0x1800)
+#define BTH_LE_SERVICE_GATT (0x1801)
+
+#define BTH_LE_GATT_ATTRIBUTE_TYPE_PRIMARY_SERVICE (0x2800)
+#define BTH_LE_GATT_ATTRIBUTE_TYPE_SECONDARY_SERVICE (0x2801)
+#define BTH_LE_GATT_ATTRIBUTE_TYPE_INCLUDE (0x2802)
+#define BTH_LE_GATT_ATTRIBUTE_TYPE_CHARACTERISTIC (0x2803)
+
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_EXTENDED_PROPERTIES (0x2900)
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_USER_DESCRIPTION (0x2901)
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_CLIENT_CONFIGURATION (0x2902)
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_SERVER_CONFIGURATION (0x2903)
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_FORMAT (0x2904)
+#define BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_AGGREGATE_FORMAT (0x2905)
+
+#define BTH_LE_GATT_CHARACTERISTIC_TYPE_DEVICE_NAME (0x2a00)
+#define BTH_LE_GATT_CHARACTERISTIC_TYPE_APPEARANCE (0x2a01)
+#define BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PRIVACY_FLAG (0x2a02)
+#define BTH_LE_GATT_CHARACTERISTIC_TYPE_RECONNECTION_ADDRESS (0x2a03)
+#define 
BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PREFERED_CONNECTION_PARAMETER 
(0x2a04)
+#define BTH_LE_GATT_CHARACTERISTIC_TYPE_SERVICE_CHANGED (0x2a05)
+
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET 0x6
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_MASK 0x3ff
+#define BTH_LE_GAP_APPEARANCE_GET_CATEGORY(a) ((a >> 
BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET) & BTH_LE_GAP_APPEARANCE_CATEGORY_MASK)
+#define BTH_LE_GAP_APPEARANCE_SET_CATEGORY(a, c) a = ((a & 
~BTH_LE_GAP_APPEARANCE_CATEGORY_MASK) | (c << 
BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET))
+#define BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK 0x3f
+#define BTH_LE_GAP_APPEARANCE_GET_SUB_CATEGORY(a) ((UCHAR)(a & 
BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK))
+#define BTH_LE_GAP_APPEARANCE_SET_SUB_CATEGORY(a, s) a = ((a & 
~BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK) | s)
+
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_UNCATEGORIZED 0x0000
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_PHONE 0x0001
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_COMPUTER 0x0002
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_WATCH 0x0003
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_CLOCK 0x0004
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_DISPLAY 0x0005
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_REMOTE_CONTROL 0x0006
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_EYE_GLASSES 0x0007
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_TAG 0x0008
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_KEYRING 0x0009
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_MEDIA_PLAYER 0x000a
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_BARCODE_SCANNER 0x000b
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_THERMOMETER 0x000c
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HEART_RATE 0x000d
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_BLOOD_PRESSURE 0x000e
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HID 0x000f
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_GLUCOSE_METER 0x0010
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_RUNNING_WALKING_SENSOR 0x0011
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_CYCLING 0x0012
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_CONTROL_DEVICE 0x0013
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_NETWORK_DEVICE 0x0014
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_SENSOR 0x0015
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_LIGHT_FIXTURES 0x0016
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_FAN 0x0017
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HVAC 0x0018
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_AIR_CONDITIONING 0x0019
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HUMIDIFIER 0x001a
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HEATING 0x001b
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_ACCESS_CONTROL 0x001c
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_MOTORIZED_DEVICE 0x001d
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_POWER_DEVICE 0x001e
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_LIGHT_SOURCE 0x001f
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_WINDOW_COVERING 0x0020
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_AUDIO_SINK 0x0021
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_AUDIO_SOURCE 0x0022
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_MOTORIZED_VEHICLE 0x0023
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_DOMESTIC_APPLIANCE 0x0024
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_WEARABLE_AUDIO_DEVICE 0x0025
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_AIRCRAFT 0x0026
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_AV_EQUIPMENT 0x0027
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_DISPLAY_EQUIPMENT 0x0028
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_HEARING_AID 0x0029
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_GAMING 0x002a
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_SIGNAGE 0x002b
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_PLUSE_OXIMETER 0x0031
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_WEIGHT_SCALE 0x0032
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_PERSONAL_MOBILITY_DEVICE 0x0033
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_CONTINUOUS_GLUCOSE_MONITOR 0x0034
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_INSULIN_PUMP 0x0035
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_MEDICATION_DELIVERY 0x0036
+#define BTH_LE_GAP_APPEARANCE_CATEGORY_OUTDOOR_SPORTS_ACTIVITY 0x0051
+#define BTH_LE_GAP_APPEARANCE_SUBCATEGORY_GENERIC 0x00
+#define BTH_LE_GAP_APPEARANCE_WATCH_SUBCATEGORY_SPORTS_WATCH 0x01
+#define BTH_LE_GAP_APPEARANCE_THERMOMETER_SUBCATEGORY_EAR 0x01
+#define BTH_LE_GAP_APPEARANCE_HEART_RATE_SUBCATEGORY_HEART_RATE_BELT 0x01
+#define BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_ARM 0x01
+#define BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_WRIST 0x02
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_KEYBOARD 0x01
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_MOUSE 0x02
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_JOYSTICK 0x03
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_GAMEPAD 0x04
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITIZER_TABLET 0x05
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_CARD_READER 0x06
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITAL_PEN 0x07
+#define BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_BARCODE_SCANNER 0x08
+#define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_IN_SHOE 0x01
+#define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_SHOE 0x02
+#define BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_HIP 0x03
+#define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CYCLING_COMPUTER 0x01
+#define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_SENSOR 0x02
+#define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CADENCE_SENSOR 0x03
+#define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_POWER_SENSOR 0x04
+#define BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_AND_CADENCE_SENSOR 0x05
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_STANDALONE_SPEAKER 0x01
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_SOUNDBAR 0x02
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_BOOKSHELF_SPEAKER 0x03
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_STANDMOUNTED_SPEAKER 0x04
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SINK_SUBCATEGORY_SPEAKERPHONE 0x05
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_MICROPHONE 0x01
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_ALARM 0x02
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BELL 0x03
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_HORN 0x04
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BROADCASTING_DEVICE 0x05
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_SERVICE_DESK 0x06
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_KIOSK 0x07
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_BROADCASTING_ROOM 0x08
+#define BTH_LE_GAP_APPEARANCE_AUDIO_SOURCE_SUBCATEGORY_AUDITORIUM 0x09
+#define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_EARBUD 0x01
+#define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_HEADSET 0x02
+#define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_HEADPHONES 0x03
+#define BTH_LE_GAP_APPEARANCE_WEARABLE_AUDIO_DEVICE_SUBCATEGORY_NECKBAND 0x04
+#define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_IN_EAR_HEARING_AID 0x01
+#define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_BEHIND_EAR_HEARING_AID 
0x02
+#define BTH_LE_GAP_APPEARANCE_HEARING_AID_SUBCATEGORY_COCHLEAR_IMPLANT 0x03
+#define BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_FINGERTIP 0x01
+#define BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_WRIST_WORN 0x02
+#define 
BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_DISPLAY_DEVICE
 0x01
+#define 
BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_DISPLAY_DEVICE
 0x02
+#define BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_POD 
0x03
+#define 
BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_POD
 0x04
+
+#define BTH_LE_GATT_DEFAULT_MAX_INCLUDED_SERVICES_DEPTH (3)
+
+#define BTH_LE_ATT_TRANSACTION_TIMEOUT 30
+
+#define BTH_LE_ATT_MAX_VALUE_SIZE 512
+
+#define BTH_LE_ATT_CID (0x0004)
+
+#define BTHLEENUM_ATT_MTU_MIN (23)
+#define BTHLEENUM_ATT_MTU_MAX (0xffff)
+#define BTHLEENUM_ATT_MTU_DEFAULT (BTHLEENUM_ATT_MTU_MIN)
+#define BTHLEENUM_ATT_MTU_INITIAL_NEGOTIATION (525)
+
+#define BTH_LE_ERROR_INVALID_HANDLE (0x01)
+#define BTH_LE_ERROR_READ_NOT_PERMITTED (0x02)
+#define BTH_LE_ERROR_WRITE_NOT_PERMITTED (0x03)
+#define BTH_LE_ERROR_INVALID_PDU (0x04)
+#define BTH_LE_ERROR_INSUFFICIENT_AUTHENTICATION (0x05)
+#define BTH_LE_ERROR_REQUEST_NOT_SUPPORTED (0x06)
+#define BTH_LE_ERROR_INVALID_OFFSET (0x07)
+#define BTH_LE_ERROR_INSUFFICIENT_AUTHORIZATION (0x08)
+#define BTH_LE_ERROR_PREPARE_QUEUE_FULL (0x09)
+#define BTH_LE_ERROR_ATTRIBUTE_NOT_FOUND (0x0a)
+#define BTH_LE_ERROR_ATTRIBUTE_NOT_LONG (0x0b)
+#define BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE (0x0c)
+#define BTH_LE_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH (0x0d)
+#define BTH_LE_ERROR_UNLIKELY (0x0e)
+#define BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION (0x0f)
+#define BTH_LE_ERROR_UNSUPPORTED_GROUP_TYPE (0x10)
+#define BTH_LE_ERROR_INSUFFICIENT_RESOURCES (0x11)
+#define BTH_LE_ERROR_UNKNOWN (0x1000)
+
+#define BLUETOOTH_GATT_FLAG_NONE 0x00000000
+#define BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED 0x00000001
+#define BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED 0x00000002
+#define BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE 0x00000004
+#define BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE 0x00000008
+#define BLUETOOTH_GATT_FLAG_SIGNED_WRITE 0x00000010
+#define BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE 0x00000020
+#define BLUETOOTH_GATT_FLAG_RETURN_ALL 0x00000040
+#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)
+
+#define IS_BLUETOOTH_GATT_FLAG_VALID(f) (0 == (f & 
~BLUETOOTH_GATT_FLAG_VALID_MASK))
+
+typedef HANDLE BLUETOOTH_GATT_EVENT_HANDLE;
+
+typedef struct _BTH_LE_UUID {
+  BOOLEAN IsShortUuid;
+#ifdef __WIDL__
+  [switch_type(BOOLEAN), switch_is((BOOLEAN)IsShortUuid)]
+#endif
+  union {
+#ifdef __WIDL__
+    [case(TRUE)]
+#endif
+    USHORT ShortUuid;
+#ifdef __WIDL__
+    [case(FALSE)]
+#endif
+    GUID LongUuid;
+  } Value;
+} BTH_LE_UUID, *PBTH_LE_UUID;
+
+typedef struct _BTH_LE_GATT_SERVICE {
+  BTH_LE_UUID ServiceUuid;
+  USHORT AttributeHandle;
+} BTH_LE_GATT_SERVICE, *PBTH_LE_GATT_SERVICE;
+
+typedef enum _BTH_LE_GATT_DESCRIPTOR_TYPE {
+  CharacteristicExtendedProperties,
+  CharacteristicUserDescription,
+  ClientCharacteristicConfiguration,
+  ServerCharacteristicConfiguration,
+  CharacteristicFormat,
+  CharacteristicAggregateFormat,
+  CustomDescriptor
+} BTH_LE_GATT_DESCRIPTOR_TYPE, *PBTH_LE_GATT_DESCRIPTOR_TYPE;
+
+typedef struct _BTH_LE_GATT_CHARACTERISTIC {
+  USHORT ServiceHandle;
+  BTH_LE_UUID CharacteristicUuid;
+  USHORT AttributeHandle;
+  USHORT CharacteristicValueHandle;
+  BOOLEAN IsBroadcastable;
+  BOOLEAN IsReadable;
+  BOOLEAN IsWritable;
+  BOOLEAN IsWritableWithoutResponse;
+  BOOLEAN IsSignedWritable;
+  BOOLEAN IsNotifiable;
+  BOOLEAN IsIndicatable;
+  BOOLEAN HasExtendedProperties;
+} BTH_LE_GATT_CHARACTERISTIC, *PBTH_LE_GATT_CHARACTERISTIC;
+
+typedef struct _BTH_LE_GATT_CHARACTERISTIC_VALUE {
+  ULONG DataSize;
+#ifdef __WIDL__
+  [size_is(DataSize)] UCHAR Data[*];
+#else
+  UCHAR Data[1];
+#endif
+} BTH_LE_GATT_CHARACTERISTIC_VALUE, *PBTH_LE_GATT_CHARACTERISTIC_VALUE;
+
+typedef struct _BTH_LE_GATT_DESCRIPTOR {
+  USHORT ServiceHandle;
+  USHORT CharacteristicHandle;
+  BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType;
+  BTH_LE_UUID DescriptorUuid;
+  USHORT AttributeHandle;
+} BTH_LE_GATT_DESCRIPTOR, *PBTH_LE_GATT_DESCRIPTOR;
+
+typedef struct _BTH_LE_GATT_DESCRIPTOR_VALUE {
+  BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType;
+  BTH_LE_UUID DescriptorUuid;
+#ifdef __WIDL__
+  [switch_type(BTH_LE_GATT_DESCRIPTOR_TYPE), 
switch_is((BTH_LE_GATT_DESCRIPTOR_TYPE)DescriptorType)]
+#endif
+  __C89_NAMELESS union {
+#ifdef __WIDL__
+    [case(CharacteristicExtendedProperties)]
+#endif
+    struct {
+      BOOLEAN IsReliableWriteEnabled;
+      BOOLEAN IsAuxiliariesWritable;
+    } CharacteristicExtendedProperties;
+#ifdef __WIDL__
+    [case(ClientCharacteristicConfiguration)]
+#endif
+    struct {
+      BOOLEAN IsSubscribeToNotification;
+      BOOLEAN IsSubscribeToIndication;
+    } ClientCharacteristicConfiguration;
+#ifdef __WIDL__
+    [case(ServerCharacteristicConfiguration)]
+#endif
+    struct {
+      BOOLEAN IsBroadcast;
+    } ServerCharacteristicConfiguration;
+#ifdef __WIDL__
+    [case(CharacteristicFormat)]
+#endif
+    struct {
+      UCHAR Format;
+      UCHAR Exponent;
+      BTH_LE_UUID Unit;
+      UCHAR NameSpace;
+      BTH_LE_UUID Description;
+    } CharacteristicFormat;
+#ifdef __WIDL__
+    [default]
+      ;
+#endif
+  };
+  ULONG DataSize;
+#ifdef __WIDL__
+  [size_is(DataSize)] UCHAR Data[*];
+#else
+  UCHAR Data[1];
+#endif
+} BTH_LE_GATT_DESCRIPTOR_VALUE, *PBTH_LE_GATT_DESCRIPTOR_VALUE;
+
+typedef enum _BTH_LE_GATT_EVENT_TYPE {
+  CharacteristicValueChangedEvent
+} BTH_LE_GATT_EVENT_TYPE;
+
+typedef VOID (CALLBACK 
*PFNBLUETOOTH_GATT_EVENT_CALLBACK)(BTH_LE_GATT_EVENT_TYPE EventType, PVOID 
EventOutParameter, PVOID Context);
+
+typedef struct _BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION {
+  USHORT NumCharacteristics;
+  BTH_LE_GATT_CHARACTERISTIC Characteristics[1];
+} BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION, 
*PBLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION;
+
+typedef struct _BLUETOOTH_GATT_VALUE_CHANGED_EVENT {
+  USHORT ChangedAttributeHandle;
+  size_t CharacteristicValueDataSize;
+  PBTH_LE_GATT_CHARACTERISTIC_VALUE CharacteristicValue;
+} BLUETOOTH_GATT_VALUE_CHANGED_EVENT, *PBLUETOOTH_GATT_VALUE_CHANGED_EVENT;
+
+typedef ULONG64 BTH_LE_GATT_RELIABLE_WRITE_CONTEXT, 
*PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT;
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+FORCEINLINE BOOLEAN IsBthLEUuidMatch(BTH_LE_UUID uuid1, BTH_LE_UUID uuid2) {
+  BTH_LE_UUID tempLongUuid = {0};
+  tempLongUuid.IsShortUuid = FALSE;
+  tempLongUuid.Value.LongUuid = BTH_LE_ATT_BLUETOOTH_BASE_GUID;
+  if (uuid1.IsShortUuid && uuid2.IsShortUuid) {
+    return (uuid1.Value.ShortUuid == uuid2.Value.ShortUuid);
+  } else if (!uuid1.IsShortUuid && !uuid2.IsShortUuid) {
+    return (0 == memcmp(&uuid1.Value.LongUuid, &uuid2.Value.LongUuid, 
sizeof(GUID)));
+  } else if (uuid1.IsShortUuid) {
+    tempLongUuid.Value.LongUuid.Data1 += uuid1.Value.ShortUuid;
+    return (0 == memcmp(&tempLongUuid, &uuid2.Value.LongUuid, sizeof(GUID)));
+  } else if (uuid2.IsShortUuid) {
+    tempLongUuid.Value.LongUuid.Data1 += uuid2.Value.ShortUuid;
+    return (0 == memcmp(&uuid1.Value.LongUuid, &tempLongUuid.Value.LongUuid, 
sizeof(GUID)));
+  }
+  return FALSE;
+}
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif /* NTDDI_WIN8 */
+
+#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
+
+#endif /* __BTHLEDEF_H__ */
-- 
2.41.0

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to