Bluetooth Low Energy Functions
От: Shimakovsky  
Дата: 05.11.13 15:06
Оценка:
День добрый!

Пишу программку для планшета под 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;
bluetooth windows 8
Re: Bluetooth Low Energy Functions
От: visual_wind  
Дата: 06.11.13 11:41
Оценка: 17 (2)
Здравствуйте, Shimakovsky, Вы писали:

S>Может кто-нибудь подскажет как мне получить handle, а?


По идее для получения хэндла вам еще нужно:
— перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
— затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
— вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.

Посмотрите здесь
Автор:
Дата: 08.10.03
и здесь как это примерно нужно делать.
Re[2]: Bluetooth Low Energy Functions
От: Shimakovsky  
Дата: 09.11.13 10:00
Оценка:
Здравствуйте, visual_wind, Вы писали:

_>Здравствуйте, Shimakovsky, Вы писали:


S>>Может кто-нибудь подскажет как мне получить handle, а?


_>По идее для получения хэндла вам еще нужно:

_> — перечислить интерфейсы устройства с помощью SetupDiEnumDeviceInterfaces
_> — затем узнать детали каждого из интерфейсов с помощью SetupDiGetDeviceInterfaceDetail
_> — вызвать CreateFile по пути, найденному с помощью SetupDiGetDeviceInterfaceDetail для нужного вам интерфейса.

_>Посмотрите здесь
Автор:
Дата: 08.10.03
и здесь как это примерно нужно делать.


Спасибо! Буду дальше разбираться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.