Обнаружение устройства BLE в диапазоне на Win32 - PullRequest
0 голосов
/ 27 февраля 2019

Если устройство имеет службу HID over GATT, Windows автоматически подключится к нему.Таким образом, он явно обращает внимание на то, когда устройство находится в диапазоне.

Для устройств без HID Win32 подключается к устройству BLE только тогда, когда я обращаюсь к нему, например, задаю характеристику или регистрируюдля уведомления.Как я могу определить, когда устройство может быть успешно подключено (находится в зоне действия)?Я испытываю желание просто запустить цикл, пытаясь соединиться, но, конечно, это не может быть лучшим решением.

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы должны использовать Win32 / WinAPI (в отличие от BluetoothLeAdvertisingWatcher , который является классом UWP), вы можете использовать методы из bluetoothapis.h .

Youв основном нужно создать окно прокачки сообщений и обработать входящее 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;        

        ...
    }
}    

Возможно, вы также захотите взглянуть здесь и здесь для некоторых ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...