如果设备具有通过GATT服务的HID,则Windows将自动连接到该设备。因此,很明显,它在注意设备何时处于范围内。
对于非HID设备,Win32仅在我向BLE设备发出请求(例如设置特征或注册通知)时才连接到BLE设备。如何检测设备何时可以成功连接(在范围内)?我很想尝试运行一个循环来尝试连接,但是可以肯定那不是最好的解决方案。
答案 0 :(得分:0)
如果必须使用Win32 / WinAPI(与UWP类的BluetoothLeAdvertisementWatcher相反),则可以使用bluetoothapis.h中的方法。
您基本上需要创建一个消息泵送窗口,并处理传入的WM_DEVICECHANGE
事件。像这样:
INT_PTR BleListener::EventLoopHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT result = 1;
DEBUG_PRINT(TEXT("Message: 0x%04x\n"), message);
switch (message)
{
case WM_DEVICECHANGE:
{
DEV_BROADCAST_HDR* hdr;
DEV_BROADCAST_HANDLE* bhandle;
if (wParam == DBT_CUSTOMEVENT)
{
hdr = (DEV_BROADCAST_HDR*)lParam;
if (hdr->dbch_devicetype == DBT_DEVTYP_HANDLE)
{
bhandle = (DEV_BROADCAST_HANDLE*)lParam;
if (bhandle->dbch_eventguid == GUID_BLUETOOTH_RADIO_IN_RANGE)
{
BTH_DEVICE_INFO* info = (BTH_DEVICE_INFO*)bhandle->dbch_data;
DEBUG_PRINT(TEXT("GUID_BLUETOOTH_RADIO_IN_RANGE. Address = 0x%llx\n"), info->address);
}
}
else if (bhandle->dbch_eventguid == GUID_BLUETOOTH_HCI_EVENT)
{
...
}
};
break;
...
}
}