Здравствуйте, Shimakovsky, Вы писали:
S>Может кто-нибудь подскажет как мне получить handle, а?
По идее для получения хэндла вам еще нужно:
— перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
— затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
— вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.
Посмотрите
здесьАвтор:
Дата: 08.10.03
и
здесь как это примерно нужно делать.
День добрый!
Пишу программку для планшета под 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;
Здравствуйте, visual_wind, Вы писали:
_>Здравствуйте, Shimakovsky, Вы писали:
S>>Может кто-нибудь подскажет как мне получить handle, а?
_>По идее для получения хэндла вам еще нужно:
_> — перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
_> — затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
_> — вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.
_>Посмотрите здесьАвтор:
Дата: 08.10.03
и здесь как это примерно нужно делать.
Спасибо! Буду дальше разбираться.