neo1967 hat geschrieben:
Gibt es hier einen festgelegten Weg, um über Ruby Rechnerschnittstellen abzufragen
Unter Linux als unixoides System ist ja alles eine Datei, und das gilt natürlich auch für Zugriffe auf Hardware. Solange der Kernel das Teil erkennt und einen Treiber dazu findet (evtl. mit Kernelmodulen), wird er irgendwo unter /dev eine Device-Datei anlegen, die du mit beliebigen Mitteln (und eben auch mit Ruby) auslesen kannst. Dazu musst du "nur" in der Dokumentation des Treibers schauen, wie das Format der Daten in der Devicefile aussieht. In dem unwahrscheinlichen Glücksfall, dass sie mit verständlichem Text zeilenweise arbeitet, kannst du sie einfach als normale Datei behandeln. Wahrscheinlicher ist, dass du mit ziemlich viel Binärkram konfrontiert wirst und IO#read mit Byte-Offsets und String#unpack bemühen musst. Das ist aber kein ruby-spezifisches Problem. Um herauszufinden, wie der Kernel dein Lesegerät handhabt, empfiehlt es sich, beim Einstecken das Systemlog zu verfolgen (der Pfad zum Syslog kann anders sein, bei mir ist es etwa /var/log/messages.log): $ tail -f /var/log/syslogAn der Ausgabe erkennst du evtl. mit was genau du es zu tun hast, welcher Treiber benutzt wird und wo das Devicefile erzeugt wird. Falls sich nichts entnehmen lässt, solltest du mal auf einer Linux-Adminseite nachfragen, wie du dein System korrekt mit dem Gerät verheiratest.
Hast du die Devicefile und kennst das verwendete Format, ist die Abfrage in Ruby einfach (/dev/input/event999 durch die richtige Devicefile ersetzen): File.open("/dev/input/event999", "rb") do |dev| # Device im binären Lesemodus öffnen
str = dev.read(10) # 10 Bytes lesen, blockt wenn noch keine da sind
data = str.unpack("kryptische_sequenz_hier") # Daten in ein Array verwandeln, siehe Doku von String#unpack
# Daten verarbeiten
end
Vale,
Quintus
EDIT: Und weil sich die meisten Devicefiles gerne von Mal zu mal ändern, solltest du auch noch eine Udev-Regel aufsetzen, die automatisch einen Symlink unter /dev platziert, der immer auf das momentan aktuelle Device zeigt.
_________________
Habe den Mut, dich deines eigenen
Verstandes zu bedienen! — Immanuel Kant
Mein Blog | Auf Twitter:
@qquintilianus | PGP/GPG-Schlüssel: BF3A 614B D62B A4A0 C292 141C B875 5CB1
C592 A85AHelft beim OpenRubyRMK, einem freien Programm zum erstellen von RPGs! (
→ GitHub-Projekt)