1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 6 #define DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 7 8 #include <windows.h> 9 #include <cfg.h> 10 #include <devpkey.h> 11 #include <setupapi.h> 12 // #include <bthledef.h> 13 // TODO(rpaquay): 14 // bthledef.h from Win8 SDK has a couple of issues when used in a Win32 app: 15 // * line 420: usage of "pragma pop" instead of "pragma warning(pop)" 16 // * line 349: no CALLBACK modifier in the definition of 17 // PFNBLUETOOTH_GATT_EVENT_CALLBACK. 18 // 19 // So, we duplicate the definitions we need and prevent the build from including 20 // the content of bthledef.h. 21 #ifndef __BTHLEDEF_H__ 22 #define __BTHLEDEF_H__ 23 24 // 25 // Bluetooth LE device interface GUID 26 // 27 // {781aee18-7733-4ce4-adb0-91f41c67b592} 28 DEFINE_GUID(GUID_BLUETOOTHLE_DEVICE_INTERFACE, 29 0x781aee18, 30 0x7733, 31 0x4ce4, 32 0xad, 33 0xd0, 34 0x91, 35 0xf4, 36 0x1c, 37 0x67, 38 0xb5, 39 0x92); 40 41 DEFINE_GUID(BTH_LE_ATT_BLUETOOTH_BASE_GUID, 42 0x00000000, 43 0x0000, 44 0x1000, 45 0x80, 46 0x00, 47 0x00, 48 0x80, 49 0x5F, 50 0x9B, 51 0x34, 52 0xFB); 53 54 #define BLUETOOTH_GATT_FLAG_NONE 0x00000000 55 56 typedef struct _BTH_LE_UUID { 57 BOOLEAN IsShortUuid; 58 #ifdef MIDL_PASS 59 [ switch_type(BOOLEAN), switch_is((BOOLEAN)IsShortUuid) ] 60 #endif 61 union { 62 #ifdef MIDL_PASS 63 [case(TRUE)] 64 #endif 65 USHORT ShortUuid; 66 #ifdef MIDL_PASS 67 [case(FALSE)] 68 #endif 69 GUID LongUuid; 70 } Value; 71 } BTH_LE_UUID, *PBTH_LE_UUID; 72 73 typedef struct _BTH_LE_GATT_SERVICE { 74 BTH_LE_UUID ServiceUuid; 75 USHORT AttributeHandle; 76 } BTH_LE_GATT_SERVICE, *PBTH_LE_GATT_SERVICE; 77 78 typedef struct _BTH_LE_GATT_CHARACTERISTIC { 79 USHORT ServiceHandle; 80 BTH_LE_UUID CharacteristicUuid; 81 USHORT AttributeHandle; 82 USHORT CharacteristicValueHandle; 83 BOOLEAN IsBroadcastable; 84 BOOLEAN IsReadable; 85 BOOLEAN IsWritable; 86 BOOLEAN IsWritableWithoutResponse; 87 BOOLEAN IsSignedWritable; 88 BOOLEAN IsNotifiable; 89 BOOLEAN IsIndicatable; 90 BOOLEAN HasExtendedProperties; 91 } BTH_LE_GATT_CHARACTERISTIC, *PBTH_LE_GATT_CHARACTERISTIC; 92 93 typedef struct _BTH_LE_GATT_CHARACTERISTIC_VALUE { 94 ULONG DataSize; 95 96 #ifdef MIDL_PASS 97 [size_is(DataSize)] UCHAR Data[*]; 98 #else 99 _Field_size_bytes_(DataSize) UCHAR Data[1]; 100 #endif 101 } BTH_LE_GATT_CHARACTERISTIC_VALUE, *PBTH_LE_GATT_CHARACTERISTIC_VALUE; 102 103 typedef enum _BTH_LE_GATT_DESCRIPTOR_TYPE { 104 CharacteristicExtendedProperties, 105 CharacteristicUserDescription, 106 ClientCharacteristicConfiguration, 107 ServerCharacteristicConfiguration, 108 CharacteristicFormat, 109 CharacteristicAggregateFormat, 110 CustomDescriptor 111 } BTH_LE_GATT_DESCRIPTOR_TYPE, 112 *PBTH_LE_GATT_DESCRIPTOR_TYPE; 113 114 typedef struct _BTH_LE_GATT_DESCRIPTOR { 115 USHORT ServiceHandle; 116 USHORT CharacteristicHandle; 117 BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 118 BTH_LE_UUID DescriptorUuid; 119 USHORT AttributeHandle; 120 } BTH_LE_GATT_DESCRIPTOR, *PBTH_LE_GATT_DESCRIPTOR; 121 122 typedef struct _BTH_LE_GATT_DESCRIPTOR_VALUE { 123 BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 124 BTH_LE_UUID DescriptorUuid; 125 126 #ifdef MIDL_PASS 127 [ 128 switch_type(BTH_LE_GATT_DESCRIPTOR_TYPE), 129 switch_is((BTH_LE_GATT_DESCRIPTOR_TYPE)DescriptorType) 130 ] 131 #endif 132 union { 133 134 #ifdef MIDL_PASS 135 [case(CharacteristicExtendedProperties)] 136 #endif 137 struct { 138 BOOLEAN IsReliableWriteEnabled; 139 BOOLEAN IsAuxiliariesWritable; 140 } CharacteristicExtendedProperties; 141 142 #ifdef MIDL_PASS 143 [case(ClientCharacteristicConfiguration)] 144 #endif 145 struct { 146 BOOLEAN IsSubscribeToNotification; 147 BOOLEAN IsSubscribeToIndication; 148 } ClientCharacteristicConfiguration; 149 150 #ifdef MIDL_PASS 151 [case(ServerCharacteristicConfiguration)] 152 #endif 153 struct { 154 BOOLEAN IsBroadcast; 155 } ServerCharacteristicConfiguration; 156 157 #ifdef MIDL_PASS 158 [case(CharacteristicFormat)] 159 #endif 160 struct { 161 UCHAR Format; 162 UCHAR Exponent; 163 BTH_LE_UUID Unit; 164 UCHAR NameSpace; 165 BTH_LE_UUID Description; 166 } CharacteristicFormat; 167 #ifdef MIDL_PASS 168 [default]; 169 #endif 170 }; 171 172 ULONG DataSize; 173 174 #ifdef MIDL_PASS 175 [size_is(DataSize)] UCHAR Data[*]; 176 #else 177 _Field_size_bytes_(DataSize) UCHAR Data[1]; 178 #endif 179 } BTH_LE_GATT_DESCRIPTOR_VALUE, *PBTH_LE_GATT_DESCRIPTOR_VALUE; 180 181 typedef enum _BTH_LE_GATT_EVENT_TYPE { 182 CharacteristicValueChangedEvent, 183 } BTH_LE_GATT_EVENT_TYPE; 184 185 typedef ULONG64 BTH_LE_GATT_RELIABLE_WRITE_CONTEXT, 186 *PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT; 187 188 #endif // __BTHLEDEF_H__ 189 #include <bluetoothapis.h> 190 #include <bluetoothleapis.h> 191 192 #endif // DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 193