USB Human Interface Devices  

Die im Smartbook eingebaute Mini-USB-Buchse kann prinzipiell nicht nur als Schnittstelle für den Datenaustausch mit einem PC und den ADB-Zugange dienen, sondern auch angeschlossene Geräte wie USB-Sticks, externe Festplatten, Tastaturen, Mäuse und andere Steuergeräte (USB-HID, Human Interface Devices) erkennen und ansteuern.

Voraussetzungen: Root-Zugang, ein USB-Y-Kabel, etwas Geduld und Erfahrung.

Als Anreiz vorweg: Das ganze sieht mit einer angeschlossenen Maus, die als Eingebegerät erkannt wird und im Beispielvideo Google Maps ansteuert, dann so aus:


Dies hat definitiv von den hier vorgestellten Konfigurationen noch den größten Bastelcharakter. Die Grundlagen dieser Anleitung entstammen dieser Anleitung für USB OTG aus dem SmartQ MID Board, beim Smartbook Surfer ist aber alles ein klein bisschen anders.

The good:

Der USB OTG (On-The-Go) Support ist vom Hersteller schon implementiert. Ein Blick in den /sys/bus/platform/drivers zeigt:
dwc_otg
android_usb
usb_mass_storage
Da müssen keine Kernelmodule mehr geladen werden - das steckt im Kernel und wird geladen. dmesg kann man konsequenterweise auch entnehmen:
<6>ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
<6>tcc-ohci tcc-ohci: TCC OHCI
<6>tcc-ohci tcc-ohci: new USB bus registered, assigned bus number 1
<6>tcc-ohci tcc-ohci: irq 49, io mem 0xf0500000
<6>usb usb1: configuration #1 chosen from 1 choice
<6>hub 1-0:1.0: USB hub found
<6>hub 1-0:1.0: 1 port detected
<6>dwc_otg: version 2.60a 22-NOV-2006
<7>dwc_otg_driver_probe(c03d5418)
<7>base=0xf0550000
<7>dwc_otg_device=0xc9ef0960
<7>DVBUS_ON power ON
<7>PWR_GP1  power ON
<6>dwc_otg dwc_otg.0: DWC OTG Controller
<7>DVBUS_ON power ON
<7>PWR_GP1  power ON
<6>dwc_otg dwc_otg.0: new USB bus registered, assigned bus number 2
<6>dwc_otg dwc_otg.0: irq 48, io mem 0x00000000
<6>usb usb2: configuration #1 chosen from 1 choice
<6>hub 2-0:1.0: USB hub found
<6>hub 2-0:1.0: 1 port detected
Weitere Details im Abschnitt Hardware.

Jetzt muss man dem USB-OTG Treiber sagen, dass er statt - wie normalerweise - als "Device" zu arbeiten, um von einem PC als USB-Gerät erkannt zu werden, andersrum nun "Host" sein soll und andere USB Devices erkennt.

Das kann man im Terminal auf dem Gerät (Menü -> Dev Tools -> Terminalemulator) (NICHT über die ADB-Shell, die USB Schnittstelle wird ja umgeschaltet) mit einem Befehl erreichen, nachdem man sich mittels "su" root Rechte gegeben hat:
su
echo 0 >/sys/devices/platform/dwc_otg.0/setmode
Diese Umschaltung kann man mittels dmesg auch nachverfolgen:
<4>Set ID to host mode
<4>ID change ISR : Host
<7>DVBUS_ON power ON
<7>PWR_GP1  power ON
<7>DVBUS_ON power ON
<7>PWR_GP1  power ON
<3>hub 2-0:1.0: over-current change on port 1
Zurück in den "normalen" Device-Mode schaltet man mit:
echo 2 >/sys/devices/platform/dwc_otg.0/setmode
und kann wieder eine Verbindung des Tablets mit dem PC bekommen.
Nach einem Neustart des Tablets sind alle Änderungen sowieso vergessen.

Aus unerfindlichen Gründen, funktioniert der Host Modus jedoch nur, wenn man einmal in den Host Modus schaltet, zurück in den Device Modus, dann wieder in den Host Modus. Insgesamt muss man also ausführen:
echo 0 >/sys/devices/platform/dwc_otg.0/setmode
echo 2 >/sys/devices/platform/dwc_otg.0/setmode
echo 0 >/sys/devices/platform/dwc_otg.0/setmode
Vor allem, da das Terminal Probleme mit Zahlen in der Android-Tastatureingabe hat empfiehlt es sich, 2 kleine Dateien zu schreiben, die jeweils die einzeilige Host bzw. Device Umschaltung beinhalten und auf dem Gerät zu speichern, z.B. in /data. Nach einem

chmod 755 Dateiname

kann man dann mittels /data/Dateiname

die jeweilige Umschaltung bequem vornehmen.

Theoretisch ist das Surfpad nun bereit, USB Geräte zu erkennen.

The bad:

Leider legt das Smartbook Surfer aber keinen Strom an den USB-Port an. Ein Voltmeter an die PINs 1 und 4 des USB Ausgangs gehalten zeigt: Nichts. Zu erwarten wären die für USB üblichen 5V.

Um das zu umgehen, muss das USB-Gerät extern mit Strom versorgt werden. Dafür eignet sich am besten ein USB Y-Kabel, welches über den "Stromversorgungsanschluss" (m) von einem externen Netzteil (z.B. Ladegerät mit USB Ausgang) oder USB-Anschluß eines anderen Rechners mit Strom versorgt wird. Der andere Anschluß (m) wird mit dem Adapterkabel, welches dem Smartbook beiligt, an das Smartbook gestöpselt. Der freie Anschluß (f) ist nun für das USB-Gerät wie eine Maus oder Tastatur bereit.

Vorsicht! Bei Betrieb des Smartbook Surfer über das Netzteil und der Verwendung von einem USB-Ladegerät oder einer USB-Stromversorgung aus einen anderen Rechner für das USB Device können bei Potentialdifferenzen unschöne Ströme fließen! Das Tablet dafür am besten nicht mit Netzteil betreiben. Insbesondere an dieser Stelle kann man sich bei Unkenntnis dauerhafte Schäden am Gerät einhandeln.

Steht die Stromversorgung einmal, ist es einfach: Das USB-Gerät einstecken - der Rest wird automatisch erkannt.
Das zeigt sich sofort mittels dmesg:

<6>usb 2-1: new low speed USB device using dwc_otg and address 7
<3>usb 2-1: device v046d pc016 is not supported
<6>usb 2-1: configuration #1 chosen from 1 choice
<6>input: Logitech Optical USB Mouse as /devices/platform/dwc_otg.0/usb2/2-1/2-1:1.0/input/input4
<6>generic-usb 0003:046D:C016.0002: input: USB HID v1.10 Mouse [Logitech Optical USB Mouse] on usb-DWC OTG Controller-1/input0

und noch viel schneller daran, dass das angeschlossene Gerät wie im o.g. Video nun das Surfpad steuert.

Das Gerät kann auch einfach abgezogen und durch ein anderes ersetzt werden - das geschieht nun alles automatisch.

Zum Ausschalten einfach den Mini-USB Stecker wieder vom Tablet abziehen und mit dem o.g. Befehl die USB-Schnittstelle in den Device Modus zurückversetzen.

The ugly:

Leider funktioniert das nur mit Eingabegeräten wie Tastatur und Maus, evtl. Digitalkameras (nicht getestet).
USB-Sticks und externe Festplatten lassen sich so noch nicht einbinden:
<6>usb 2-1: new high speed USB device using dwc_otg and address 5
<3>usb 2-1: device v0781 p5150 is not supported
<6>usb 2-1: configuration #1 chosen from 1 choice
<6>usb 2-1: USB disconnect, address 5
<6>usb 2-1: new high speed USB device using dwc_otg and address 6
<3>usb 2-1: device v067b p3507 is not supported
<6>usb 2-1: configuration #1 chosen from 1 choice
<6>usb 2-1: USB disconnect, address 6
ToDo:

Ggf. ist es möglich, auch auf dem Surfpad selber die Stromversorgung des USB-Ports durch eine einfache Einstellung anzuschalten.
Sollte das funktionieren, könnte man einfach Tastaturen und Mäuse mobil betreiben, erste Versuche waren jedoch erfolglos.
Falls jemand dazu Hinweise hat bitte via Kontaktformular melden.
[ 2 Kommentare ] ( 523 views ) permalink