Home | History | Annotate | Download | only in bluetooth
      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