Wiimote und Bluegiga WT12-A

Hallo liebe Experten,

ich versuche, eine Bluetooth-Verbindung zwischen einem Wiimote und einem Bluetooth-Modul WT12-A herzustellen, da ich mit u. a. mit dem Beschleunigungssensor des Wiimote Fernsteuer-Experimente machen möchte.

Das Wiimote ist ein Bluetooth-HID-Device (Human Interface Device), das WT12-A enthält in seinem Bluetooth-Stack (iWrap) u. a. das HID-Profil.

Die Verbindung kann ich herstellen (Erläuterungen nachstehend in Klammern):

SET PROFILE HID ON (HID aktivieren)
SET BT AUTH * (PIN-Code abschalten)
SET CONTROL ESCAPE - 40 1 (Umschaltung Data/Command Mode mit Pin PIO6 des WT12-A)
RESET (Übernahme der vorgenommenen Einstellungen. Rückmeldung …READY)
PAIR (Rückmeldung OK)
CALL 0011 HID
(Rückmeldung: CALL 0 CONNECT 0 HID 17 CONNECT 1 HID 19. Modul ist jetzt im Data Mode. Zurück in den Command Mode durch Umschalten des Pins PIO6 --> READY).
SELECT 1 (Wählt Verbindung 1, um Daten zu senden/empfangen, und schaltet wieder in den Data Mode um).

HID 17 ist L2CAP Kanal 17 (0x11, Control Channel) und HID 19 ist L2CAP Kanal 19 (0x13, Data Channel).

Es tritt kein Fehler auf, alle Rückmeldungen sind so, wie sie laut User Guide sein sollen.

Nun sollte man verschiedene Kommandos in Form von „Input- und Output-Reports“ senden können, um z. B. die 4 LEDs der Wiimote zu steuern, Zustände der Buttons und des Beschleunigungssensors abzufragen usw.

Z. B. (0x52) 0x11 0xf0 soll die LEDs einschalten.

Und genau das gelingt mir nicht. Gar nichts! Ich kann nichts steuern und nichts abfragen. Es werden keine Bytes empfangen, nichts. Was ich auch probiere (Kanal 17 oder Kanal 19 einstellen, das erste Byte (0x52) mitsenden oder weglassen, alles, was man so probieren kann: kein Erfolg. Ich fand ein Windows-Programm mit Source-Code, welches mit der Wiimote funktioniert, da wird anscheinend nur (wie im obigen Beispiel) 0x11 0xf0 gesendet. In diesem Programm wird die Verbindung mit dem setupapi hergestellt, es ist nichts mehr von HID 17/19 zu erkennen.

Internet-Recherche äußerst unergiebig, keine brauchbaren Hinweise.

Zusammengefaßt die Frage: Verbindung mit HID-Gerät ist hergestellt, wie sende ich Kommandos, wie mache ich Zustandsabfragen? Wer kennt sich damit aus und kann mir einen wirklich weiterführenden Hinweis geben?

Grüße,

I.

Lösung gerade gefunden
Hallo,

die Lösung besteht darin, nicht das HID-Profil zu verwenden, sondern direkt Verbindungen mit den L2CAP-Kanälen 0x11 und 0x13 herzustellen. Ev. ist das HID-Profil nicht komplett implementiert (nur HID-Device, nicht HID-Host).

(Weglassen: SET PROFILE HID ON)
SET BT AUTH *
SET CONTROL ESCAPE - 40 1
RESET
PAIR (Rückmeldung OK)
CALL 0011 L2CAP (Rückmeldung abwarten, jetzt Data Mode)
PIO6 auf High (–> wieder Command Mode)
CALL 0013 L2CAP (PIO6 wieder auf Low, Rückmeldung abwarten, wieder Data Mode)
PIO6 auf High (–> noch einmal Command Mode)
SELECT (Data Mode. ID = 0: L2CAP 0x11 = Kanal zum Schreiben. ID =1: L2CAP 0x13 = Kanal zum Lesen. Es kommen sofort Daten der Form 0xA1 0x30 0xXX 0xXX, die beiden Bytes 0xXX enthalten die Information über die Zustände der Wiimote-Buttons. Über L2CAP 0x11 funktionieren nun die Kommandos wie z. B. 0x52 0x11 0x01: LEDs aus, Vibrationsmotor an).

Vielleicht kann ja jemand etwas mit diesen Informationen anfangen.

Grüße,

I.

Hallo, mir hat es geholfen.

SET CONTROL ESCAPE - 40 1
setzt PIO6 als Data/Command Switch

PAIR {BT-Adresse}
Pairt die Geräte

mit den Befehlen:
L2CAP 11
L2CAP 13
die L2Cap „Ports?“ öffnen.

Das gepairte Gerät (Motion RING) sendet unmittelbar danach zwei RING events.

PIO6 kurz auf HIGH um in den Command Mode zu gelangen, ein READY. wird angezeigt.

SELECT 1 um Datenempfang zu selektieren.