USB PIDs zu verkaufen

Windows verh=C3=A4lt sich gar nicht mal so doof an dieser Stelle, wie es gerne dargestellt wird. Dieses Verhalten tritt nur dann auf, wenn das Ger=C3=A4t keine Seriennummer liefert. Die Idee dahinter ist, dass jemand (z.B.) zwei baugleiche billigst-USB-Netzwerkkarten haben k=C3=B6nn= te, deren Hersteller sich die Programmierung der Seriennummer gespart hat (das m=C3=BCsste ja f=C3=BCr jedes Ger=C3=A4t individuell gemacht werden)= . Damit Windows trotzdem den beiden Ger=C3=A4ten, die mit gleicher VID/PID auftreten, persistent die entsprechende Konfiguration zuweisen kann, wird in Abwesenheit einer Seriennummer hilfsweise der USB-Port, an dem das Ger=C3=A4t angeschlossen ist, zur Identifikation verwendet.

Die Strings, an denen man das Ger=C3=A4t erkennen kann, sind eigentlich n= ur f=C3=BCr das User Interface gedacht, damit nicht nur das generische "Unbekannte Ger=C3=A4t" auftaucht, f=C3=BCr das ein Treiber gesucht wird,= sondern stattdessen "USB WLan 300 MBit" erscheint, und der Anwender eine Chance hat, die richtige Treiber-CD zu finden. Zur Identifikation der Ger=C3=A4t= e durch das System waren die Strings urspr=C3=BCnglich nicht gedacht.

Gru=C3=9F, Michael Karcher

Reply to
Michael Karcher
Loading thread data ...

"Joerg Wunsch" schrieb im Newsbeitrag news:gd9mro$1uho$ snipped-for-privacy@uriah.heep.sax.de...

Weil die USB-Erfinder vergessen haben, darueber nachzudenken, was ist, wenn 2 baugleiche Geraete an einem PC haengen ?

--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
 Click to see the full signature
Reply to
MaWin

Haben sie nicht: dafür ist die Seriennummer da.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Ist zumindest ein Punkt. Lästig ist immer noch, dass für jede neue Seriennummer der Treiber neu zu installieren ist. Wenn du dann keine Admin-Rechte hast, bist du gear***t -- der Admin kann für dich den Treiber für das Gerät nicht vorinstallieren und dich dann mit einer beliebigen Instanz des Gerätes arbeiten lassen -- selbst dann nicht, wenn das Gerät ordentlich eine Seriennummer hat, aber beim Admin physisch nicht vorlag bei der Treiberinstallation.

Die Folge ist, dass Hinz und Kunz mit Adminrechten arbeiten. Die daraus entstehende Virenseuche, denen damit Tür und Tor geöffnet wird, ist wohl hinlänglich bekannt.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Was soll daran vergessen worden sein, was MS nun besser macht? Eine willkürliche festgelegte und feste Topologie einzuführen ist bei p&p-Geräten einfach Unsinn. Warum muß ich den USB-seriell-Wandler immer an exakt derselben Buchse einplömpeln, nur damit Windows nicht jedesmal einen neuen Com-Port daraus macht?

Bernd

Reply to
Bernd Laengerich

Und was sagt USB-Treiber: Ignorieren wir, Seriennummer zu alt. Der Trottel kann sich mal ein neueres Ger=E4t leisten. Ist auch gut f=FCr die=

Wirtschaft ;-)

--=20 mfg hdw

Reply to
Horst-D.Winzler

dler immer an=20

al einen=20

Ich kenne jemanden, der seine PCMCIA-WLAN-Karte am Arbeitsplatz in den oberen Slot und zuhause in den unteren Slot gesteckt hat. Das hat ihm ohne irgendwas in der Software ausw=C3=A4hlen zu m=C3=BCssen zwei Profile beschert. Man kann also jede Windows-Eigenheit unter ganz bestimmten Umst=C3=A4nden positiv sehen.

Gru=C3=9F, Michael Karcher

Reply to
Michael Karcher

Wie jetzt, etwa noch sozialistischer, als es die Bush-Regierung mit der Teilverstaatlichung großer Banken vorgemacht hat?

SCNR

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Moin!

Offensichtlich eine Verrenkung zuwenig. :-)

Gruß, Michael.

Reply to
Michael Eggert

Weißt Du doch, Du schreibst da doch auch ;-)

Mein Eindruck aus zwei dutzend Beiträgen von einem halben dutzend Schreibern: Die Gegner von Obama sind fanatische Spinner und pöbeln dumm herum.

Ansonsten scheinen McCain und Obama ja halbwegs vernünftig zu sein. Aber die Bekloppte aus Alaska hat so richtig einen an der Waffel. Die toppt noch unser Merkel und sogar den Herrn Bush.

Falk

--
   Dax    4.781 +3,4%   Dow  8.979 -0,7%   N225  8.694 +2,8%
"Unausgenommene Bücklinge können Nemotroden enthalten"
 Click to see the full signature
Reply to
Falk Willberg

Moin!

Ich schrieb bewusst "und/oder", da ich zuwenig Ahnung von den genauen Abläufen habe, als daß ichs genauer eingrenzen könnte.

Ich sehe nur, daß einige grundverschiedene Devices alle mit der gleichen VID/PID daherkommen, weil sie nunmal alle auf AVR-USB von obdev beruhen. Weiterhin sehe ich, daß wenn ich ein neues Device erstmals anstecke, irgendwas schiefläuft: Entweder Windows kennt diese VID/PID schon an dem Port, dann erscheint das neue Device mit dem Namen des alten im Gerätemanager. Oder Windows kennt die VID/PID noch nicht an diesem Port, dann installiert es den Treiber neu und ab jetzt trägt das alte Device den Namen des neuen.

Interessant!

Tja, nur kann man wohl nicht immer davon ausgehen... und zumindest im Fall von USBasp dürfte dann auch AVRDUDE drauf reinfallen und sich munter mit der uDMX- oder Powerswitch-Hardware unterhalten.

Zumindest die udmx.exe (unter

formatting link
im ersten Paket unter "Downloads" mit enthalten) wertet den Namen wohl mit aus:

--------------------------------------------------------------------- for(bus=usb_busses; bus; bus=bus->next){ for(dev=bus->devices; dev; dev=dev->next){ if(dev->descriptor.idVendor == USBDEV_SHARED_VENDOR && dev->descriptor.idProduct == USBDEV_SHARED_PRODUCT){ char string[256]; int len; handle = usb_open(dev); /* we need to open the device in order to query strings */ if(!handle){ ... }

len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, 0x0409, string, sizeof(string));

if(len < 0){ ... }

if(strcmp(string, "

formatting link
") != 0) goto skipDevice;

len = usbGetStringAscii(handle, dev->descriptor.iProduct, 0x0409, string, sizeof(string));

if(len < 0){ ... }

if(strcmp(string, "uDMX") == 0) break;

skipDevice: usb_close(handle); handle = NULL; } } if(handle) break; } if(!handle) fprintf(stderr, "Could not find USB device

formatting link
\n");

return handle;

---------------------------------------------------------------------

Trotzdem funktionierts nicht, wenn Windows den uDMX gerade als USBasp erkannt hat. Ob es nun daran liegt, daß die Abfrage der Strings überhaupt nicht bis zum Device durchdringen sondern Windows oder was auch immer einfach das zurückliefert, was es unter dieser VID/PID zu kennen meint - keine Ahnung. Ich hab nur gesehen, _daß_ es nicht funktioniert.

Es kann ja jeder selbst ausprobieren, indem er mal eine "falsche" Firmware (uDMX oder obdevs Referenzprojekt Powerswitch oder was anderes, was direkt über die libusb angesprochen wird - also sich nicht als COM oder Tastatur anmeldet) auf ner vorhandenen Hardware laufen lässt und schaut, wie Windows drauf reagiert. Aber schimpft nicht auf mich, wenn Ihr nachher die Registry putzen dürft...

Gruß, Michael.

Reply to
Michael Eggert

Moin!

Oh, das werd ich Montag gleich mal ausprobieren: USB_CFG_SERIAL_NUMBER in meinen Devices mit obdev-Firmware setzen und schauen, ob Windows sich nach Umstecken die Neuinstallation verkneift. Das wär wirklich klasse!

Gruß, Michael.

Reply to
Michael Eggert

Der Co von Obama scheint aber auch ein ziemliches *rschl*ch zu sein. Da im Moment ja alle Zeichen auf "Obama machts knapp vor der Fritte" stehn, würde ich mir um Biden mehr Sorgen machen als um Palin.

BTW: was denkt John Cleese über die Palin? "Michael Palin is not the most funny Palin any more"

formatting link

XL

Reply to
Axel Schwenke

Dann hast du ganz klar das falsche OS. Sowas gibts mit open source nicht ;-)

scnr,

Steffen

Reply to
Steffen Koepf

Michael Eggert schrieb:

Dieses Vorgehen ist natürlich nicht im (ursprünglichen) Sinne von USB. Da sollten verschiedene "functions" verschiedener Hersteller sehr wohl getrennte VID/PID-Paare bekommen, damit man sie an Hand dieser auch auseinander halten kann.

Dass es zu derartigen Verrenkungen kommt, hat sich die USB-Allianz dann allerdings auch selbst zuzuschreiben, womit wir wieder zurück beim Ausgangspunkt dieses Threads sind: wenn sie schon für die Herausgabe einer VID eine ,,Bearbeitungsgebühr'' von USD 2000 verlangen (nein, verkaufen tun sie die ja nicht), /und/ dann auch noch dem Antragsteller strikt verbieten (siehe VOTI), dass er diese gewissermaßen scheibchenweise preiswerter weiterreichen kann (was ja überhaupt erst einmal ermöglicht hätte, dass auch Klein- und Hobbyanwender sich wirklich ein VID/PID-Paar leisten können), dann verwundert es auch nicht, dass am Ende die Leute entweder VID/PIDs erfinden oder aber x-fach für völlig unterschiedliche Dinge nutzen.

Da kommt bei Windows noch dazu, dass es keinen generischen USB-Treiber kennt. Man /muss/ ein Gerät also explizit mit einem bestimmten Treiber registrieren, ein Fallback auf einen allgemeinen Treiber ist nicht vorgesehen. Die Unixe (zumindest die Opensource-Unixe, unter Solaris habe ich nie wirklich mit USB gearbeitet bislang) haben dagegen generische Treiber, die entweder als Fallback benutzbar sind, wenn kein Treiber gefunden wurde (ugen-Treiber bei NetBSD/FreeBSD) oder aber fest eingebaut, gewissermaßen unterhalb eines Vendor- oder Class-Treibers (Linux), auf denen die libusb aufsetzen kann. Dadurch bedarf es dort keines Eintrages in irgendwelche Gerätemanager, eine interessierte Applikation kann einfach alle USBusse scannen, bis sie das gewünschte Gerät an Hand selbst festgelegter Kriterien (also entweder nur VID/PID plus ggf. Seriennummer, oder vendor/product string oder was auch immer) gefunden hat. In diesem Falle wird also einfach der Entscheidungprozess vom Betriebssystem an die Applikation selbst delegiert.

[AVRDUDE]

Nein, der entsprechende AVRDUDE-Code für USBasp stammt ja von obdev.at selbst, und der kümmert sich sehr wohl um vendor und product string. Der Code sieht sehr ähnlich aus wie das, was du gepostet hast. Ich vermute mal, dass das einfach ohnehin Beispielcode von obdev.at ist, um mittels libusb auf ihren Stack zuzugreifen.

Meine Beschreibung bezog sich auf den Zugriff für die Atmel-eigenen Tools.

Das kann natürlich wirklich an besagten Verrenkungen liegen, die libusb-win32 machen muss, um das API umzusetzen. Wäre ggf. aber mal ein Debugging wert. Ah, wart mal, lass mich raten: obdev.at bringt doch einen eigenen vendor-Treiber mit für den Zugriff mittels libusb, oder? Wenn das Gerät nun von Windows einem anderen Treiber zusortiert worden ist (weil die Treiberzuordnung ja nur auf VID/PID-Basis oder Klassenbasis erfolgt), dann hat die libusb danach keinen Haken mehr, mit dem sie zugreifen kann.

Dagegen könnte es aber helfen, wenn du zusätzlich noch von libusb-win32 den Filtertreiber installierst. Der benutzt (soweit ich das verstehe) Hooks, die allgemein im USB-API schon drin sind und unterhalb jedes Treibers liegen. In diesem Falle müsste die libusb auch wieder Zugriff bekommen können, wenn Windows das Gerät deinem uDMX-Treiber zugewiesen hat. (Wenn Windows einen generischen Treiber für unbekannte USB-Geräte hätte, dann wäre der Filtertreiber eigentlich das Einzige, was die libusb-win32 bräuchte, um Zugriff auf beliebige USB-Geräte zu erlangen.)

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

Moin!

[...]

Tja, also muss man eben das beste draus machen - und als Bastler seine Geräte per Devicestring unterscheiden. Wenn es denn geht...

Achso, hm, dann weiß ich nicht, worauf AVRDUDE reingefallen ist, nachdem ich den uDMX installiert hatte.

Also da war die libusb.dll und ich hatte eine .inf erzeugt mitsamt den VID/PID und den Strings drin. Mehr hab ich da meines Wissens nicht installiert, aber ich kann nochmal nachschauen.

Was ganz anderes als libusb? Nein, da war nix...

Da gabs keinen uDMX-Treiber außer ebenfalls libusb.

Gruß, Michael.

Reply to
Michael Eggert

Michael Eggert schrieb:

Probier trotzdem mal, die Filterversion (kannst du dir von sourceforge.net laden) zusätzlich noch zu installieren.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
 Click to see the full signature
Reply to
Joerg Wunsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.