• Keine Ergebnisse gefunden

3 USB-Geräteklassen

3.2 Das Werkzeug UVCView

Microsoft stellt für seine Betriebssysteme seit vielen Jahren ein Hilfsprogramm zur Verfügung, mit dem sich zunächst ermitteln lässt, welche USB-Geräte am Compu-ter angeschlossen sind. Darüber hinaus können die Deskriptoren der einzelnen USB-Geräte ausgelesen werden. Dieses Hilfsprogramm trägt den Namen USBVIEW.EXE und wird mit der Windows-Installations-CD und dem Driver Development Kit (DDK) ausgeliefert (es gibt auch viele Downloadquellen für die-ses Programm im Internet). Im Laufe der Zeit musste diedie-ses Programm von Soft-warefehlern befreit und an den aktuellen USB-Entwicklungsstand angepasst wer-den, insbesondere, als die Video Class immer mehr Bedeutung gewann. Diese überarbeitete Version von USBVIEW.EXE erhielt den Namen UVCView.EXE und kann unter dem Link: www.microsoft.com/whdc/device/stream/vidcap/UVCView.

mspx kostenlos heruntergeladen werden. Sie steht zurzeit für drei verschiedene CPU-Typen zur Verfügung. Für Intel-Pentium Prozessoren nennt sich die Pro-grammversion z. B. UVCView.x86.exe. Nach dem Download kann das Programm ohne weitere Installationsschritte gestartet werden, z. B. durch Doppelklick auf das Symbol.

Nach dem Starten werden neben sämtlichen USB-Controllern und Hubs alle ange-schlossenen USB-Geräte aufgelistet. Im Beispiel lässt sich sehen, dass am Stamm-Hub des Computers am Port2 ein USB-Verbundgerät angeschlossen ist. Hierbei handelt es sich um ein Multifunktionsgerät des Herstellers Canon, das die Produkt-bezeichnung PIXMA MP510 hat. Es besteht aus einem Drucker, einem Scanner und einem Kartenleser, die zu einem USB-Gerät zusammengefasst sind.

Ein Doppelklick auf den Eintrag unter Port2 liefert die Deskriptoren dieses USB-Geräts, sofern unter „Options“ zuvor die erforderlichen Optionen angewählt wurden (ein Haken bei „show Config Descriptors“ und „show Description Annota-tions“). An dieser Stelle sollen zunächst nur die Einträge interessieren, die Auf-schluss über die Geräteklassen geben.

3.2 Das Werkzeug UVCView

40

Abb. 3.1:Ein dreiklassiges USB-Gerät 3 USB-Geräteklassen

41

Ein Blick auf die Datenfelder bDeviceClass, bDeviceSubClass und bDeviceProtocol zeigt, dass dort die Werte 0x00 eingetragen sind. Folgerichtig wird von UVCView kommentiert, dass die Klassendefinitionen in den Interfaces vorgenommen werden, wie zuvor ja auch beschrieben wurde.

===>Device Descriptor<===

bLength: 0x12

bDescriptorType: 0x01

bcdUSB: 0x0200

bDeviceClass: 0x00 -> This is an Interface Class Defined Device bDeviceSubClass: 0x00

bDeviceProtocol: 0x00

bMaxPacketSize0: 0x40 = (64) Bytes idVendor: 0x04A9 = Canon Inc.

idProduct: 0x1717 bcdDevice: 0x0102 iManufacturer: 0x01

English (United States) “Canon“

iProduct: 0x02

English (United States) “MP510“

iSerialNumber: 0x03

English (United States) “90F97C“

bNumConfigurations: 0x01

3.2 Das Werkzeug UVCView

42

Im Configuration Descriptor kann im Datenfeld bNumInterfaces festgestellt wer-den, dass dieses Gerät drei Interfaces besitzt, denn es ist dort 0x03 eingetragen.

Demzufolge muss es auch über drei verschiedene Interface-Deskriptoren verfügen, in denen jeweils eine Geräteklassifizierung eingetragen sein muss. Das untersuchte USB-Gerät gehört also drei verschiedenen Geräteklassen an.

===>Configuration Descriptor<===

bmAttributes: 0xC0 -> Bus Powered

MaxPower: 0x01 = 2 mA

Der erste Interface Descriptor mit der bInterfaceNumber 0x00 enthält im Datenfeld bInterfaceClass den Wert 0xFF, womit festgelegt wird, dass dieses USB-Gerät in die Klasse der anbieterspezifischen Geräte gehört. Das wird von UVCView auch so inter-pretiert. Die Unterklasse, die mit 0x00 eingetragen ist, wird mit einem Hinweis zur Vorsicht kommentiert, weil diese Unterklasse als ungültig anzusehen ist. Auch an dem mit 0xFF vereinbarten Protokoll hat UVCView etwas auszusetzen und fordert, dass es mit 0x00 als undefiniert einzutragen wäre. Eigentlich gibt es für Geräte, deren Funktionen vom Anbieter festgelegt werden, keine Einschränkungen für die Wahl der Unterklasse und des Protokolls, jedoch harmoniert die hier getroffene Wahl nicht mit den Regeln, die für alle anderen Geräteklassen gelten. Das mag die Ursache dafür sein, dass UVCView hier mit Warn-, Fehler- und Vorsichtshinweisen reagiert. Gene-rell lässt sich an dieser Stelle sagen, dass über die Klassendefinition dieses Interfaces keinerlei Rückschlüsse darauf möglich sind, um was für einen Gerätetyp es sich han-delt. Die korrekten Treiber für dieses Gerät können allerdings trotzdem gefunden werden, weil eine Identifizierung über die Device Descriptor Datenfelder idVendor (0x04A9 = Canon Inc.), idProduct (0x1717) und bcdDevice (0x0102) ebenfalls ein-deutig möglich ist. Allerdings muss der Hersteller die Gerätetreiber und vermutlich auch die Anwendungsprogramme bereitstellen. Im Gegensatz dazu könnte im Falle einer eindeutigen Klassifizierung des Geräts ein Klassentreiber auf Betriebssystem-ebene bereitgestellt werden, wie es ja z. B. bei Memory Sticks funktioniert. Wie aus den noch verbleibenden Interface-Deskriptoren gefolgert werden kann, ist mit dieser Anbieterklasse übrigens offenbar der Scanner des Multifunktionsgeräts definiert.

===>Interface Descriptor<===

43

bNumEndpoints: 0x03

bInterfaceClass: 0xFF -> Vendor Specific Device

bInterfaceSubClass: 0x00

*!*CAUTION: This appears to be an invalid bInterfaceSubClass

bInterfaceProtocol: 0xFF

*!*WARNING: must be set to PC_PROTOCOL_UNDEFINED 0 for this class

iInterface: 0x00

*!*ERROR: 0xFF is the prerelease USB Video Class ID

Als Nächstes findet sich der Interface Descriptor, dessen Klassencode einen Drucker festlegt. Gemäß der für Drucker geltenden Klassendefinition in der Version 1.1 von Januar 2000 gibt es für Drucker zurzeit nur eine Unterklasse, nämlich 0x01 für Dru-cker. Im Datenfeld bInterfaceProtocol steht der Eintrag 0x02. Damit wird eine bidi-rektionale Druckerschnittstelle festgelegt, der Vorsichtshinweis von UVCView ist an dieser Stelle unnötig, denn dieses Protokoll ist gültig.

===>Interface Descriptor<===

bInterfaceClass: 0x07 -> This is a Printer USB Device Interface Class

bInterfaceSubClass: 0x01

bInterfaceProtocol: 0x02

CAUTION: This may be an invalid bInterfaceProtocol

iInterface: 0x00

Der letzte Interface Descriptor mit der Nummer 0x02 behandelt ein USB-Gerät aus der Klasse der Massenspeicher und ist somit für die Kartenlesereinheit des Multi-funktionsgeräts zuständig.

bInterfaceClass: 0x08 -> This is a Mass Storage USB Device Interface Class

bInterfaceSubClass: 0x06

bInterfaceProtocol: 0x50

iInterface: 0x00

Ein Blick in die Einträge des Geräte-Managers zeigt, wie das Multifunktionsgerät Canon PIXMA MP510 vom Betriebssystem verwaltet wird. Es ist zunächst als USB-Verbundgerät deklariert.

3.2 Das Werkzeug UVCView

44

Wenn man sich die Treiberdetails ansieht, lässt sich feststellen, dass es über den Treiber usbccgp.sys verwaltet wird. Das ist ein Prozess mit dem Namen USB Com-mon Class Generic Parent Driver, der Bestandteil des Betriebssystems Windows XP ist.

3 USB-Geräteklassen

45

Ferner ist im Geräte-Manager die USB-Druckerunterstützung eingetragen. Hier verraten die Treiberdetails, dass sich dahinter der Prozess USB Printer Driver (usbprint.sys) verbirgt.

Dann ist noch der Prozess USBSTOR.SYS zur Verwaltung eines Massenspeicherge-räts eingetragen. Das ist der betriebssystemeigene USB Mass Storage Class Driver von Microsoft.

Was man an dieser Stelle nicht findet, das ist die Unterstützung für den Scanner.

Der Grund ist, wie vorher erläutert, dass der Scanner nicht in eine vorhandene USB-Klasse eingereiht ist, sondern als anbieterspezifisch deklariert wurde. Das Betriebssystem Windows XP kann daher keine eigene Unterstützung für dieses USB-Gerät anbieten.

Seit Windows XP wird von Microsoft eine Unterstützung für die Geräteklasse Still Image angeboten. Gemäß der unter http://support.microsoft.com/default.aspx?scid

=kb;en-us;Q293356 einsehbaren Liste gibt es zahlreiche Scanner-Hersteller, die Geräte im Angebot haben, deren USB-Schnittstelle die Still Image Device Class

3.2 Das Werkzeug UVCView

46

unterstützt. Wird ein solcher Scanner an den PC angeschlossen, dann ist kein gesonderter Treiber notwendig, sondern das Betriebssystem stellt den Gerätetreiber (Windows Image Acquisition Driver WIA) und mit dem Windows Picture Acqusi-tion Wizard (Scanner- und Kamera Assistent wiaacmgr.exe) auch die Anwendungs-software zur Verfügung. Einen Überblick des WIA-Konzepts findet man unter http://www.microsoft.com/whdc/device/stillimage/WIA-arch.mspx.

An diesem Beispiel wird deutlich, welchen Problemen der Anwender gegenüber-steht. Sofern er nämlich eine Software einsetzen will, die für eine reinrassige USB-Geräteklasse geschrieben worden ist, kann er kein USB-Gerät gebrauchen, das mit einem nicht klassenkonformen Treiber arbeiten möchte, es sei denn, er findet eine Möglichkeit der Schnittstellenanpassung zwischen dem klassenfremden USB-Trei-ber und seiner klassenkonformen Anwendung.

3 USB-Geräteklassen