hidraw set-report/send-report 不适用于 Android 6.x

hidraw set-report/send-report doesn't work with Android 6.x

我有一个需要与之通信的蓝牙隐藏设备。目标平台是 Android 5.x+。目前正在 Nexus 7 2013 平板电脑上进行测试。

我的代码在 android 5.x 上运行良好,我能够在 Android 5.x.

上接收、发送和设置报告

在Android6.x,我只能接收设备发送的报告,但无法发送或设置报告。看起来我的 set/send 报告请求被 HID/BT 堆栈无声地忽略了。

与 /dev/hidraw* 节点通信的代码以 root 身份作为本机守护进程运行。

是否有任何新要求能够 set/send 向 Android 6.x 上的蓝牙隐藏设备报告?我是否可以对 AOSP 进行任何更改以使其正常工作?

[更新] Logcat 说:

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

我不明白如何从 uhid 读取 return 只有 4 个字节!前 4 个字节应该只包含事件的 type。是否有任何情况会导致 read() 小于 sizeof(struct uhid_event) 字节?

这是否表示 uhid 驱动程序存在错误?

我检查了可用的内核源代码,发现 hidraw 驱动程序不包含可用于向 /dev/hidraw* 节点提供报告的源代码

我还发现 Bluedroid 在内部正确接收和发送报告。

我发现的 get/set/send 报告的最简单方法是修改 bluedroid 以直接与我的应用程序通信以获取特定于供应商的报告。我直接将我的守护进程集成到 Bluedroid 中。