/** * 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*/