Подключение к устройству 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, но для записи характеристик в любом случае необходим дескриптор устройства.