Cześć, mam taki problem.
Mam adapter bluetooth 4.0 wpięty pod USB. Do tego mam dwa dalmierze pracujące w tym standardzie - dalmierze jednego producenta.
Potrafię się z nimi połączyć, odczytać z nich dane, ale jedyne, do czego nie mogę dojść, to jak odczytać ich nazwę. Z bardzo ubogiej pseudo-dokumentacji wynika, że urządzenia nie wysyłają takich danych jak nazwa i model, więc pewnie można je wyczytać z Windowsa, który zresztą sam to robi, pokazując odpowiednie nazwy na liście urządzeń. I tu zaczynają się problemy. Z tego, co udało mi się wyczytać, to funkcja
SetupDiGetDeviceRegistryProperty
może mi zwrócić friendly name urządzenia. Problem polega na tym, że jako parametr musi dostać strukturę SP_DEVINFO_DATA
, którą z kolei pobiera się funkcją <code class="cpp">SetupDiEnumDeviceInfo
. I do tej pory wszystko wydaje się jasne i proste. Problem polega na tym, że w taki sposób jestem w stanie pobrać nazwy WSZYSTKICH urządzeń danego producenta (należących do odpowiedniej klasy). A ja bym chciał pobrać nazwę urządzenia, do którego się połączyłem. Z urządzeniem łączę się w następujący sposób:
Funkcja:
SetupDiGetClassDevs(&m_serviceGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
zwraca mi HDEVINFO - podstawowy parametr do dalszej pracy.
Następnie pobieram sobie interfejsy dla tych urządzeń:
SetupDiEnumDeviceInterfaces(m_hDevInfo, NULL, &m_serviceGuid, index++, &data);
gdzie index to DWORD od 0, a data to struktura SP_DEVICE_INTERFACE_DATA
Gdy już mam interfejs, mogę sobie pobrać jego szczegóły:
SetupDiGetDeviceInterfaceDetail(m_hDevInfo, &data, pIfaceDetailData, reqBufferSize, NULL, NULL);
pIfaceDetailData to PSP_DEVICE_INTERFACE_DETAIL_DATA
Dzięki temu mogę odczytać device path, ponieważ ta struktura ma takie pole.
Ten devicePath następnie używam w CreateFile i w taki sposób z grubsza otrzymuję połączenie z urządzeniem.
I teraz pytanie, w jaki sposób pobrać friendly name urządzenia, z którym się połączyłem?