2

J'ai un périphérique bluetooth caché avec lequel je dois communiquer. La plate-forme cible est Android 5.x +. Test en cours sur la tablette Nexus 7 2013hidraw set-report/send-report ne fonctionne pas avec Android 6.x

Mon code fonctionne très bien sur Android 5.x, je suis en mesure de recevoir, envoyer et définir des rapports sur Android 5.x.

Sur Android 6.x, je ne peux recevoir que les rapports envoyés par appareil, mais je ne peux ni envoyer ni définir de rapports. Il semble que mes demandes de rapport set/send soient silencieusement ignorées par la pile HID/BT.

Le code qui parle aux nœuds/dev/hidraw * s'exécute en tant que démon natif en tant que root.

Existe-t-il de nouvelles exigences pour pouvoir définir/envoyer des rapports aux appareils Bluetooth hid sous Android 6.x? Y a-t-il des changements que je pourrais apporter à AOSP pour permettre que cela fonctionne?

[Mise à jour] Logcat dit:

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

Je ne comprends pas comment la lecture de uhid retournera seulement 4 octets! Les 4 premiers octets sont censés contenir uniquement l'événement type. Y at-il un scénario qui se traduira par un read() de moins de sizeof(struct uhid_event) octets?

Cela peut-il indiquer un bug dans le pilote uhid?

+0

Je suis de plus en plus soupçonné que ce pilote pourrait être épuisé de code de travail dans la source du noyau android. Je mettrai à jour quand j'aurai plus d'informations. – GPS

Répondre

1

J'ai vérifié les sources du noyau disponibles et a constaté que hidraw pilote ne contient pas la source utilisable pour alimenter des rapports à/dev/hidraw * noeuds

J'ai aussi trouvé que Bluedroid reçoit correctement et envoie des rapports en interne.

La méthode la plus simple pour obtenir/régler/envoyer des rapports que j'ai trouvés était de modifier bluedroid pour communiquer directement avec mon application pour les rapports spécifiques au fournisseur. J'ai intégré mon daemon dans Bluedroid directement.