Referát z předmětu 36PZ

Úloha D: USB

Skupina D: Duben, Fialka, Pechanec, Saidl
(zpět na seznam úloh)


 
Zadání
Úkolem této laboratorní úlohy je seznámit se se sběrnicí USB, pochopit její strukturu z pohledu programátora a napsat velmi jednoduchý program, který bude přijímat data ze zařízení připojeného na sběrnici.
Konkrétně se bude používat operační systém Linux a knihovna libusb. Nejprve je třeba zkompilovat a spustit ukázkový program testlibusb.c a s jeho pomocí zjistit informace o všech USB zařízeních přítomných v systému. Hlavní část úlohy je nalézt zařízení poskytující data v režimu interrupt a napsat program, jež umožní tato data přijmout a analyzovat.

Výpis zařízení
Zařízení připojitelných na USB sběrnici existuje mnoho různých tříd. Aby mohl operační systém rozpoznat, o jaké zařízení se jedná, umožňuje komunikační protokol na USB zjistit informace o připojených zařízeních.

Pomocí programu testlibusb jsme obdrželi výpis zařízení připojených do systému:

Zařízení: USB ROOT HUB (celkem 3x)
Třída:
9 - HUB

Zřízení: USB kamera (product id 0518)
Výrobce: OmniVision Technologies, Inc. (vendor id 05A9)
Maximální odběr: 250 mA
Třída: 255 - ostatní zařízení (kamery by měly spadat do třídy 6)

Počet rozhraní: 1
Počet alternativních nastavení: 8 (liší se velikostí vysílaného paketu)
Velikost paketu: 0 - 896B
Počet koncových bodů: 1 (adresa 81h)
Režim přenosu dat: ?



Zřízení:  USB myš(product id 0001)
Výrobce: neuveden (vendor id 0458)
Maximální odběr: 50 mA
Třída: 3 - HID - Human Interface Device
       Podtída: 1.2 - myši
Počet rozhraní: 1
Počet alternativních nastavení: 1
Velikost paketu: 8B
Počet koncových bodů: 1 (adresa 81h)
Režim přenosu dat: Interrupt


Získávání dat ze zařízení
Pro získání dat byla vybrána USB myš, protože poskytuje data v režimu interrupt, který je pro to nejvhodnější. Program na přijímání dat jsme vytvořili upravením testovacího programu testlibusb.c. V programu jsme v cyklu procházeli všechna připojená zařízení, dokud se nenarazilo na zařízení s vendor id = 0458, čímž jsme nalezli myš. Tu jsme pak aktivovali pomocí funkce usb_claim_interface a z koncového bodu na adrese 81h četli data do bufferu o velikosti 8 bytů (8 bytů je maximální velikost paketu vysílaného použitou myší). Získaná data jsme vypisovali v hexadecimálním tvaru.

příklad získaných dat - výpis hexadecimálně po osmi bytech na řádek

1 0 0 62 2F 6C 64 2D
0 1 0 62 2F 6C 64 2D
1 0 0 62 2F 6C 64 2D
1 FF 0 62 2F 6C 64 2D
0 0 0 62 2F 6C 64 2D
2 0 0 62 2F 6C 64 2D
2 1 0 62 2F 6C 64 2D
0 0 0 62 2F 6C 64 2D
4 0 0 62 2F 6C 64 2D
4 FF 0 62 2F 6C 64 2D
0 0 0 62 2F 6C 64 2D
0 FD 0 62 2F 6C 64 2D
0 FC 0 62 2F 6C 64 2D
0 FE 0 62 2F 6C 64 2D

...

0 FE FD 62 2F 6C 64 2D
0 FE FD 62 2F 6C 64 2D
0 0 FA 62 2F 6C 64 2D
0 FF F8 62 2F 6C 64 2D
0 0 EC 62 2F 6C 64 2D
0 0 ED 62 2F 6C 64 2D
0 FE EB 62 2F 6C 64 2D
0 0 E0 62 2F 6C 64 2D
0 FF E3 62 2F 6C 64 2D
0 0 EE 62 2F 6C 64 2D

Analýzou získaných dat a toho, jak korespondují s pohyby myši jsme dospěli k následujícímu závěru. První byte z každého paketu nese informaci o stisknutí tlačítka - 1 znamená levé tlačítko, 2 pravé tlačítko a 4 prostřední tlačítko. Současný stisk více tlačítek se zřejmě projeví jako součet těchto hodnot (neověřená hypotéza). Druhý a třetí byte informují o pohybech myši ve směrech dvou souřadných os (v doplňkvém kódu). Posledních 5 bytů se nemění a zřejmě nemá u testované myši žádný váznam.

Závěr
V této laboratorní úloze jsme měli možnost zjistit, jak pracuje sběrnice USB. Naučili jsme se pracovat s knihovnou libusb pod Linuxem a zjistili jsme, jakým způsobem se zjišťují informace o jendotlivých připojených zařízeních. Podařilo se nám také napsat a úspěšně spustit vlastní program, jež je schopen nalézt konkrétní zařízení podle jeho čidentifikačního čísla a z tohoto zařízení číst data. Pro čtení a následnou analýzu dat byla vybrána USB myš. Během odlaďování programu bylo třeba několikrát ručně odstraňovat ovladače mousedev a hid, které systém sám pro myš zavádí. Tyto ovladače bránily našemu programu v činnosti a proto bylo třeba je před jeho spuštěním odstranit. Celkově není práce s USB sběrnicí složitá, je pouze náročné zorientovat se ve velkém množství údajů, jež  jednotlivá zařízení poskytují.