Я пишу программу для планшета Win 8. Мне нужно подключить внешнее устройство BLE. Устройство уже сопряжено с Windows, и я вижу его в диспетчере устройств. Но я не могу понять, как его подключить.Как подключиться к устройству низкой энергии bluetooth
С SetupDiEnumDeviceInfo и SetupDiGetDeviceProperty я могу получить некоторую информацию о BLE-устройства, но для выполнения, например, BluetoothGATTGetServices Устройство ручки требует. Я не знаю, где взять его. Возможно, я смогу использовать CreateFile, но неясно, что подставить в качестве первого аргумента lpFileName.
Вот фрагмент кода, с которым я ищу свое устройство.
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs(
&BluetoothClassGUID, /* GUID_DEVCLASS_BLUETOOTH */
0, 0, DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return ;//1;
}
// Enumerate through all devices in Set.
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
&DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_FRIENDLYNAME,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER){
// Change the buffer size.
if (buffer) delete(buffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
buffer = new wchar_t[buffersize * 2];
}else{
// Insert error handling here.
break;
}
}
/* Here i just compare by name is this my device or not */
...
/* Here i just compare by name is this my device or not */
if (buffer) delete(buffer);
}
if (GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS)
{
// Insert error handling here.
return; //1;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
return;// 0;
я переехал немного дальше, но до сих пор я не могу получить данные из устройства.
Чтобы получить "Path Interface Device" должен был использовать другие функции: SetupDiGetClassDevs, SetupDiEnumDeviceInterfaces и SetupDiGetDeviceInterfaceDetail.
Next, with CreateFile Я получаю устройство HANDLE BLE.
hComm = CreateFile (pInterfaceDetailData-> DevicePath, GENERIC_WRITE | GENERIC_READ, NULL, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Далее с помощью WinAPI BluetoothGATTGetServices и BluetoothGATTGetCharacteristics я получаю соответствующие структуры.
Но при попытке получить значение свойства с BluetoothGATTGetCharacteristicsValue, я получаю ERROR_ACCESS_DENIED.
И тогда я не знаю, что делать. Что может быть неправильным?
Любой прогресс с этим? – Pupsik
Какой интерфейс UUID вы использовали для поиска вашего устройства? GUID_BTHPORT_DEVICE_INTERFACE только вернул внутренний BLE-сканер. – Myon