2

Ich habe ein Bluetooth-Gerät, mit dem ich kommunizieren muss. Zielplattform ist Android 5.x +. Derzeit testen auf Nexus 7 2013 Tablet.hidraw set-report/send-report funktioniert nicht mit Android 6.x

Mein Code funktioniert gut auf Android 5.x, ich bin in der Lage, Berichte über Android 5.x zu empfangen, zu senden und zu setzen.

Auf Android 6.x kann ich nur Berichte empfangen, die vom Gerät gesendet wurden, aber ich kann keine Berichte senden oder einstellen. Es sieht so aus, als ob meine Set/send-Berichtanforderungen vom HID/BT-Stack ignoriert werden.

Der Code, der mit/dev/hidraw * Knoten kommuniziert, wird als nativer Daemon als root ausgeführt.

Gibt es neue Anforderungen zum Einrichten/Senden von Berichten an Bluetooth-versteckte Geräte auf Android 6.x? Gibt es irgendwelche Änderungen, die ich an AOSP vornehmen könnte, damit dies funktioniert?

[Update] Logcat sagt:

05-17 11:22:56.085 2455-4061/com.android.bluetooth E/bt_btif: uhid_event: Invalid size read from uhid-dev: 4108 != 4

Ich verstehe nicht, wie das Lesen von uhid nur 4 Bytes zurück! Die ersten 4 Bytes sollen nur das type Event enthalten. Gibt es ein Szenario, das zu einem read() von weniger als sizeof(struct uhid_event) Bytes führt?

Könnte dies auf einen Fehler im UHID-Treiber hinweisen?

+0

Ich habe einen wachsenden Verdacht, dass uhid Treiber von Arbeitscode in Android Kernel-Quelle erschöpft sein könnte. Ich werde aktualisieren, wenn ich mehr Informationen bekomme. – GPS

Antwort

1

Ich habe verfügbar Kernel-Quellen und festgestellt, dass hidraw Treiber nicht benutzbar Quelle enthält Berichte zu/dev/hidraw * Knoten

ich auch, dass Bluedroid richtig und sendet empfängt intern Berichte gefunden zu füttern.

Einfachste Methode zum Abrufen/Einstellen/Senden von Berichten Ich fand heraus, dass bluedroid geändert werden sollte, um direkt mit meiner App für herstellerspezifische Berichte zu kommunizieren. Ich habe meinen Daemon direkt in Bluedroid integriert.