15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <windows.h> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <cfg.h> 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <devpkey.h> 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <setupapi.h> 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// #include <bthledef.h> 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// TODO(rpaquay): 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// bthledef.h from Win8 SDK has a couple of issues when used in a Win32 app: 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// * line 420: usage of "pragma pop" instead of "pragma warning(pop)" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// * line 349: no CALLBACK modifier in the definition of 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// PFNBLUETOOTH_GATT_EVENT_CALLBACK. 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// So, we duplicate the definitions we need and prevent the build from including 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// the content of bthledef.h. 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef __BTHLEDEF_H__ 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __BTHLEDEF_H__ 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Bluetooth LE device interface GUID 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// {781aee18-7733-4ce4-adb0-91f41c67b592} 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DEFINE_GUID(GUID_BLUETOOTHLE_DEVICE_INTERFACE, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x781aee18, 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x7733, 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x4ce4, 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0xad, 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0xd0, 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x91, 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0xf4, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x1c, 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x67, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0xb5, 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x92); 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DEFINE_GUID(BTH_LE_ATT_BLUETOOTH_BASE_GUID, 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x00000000, 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x0000, 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x1000, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x80, 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x00, 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x00, 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x80, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x5F, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x9B, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0x34, 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0xFB); 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define BLUETOOTH_GATT_FLAG_NONE 0x00000000 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_UUID { 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsShortUuid; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [ switch_type(BOOLEAN), switch_is((BOOLEAN)IsShortUuid) ] 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) union { 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(TRUE)] 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT ShortUuid; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(FALSE)] 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GUID LongUuid; 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } Value; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_UUID, *PBTH_LE_UUID; 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_GATT_SERVICE { 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID ServiceUuid; 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT AttributeHandle; 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_SERVICE, *PBTH_LE_GATT_SERVICE; 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_GATT_CHARACTERISTIC { 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT ServiceHandle; 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID CharacteristicUuid; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT AttributeHandle; 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT CharacteristicValueHandle; 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsBroadcastable; 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsReadable; 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsWritable; 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsWritableWithoutResponse; 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsSignedWritable; 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsNotifiable; 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsIndicatable; 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN HasExtendedProperties; 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_CHARACTERISTIC, *PBTH_LE_GATT_CHARACTERISTIC; 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_GATT_CHARACTERISTIC_VALUE { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ULONG DataSize; 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [size_is(DataSize)] UCHAR Data[*]; 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) _Field_size_bytes_(DataSize) UCHAR Data[1]; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_CHARACTERISTIC_VALUE, *PBTH_LE_GATT_CHARACTERISTIC_VALUE; 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef enum _BTH_LE_GATT_DESCRIPTOR_TYPE { 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CharacteristicExtendedProperties, 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CharacteristicUserDescription, 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ClientCharacteristicConfiguration, 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ServerCharacteristicConfiguration, 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CharacteristicFormat, 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CharacteristicAggregateFormat, 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CustomDescriptor 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_DESCRIPTOR_TYPE, 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *PBTH_LE_GATT_DESCRIPTOR_TYPE; 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_GATT_DESCRIPTOR { 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT ServiceHandle; 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT CharacteristicHandle; 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID DescriptorUuid; 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) USHORT AttributeHandle; 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_DESCRIPTOR, *PBTH_LE_GATT_DESCRIPTOR; 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct _BTH_LE_GATT_DESCRIPTOR_VALUE { 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_GATT_DESCRIPTOR_TYPE DescriptorType; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID DescriptorUuid; 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [ 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch_type(BTH_LE_GATT_DESCRIPTOR_TYPE), 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch_is((BTH_LE_GATT_DESCRIPTOR_TYPE)DescriptorType) 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ] 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) union { 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(CharacteristicExtendedProperties)] 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct { 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsReliableWriteEnabled; 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsAuxiliariesWritable; 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } CharacteristicExtendedProperties; 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(ClientCharacteristicConfiguration)] 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct { 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsSubscribeToNotification; 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsSubscribeToIndication; 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } ClientCharacteristicConfiguration; 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(ServerCharacteristicConfiguration)] 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct { 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BOOLEAN IsBroadcast; 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } ServerCharacteristicConfiguration; 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [case(CharacteristicFormat)] 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct { 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UCHAR Format; 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UCHAR Exponent; 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID Unit; 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UCHAR NameSpace; 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BTH_LE_UUID Description; 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } CharacteristicFormat; 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [default]; 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ULONG DataSize; 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef MIDL_PASS 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [size_is(DataSize)] UCHAR Data[*]; 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) _Field_size_bytes_(DataSize) UCHAR Data[1]; 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_DESCRIPTOR_VALUE, *PBTH_LE_GATT_DESCRIPTOR_VALUE; 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef enum _BTH_LE_GATT_EVENT_TYPE { 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CharacteristicValueChangedEvent, 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} BTH_LE_GATT_EVENT_TYPE; 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef ULONG64 BTH_LE_GATT_RELIABLE_WRITE_CONTEXT, 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT; 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // __BTHLEDEF_H__ 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <bluetoothapis.h> 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <bluetoothleapis.h> 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // DEVICE_BLUETOOTH_BLUETOOTH_LOW_ENERGY_DEFS_WIN_H_ 193