Подключение к устройству BLE в Windows

Я пытаюсь перечислить все устройства BLE в Windows и впоследствии подключиться к определенному устройству.

Первая попытка была использовать BluetoothFindFirstRadio а также BluetoothFindFirstDevice / BluetoothFindNextDevice но это только вернуло устройства с низким энергопотреблением.

Теперь мне удалось получить устройства с помощью Windows Setup-API с SetupDiGetClassDevs, Но использование пути устройства недопустимо для создания файла:

SP_DEVINFO_DATA hDeviceInfo = { sizeof(SP_DEVINFO_DATA) };
for (DWORD i = 0; SetupDiEnumDeviceInfo(hDeviceSet, i, &hDeviceInfo); i++) {

    DEVPROPKEY properties[64] = { 0 };
    DWORD count = 0;
    if (!SetupDiGetDevicePropertyKeys(hDeviceSet, &hDeviceInfo, properties, sizeof(properties), &count, 0)) {
        continue;
    }

    WCHAR propertyBuffer[256] = { 0 };
    DWORD size = 0;
    DEVPROPTYPE propertyType = 0;
    if (!SetupDiGetDeviceProperty(hDeviceSet, &hDeviceInfo, &GUID_DEVATTRIBUTE_PATH, &propertyType, reinterpret_cast<BYTE*>(propertyBuffer), sizeof(propertyBuffer), &size, 0)) {
        continue;
    }

    HANDLE hBle = CreateFile(
        propertyBuffer,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        0,
        NULL
    );

    if (INVALID_HANDLE_VALUE == hBle) {
        DWORD error = GetLastError(); // error = 3 == File not found
        printf("error %i\n", error);
    }

    printf("%i = %ws\n", i, propertyBuffer);

    CloseHandle(hBle);
}

Это не удастся из-за "файл не найден".

Также SetupDiEnumDeviceInterfaces с GUID_BTHPORT_DEVICE_INTERFACE возвращает только внутреннее радио.

Есть идеи, как установить соединение?

Я уже читал этот пост, но никакой информации о том, как получить действительный путь, не предоставлено.

ОБНОВИТЬ:

Вы можете получить дескриптор службы GATT, но для записи характеристик в любом случае необходим дескриптор устройства.

0 ответов

Другие вопросы по тегам