Professional Documents
Culture Documents
Laboratorium 14
Bluetooth komunikacja z telefonem komrkowym
Strona: 1/7
1. Zadania do wykonania
Celem wiczenia byo napisanie programu realizujcego komunikacj midzy adapterem Bluetooth, a
telefonem posiadajcym tak technologi. W ramach realizacji wiczenia naleao zaimplementowa
metody wykrywajce adaptery Bluetooth podczone do komputera, szukajce w pobliu aktywnych
urzdze, autoryzujce poczenie midzy komputerem a wybranym urzdzeniem oraz przesyajce
pliki do urzdzenia Bluetooth.
2. Wstp teoretyczny
Technologia
Bluetooth
jest
technologi
komunikacji
krtkiego
zasigu
pomidzy
rnymi
urzdzeniami elektronicznymi takimi jak komputer, telefon komrkowy czy inne urzdzenia
peryferyjne. Kade urzdzenie komunikujce si poprzez Bluetooth posiada specjalny adapter
umoliwiajcy bezprzewodowe porozumiewanie si. Technologia oparta jest na czu radiowym
dziaa w pamie 2,4GHz, wykorzystuje modulacj FSK i zapewnia przepustowo do 5MB/s (Bluetooth
3.1 + High Speed). Urzdzenia Bluetooth charakteryzuj si stosunkowo maym poborem mocy i
ograniczonym zasigiem (odpowiednio 100m klasa 1, 10m klasa II, lub 1m klasa III w otwartej przestrzeni).
pocze sieciowych bez wzgldu na uywany protok sieciowy i warstw, w ktrej dziaa aplikacja.
BluetoothAPIs.h
Bluetooth API,
zawiera
midzy
innymi
funkcje
zarzdzajce
3. Opis programu
W ramach wykonywania wiczenia zosta napisany program konsolowy realizujcy zagadnienia
wymienione w punkcie 1 niniejszego sprawozdania.
3.1 Wykrywanie adapterw
Pierwsz rzecz, ktr trzeba byo oprogramowa byo wykrywanie aktywnych adapterw Bluetooth.
Do
tego
wykorzystywana
jest
tablica
uchwytw
adaptery[MAX_ILOSC_ADAPTEROW],
gdzie
MAX_ILOSC_ADAPTEROW jest sta okrelajc ile adapterw moemy maksymalnie obsugiwa oraz
struktur BLUETOOTH_FIND_RADIO_PARAMS
adaptery Bluetooth. Wykryte urzdzenie przechowuje uchwyt uchwyt_adaptera. Jeli jest on rwny
NULL
to
komputer
nie
znalaz
adnych
podczonych
Strona: 2/7
adapterw.
Korzystamy
funkcji
BluetoothFindFirstRadio, ktra jak sama nazwa wskazuje szuka pierwszego aktywnego urzdzenia
Bluetooth:
Listing 1: Szukanie pierwszego adaptera Bluetooth
BLUETOOTH_FIND_RADIO_PARAMS struktura_BFRP = { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) };
Jeeli wynik dziaania funkcji BluetoothFindFirstRadio bdzie rny od NULL prowadzimy dalsze
poszukiwania podczonych adapterw (jeli takie istniej). W tym celu korzystamy z funkcji
BluetoothFindNextRadio. Kady znaleziony adapter dodajemy do tablicy adapters.
Listing 2: Wykrywanie pozostaych adapterw
if (uchwyt_adaptera == NULL)
cout << "Brak dostepnych adapterow" << endl;
else
{
znalezione_adaptery++;
while (BluetoothFindNextRadio(&struktura_BFRP, &adaptery[znalezione_adaptery]))
{
znalezione_adaptery++;
if (znalezione_adaptery == MAX_ILOSC_ADAPTEROW - 1)
{
cout << "Nie mozna podlaczyc wiecej adapterow";
break;
}
}
}
BluetoothFindRadioClose(uchwyt_adaptera);
Listing 2 zawiera rwnie obsug bdw a take ptl drukujc informacje o dostpnych
adapterach poprzez wywoywanie metody wywietl_info_adaptera. Ciao tej funkcji przedstawia
Listing 3. Kolejny raz uywamy gotowej funkcji, tym razem BluetoothGetRadioInfo pozwalajcej
uzyska informacje na temat konkretnego adaptera Bluetooth.
Strona: 3/7
cout << "Adapter " << i << " - " << struktura_info_adaptera.szName <<endl;
cout << " MAC: " << hex << (int)struktura_info_adaptera.address.rgBytes[0] << ":" <<
(int)struktura_info_adaptera.address.rgBytes[1] << ":"
<< (int)struktura_info_adaptera.address.rgBytes[2] << ":" <<
(int)struktura_info_adaptera.address.rgBytes[3] << ":"
<< (int)struktura_info_adaptera.address.rgBytes[4] << ":" <<
(int)struktura_info_adaptera.address.rgBytes[5] << endl;
cout << "Klasa adaptera: " << struktura_info_adaptera.ulClassofDevice << endl;
cout << "Producent: " << struktura_info_adaptera.manufacturer << endl;
}
Uytkownik otrzyma informacje na temat adapterw, moe wic zdecydowa, z ktrego chce
korzysta:
Strona: 4/7
uchwyt_urzadzenia = BluetoothFindFirstDevice(¶metry_szukania_urzadzen,
&struktura_info_urzadzenia[0]);
//autoryzacja
BluetoothAuthenticateDeviceEx(NULL, adaptery[wybrany_adapter],
&struktura_info_urzadzenia[znalezione_urzadzenia], NULL, MITMProtectionRequired);
BluetoothFindDeviceClose(uchwyt_urzadzenia);
Strona: 5/7
int wybrane_urzadzenie = 0;
cout << "Wprowadz numer wybranego urzadzenia: ";
cin >> wybrane_urzadzenie;
cout << endl;
if (gniazdo == INVALID_SOCKET){
cout << "Wystapil blad - niewlasciwe gniazdo" << endl;
return 0;}
}
Strona: 6/7
else {
SOCKADDR_BTH sa;
sa.addressFamily = AF_BTH;
sa.btAddr = struktura_info_urzadzenia[wybrane_urzadzenie].Address.ullLong;
sa.port = (ULONG)BT_PORT_ANY;
sa.serviceClassId = OBEXObjectPushServiceClass_UUID;
_getch();
if (r != 0) {
cout << "Wystapil blad podczas laczenia" << endl;
cout << r;
_getch();
closesocket(gniazdo);
WSACleanup();}
Dane mona wysya na przykad korzystajc z protokou OBEX. Niestety wysyanie plikw nie dziaao
do koca poprawnie. O ile kolejne bity byy wysyane to problem polega na braku odbioru paczek ze
strony urzdzenia odbierajcego dane. Z tego powodu fragment kodu odpowiadajcy za wysyanie
jest pominity.
4. Podsumowanie i wnioski
Realizacja zaj laboratoryjnych pozwolia nam zapozna si z moliwociami pisania programw
zapewniajcych komunikacj w technologii Bluetooth midzy komputerem a odbiornikiem - w naszym
przypadku telefonem komrkowym. Korzystanie z gotowych plikw nagwkowych znacznie uatwiao
osignicie niektrych celw, jednak najwicej problemw sprawiao poprawne wysyanie plikw
protokoem OBEX. Wymaga to od dewelopera oprogramowania wszystkich etapw przesyania pliku
poczynajc od sprawdzenia rozmiaru i zawartoci pliku a koczc na przesyaniu kolejnych pakietw,
w tym odpowiednio dobranych paczek z daniami connect czy disconnect.
Strona: 7/7