Forum: Mikrocontroller und Digitale Elektronik USB Ethernet als treiberlose Schnittstelle


von Axel J. (axeljaeger)


Lesenswert?

Hallo,
ich möchte hier eine Idee diskutieren, die mir gekommen ist und ich 
hoffe ja schon fast, dass ich nicht der erste bin und dass es das schon 
fertig gibt.

Also folgende Situation: Ich möchte gerne eine Stück Hardware bauen mit 
folgenden Anforderungen:
A1: Lauffähig unter Windows, Linux und Mac
A2: In der zugehörigen Software soll der Benutzer NICHT auswählen oder 
raten müssen, an welchem COM-Port das Gerät hängt.
A3: Der Benutzer soll nicht explizit irgendwo refresh drücken müssen, 
wenn man das Gerät ansteckt, sondern das Gerät soll auftauchen, wenn 
angesteckt wird.
A4: Ich möchte mich mit Treibersignierung nicht beschäftigen müssen.
A5: Möglichst treiberlos

Bisher hab ich den FT232RL als USB-UART-Wandler benutzt, der kollidiert 
aber meiner Meinung nach erstmal mit der Anforderungen A2. Wenn ich den 
Chip nicht über einen virtuellen COM-Port ansprechen will, sondern über 
die D2XX-Library werde ich die Device-ID ändern müssen und muss den 
Treiber dann neu signieren.

Nun kam die Idee auf, anstatt eines virtuellen COM-Ports auf einem 
Mikrocontroller ein virtuelles Ethernet-Device zu implementieren. Das 
hätte weitere Vorteile:
- Alles über Userspace-Libs abzufrühstücken
- Migrationspfad bei der Software, falls man später mal eine richtige 
Ethernetschnittstelle drann an das Gerät baut.

Da kommt natürlich die Frage auf: Warum nicht gleich Ethernet? Ich hätte 
gerne, dass das Gerät direkt an einem Notebook betrieben und auch 
darüber mit Strom zu versorgen ist. PoE wäre da ne Option, aber ich hab 
noch kein Notebook gesehen, was PoE am Netzwerkport speist.

Ich freue mich nun über eine Diskusion über die Vor- und Nachteile 
dieser Idee, möglicher Realisierungen sowie Prüfung meiner Annahmen über 
die anderen Lösungen.

von Christian R. (supachris)


Lesenswert?

Ethernet hat halt den Nachteil, dass da nix mit Plug&Play ist und man 
das gerät erst mal auf eine IP konfigurieren muss. Sicherlich kann man 
mit DHCP und uPNP einiges machen, aber das ist ziemlich aufwendig und 
nervig zu implementieren.

USB ist schon das Mittel der Wahl für direktes Anstecken und loslegen.

Wieso nicht LibUSB? Das ist auf Linux, Windows, Mac verfügbar und der 
Treiber für Windows x64 ist signiert, also kein Ärger damit.

WinUSB ist zumindest unter Windows ein ähnliches Modell, der Treiber ist 
seit XP SP2 im Windows integriert. Und mit Windows 8 kann man einen OS 
descriptor in USB anlegen, dann erkennt Windows gleich, dass man WinUSB 
nutzen will, da brauchts nicht mal mehr die Inf Datei.

von asdf (Gast)


Lesenswert?

Meine Idee: Das Gerät simuliert einen USB Massenspeicher. Die 
Kommunikation läuft über spezielle Dateien. Man könnte damit auch gleich 
die Software zur Verfügung stellen. Das wäre echtes Plug&Play: 
einstecken, Software vom Gerät starten, läuft.

Leider habe ich keine Ahnung ob und wie man das umsetzen kann. Wer weiß 
mehr?

von Axel J. (axeljaeger)


Lesenswert?

Christian R. schrieb:
> Wieso nicht LibUSB? Das ist auf Linux, Windows, Mac verfügbar und der
> Treiber für Windows x64 ist signiert, also kein Ärger damit.

Meiner Meinung nach geht die Treibersignierung kaputt, wenn ich die 
Device-ID ändere. Außerdem wüsste ich nicht, wie ich auf Mac und Windows 
Events bekomme, wenn ich ein Gerät eingesteckt hab, weil ich da ja 
keinen HAL-Daemon zur Verfügung habe. Oder irre ich hier? Wie sieht denn 
die Situation mit WinUSB bezüglich Events aus?

Bei der Netzwerklösung habe ich schon an so Sachen wie Bonjour oder 
Universal Plug and Play gedacht, um solche Events zu bekommen.

 Zu der Idee mit dem Massenspeicher: Es gibt doch Geräte, wo man so ein 
Firmwareupdate macht? Als Nachteil der Lösung sehe ich, dass man das 
Gerät im Explorer sieht und das den Benutzer verwirren könnte.

von Jobst M. (jobstens-de)


Lesenswert?

Axel Jäger schrieb:
> A1: Lauffähig unter Windows, Linux und Mac
> A5: Möglichst treiberlos
> A4: Ich möchte mich mit Treibersignierung nicht beschäftigen müssen.

Also müssen auf der Plattform schon generic-Treiber vorhanden sein.

> A2: In der zugehörigen Software soll der Benutzer NICHT auswählen oder
> raten müssen, an welchem COM-Port das Gerät hängt.

Jegliche Konfiguration fällt also aus.

> A3: Der Benutzer soll nicht explizit irgendwo refresh drücken müssen,
> wenn man das Gerät ansteckt, sondern das Gerät soll auftauchen, wenn
> angesteckt wird.

Mit anderen Worten: Du suchst eine Schnittstelle, mit der man ohne 
jegliche Useraktion Aktionen auf dem PC ausführen können soll. Praktisch 
für einen Virus ... aber nicht gewollt.

Und Stromversorgung wolltest Du ja auch ...

Die einzige Schnittstelle, die mir dazu einfällt, ist die für die 
Tastatur - egal ob USB, PS/2 oder DIN. Aber ob damit die Daten dort 
landen, wo sie hin sollen ...


Gruß

Jobst

von Frank K. (fchk)


Lesenswert?

Axel Jäger schrieb:

> Also folgende Situation: Ich möchte gerne eine Stück Hardware bauen mit
> folgenden Anforderungen:
> A1: Lauffähig unter Windows, Linux und Mac
> A2: In der zugehörigen Software soll der Benutzer NICHT auswählen oder
> raten müssen, an welchem COM-Port das Gerät hängt.
> A3: Der Benutzer soll nicht explizit irgendwo refresh drücken müssen,
> wenn man das Gerät ansteckt, sondern das Gerät soll auftauchen, wenn
> angesteckt wird.
> A4: Ich möchte mich mit Treibersignierung nicht beschäftigen müssen.
> A5: Möglichst treiberlos
>
> Bisher hab ich den FT232RL als USB-UART-Wandler benutzt, der kollidiert
> aber meiner Meinung nach erstmal mit der Anforderungen A2. Wenn ich den
> Chip nicht über einen virtuellen COM-Port ansprechen will, sondern über
> die D2XX-Library werde ich die Device-ID ändern müssen und muss den
> Treiber dann neu signieren.

Du willst also ein HID Device bauen. Kein Problem. Jedes Betriebssystem 
kennt HID (A1), Dein Device ist durch VID/PID oder den Device String 
eineindeutig identifizierbar (A2), das Gerät wird ohne Zutun automatisch 
erkannt (A3), Du brauchst Dich mit Treibersignierung nicht beschäftigen 
(A4), und Du musst keine Treiber mitliefern (A5).

> Da kommt natürlich die Frage auf: Warum nicht gleich Ethernet? Ich hätte
> gerne, dass das Gerät direkt an einem Notebook betrieben und auch
> darüber mit Strom zu versorgen ist. PoE wäre da ne Option, aber ich hab
> noch kein Notebook gesehen, was PoE am Netzwerkport speist.

Das gibts auch nicht. Baue einen Akku ein, den Du an einem Netzteil 
wieder aufladen kannst. Das ist die sinnvollste Lösung und wird auch so 
gemacht (UMTS/WLAN Router z.B.)

von Jörg S. (joerg-s)


Lesenswert?

Axel Jäger schrieb:
> A2: In der zugehörigen Software soll der Benutzer NICHT auswählen oder
> raten müssen, an welchem COM-Port das Gerät hängt.
Mache ich immer so das das PC Tool an alle verfügbaren COM-Ports einen 
"Info-Befehl" oder "Ping" schickt. Antwortet das Gerät auf diesen 
speziellen Befehl mit der richtigen Antwort, ist der richtige Com-Port 
gefunden.

von Peter II (Gast)


Lesenswert?

Jörg S. schrieb:
> Mache ich immer so das das PC Tool an alle verfügbaren COM-Ports einen
> "Info-Befehl" oder "Ping" schickt. Antwortet das Gerät auf diesen
> speziellen Befehl mit der richtigen Antwort, ist der richtige Com-Port
> gefunden.

den Fehler haben schon andere gemacht (MS) und wenn an dem COM-Port z.b. 
eine USV angeschlosse ist damit irgendwelcher Aktionen ausgeführt.

Wenn überhaupt sollte da gerät etwas senden, und bei abfragen der 
Com-Port lauscht man nur.

von Axel J. (axeljaeger)


Lesenswert?

Jobst M. schrieb:
> Mit anderen Worten: Du suchst eine Schnittstelle, mit der man ohne
> jegliche Useraktion Aktionen auf dem PC ausführen können soll. Praktisch
> für einen Virus ... aber nicht gewollt.

Es ist ausreichend, wenn mein Programm schon läuft und dann meldet, dass 
jetzt die Hardware angeschlossen wurde. Also das Programm muss nicht 
durch das Anstecken gestartet werden.

Frank K. schrieb:
> Du willst also ein HID Device bauen
Hab ich mir auch schon überlegt. HID wäre eine Möglichkeit, aber da sind 
die Datenraten meines Wissens nach nicht so hoch, auch wenn es dazu 
bisher keine Anforderung gibt.

von Christian R. (supachris)


Lesenswert?

Axel Jäger schrieb:
> Meiner Meinung nach geht die Treibersignierung kaputt, wenn ich die
> Device-ID ändere. Außerdem wüsste ich nicht, wie ich auf Mac und Windows
> Events bekomme, wenn ich ein Gerät eingesteckt hab, weil ich da ja
> keinen HAL-Daemon zur Verfügung habe. Oder irre ich hier? Wie sieht denn
> die Situation mit WinUSB bezüglich Events aus?

Die Signierung geht weder bei WinUSB noch LibUSB kaputt. WinUSB ist 
immer signiert, LibUSB nutzt den spziellen Modus, die Signatur in die 
sys direkt einzubauen, da ist die VID/PID egal.
Events gibts nicht direkt über LibUSB/WinUSB, sondern im Falle von 
Windows über die WinAPI. Unter Mac und Linux gibts garantiert ebenfalls 
Systemfunktionen, die dir ein neues Gerät melden. Einen 100% generischen 
Code wirst du eh nicht schreiben können.

HID wäre aber bei niedrigen Datenraten wirklich noch eine Überlegung.

von Frank K. (fchk)


Lesenswert?

Axel Jäger schrieb:

> Frank K. schrieb:
>> Du willst also ein HID Device bauen
> Hab ich mir auch schon überlegt. HID wäre eine Möglichkeit, aber da sind
> die Datenraten meines Wissens nach nicht so hoch, auch wenn es dazu
> bisher keine Anforderung gibt.

Wie hoch muss denn die Datenrate sein?

fchk

von Axel J. (axeljaeger)


Lesenswert?

Zur Datenrate:
Aktuelles Zielprojekt ist ein DMX-Interface. Das hab ich schon sowohl 
mit FTDI, als auch als USB-HID-Device. Ich würde aber gerne diese Lösung 
da mit USB-Ethernet evaluieren, um sie für zukünftige Projekte zur 
Verfügung zu haben, wenn sich denn hier in der Diskussion rausstellt, 
dass das sinnvoll ist.

von Markus -. (mrmccrash)


Lesenswert?

Wäre es nicht zweckmäßiger, dann gleich ein Artnet-Gerät zu bauen?

Dann hast du alle Treiberprobleme los und Artnet beherrschen die meisten 
Programme für Lichtsteuerungen eh. Und von Artnet auf DMX umsetzen ist 
keine große Sache mehr, das haben andere auch schon gemacht, z.b. mit 
ATmega644 und dem ENC-Ethernet-Chip.

_.-=: MFG :=-._

von Axel J. (axeljaeger)


Lesenswert?

Vollkommen richtig, nur fehlt mir dann noch die Stromversorgung und 
deswegen hatte ich mit USB-Ethernet geliebäugelt. Was braucht man denn 
so technisch für USB-Ethernet? Gibts irgendwas, was man an einen AVR 
ranstecken kann? Vermutlich gibts Haufen ARMs, die das drinn haben?

von Frank K. (fchk)


Lesenswert?

Axel Jäger schrieb:
> Zur Datenrate:
> Aktuelles Zielprojekt ist ein DMX-Interface. Das hab ich schon sowohl
> mit FTDI, als auch als USB-HID-Device. Ich würde aber gerne diese Lösung
> da mit USB-Ethernet evaluieren, um sie für zukünftige Projekte zur
> Verfügung zu haben, wenn sich denn hier in der Diskussion rausstellt,
> dass das sinnvoll ist.

Warum schreibst Du das nicht gleich? Damit hättest Du die Diskussion 
früher in eine sinnvolle Richtung gelenkt.

Bei DMX sollte HID kein Problem sein. Als zweites USB-Standardprotokoll 
gibts CDC, das Microsoft aber ein wenig vermurkst hat, weil Windows da 
ein .inf-File sehen will (der usbser.sys ist aber bei Windows dabei).

Dafür ersetzt Du den FTDI einfach durch einen Microchip MCP2200, der CDC 
und HID macht.

USB Ethernet ist mit einiger Sicherheit nicht treiberlos über 
Betriebssystemgrenzen realisierbar, d.h. Du brauchst (a) einen Treiber 
und musst (b) das Ethernet konfigurieren bzw einen DHCP-Server 
bereitstellen und hoffen, dass der nicht mit der vorhandenen 
Netzwerkinfrastruktur kollidiert. Das ist irgendwie Murks. Dann lieber 
richtiges Ethernet.

Dafür brauchst Du einen Microchip PIC18F67J60 (der hat gleich Ethernet 
MAC+PHY und den UART für RS485 bzw DMX drin, Du brauchst also nur noch 
die Ethernet-Buchse und etwas Kleinzeug anzuschließen), einen 
RS485-Transceiver (am Besten sowas wie TI SN75HVD08/SN65HVD08 mit 3.3V 
Versorgungsspannung, weil der PIC auch mit 3.3V arbeitet), und die 
Stromversorgung (z.B. LM1117-3.3V).

Obendrein ist das Interface dank des in der RJ45-Buchse verbauten 
Übertragers galvanisch isoliert, sofern Du UTP-Kabel nimmst, d.h. 
Masseschleifen über Deinen PC können nicht auftreten.

fchk

von Axel J. (axeljaeger)


Lesenswert?

Frank K. schrieb:
> Warum schreibst Du das nicht gleich? Damit hättest Du die Diskussion
> früher in eine sinnvolle Richtung gelenkt.

Weil ich erstmal diskutieren wollte, ob es außer für Arnet und DMX, wo 
ein Ethernet-Device absolut naheliegend ist, sinnvoll ist, diese 
Deviceklasse zu benutzen. Das wird ja nicht das letzte Gerät sein, was 
ich baue. Im Moment hab ich den Eindruck, die Standardlösung ist der 
Virtual COM-Port und der geht mir sowohl bei der DMX-Geschichte, als 
auch bei anderen Geräten auf die Nerven.

Hier in dem Thread sind so schon einige interessante Informationen 
zusammen gekommen.

Die Sache mit Ethernet konfigurieren sehe ich nicht so kritisch, mit 
Universal Plug & Play/Bonjour und APIPA-Adressen geht da schon einiges 
denke ich.

von Peter II (Gast)


Lesenswert?

Axel Jäger schrieb:
> Die Sache mit Ethernet konfigurieren sehe ich nicht so kritisch, mit
> Universal Plug & Play/Bonjour und APIPA-Adressen geht da schon einiges
> denke ich.

und was mit mit installierten Firewalls und doppelte IPs bzw netzen?

von Axel J. (axeljaeger)


Lesenswert?

Firewall hab ich bisher nicht betrachtet, doppelte IP sollte bei 
APIPA-Adressen nicht vorkommen.

von Peter II (Gast)


Lesenswert?

Axel Jäger schrieb:
> doppelte IP sollte bei APIPA-Adressen nicht vorkommen.
aber dann hast du ein doppelltes netz und das BS weiss nicht mehr wohin 
es packete schicken soll wenn das echte netzwerk die gleichen adressen 
verwendet.

von Frank K. (fchk)


Lesenswert?

Axel Jäger schrieb:
> Frank K. schrieb:


> Im Moment hab ich den Eindruck, die Standardlösung ist der
> Virtual COM-Port und der geht mir sowohl bei der DMX-Geschichte, als
> auch bei anderen Geräten auf die Nerven.

Das muss nicht sein.

Schau Dir unter Windows die SETUPAPI an. Damit kannst Du durch den USB 
Device Tree durchiterieren und Dein Gerät finden, entweder über VID/PID, 
oder bei Verwendung einer Standard VID/PID unter Zuhilfenahme der 
Seriennummer und der Manufacturer/Product Device Deskiptoren (die kannst 
Du beliebig ändern, ohne dass das .inf nicht mehr funktioniert und neu 
signiert werden muss). Wenn Du im SETUPAPI Dein Gerät gefunden hast, 
bekommst Du auch raus, auf welchem COM-Port es liegt. Das steht irgendwo 
in der MSDN Doku drin, hab ich schon mal gesehen.

Und um das Anstecken/abstecken zu registrieren, musst Du die 
WM_DEVICECHANGE Window Messages auswerten, die Dein Main Window bekommt.

fchk

von Jörg S. (joerg-s)


Lesenswert?

Peter II schrieb:
> Jörg S. schrieb:
>> Mache ich immer so das das PC Tool an alle verfügbaren COM-Ports einen
>> "Info-Befehl" oder "Ping" schickt. Antwortet das Gerät auf diesen
>> speziellen Befehl mit der richtigen Antwort, ist der richtige Com-Port
>> gefunden.
> den Fehler haben schon andere gemacht (MS) und wenn an dem COM-Port z.b.
> eine USV angeschlosse ist damit irgendwelcher Aktionen ausgeführt.
Das spricht wohl eher gegen die Programmierer der USV die nach erhalt 
irgendwelcher Daten irgendwas macht :)

von wewölk (Gast)


Lesenswert?

Jörg S. schrieb:
> Peter II schrieb:
>> Jörg S. schrieb:
>>> Mache ich immer so das das PC Tool an alle verfügbaren COM-Ports einen
>>> "Info-Befehl" oder "Ping" schickt. Antwortet das Gerät auf diesen
>>> speziellen Befehl mit der richtigen Antwort, ist der richtige Com-Port
>>> gefunden.
>> den Fehler haben schon andere gemacht (MS) und wenn an dem COM-Port z.b.
>> eine USV angeschlosse ist damit irgendwelcher Aktionen ausgeführt.
> Das spricht wohl eher gegen die Programmierer der USV die nach erhalt
> irgendwelcher Daten irgendwas macht :)

Hm, dann kannst du die Schnittstelle auch gleich weglassen, wenn sie auf 
keine Daten die darüber kommen reagiert...

von Jörg S. (joerg-s)


Lesenswert?

Wieso auf keine Daten? Auf IHRE Befehle kann die USV ja reagieren.

von Christian G. (christian_g83)


Lesenswert?

Axel Jäger schrieb:

> Außerdem wüsste ich nicht, wie ich auf Mac und Windows
> Events bekomme, wenn ich ein Gerät eingesteckt hab, weil ich da ja
> keinen HAL-Daemon zur Verfügung habe.

Bei beiden Systemen können Programme über das entsprechende API 
Callbacks einrichten, über die Benachrichtigungen über derartige 
Ereignisse versendet werden.

Wie soll es auch sonst funktionieren? Denkst Du, unter Mac OS und 
Windows müssen alle interessierten Parteien ständig den USB-Port pollen, 
um über dessen Zustand auf dem Laufenden zu bleiben?

Christian

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jörg S. schrieb:
> Wieso auf keine Daten? Auf IHRE Befehle kann die USV ja reagieren.

Und, wenn die zu "Testzwecken" gesendeten Daten zufälligerweise aus 
Sicht der USV legal sind?

Alle Schnittstellen aufmachen und was 'rausblasen macht man nicht. 
Punkt.

von Frank K. (fchk)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Jörg S. schrieb:
>> Wieso auf keine Daten? Auf IHRE Befehle kann die USV ja reagieren.
>
> Und, wenn die zu "Testzwecken" gesendeten Daten zufälligerweise aus
> Sicht der USV legal sind?
>
> Alle Schnittstellen aufmachen und was 'rausblasen macht man nicht.
> Punkt.

genau! Es gibt andere Möglichkeiten!
Ausrufezeichen!

von Axel J. (axeljaeger)


Lesenswert?

Christian Gudrian schrieb:
> Denkst Du, unter Mac OS und
> Windows müssen alle interessierten Parteien ständig den USB-Port pollen,
> um über dessen Zustand auf dem Laufenden zu bleiben?

Ich weis, dass bei MacOS die Situation überaus komfortabel ist und man 
da über DeviceKit solche Events bekommt. Wie die entsprechende API unter 
Windows heißt, wusste ich bisher nicht, aber ist ja im Rahmen dieser 
Diskusion rausgekommen. Ich wundere mich aber ein bisschen, dass libusb 
zwar den Zugriff auf USB-Geräte abstrahiert, nicht aber diese 
HotPlug-Events, da es meiner Meinung nach keinen guten Grund gibt, das 
nicht zu tun. Jede Anwendung, die libusb benutzt, wird doch auf solche 
Events reagieren können wollen?

Zu der Diskusion mit der USV: Wenn man es sauber machen würde, würde man 
die Datenpakete auf der seriellen Schnittstelle kryptografisch signieren 
und so sicherstellen, dass zufällig gesendete Daten nicht interpretiert 
werden.

von Jörg S. (joerg-s)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Und, wenn die zu "Testzwecken" gesendeten Daten zufälligerweise aus
> Sicht der USV legal sind?
Genauso zufällig kann auch ein UDP/TCP Paket bei Ethernet 
"missverstanden" werden. Immerhin sind etliche Ports doppelt und 
dreifach belegt. Oder Übertragungen im 2,4GHz Band, da senden alle quer 
durcheinander. Oder der User weiß nicht was am welchen COM-Port hängt 
und stellt zufällig den Port der USV ein und sendet quatsch.

> Alle Schnittstellen aufmachen und was 'rausblasen macht man nicht.
Bei einem komerziellen Gerät würde ich auch erst was anderes versuchen, 
aber privat sehe ich kein Problem.

von Peter II (Gast)


Lesenswert?

> > Alle Schnittstellen aufmachen und was 'rausblasen macht man nicht.
> Bei einem komerziellen Gerät würde ich auch erst was anderes versuchen,
> aber privat sehe ich kein Problem.

warum sollte man es bei einem Privaten gerät nicht auch richtig machen? 
Wenn das gerät sich selber meldet und in ping sendet dann ist das der 
gleich aufwand und es ist gleich richtig.

von Strickwettbewerbgewinner (Gast)


Lesenswert?

Axel Jäger schrieb:
> Jede Anwendung, die libusb benutzt, wird doch auf solche
> Events reagieren können wollen?
Die meisten Anwendungen startet man nach dem Anschließen des Geräts, 
oder habene einen "Refresh" Button den man nach Anstöpseln betätigen 
muss...

von Frank K. (fchk)


Lesenswert?

... weil die Entwickler keinen Plan haben, wie man es richtig macht.

fchk

von Christian R. (supachris)


Lesenswert?

Peter II schrieb:
> Wenn das gerät sich selber meldet und in ping sendet dann ist das der
> gleich aufwand und es ist gleich richtig.

Das ist genauso blöd. Ein Gerät hat nicht einfach so loszuquasseln. Dann 
wird gerne mal eine serielle Maus erkannt. Es ist doch kein Problem 
anhand der Registry den richtigen COM Port zu finden.

von tz (Gast)


Lesenswert?

Axel Jäger schrieb:
> Ich weis, dass bei MacOS die Situation überaus komfortabel ist und man
> da über DeviceKit solche Events bekommt. Wie die entsprechende API unter
> Windows heißt, wusste ich bisher nicht, aber ist ja im Rahmen dieser
> Diskusion rausgekommen. Ich wundere mich aber ein bisschen, dass libusb
> zwar den Zugriff auf USB-Geräte abstrahiert, nicht aber diese
> HotPlug-Events, da es meiner Meinung nach keinen guten Grund gibt, das
> nicht zu tun. Jede Anwendung, die libusb benutzt, wird doch auf solche
> Events reagieren können wollen?

Seit wann sind Events über neue Geräte spezifisch nur für USB ? Sind sie 
nicht also hat das nichts mit einer Lib zu tun die nur USB macht.

von Axel J. (axeljaeger)


Lesenswert?

tz schrieb:
> Seit wann sind Events über neue Geräte spezifisch nur für USB ? Sind sie
> nicht also hat das nichts mit einer Lib zu tun die nur USB macht.

Nun der Sinn von von Cross-Plattform-Abstraktionslibraries ist ja, den 
Anteil von plattformspezifischem Code zu minimieren. Wenn ich mich also 
ohnehin mit dem nativen Code dererlei APIs beschäftigen muss, fällt die 
Rechtfertigung für libusb weg. Ich wünsche mir mit so einer lib ein 
Rundum-Sorglos-Paket für einen gewissen Usecase, nämlich mit USB-Geräten 
schaffen. Ich wüsste aber grad auch nicht, was man an einem modernen PC 
neben USB großartig an anderen Hotplug-Events bekommen könnte.

von Christian R. (supachris)


Lesenswert?

USB Sticks oder Express Cards benutzt du nicht? Auch die sind voll 
Hotplug fähig. Übrigens gibts die SetupAPI Events nicht nur, wenn ein 
Hotplug Gerät angestekt/abgezogen wird, sondern auch wenn im 
Gerätemanager manuell nach neuen Geräten gesucht und diese gefunden 
wurden. Außerdem für uPNP Geräte usw. das ist also keineswegs auf USB 
beschränkt.
Es ist aus der Sicht der User-Lib schlicht nicht die Aufgabe. Solche 
Aufgaben sind system-spezifisch und demnach in den Systemfunktionen des 
jeweiligen OS zu finden. Den Traum von OS-unabhängigem Code träumen 
viele, der platzt spätestens beim Zugriff auf Hwrdware.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.