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
16extern "C" {
17#endif
18
19typedef LPVOID HBLUETOOTH_DEVICE_FIND;
20typedef LPVOID HBLUETOOTH_RADIO_FIND;
21typedef LPVOID HBLUETOOTH_AUTHENTICATION_REGISTRATION;
22typedef LPVOID HBLUETOOTH_CONTAINER_ELEMENT;
23
24typedef struct _BLUETOOTH_ADDRESS {
25  __C89_NAMELESS union {
26    BTH_ADDR ullLong;
27    BYTE     rgBytes[6];
28  };
29} BLUETOOTH_ADDRESS;
30
31typedef struct _BLUETOOTH_COD_PAIRS {
32  ULONG   ulCODMask;
33  LPCWSTR pcszDescription;
34} BLUETOOTH_COD_PAIRS;
35
36typedef 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
48typedef 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
59typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {
60  DWORD dwSize;
61} BLUETOOTH_FIND_RADIO_PARAMS;
62
63typedef 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
72typedef 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
80typedef 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
88typedef 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
98typedef 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
111typedef 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
119typedef struct _BLUETOOTH_PIN_INFO {
120  UCHAR pin[BTH_MAX_PIN_SIZE];
121  UCHAR pinLength;
122} BLUETOOTH_PIN_INFO, *PBLUETOOTH_PIN_INFO;
123
124typedef struct _BLUETOOTH_OOB_DATA_INFO {
125  UCHAR C[16];
126  UCHAR R[16];
127} BLUETOOTH_OOB_DATA_INFO, *PBLUETOOTH_OOB_DATA_INFO;
128
129typedef struct _BLUETOOTH_NUMERIC_COMPARISON_INFO {
130  ULONG NumericValue;
131} BLUETOOTH_NUMERIC_COMPARISON_INFO, *PBLUETOOTH_NUMERIC_COMPARISON_INFO;
132
133typedef struct _BLUETOOTH_PASSKEY_INFO {
134  ULONG passkey;
135} BLUETOOTH_PASSKEY_INFO, *PBLUETOOTH_PASSKEY_INFO;
136
137typedef 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
149typedef WINBOOL (*PFN_DEVICE_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
150typedef WINBOOL (*CALLBACK PFN_AUTHENTICATION_CALLBACK_EX)(LPVOID pvParam,PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams);
151typedef WINBOOL (*PFN_AUTHENTICATION_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
152typedef WINBOOL (*PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(ULONG uAttribId,LPBYTE pValueStream,ULONG cbStreamSize,LPVOID pvParam);
153
154typedef 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
172DWORD WINAPI BluetoothAuthenticateMultipleDevices(
173    HWND hwndParent,
174    HANDLE hRadio,
175    DWORD cDevices,
176    BLUETOOTH_DEVICE_INFO *pbtdi
177);
178
179HRESULT 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
187WINBOOL WINAPI BluetoothDisplayDeviceProperties(
188    HWND hwndParent,
189    BLUETOOTH_DEVICE_INFO *pbtdi
190);
191
192WINBOOL WINAPI BluetoothEnableDiscovery(
193    HANDLE hRadio,
194    WINBOOL fEnabled
195);
196
197WINBOOL WINAPI BluetoothEnableIncomingConnections(
198    HANDLE hRadio,
199    WINBOOL fEnabled
200);
201
202DWORD WINAPI BluetoothEnumerateInstalledServices(
203    HANDLE hRadio,
204    BLUETOOTH_DEVICE_INFO *pbtdi,
205    DWORD *pcServices,
206    GUID *pGuidServices
207);
208
209WINBOOL WINAPI BluetoothFindDeviceClose(
210    HBLUETOOTH_DEVICE_FIND hFind
211);
212
213HBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(
214    BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp,
215    BLUETOOTH_DEVICE_INFO *pbtdi
216);
217
218HBLUETOOTH_RADIO_FIND WINAPI BluetoothFindFirstRadio(
219  BLUETOOTH_FIND_RADIO_PARAMS *pbtfrp,
220  HANDLE *phRadio
221);
222
223WINBOOL WINAPI BluetoothFindNextDevice(
224    HBLUETOOTH_DEVICE_FIND hFind,
225    BLUETOOTH_DEVICE_INFO *pbtdi
226);
227
228WINBOOL WINAPI BluetoothFindNextRadio(
229  HBLUETOOTH_RADIO_FIND hFind,
230  HANDLE *phRadio
231);
232
233WINBOOL WINAPI BluetoothFindRadioClose(
234    HBLUETOOTH_RADIO_FIND hFind
235);
236
237DWORD WINAPI BluetoothGetDeviceInfo(
238    HANDLE hRadio,
239    BLUETOOTH_DEVICE_INFO *pbtdi
240);
241
242DWORD WINAPI BluetoothGetRadioInfo(
243    HANDLE hRadio,
244    PBLUETOOTH_RADIO_INFO pRadioInfo
245);
246
247WINBOOL WINAPI BluetoothIsDiscoverable(
248    HANDLE hRadio
249);
250
251WINBOOL WINAPI BluetoothIsConnectable(
252    HANDLE hRadio
253);
254
255DWORD WINAPI BluetoothRegisterForAuthentication(
256    BLUETOOTH_DEVICE_INFO *pbtdi,
257    HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandle,
258    PFN_AUTHENTICATION_CALLBACK pfnCallback,
259    PVOID pvParam
260);
261
262HRESULT WINAPI BluetoothRegisterForAuthenticationEx(
263  const BLUETOOTH_DEVICE_INFO *pbtdiln,
264  HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandleOut,
265  PFN_AUTHENTICATION_CALLBACK_EX pfnCallbackIn,
266  PVOID pvParam
267);
268
269DWORD WINAPI BluetoothRemoveDevice(
270    BLUETOOTH_ADDRESS *pAddress
271);
272
273WINBOOL WINAPI BluetoothSdpEnumAttributes(
274    LPBYTE pSDPStream,
275    ULONG cbStreamSize,
276    PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
277    LPVOID pvParam
278);
279
280DWORD WINAPI BluetoothSdpGetAttributeValue(
281  LPBYTE pRecordStream,
282  ULONG cbRecordLength,
283  USHORT usAttributeId,
284  PSDP_ELEMENT_DATA pAttributeData
285);
286
287DWORD WINAPI BluetoothSdpGetContainerElementData(
288  LPBYTE pContainerStream,
289  ULONG cbContainerLength,
290  HBLUETOOTH_CONTAINER_ELEMENT *pElement,
291  PSDP_ELEMENT_DATA pData
292);
293
294DWORD BluetoothSdpGetElementData(
295  LPBYTE pSdpStream,
296  ULONG cbSpdStreamLength,
297  PSDP_ELEMENT_DATA pData
298);
299
300DWORD BluetoothSdpGetString(
301  LPBYTE pRecordStream,
302  ULONG cbRecordLength,
303  PSDP_STRING_TYPE_DATA pStringData,
304  USHORT usStringOffset,
305  PWCHAR pszString,
306  PULONG pcchStringLength
307);
308
309WINBOOL WINAPI BluetoothSelectDevices(
310    BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
311);
312
313WINBOOL WINAPI BluetoothSelectDevicesFree(
314    BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
315);
316
317DWORD WINAPI BluetoothSendAuthenticationResponse(
318    HANDLE hRadio,
319    BLUETOOTH_DEVICE_INFO *pbtdi,
320    LPWSTR pszPasskey
321);
322
323HRESULT WINAPI BluetoothSendAuthenticationResponseEx(
324  HANDLE hRadioIn,
325  PBLUETOOTH_AUTHENTICATE_RESPONSE pauthResponse
326);
327
328DWORD WINAPI BluetoothSetLocalServiceInfo(
329  HANDLE hRadioIn,
330  const GUID *pClassGuid,
331  ULONG ulInstance,
332  const BLUETOOTH_LOCAL_SERVICE_INFO *pServiceInfoIn
333);
334
335DWORD WINAPI BluetoothSetServiceState(
336    HANDLE hRadio,
337    BLUETOOTH_DEVICE_INFO *pbtdi,
338    GUID *pGuidService,
339    DWORD dwServiceFlags
340);
341
342WINBOOL WINAPI BluetoothUnregisterAuthentication(
343    HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle
344);
345
346DWORD WINAPI BluetoothUpdateDeviceRecord(
347    BLUETOOTH_DEVICE_INFO *pbtdi
348);
349
350#ifdef __cplusplus
351}
352#endif
353
354#endif /*_INC_BLUETOOTHAPIS*/
355
356