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

时间:2016-03-31 12:26:30

标签: android bluetooth android-source android-6.0-marshmallow hid

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

我的代码在android 5.x上工作正常,我可以在Android 5.x上接收,发送和设置报告。

在Android 6.x上,我只能接收设备发送的报告,但我无法发送或设置报告。看起来我的设置/发送报告请求被HID / BT堆栈默默忽略。

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

是否有任何新要求可以在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读取只返回4个字节!前4个字节应该只包含事件的type。是否有任何情况会导致read()小于sizeof(struct uhid_event)个字节?

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

1 个答案:

答案 0 :(得分:1)

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

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

获取/设置/发送报告的最简单方法我发现是修改bluedroid直接与我的App进行通信,以获取特定于供应商的报告。我直接将我的守护进程整合到Bluedroid中。