/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef _INC_BLUETOOTHAPIS
#define _INC_BLUETOOTHAPIS
#include <_mingw.h>
#include <bthdef.h>
#include <bthsdpdef.h>
#define BLUETOOTH_MAX_NAME_SIZE 248
#ifdef __cplusplus
extern "C" {
#endif
typedef LPVOID HBLUETOOTH_DEVICE_FIND;
typedef LPVOID HBLUETOOTH_RADIO_FIND;
typedef LPVOID HBLUETOOTH_AUTHENTICATION_REGISTRATION;
typedef LPVOID HBLUETOOTH_CONTAINER_ELEMENT;
typedef struct _BLUETOOTH_ADDRESS {
__C89_NAMELESS union {
BTH_ADDR ullLong;
BYTE rgBytes[6];
};
} BLUETOOTH_ADDRESS;
typedef struct _BLUETOOTH_COD_PAIRS {
ULONG ulCODMask;
LPCWSTR pcszDescription;
} BLUETOOTH_COD_PAIRS;
typedef struct _BLUETOOTH_DEVICE_INFO {
DWORD dwSize;
BLUETOOTH_ADDRESS Address;
ULONG ulClassofDevice;
WINBOOL fConnected;
WINBOOL fRemembered;
WINBOOL fAuthenticated;
SYSTEMTIME stLastSeen;
SYSTEMTIME stLastUsed;
WCHAR szName[BLUETOOTH_MAX_NAME_SIZE];
} BLUETOOTH_DEVICE_INFO, *PBLUETOOTH_DEVICE_INFO;
typedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {
DWORD dwSize;
WINBOOL fReturnAuthenticated;
WINBOOL fReturnRemembered;
WINBOOL fReturnUnknown;
WINBOOL fReturnConnected;
WINBOOL fIssueInquiry;
UCHAR cTimeoutMultiplier;
HANDLE hRadio;
} BLUETOOTH_DEVICE_SEARCH_PARAMS;
typedef struct _BLUETOOTH_FIND_RADIO_PARAMS {
DWORD dwSize;
} BLUETOOTH_FIND_RADIO_PARAMS;
typedef struct _BLUETOOTH_RADIO_INFO {
DWORD dwSize;
BLUETOOTH_ADDRESS address;
WCHAR szName[BLUETOOTH_MAX_NAME_SIZE];
ULONG ulClassofDevice;
USHORT lmpSubversion;
USHORT manufacturer;
} BLUETOOTH_RADIO_INFO, *PBLUETOOTH_RADIO_INFO;
typedef enum _BLUETOOTH_AUTHENTICATION_METHOD {
BLUETOOTH_AUTHENTICATION_METHOD_LEGACY = 0x1,
BLUETOOTH_AUTHENTICATION_METHOD_OOB,
BLUETOOTH_AUTHENTICATION_METHOD_NUMERIC_COMPARISON,
BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY_NOTIFICATION,
BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY
} BLUETOOTH_AUTHENTICATION_METHOD;
typedef enum _BLUETOOTH_IO_CAPABILITY {
BLUETOOTH_IO_CAPABILITY_DISPLAYONLY = 0x00,
BLUETOOTH_IO_CAPABILITY_DISPLAYYESNO = 0x01,
BLUETOOTH_IO_CAPABILITY_KEYBOARDONLY = 0x02,
BLUETOOTH_IO_CAPABILITY_NOINPUTNOOUTPUT = 0x03,
BLUETOOTH_IO_CAPABILITY_UNDEFINED = 0xff
} BLUETOOTH_IO_CAPABILITY;
typedef enum _BLUETOOTH_AUTHENTICATION_REQUIREMENTS {
MITMProtectionNotRequired = 0x00,
MITMProtectionRequired = 0x01,
MITMProtectionNotRequiredBonding = 0x02,
MITMProtectionRequiredBonding = 0x03,
MITMProtectionNotRequiredGeneralBonding = 0x04,
MITMProtectionRequiredGeneralBonding = 0x05,
MITMProtectionNotDefined = 0xff
} BLUETOOTH_AUTHENTICATION_REQUIREMENTS;
typedef struct _BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS {
BLUETOOTH_DEVICE_INFO deviceInfo;
BLUETOOTH_AUTHENTICATION_METHOD authenticationMethod;
BLUETOOTH_IO_CAPABILITY ioCapability;
BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirements;
__C89_NAMELESS union {
ULONG Numeric_Value;
ULONG Passkey;
} ;
} BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS, *PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS;
#define BLUETOOTH_MAX_SERVICE_NAME_SIZE 256
#define BLUETOOTH_DEVICE_NAME_SIZE 256
typedef struct _BLUETOOTH_LOCAL_SERVICE_INFO {
BOOL Enabled;
BLUETOOTH_ADDRESS btAddr;
WCHAR szName[BLUETOOTH_MAX_SERVICE_NAME_SIZE];
WCHAR szDeviceString[BLUETOOTH_DEVICE_NAME_SIZE];
} BLUETOOTH_LOCAL_SERVICE_INFO;
#define BTH_MAX_PIN_SIZE 16
typedef struct _BLUETOOTH_PIN_INFO {
UCHAR pin[BTH_MAX_PIN_SIZE];
UCHAR pinLength;
} BLUETOOTH_PIN_INFO, *PBLUETOOTH_PIN_INFO;
typedef struct _BLUETOOTH_OOB_DATA_INFO {
UCHAR C[16];
UCHAR R[16];
} BLUETOOTH_OOB_DATA_INFO, *PBLUETOOTH_OOB_DATA_INFO;
typedef struct _BLUETOOTH_NUMERIC_COMPARISON_INFO {
ULONG NumericValue;
} BLUETOOTH_NUMERIC_COMPARISON_INFO, *PBLUETOOTH_NUMERIC_COMPARISON_INFO;
typedef struct _BLUETOOTH_PASSKEY_INFO {
ULONG passkey;
} BLUETOOTH_PASSKEY_INFO, *PBLUETOOTH_PASSKEY_INFO;
typedef struct _BLUETOOTH_AUTHENTICATE_RESPONSE {
BLUETOOTH_ADDRESS bthAddressRemote;
BLUETOOTH_AUTHENTICATION_METHOD authMethod;
__C89_NAMELESS union {
BLUETOOTH_PIN_INFO pinInfo;
BLUETOOTH_OOB_DATA_INFO oobInfo;
BLUETOOTH_NUMERIC_COMPARISON_INFO numericCompInfo;
BLUETOOTH_PASSKEY_INFO passkeyInfo;
};
UCHAR negativeResponse;
} BLUETOOTH_AUTHENTICATE_RESPONSE, *PBLUETOOTH_AUTHENTICATE_RESPONSE;
typedef WINBOOL (*PFN_DEVICE_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
typedef WINBOOL (*CALLBACK PFN_AUTHENTICATION_CALLBACK_EX)(LPVOID pvParam,PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS pAuthCallbackParams);
typedef WINBOOL (*PFN_AUTHENTICATION_CALLBACK)(LPVOID pvParam,PBLUETOOTH_DEVICE_INFO pDevice);
typedef WINBOOL (*PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(ULONG uAttribId,LPBYTE pValueStream,ULONG cbStreamSize,LPVOID pvParam);
typedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS {
DWORD dwSize;
ULONG cNumOfClasses;
BLUETOOTH_COD_PAIRS *prgClassOfDevices;
LPWSTR pszInfo;
HWND hwndParent;
BOOL fForceAuthentication;
BOOL fShowAuthenticated;
BOOL fShowRemembered;
BOOL fShowUnknown;
BOOL fAddNewDeviceWizard;
BOOL fSkipServicesPage;
PFN_DEVICE_CALLBACK pfnDeviceCallback;
LPVOID pvParam;
DWORD cNumDevices;
PBLUETOOTH_DEVICE_INFO pDevices;
} BLUETOOTH_SELECT_DEVICE_PARAMS;
DWORD WINAPI BluetoothAuthenticateMultipleDevices(
HWND hwndParent,
HANDLE hRadio,
DWORD cDevices,
BLUETOOTH_DEVICE_INFO *pbtdi
);
HRESULT WINAPI BluetoothAuthenticateDeviceEx(
HWND hwndParentIn,
HANDLE hRadioIn,
BLUETOOTH_DEVICE_INFO *pbtdiInout,
PBLUETOOTH_OOB_DATA_INFO pbtOobData,
BLUETOOTH_AUTHENTICATION_REQUIREMENTS authenticationRequirement
);
WINBOOL WINAPI BluetoothDisplayDeviceProperties(
HWND hwndParent,
BLUETOOTH_DEVICE_INFO *pbtdi
);
WINBOOL WINAPI BluetoothEnableDiscovery(
HANDLE hRadio,
WINBOOL fEnabled
);
WINBOOL WINAPI BluetoothEnableIncomingConnections(
HANDLE hRadio,
WINBOOL fEnabled
);
DWORD WINAPI BluetoothEnumerateInstalledServices(
HANDLE hRadio,
BLUETOOTH_DEVICE_INFO *pbtdi,
DWORD *pcServices,
GUID *pGuidServices
);
WINBOOL WINAPI BluetoothFindDeviceClose(
HBLUETOOTH_DEVICE_FIND hFind
);
HBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(
BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp,
BLUETOOTH_DEVICE_INFO *pbtdi
);
HBLUETOOTH_RADIO_FIND WINAPI BluetoothFindFirstRadio(
BLUETOOTH_FIND_RADIO_PARAMS *pbtfrp,
HANDLE *phRadio
);
WINBOOL WINAPI BluetoothFindNextDevice(
HBLUETOOTH_DEVICE_FIND hFind,
BLUETOOTH_DEVICE_INFO *pbtdi
);
WINBOOL WINAPI BluetoothFindNextRadio(
HBLUETOOTH_RADIO_FIND hFind,
HANDLE *phRadio
);
WINBOOL WINAPI BluetoothFindRadioClose(
HBLUETOOTH_RADIO_FIND hFind
);
DWORD WINAPI BluetoothGetDeviceInfo(
HANDLE hRadio,
BLUETOOTH_DEVICE_INFO *pbtdi
);
DWORD WINAPI BluetoothGetRadioInfo(
HANDLE hRadio,
PBLUETOOTH_RADIO_INFO pRadioInfo
);
WINBOOL WINAPI BluetoothIsDiscoverable(
HANDLE hRadio
);
WINBOOL WINAPI BluetoothIsConnectable(
HANDLE hRadio
);
DWORD WINAPI BluetoothRegisterForAuthentication(
BLUETOOTH_DEVICE_INFO *pbtdi,
HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandle,
PFN_AUTHENTICATION_CALLBACK pfnCallback,
PVOID pvParam
);
HRESULT WINAPI BluetoothRegisterForAuthenticationEx(
const BLUETOOTH_DEVICE_INFO *pbtdiln,
HBLUETOOTH_AUTHENTICATION_REGISTRATION *phRegHandleOut,
PFN_AUTHENTICATION_CALLBACK_EX pfnCallbackIn,
PVOID pvParam
);
DWORD WINAPI BluetoothRemoveDevice(
BLUETOOTH_ADDRESS *pAddress
);
WINBOOL WINAPI BluetoothSdpEnumAttributes(
LPBYTE pSDPStream,
ULONG cbStreamSize,
PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
LPVOID pvParam
);
DWORD WINAPI BluetoothSdpGetAttributeValue(
LPBYTE pRecordStream,
ULONG cbRecordLength,
USHORT usAttributeId,
PSDP_ELEMENT_DATA pAttributeData
);
DWORD WINAPI BluetoothSdpGetContainerElementData(
LPBYTE pContainerStream,
ULONG cbContainerLength,
HBLUETOOTH_CONTAINER_ELEMENT *pElement,
PSDP_ELEMENT_DATA pData
);
DWORD BluetoothSdpGetElementData(
LPBYTE pSdpStream,
ULONG cbSpdStreamLength,
PSDP_ELEMENT_DATA pData
);
DWORD BluetoothSdpGetString(
LPBYTE pRecordStream,
ULONG cbRecordLength,
PSDP_STRING_TYPE_DATA pStringData,
USHORT usStringOffset,
PWCHAR pszString,
PULONG pcchStringLength
);
WINBOOL WINAPI BluetoothSelectDevices(
BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
);
WINBOOL WINAPI BluetoothSelectDevicesFree(
BLUETOOTH_SELECT_DEVICE_PARAMS *pbtsdp
);
DWORD WINAPI BluetoothSendAuthenticationResponse(
HANDLE hRadio,
BLUETOOTH_DEVICE_INFO *pbtdi,
LPWSTR pszPasskey
);
HRESULT WINAPI BluetoothSendAuthenticationResponseEx(
HANDLE hRadioIn,
PBLUETOOTH_AUTHENTICATE_RESPONSE pauthResponse
);
DWORD WINAPI BluetoothSetLocalServiceInfo(
HANDLE hRadioIn,
const GUID *pClassGuid,
ULONG ulInstance,
const BLUETOOTH_LOCAL_SERVICE_INFO *pServiceInfoIn
);
DWORD WINAPI BluetoothSetServiceState(
HANDLE hRadio,
BLUETOOTH_DEVICE_INFO *pbtdi,
GUID *pGuidService,
DWORD dwServiceFlags
);
WINBOOL WINAPI BluetoothUnregisterAuthentication(
HBLUETOOTH_AUTHENTICATION_REGISTRATION hRegHandle
);
DWORD WINAPI BluetoothUpdateDeviceRecord(
BLUETOOTH_DEVICE_INFO *pbtdi
);
#ifdef __cplusplus
}
#endif
#endif /*_INC_BLUETOOTHAPIS*/