Ansteuerung von USB-Schnittstellen via HDI mit Java

Ansteuerung von USB-Schnittstellen via HDI mit Java


Früher war alles einfach besser. Jeder PC hatte eine oder zwei serielle und eine parallele Schnittstelle(n), die auch relativ einfach per Java angesprochen werden konnten. Diese Schnittstellen wurden fast vollständig durch die USB-Schnittstellen verdrängt. Wie kann man nun auf die USB-Schnittstelle per Java zugreifen? Und wie kann die einmal programmierte Java-Anwendung dann auch noch auf Windows, Mac OS X, Linux und anderen Systemen ausgeführt werden, ohne dass Anpassungen am Quellcode nötig sind – nach dem alten Sun-Motto „Write once, run anywhere“?

Der weit verbreitete Universal Serial Bus (USB) wird für die Ansteuerung externer Geräte, wie zum Beispiel Mäuse, Tastaturen, Drucker und andere Hardware (Bluetooth HID), verwendet. Die Geräte können dank der Hot-Plugging-Fähigkeit im laufenden Betrieb miteinander verbunden und sogar über USB noch mit Energie versorgt werden. Seit 2011 hat sich USB in der Version 3.0 auf dem Massenmarkt verbreitet, trotz der von Apple eingeführten Thunderbolt-Schnittstelle in direkter Konkurrenz dazu.

An der Haltestelle

Die USB-Schnittstellen benötigen für jedes Betriebssystem eigene Device-Treiber. Und da fängt das Elend für die Entwickler schon an: Device-Treiber in C oder C++ programmieren und das für verschiedene Plattformen mit verschiedenen 32- und 64-Bit-Systemen, nur um auf den USB-Port zuzugreifen, und das alles noch testen – das will man als Java-Entwickler eigentlich nicht. Es ist seit einiger Zeit auch nicht mehr nötig, denn seit 2010 gibt es das „javahidapi“-Projekt [1], das einen JNI-Wrapper über die C-/C++-Device-Treiber für Windows, Linux, Mac und auch andere Systeme zur Verfügung stellt. Das javahidapi besteht aus nur einem JAR, das unter [2] kostenlos geladen werden kann. Optional können von dort zusätzlich der Sourcecode und die Javadoc geladen werden. Wer Lust hat, kann sich auch alles aus dem Sourcecode selbst zusammenbauen. Dies ist aber normalerweise nicht nötig. Dieses eine JAR enthält auch alle nötigen nativen Treiber. Für Windows sind das die nötigen *.ddl, für Linux die *.so und für Mac die *.jnilib. Auch wird das Projekt aktuell noch weiterentwickelt, und eventuell nötige Fixes werden bereitgestellt. So ist gerade in Issue 48 vom 01.02.2013 ein Thread eröffnet worden, der eine Version für den beliebten ARM-Prozessor des Raspberry Pi [3] bereitstellt.

Die aktuelle Version 1.1. [4] steht unter sehr liberalen Softwarelizenzen. Es kann zwischen der GNU-, BSD- und einer HIDAPI-Lizenz gewählt werden. ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang