День добрый!
Пишу программку для планшета под Win 8(не RT). Задача подключить внешнее BLE устройство используя встроенный BT планшета (он поддерживает BLE).
Само устройство уже спарено с виндой и его видно в Диспетчере устройств. А вот как к нему подключиться я никак не могу разобраться.
С помощью
SetupDiEnumDeviceInfo и
SetupDiGetDeviceProperty я даже какую-то информацию о нем могу получить, но для выполнения, например,
BluetoothGATTGetServices
требуется Handle устройства. Где его брать не понимаю. Если использовать
CreateFile, то не понятно что подставлять в качестве первого аргумента lpFileName.
Вот ссылка на
msdn.
Вот кусок кода с помощью которого я ищу свою BLE-шнягу.
Может кто-нибудь подскажет как мне получить handle, а?
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs(
&BluetoothClassGUID, /* GUID_DEVCLASS_BLUETOOTH */
0, // Enumerator
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;
}
}
/* тут просто сравниваю по имени мое устройство или нет */
...
/* тут просто сравниваю по имени мое устройство или нет */
if (buffer) delete(buffer);
}
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return; //1;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
return;// 0;
Здравствуйте, Shimakovsky, Вы писали:
S>Может кто-нибудь подскажет как мне получить handle, а?
По идее для получения хэндла вам еще нужно:
— перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
— затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
— вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.
Посмотрите
здесьАвтор:
Дата: 08.10.03
и
здесь как это примерно нужно делать.
Здравствуйте, visual_wind, Вы писали:
_>Здравствуйте, Shimakovsky, Вы писали:
S>>Может кто-нибудь подскажет как мне получить handle, а?
_>По идее для получения хэндла вам еще нужно:
_> — перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
_> — затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
_> — вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.
_>Посмотрите здесьАвтор:
Дата: 08.10.03
и здесь как это примерно нужно делать.
Спасибо! Буду дальше разбираться.