ERROR_INVALID_HANDLE – identyfikator odbiornika wskazuje na wartość pustÄ… NULL, ERROR_NO_MORE_ITEMS – nie znaleziono wiÄ™cej modułów... 

Każdy jest innym i nikt sobą samym.


2.4.3. Funkcja BluetoothFindRadioClose()
Funkcja BluetoothFindRadioClose() kończy proces wyszukiwania modu-
łów radiowych i zwalnia ich identyfikatory.
BOOL BluetoothFindRadioClose(
HBLUETOOTH_RADIO_FIND hFind
);
Detekcja urządzeń. Część I
49
Parametr hFind jest identyfikatorem modułu radiowego wykrytego uprzednio
dzięki wywołaniu funkcji BluetoothFindFirstRadio(). Prawidłowo
wykonana funkcja zwraca wartość TRUE.
2.4.4. Funkcja BluetoothGetRadioInfo()
Funkcja BluetoothGetRadioInfo() wypełnia pola struktury wskazywanej
przez pRadioInfo informacjami na temat modułu radiowego Bluetooth.
DWORD BluetoothGetRadioInfo(
HANDLE hRadio,
PBLUETOOTH_RADIO_INFO pRadioInfo
);
Identyfikator hRadio zwracany jest przez funkcjÄ™ BluetoothFindFirstRa-
dio() lub SetupDiEnumerateDeviceInterfances() [10]. Prawidłowo wy-
konana funkcja zwraca wartość ERROR_SUCCESS.
Kody ewentualnych błędów to:
ERROR_INVALID_PARAMETER – wskaźniki hRadio lub/i pRadioInfo wska-
zują wartość NULL,
ERROR_REVISION_MISMATCH – rozmiar struktury BLUETOOTH_RADIO_INFO
został niewłaściwie określony i nie został wpisany do pola dwSize.
W polach struktury BLUETOOTH_RADIO_INFO:
typedef struct {
DWORD dwSize;
BLUETOOTH_ADDRESS address;
WCHAR szName[BLUETOOTH_MAX_NAME_SIZE];
ULONG ulClassofDevice;
USHORT lmpSubversion;
USHORT manufacturer;
} BLUETOOTH_RADIO_INFO;
przechowywane są wszystkie istotne informacje na temat modułu radiowego
Bluetooth. W tabeli 2.5 podano jej specyfikacjÄ™.
Tabela 2.5. Specyfikacja struktury BLUETOOTH_RADIO_INFO
Element struktury
Znaczenie
dwSize
Rozmiar struktury w bajtach, który każdorazowo
należy prawidłowo określić za pomocą operatora
sizeof(). W przeciwnym wypadku funkcja
nie będzie działać poprawnie.
address
Adres lokalnego modułu radiowego.
50
Bluetooth. Praktyczne programowanie
szName
Nazwa lokalnego modułu radiowego.
ulClassofDevice
Klasa instalacji lokalnego modułu radiowego.
lmpSubversion
Dane specyfikujące wersje lokalnego modułu
radiowego.
manufacturer
Wartość zapisana w jednostkach
BTH_MFG_Xxx identyfikujÄ…ca producenta
danego modułu radiowego Bluetooth.
Szczegółowe informacje na ten temat
producentów modułów radiowych Bluetooth
dostępne są na stronie www.bluetooth.com.
2.4.5. Przykłady
Na listingu 2.3 zaprezentowano szkielet kodu będącego ilustracją ogólnych
zasad posługiwania się w programie omówionymi wcześniej funkcjami
przeznaczonymi do współpracy z modułami radiowymi oraz będącymi w
zasięgu włączonymi urządzeniami Bluetooth. Na rysunku 2.10 pokazano wynik
działania programu.
Listing 2.3. Skanowanie istniejących modułów radiowych oraz włączonych,
będących w zasięgu zewnętrznych urządzeń Bluetooth
#include <iostream>
#pragma option push -a1
#include <winsock2>
#include "Ws2bth.h"
#include "BluetoothAPIs.h"
#pragma option pop
#pragma comment(lib, "Bthprops.lib")
using namespace std;
BLUETOOTH_FIND_RADIO_PARAMS pbtfrp = {
sizeof(BLUETOOTH_FIND_RADIO_PARAMS)
};
BLUETOOTH_RADIO_INFO pRadioInfo = {
sizeof(BLUETOOTH_RADIO_INFO), 0,
};
BLUETOOTH_DEVICE_SEARCH_PARAMS pbtsp = {
sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS),
TRUE, TRUE, TRUE, TRUE, TRUE, 10 /*12.28 sek*/, NULL
};
Detekcja urządzeń. Część I
51
BLUETOOTH_DEVICE_INFO pbtdi = {
sizeof(BLUETOOTH_DEVICE_INFO), 0,
};
HANDLE phRadio = NULL;
HBLUETOOTH_RADIO_FIND bthRadioFind = NULL;
HBLUETOOTH_DEVICE_FIND hbthDeviceFind = NULL;
int main() {
bthRadioFind = BluetoothFindFirstRadio(&pbtfrp,
&phRadio);
int radioNumber = 0;
do {
radioNumber++;
BluetoothGetRadioInfo(phRadio, &pRadioInfo);
wprintf(L"Master Radio %d:\n", radioNumber);
wprintf(L"\tDevice Name: %s\n",
pRadioInfo.szName);

Tematy