Konrad Rosenbaum konrad@silmor.de schrieb:
Ich suche eine Hardware, die möglichst frei, problemlos (also C, nicht Assembler) zu programmieren, nicht zu teuer und via USB angebunden ist.
Im Augenblick schwanke ich zwischen Arduino Uno, Maple und der eventuellen Möglichkeit dass es noch was anderes gibt...
Arduino ist fast 'ne Garantie! Ganz einfach zu nutzen, billig und trotzdem mächtig! Ob es reicht, für was du machen willst, ist die Preisfrage...
Ich will mir einen Tastatur- und Maus-emulator via USB basteln. Man kann zwar in X11 Events einschmuggeln, aber auf der Textkonsole, im Framebuffer oder Wayland ist das schon schwieriger - ein per USB angeschlossener Emulator könnte beliebigen Programmen Input unterjubeln.
Hat jemand Erfahrungen wie schwierig sowas ist?
'sticazzi! (eine Übersetzung erfolgt auf Wunsch). Man sagt mir, daß ich mir schwere Aufgabe für meine Freizeit mir suche, aber du hast auch sowas im Plan...
Also, das ist eine SEHR schwere Sache... Erstmal musst du den USB-Stack als MASTER implementieren. Das kann schon recht aufwändig sein. Standardmäßig haben alle solche EmbeddedGeräte nur die USB-Schnittstelle als SLAVE (viel einfacher!). Danach musst du auch ein Ethernetstack, inklusive TCP/IP, einrichten. Und noch mit dem Lötkolben basteln, denn Arduino wenigstens, hat keinen Ethernetcontroller! Das bedeutet, eine extra Platine, im besten Fall mit einem ENC28J60, die übliche Kondensatoren, einen Quarz, die RJ45-Büchse und einen SPI-Anschluss bis zum ATMega (Arduino).
Gewiss, es gibt schon freie Implementationen von TCP/IP-Stacks (siehe uIP), aber das ganze ist trotzdem gar nicht so einfach.
Die Idee ist das USB-Gerät drei virtuelle Schnittstellen haben zu lassen: Ethernet (USB CDC ECM), Tastatur (HID Keyboard) und Maus (HID Mouse). Wenn via Ethernet ein Kommando geschickt wird soll es dann via Tastatur oder Maus als Event zurückgesendet werden. Wenn die Tastatur das Kommando bekommt eine LED anzuschalten, kommt das Ereignis übers Netzwerk zurück.
Sagen wir so: wenn du geschafft hast, USB-Master und Ethernet zu basteln, das ist das einfachste... :D
Ich hatte noch überlegt statt Ethernet, HID plain data oder CDC ACM (serial) zu nehmen. HID plain hat das Problem dass man eine funktionierende USB- Bibliothek, wie libusb braucht, was nur begrenzt portabel ist. CDC ACM ist an sich gleichwertig mit Ethernet, aber für Netzwerk habe ich bereits fertige portable Klassen (Qt).
Naja, HID macht das ganze noch komplexer, denn du musst ZWEI USB-Stacks (und Ports!!) haben: eine als Master (für Tastatur und Mouse) und die andere als Slave (für HID). CDC ACM kenne ich nicht.
Also, viel Spaß! Luca Bertoncello (lucabert@lucabert.de)