HID schreiben
-
Hallo zusammen,
Ich versuche zur Zeit mit den Buzz! Controllern (http://img.game.co.uk/images/productpages/buzz.jpg) zu interagieren. Also lesen und schreiben.
Buzz Controller Infos:
Das ganze wird als Joystick erkannt - jeder Buzzer hat 5 Buttons - die laufen alle über einen USB Stecker also sind 4 Buzzer ein Joystick. Der Joystick hat dann 4 * 5 = 20 Buttons. Jeder Buzzer hat zudem eine LED - also hat der Joystick 4 LEDs.
Die Buttons kann ich abfangen - nur die LEDs kann ich noch nicht zum leuchten bringen.
Unter Windows muss ich im Tool SimpleHIDWrite folgendes an den Joystick senden damit alle LEDs leuchten: 00, FF, FF, FF, FF, 00, 00
Um nur die LED des ersten Buzzers leuchten zu lassen sende ich: 00, FF, 00, 00, 00, 00, 00
Um die LEDs wieder auszuschalten sende ich einfach: 00, 00, 00, 00, 00, 00, 00
und so weiter.
Ich habe jedoch noch keine Lösung gefunden wie ich die LEDs unter Linux zum leuchten bringen kann.Unter Windows konnte ich hierfür das Programm "SimpleHIDWrite" verwenden (http://www.lvr.com/files/SimpleHIDWrite3.zip). Nun suche ich eine komfortable Möglichkeit um unter Linux die Controller zu steuern (in diesem Fall: Licht des Buzzers anmachen ). Kennt jemand eine C Library oder nen Codeschnipsel mit dem es möglich ist auf HID Geräte zu schreiben?
Viele Grüße
-
Ich habe jetzt folgende API gefunden:
http://www.signal11.us/oss/hidapi/Hab auch schon das Beispiels Programm auf der Seite so abgeändert dass ich mich mit dem Controller verbinden kann.
Aber beim schreiben bekomme ich immer folgende Fehlermeldung:Unable to write() Error: (null)
Mein Code:
buf[0] = 0x0; buf[1] = 0x0; buf[2] = 0xff; buf[3] = 0xff; buf[4] = 0xff; buf[5] = 0xff; res = hid_write(handle, buf, 66); if (res < 0) { printf("Unable to write()\n"); printf("Error: %ls\n", hid_error(handle)); }
Kennt jemand die API bzw kann mir jemand sagen was ich falsch mache?
-
vielleicht sagt Dir ja
hid_error (hid_device *device);
etwas darüber.
Und die Doku sagt, Du mögest bedenken, dass Du ein Byte mehr schicken musst, weil das 0. Byte von der Funktion verwendet wird oder sowas in der Richtung. Habs nur eben überflogen.
Wenn Du also 8 Byte schicken willst, hat Dein Buffer mindestens Platz für 9 zu haben und die Bytes folgen einem 0-Byte.
-
Die Doku sagt dazu:
The first byte of data[] must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to hid_write() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to hid_write(), the Report ID (or 0x0, for devices with a single report), followed by the report data (16 bytes). In this example, the length passed in would be 17.
-
habs hinbekommen
es lag an der 66 - das war die falsche größe