Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_BLUETOOTHAPIS
      7 #define _INC_BLUETOOTHAPIS
      8 
      9 #include <_mingw.h>
     10 #include <bthdef.h>
     11 #include <bthsdpdef.h>
     12 
     13 #define BLUETOOTH_MAX_NAME_SIZE 248
     14 
     15 #ifdef __cplusplus
     16 extern "C" {
     17 #endif
     18 
     19 typedef LPVOID HBLUETOOTH_DEVICE_FIND;
     20 typedef LPVOID HBLUETOOTH_RADIO_FIND;
     21 typedef LPVOID HBLUETOOTH_AUTHENTICATION_REGISTRATION;
     22 typedef LPVOID HBLUETOOTH_CONTAINER_ELEMENT;
     23 
     24 typedef struct _BLUETOOTH_ADDRESS {
     25   __C89_NAMELESS union {
     26     BTH_ADDR ullLong;
     27     BYTE     rgBytes[6];
     28   };
     29 } BLUETOOTH_ADDRESS;
     30 
     31 typedef struct _BLUETOOTH_COD_PAIRS {
     32   ULONG   ulCODMask;
     33   LPCWSTR pcszDescription;
     34 } BLUETOOTH_COD_PAIRS;
     35 
     36 typedef struct _BLUETOOTH_DEVICE_INFO {
     37   DWORD             dwSize;
     38   BLUETOOTH_ADDRESS Address;
     39   ULONG             ulClassofDevice;
     40   WINBOOL           fConnected;
     41   WINBOOL           fRemembered;
     42   WINBOOL           fAuthenticated;
     43   SYSTEMTIME        stLastSeen;
     44   SYSTEMTIME        stLastUsed;
     45   WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
     46 } BLUETOOTH_DEVICE_INFO, *PBLUETOOTH_DEVICE_INFO;
     47 
     48 typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {
     49   DWORD     dwSize;
     50   WINBOOL   fReturnAuthenticated;
     51   WINBOOL   fReturnRemembered;
     52   WINBOOL   fReturnUnknown;
     53   WINBOOL   fReturnConnected;
     54   WINBOOL   fIssueInquiry;
     55   UCHAR     cTimeoutMultiplier;
     56   HANDLE    hRadio;
     57 } BLUETOOTH_DEVICE_SEARCH_PARAMS;
     58 
     59 typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {
     60   DWORD dwSize;
     61 } BLUETOOTH_FIND_RADIO_PARAMS;
     62 
     63 typedef struct _BLUETOOTH_RADIO_INFO {
     64   DWORD             dwSize;
     65   BLUETOOTH_ADDRESS address;
     66   WCHAR             szName[BLUETOOTH_MAX_NAME_SIZE];
     67   ULONG             ulClassofDevice;
     68   USHORT            lmpSubversion;
     69   USHORT            manufacturer;
     70 } BLUETOOTH_RADIO_INFO, *PBLUETOOTH_RADIO_INFO;
     71 
     72 typedef enum _BLUETOOTH_AUTHENTICATION_METHOD {
     73   BLUETOOTH_AUTHENTICATION_METHOD_LEGACY                 = 0x1,
     74   BLUETOOTH_AUTHENTICATION_METHOD_OOB,
     75   BLUETOOTH_AUTHENTICATION_METHOD_NUMERIC_COMPARISON,
     76   BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY_NOTIFICATION,
     77   BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY
     78 } BLUETOOTH_AUTHENTICATION_METHOD;
     79 
     80 typedef enum _BLUETOOTH_IO_CAPABILITY {
     81   BLUETOOTH_IO_CAPABILITY_DISPLAYONLY       = 0x00,
     82   BLUETOOTH_IO_CAPABILITY_DISPLAYYESNO      = 0x01,
     83   BLUETOOTH_IO_CAPABILITY_KEYBOARDONLY      = 0x02,
     84   BLUETOOTH_IO_CAPABILITY_NOINPUTNOOUTPUT   = 0x03,
     85   BLUETOOTH_IO_CAPABILITY_UNDEFINED         = 0xff
     86 } BLUETOOTH_IO_CAPABILITY;
     87 
     88 typedef enum _BLUETOOTH_AUTHENTICATION_REQUIREMENTS {
     89   MITMProtectionNotRequired                 = 0x00,
     90   MITMProtectionRequired                    = 0x01,
     91   MITMProtectionNotRequiredBonding          = 0x02,
     92   MITMProtectionRequiredBonding             = 0x03,
     93   MITMProtectionNotRequiredGeneralBonding   = 0x04,
     94   MITMProtectionRequiredGeneralBonding      = 0x05,
     95   MITMProtectionNotDefined                  = 0xff
     96 } BLUETOOTH_AUTHENTICATION_REQUIREMENTS;
     97 
     98 typedef struct _BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS {
     99   BLUETOOTH_DEVICE_INFO                 deviceInfo;
    100   BLUETOOTH_AUTHENTICATION_METHOD       authenticationMethod;
    101   BLUETOOTH_IO_CAPABILITY               ioCapability;
    102   BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirements;
    103   __C89_NAMELESS union {
    104     ULONG Numeric_Value;
    105     ULONG Passkey;
    106   } ;
    107 } BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS, *PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS;
    108 
    109 #define BLUETOOTH_MAX_SERVICE_NAME_SIZE 256
    110 #define BLUETOOTH_DEVICE_NAME_SIZE 256
    111 typedef struct _BLUETOOTH_LOCAL_SERVICE_INFO {
    112   BOOL              Enabled;
    113   BLUETOOTH_ADDRESS btAddr;
    114   WCHAR             szName[BLUETOOTH_MAX_SERVICE_NAME_SIZE];
    115   WCHAR             szDeviceString[BLUETOOTH_DEVICE_NAME_SIZE];
    116 } BLUETOOTH_LOCAL_SERVICE_INFO;
    117 
    118 #define BTH_MAX_PIN_SIZE 16
    119 typedef struct _BLUETOOTH_PIN_INFO {
    120   UCHAR pin[BTH_MAX_PIN_SIZE];
    121   UCHAR pinLength;
    122 } BLUETOOTH_PIN_INFO, *PBLUETOOTH_PIN_INFO;
    123 
    124 typedef struct _BLUETOOTH_OOB_DATA_INFO {
    125   UCHAR C[16];
    126   UCHAR R[16];
    127 } BLUETOOTH_OOB_DATA_INFO, *PBLUETOOTH_OOB_DATA_INFO;
    128 
    129 typedef struct _BLUETOOTH_NUMERIC_COMPARISON_INFO {
    130   ULONG NumericValue;
    131 } BLUETOOTH_NUMERIC_COMPARISON_INFO, *PBLUETOOTH_NUMERIC_COMPARISON_INFO;
    132 
    133 typedef struct _BLUETOOTH_PASSKEY_INFO {
    134   ULONG passkey;
    135 } BLUETOOTH_PASSKEY_INFO, *PBLUETOOTH_PASSKEY_INFO;
    136 
    137 typedef struct _BLUETOOTH_AUTHENTICATE_RESPONSE {
    138   BLUETOOTH_ADDRESS               bthAddressRemote;
    139   BLUETOOTH_AUTHENTICATION_METHOD authMethod;
    140   __C89_NAMELESS union {
    141     BLUETOOTH_PIN_INFO                pinInfo;
    142     BLUETOOTH_OOB_DATA_INFO           oobInfo;
    143     BLUETOOTH_NUMERIC_COMPARISON_INFO numericCompInfo;
    144     BLUETOOTH_PASSKEY_INFO            passkeyInfo;
    145   };
    146   UCHAR                           negativeResponse;
    147 } BLUETOOTH_AUTHENTICATE_RESPONSE, *PBLUETOOTH_AUTHENTICATE_RESPONSE;
    148 
    149 typedef WINBOOL (*PFN_DEVICE_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
    150 typedef WINBOOL (*CALLBACK PFN_AUTHENTICATION_CALLBACK_EX)(LPVOID pvParam,PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams);
    151 typedef WINBOOL (*PFN_AUTHENTICATION_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
    152 typedef WINBOOL (*PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(ULONG uAttribId,LPBYTE pValueStream,ULONG cbStreamSize,LPVOID pvParam);
    153 
    154 typedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS {
    155   DWORD                  dwSize;
    156   ULONG                  cNumOfClasses;
    157   BLUETOOTH_COD_PAIRS    *prgClassOfDevices;
    158   LPWSTR                 pszInfo;
    159   HWND                   hwndParent;
    160   BOOL                   fForceAuthentication;
    161   BOOL                   fShowAuthenticated;
    162   BOOL                   fShowRemembered;
    163   BOOL                   fShowUnknown;
    164   BOOL                   fAddNewDeviceWizard;
    165   BOOL                   fSkipServicesPage;
    166   PFN_DEVICE_CALLBACK    pfnDeviceCallback;
    167   LPVOID                 pvParam;
    168   DWORD                  cNumDevices;
    169   PBLUETOOTH_DEVICE_INFO pDevices;
    170 } BLUETOOTH_SELECT_DEVICE_PARAMS;
    171 
    172 DWORD WINAPI BluetoothAuthenticateMultipleDevices(
    173     HWND hwndParent,
    174     HANDLE hRadio,
    175     DWORD cDevices,
    176     BLUETOOTH_DEVICE_INFO *pbtdi
    177 );
    178 
    179 HRESULT WINAPI BluetoothAuthenticateDeviceEx(
    180   HWND hwndParentIn,
    181   HANDLE hRadioIn,
    182   BLUETOOTH_DEVICE_INFO *pbtdiInout,
    183   PBLUETOOTH_OOB_DATA_INFO pbtOobData,
    184   BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirement
    185 );
    186 
    187 WINBOOL WINAPI BluetoothDisplayDeviceProperties(
    188     HWND hwndParent,
    189     BLUETOOTH_DEVICE_INFO *pbtdi
    190 );
    191 
    192 WINBOOL WINAPI BluetoothEnableDiscovery(
    193     HANDLE hRadio,
    194     WINBOOL fEnabled
    195 );
    196 
    197 WINBOOL WINAPI BluetoothEnableIncomingConnections(
    198     HANDLE hRadio,
    199     WINBOOL fEnabled
    200 );
    201 
    202 DWORD WINAPI BluetoothEnumerateInstalledServices(
    203     HANDLE hRadio,
    204     BLUETOOTH_DEVICE_INFO *pbtdi,
    205     DWORD *pcServices,
    206     GUID *pGuidServices
    207 );
    208 
    209 WINBOOL WINAPI BluetoothFindDeviceClose(
    210     HBLUETOOTH_DEVICE_FIND hFind
    211 );
    212 
    213 HBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(
    214     BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp,
    215     BLUETOOTH_DEVICE_INFO *pbtdi
    216 );
    217 
    218 HBLUETOOTH_RADIO_FIND WINAPI BluetoothFindFirstRadio(
    219   BLUETOOTH_FIND_RADIO_PARAMS *pbtfrp,
    220   HANDLE *phRadio
    221 );
    222 
    223 WINBOOL WINAPI BluetoothFindNextDevice(
    224     HBLUETOOTH_DEVICE_FIND hFind,
    225     BLUETOOTH_DEVICE_INFO *pbtdi
    226 );
    227 
    228 WINBOOL WINAPI BluetoothFindNextRadio(
    229   HBLUETOOTH_RADIO_FIND hFind,
    230   HANDLE *phRadio
    231 );
    232 
    233 WINBOOL WINAPI BluetoothFindRadioClose(
    234     HBLUETOOTH_RADIO_FIND hFind
    235 );
    236 
    237 DWORD WINAPI BluetoothGetDeviceInfo(
    238     HANDLE hRadio,
    239     BLUETOOTH_DEVICE_INFO *pbtdi
    240 );
    241 
    242 DWORD WINAPI BluetoothGetRadioInfo(
    243     HANDLE hRadio,
    244     PBLUETOOTH_RADIO_INFO pRadioInfo
    245 );
    246 
    247 WINBOOL WINAPI BluetoothIsDiscoverable(
    248     HANDLE hRadio
    249 );
    250 
    251 WINBOOL WINAPI BluetoothIsConnectable(
    252     HANDLE hRadio
    253 );
    254 
    255 DWORD WINAPI BluetoothRegisterForAuthentication(
    256     BLUETOOTH_DEVICE_INFO *pbtdi,
    257     HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandle,
    258     PFN_AUTHENTICATION_CALLBACK pfnCallback,
    259     PVOID pvParam
    260 );
    261 
    262 HRESULT WINAPI BluetoothRegisterForAuthenticationEx(
    263   const BLUETOOTH_DEVICE_INFO *pbtdiln,
    264   HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandleOut,
    265   PFN_AUTHENTICATION_CALLBACK_EX pfnCallbackIn,
    266   PVOID pvParam
    267 );
    268 
    269 DWORD WINAPI BluetoothRemoveDevice(
    270     BLUETOOTH_ADDRESS *pAddress
    271 );
    272 
    273 WINBOOL WINAPI BluetoothSdpEnumAttributes(
    274     LPBYTE pSDPStream,
    275     ULONG cbStreamSize,
    276     PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
    277     LPVOID pvParam
    278 );
    279 
    280 DWORD WINAPI BluetoothSdpGetAttributeValue(
    281   LPBYTE pRecordStream,
    282   ULONG cbRecordLength,
    283   USHORT usAttributeId,
    284   PSDP_ELEMENT_DATA pAttributeData
    285 );
    286 
    287 DWORD WINAPI BluetoothSdpGetContainerElementData(
    288   LPBYTE pContainerStream,
    289   ULONG cbContainerLength,
    290   HBLUETOOTH_CONTAINER_ELEMENT *pElement,
    291   PSDP_ELEMENT_DATA pData
    292 );
    293 
    294 DWORD BluetoothSdpGetElementData(
    295   LPBYTE pSdpStream,
    296   ULONG cbSpdStreamLength,
    297   PSDP_ELEMENT_DATA pData
    298 );
    299 
    300 DWORD BluetoothSdpGetString(
    301   LPBYTE pRecordStream,
    302   ULONG cbRecordLength,
    303   PSDP_STRING_TYPE_DATA pStringData,
    304   USHORT usStringOffset,
    305   PWCHAR pszString,
    306   PULONG pcchStringLength
    307 );
    308 
    309 WINBOOL WINAPI BluetoothSelectDevices(
    310     BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
    311 );
    312 
    313 WINBOOL WINAPI BluetoothSelectDevicesFree(
    314     BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
    315 );
    316 
    317 DWORD WINAPI BluetoothSendAuthenticationResponse(
    318     HANDLE hRadio,
    319     BLUETOOTH_DEVICE_INFO *pbtdi,
    320     LPWSTR pszPasskey
    321 );
    322 
    323 HRESULT WINAPI BluetoothSendAuthenticationResponseEx(
    324   HANDLE hRadioIn,
    325   PBLUETOOTH_AUTHENTICATE_RESPONSE pauthResponse
    326 );
    327 
    328 DWORD WINAPI BluetoothSetLocalServiceInfo(
    329   HANDLE hRadioIn,
    330   const GUID *pClassGuid,
    331   ULONG ulInstance,
    332   const BLUETOOTH_LOCAL_SERVICE_INFO *pServiceInfoIn
    333 );
    334 
    335 DWORD WINAPI BluetoothSetServiceState(
    336     HANDLE hRadio,
    337     BLUETOOTH_DEVICE_INFO *pbtdi,
    338     GUID *pGuidService,
    339     DWORD dwServiceFlags
    340 );
    341 
    342 WINBOOL WINAPI BluetoothUnregisterAuthentication(
    343     HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle
    344 );
    345 
    346 DWORD WINAPI BluetoothUpdateDeviceRecord(
    347     BLUETOOTH_DEVICE_INFO *pbtdi
    348 );
    349 
    350 #ifdef __cplusplus
    351 }
    352 #endif
    353 
    354 #endif /*_INC_BLUETOOTHAPIS*/
    355 
    356