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} 28DEFINE_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 41DEFINE_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 56typedef 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 73typedef struct _BTH_LE_GATT_SERVICE { 74 BTH_LE_UUID ServiceUuid; 75 USHORT AttributeHandle; 76} BTH_LE_GATT_SERVICE, *PBTH_LE_GATT_SERVICE; 77 78typedef 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 93typedef 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 103typedef 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 114typedef 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 122typedef 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 181typedef enum _BTH_LE_GATT_EVENT_TYPE { 182 CharacteristicValueChangedEvent, 183} BTH_LE_GATT_EVENT_TYPE; 184 185typedef 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