USB Host Mode

B

bravus

Neues Mitglied
17
Gerade diesen Artikel gelesen:
USB Host mode on Motorola Droid Chris Paget's Blog

Demzufolge kann zumindest die USB-Hardware im Droid im USB Host Mode agieren, d.h. man kann Geräte wie USB-Sticks, Webcams, externe Keyboards etc. anschließen. Werd mir den nötigen Adapter mal basteln und Euch auf dem Laufenden halten, ob's beim Milestone funktioniert. Wäre natürlich wirklich der Kracher. Unbegrenzte Möglichkeiten was Zubehör und Connectivity angeht. Hier mal ein paar Ideen:

- VGA-Adapter, um z.B. seinen LCD-Fernseher oder einen Beamer anzusteuern
- USB-Stick (Datensicherung)
- den Cradle für meinen Livescribe (www.livescribe.de)
- nen Drucker

und und und.

Was sagt Ihr dazu?
 
...sicher nur mit modifiziertem kernel... also vorerst nicht für das milestone...
 
Mir würde es schon reichen wenn ich meinen MP3 Stick damit neu befüllen könnte habe schon länger mit der Möglichkeit geliebäugelt.

Das mit dem Kernel könnte wirklich ein Problem darstellen.
 
Laut den Kernel Sourcen von Motorola ist der Treiber für OTG bereits vorhanden


/*
* otg.c -- USB OTG utility code
*
* Copyright (C) 2004 Texas Instruments
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/

#include <linux/kernel.h>
#include <linux/device.h>

#include <linux/usb/otg.h>

static struct otg_transceiver *xceiv;

/**
* otg_get_transceiver - find the (single) OTG transceiver
*
* Returns the transceiver driver, after getting a refcount to it; or
* null if there is no such transceiver. The caller is responsible for
* calling otg_put_transceiver() to release that count.
*
* For use by USB host and peripheral drivers.
*/
struct otg_transceiver *otg_get_transceiver(void)
{
if (xceiv)
get_device(xceiv->dev);
return xceiv;
}
EXPORT_SYMBOL(otg_get_transceiver);

/**
* otg_put_transceiver - release the (single) OTG transceiver
* @x: the transceiver returned by otg_get_transceiver()
*
* Releases a refcount the caller received from otg_get_transceiver().
*
* For use by USB host and peripheral drivers.
*/
void otg_put_transceiver(struct otg_transceiver *x)
{
put_device(x->dev);
}
EXPORT_SYMBOL(otg_put_transceiver);

/**
* otg_set_transceiver - declare the (single) OTG transceiver
* @x: the USB OTG transceiver to be used; or NULL
*
* This call is exclusively for use by transceiver drivers, which
* coordinate the activities of drivers for host and peripheral
* controllers, and in some cases for VBUS current regulation.
*/
int otg_set_transceiver(struct otg_transceiver *x)
{
if (xceiv && x)
return -EBUSY;
xceiv = x;
return 0;
}
EXPORT_SYMBOL(otg_set_transceiver);

ich denke mal - das die Whitelist nur noch gepflegt werden müsste welche Devices "erlaubt" sind

/*
* drivers/usb/core/otg_whitelist.h
*
* Copyright (C) 2004 Texas Instruments
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/

/*
* This OTG Whitelist is the OTG "Targeted Peripheral List". It should
* mostly use of USB_DEVICE() or USB_DEVICE_VER() entries..
*
* YOU _SHOULD_ CHANGE THIS LIST TO MATCH YOUR PRODUCT AND ITS TESTING!
*/

static struct usb_device_id whitelist_table [] = {

/* hubs are optional in OTG, but very handy ... */
{ USB_DEVICE_INFO(USB_CLASS_HUB, 0, 0), },
{ USB_DEVICE_INFO(USB_CLASS_HUB, 0, 1), },

#ifdef CONFIG_USB_PRINTER /* ignoring nonstatic linkage! */
/* FIXME actually, printers are NOT supposed to use device classes;
* they're supposed to use interface classes...
*/
{ USB_DEVICE_INFO(7, 1, 1) },
{ USB_DEVICE_INFO(7, 1, 2) },
{ USB_DEVICE_INFO(7, 1, 3) },
#endif

#ifdef CONFIG_USB_NET_CDCETHER
/* Linux-USB CDC Ethernet gadget */
{ USB_DEVICE(0x0525, 0xa4a1), },
/* Linux-USB CDC Ethernet + RNDIS gadget */
{ USB_DEVICE(0x0525, 0xa4a2), },
#endif

#if defined(CONFIG_USB_TEST) || defined(CONFIG_USB_TEST_MODULE)
/* gadget zero, for testing */
{ USB_DEVICE(0x0525, 0xa4a0), },
#endif

{ } /* Terminating entry */
};

static int is_targeted(struct usb_device *dev)
{
struct usb_device_id *id = whitelist_table;

/* possible in developer configs only! */
if (!dev->bus->otg_port)
return 1;

/* HNP test device is _never_ targeted (see OTG spec 6.6.6) */
if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a0a &&
le16_to_cpu(dev->descriptor.idProduct) == 0xbadd))
return 0;

/* NOTE: can't use usb_match_id() since interface caches
* aren't set up yet. this is cut/paste from that code.
*/
for (id = whitelist_table; id->match_flags; id++) {
if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
continue;

if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
continue;

/* No need to test id->bcdDevice_lo != 0, since 0 is never
greater than any unsigned number. */
if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
(id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
continue;

if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
(id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
continue;

if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
(id->bDeviceClass != dev->descriptor.bDeviceClass))
continue;

if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
(id->bDeviceSubClass != dev->descriptor.bDeviceSubClass))
continue;

if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
(id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
continue;

return 1;
}

/* add other match criteria here ... */


/* OTG MESSAGE: report errors here, customize to match your product */
dev_err(&dev->dev, "device v%04x p%04x is not supported\n",
le16_to_cpu(dev->descriptor.idVendor),
le16_to_cpu(dev->descriptor.idProduct));
#ifdef CONFIG_USB_OTG_WHITELIST
return 0;
#else
return 1;
#endif
}
 
Entweder ist das sehr gut oder sehr schlecht... :D
 
Also auf dem Droid scheinen zumindest usb keybords unterstützt zu werden. Hat das schon jemand getestet? Welche Pins sind das denn die für das USB OTG Dongle kurzgeschlossen werden?
 
royalcs schrieb:
Also auf dem Droid scheinen zumindest usb keybords unterstützt zu werden. Hat das schon jemand getestet? Welche Pins sind das denn die für das USB OTG Dongle kurzgeschlossen werden?

Was wann wo? Das wär' ganz praktisch...
 
bemymonkey schrieb:
Was wann wo? Das wär' ganz praktisch...

wie wärs wenn man den link im ersten beitrag anklickt und es da nachliest...
 
  • Danke
Reaktionen: bemymonkey
Aha, zu ende lesen hilft wohl... ich ging davon aus, dass (zumindest im Post von royalcs) von der Unterstützung _ohne_ Hardwaremods die Rede war :(
 
den comments nach zu urteilen kannste dir auch ein usb hostkabel kaufen bei ebay... gibts ab ~ 4€
 
ninjafox schrieb:
den comments nach zu urteilen kannste dir auch ein usb hostkabel kaufen bei ebay... gibts ab ~ 4€

Klingt eher, als wüssten die auch nicht genau, ob die funktionieren...

Sind bei einem "echten" USB-Host Kabel (z.B. das für das N810) schon entsprechende Pins für den Bootvorgang umgelötet? Oder bräuchte man zusätzlich noch das angesprochene "Micro-Dongle"?
 
gibt es denn schon eine richtige anwendung oder ist das alles noch theoretischer natur ?

als könnte man z.b. mp3 player ansprechen ?
 
Also auf dem droid funktionieren von haus aus wohl nur usb keyboards. Für alles andere muss man den kernel ändern.
Als kabel kommen die meisten usb host kabel nich in frage da diese einen usb micro AB stecker(viereckig) haben. Unser MS/Droid hat jedoch usb micro A (trapezförmig).
Der Unterschied zu einem normalen usb kabel ist das der id pin zu masse kurzgeschlossen ist.
Nun ist die frage ob usb keyboards auch auf dem MS funktionieren
 
Ich glaube das N810 hat auch den trapezförmigen Stecker... daher sollte das Kabel passen. Vlt. bestell' ich mir das die Tage mal... dann dazu noch eine passende kleine Tastatur (wobei es dann natürlich schade ist, dass ich meine kleine Bluetoothtastatur nicht mehr benutzen kann) und ich bin glücklich (falls es funktionieren sollte).

Theoretisch muesste man dann nur mit eingestecktem USB-Host-Kabel booten, und könnte dann die Tastatur im laufenden Betrieb an- und abstöpseln, oder nicht? Wie sieht das dann mit der Texteingabe aus? Muss man da ein neues "Input Method" auswählen, wenn man in ein Feld reintippen will?
 
Ich denke nicht dass das n810 einen trapetzförmigen usb host adapter benutzt. In das n810 passen aufgrund der viereckigen buchsenform beide varianten, doch die host adapter sind nunmal viereckig so weit ich weiß.
 
Leutz, über das kabel zu diskutieren bringt uns hier nicht weiter.
Das Problem liegt nicht am Kabel, sondern eher das es vom Milestone richtig erkannt und ein service zu verfügung gestellt wird (z.b. als Massenspeicher, Keyboard oder sonstiges)

Bei Amazon in der Bucht und sonstiges shops gibts tonnen adapter zeugs was Micro-B auf USB-A um mapped (sogar USB-A auf USB-A).

Also lieber weiter mit der diskussion ob der Kernel das schon könnte oder nicht.

Gruß

phlo
 
Wie jetzt?! Tastaturen werden doch beim Milestone unterstützt?!
wo ist das problem?!
USB Host mode on Motorola Droid

Und hier im tread wurde das doch auch schon erwähnt^^
(so wie ichs verstanden hab, muss die tastatur schon beim booten anschließen
Wie es mit anderen usb-Geräten aussieht, weiß ich auch nicht...


Also so wie ich das sehe, ist folgender Adapter genau das, was in der anleitung zusammengebaut wird...sehe ich das richtig?!

lIl Adapter USB 2.0 usb A Buchse/ usb B Micro Stecker bei eBay.de: Kabel Adapter (endet 10.03.11 16:47:56 MEZ)

wenn jemand das schon getestet hat, bitte melden...

Übrigens..: Diese Möglichkeit gilt vermutlich nicht für das desire oder?!
 

Ähnliche Themen

BBF-Android
Antworten
8
Aufrufe
1.565
Milestone_User
M
Zepp
Antworten
43
Aufrufe
4.197
impidan
impidan
S
  • SkyfaR
Antworten
1
Aufrufe
1.408
Sakaschi
Sakaschi
Zurück
Oben Unten