我有一个需要与之通信的蓝牙隐藏设备。目标平台是 Android 5.x+。目前正在 Nexus 7 2013 平板电脑上进行测试。
我的代码在 android 5.x 上运行良好,我能够在 Android 5.x 上接收、发送和设置报告。
在 Android 6.x 上,我只能接收设备发送的报告,但无法发送或设置报告。看起来我的设置/发送报告请求被 HID/BT 堆栈默默地忽略了。
与/dev/hidraw* 节点对话的代码以 root 身份作为 native 守护进程运行。
是否有任何新要求能够在 Android 6.x 上设置/发送报告到蓝牙隐藏设备?我是否可以对 AOSP 进行任何更改以使其正常工作?
[更新] Logcat 说:
05-17 11:22:56.085 2455-4061/com.android.bluetooth E/bt_btif: uhid_event: 从 uhid-dev 读取的大小无效:4108 != 4
我不明白从 uhid 读取怎么会只返回 4 个字节!前 4 个字节应该只包含事件的 type
。是否有任何情况会导致 read()
小于 sizeof(struct uhid_event)
字节?
这是否表示 uhid 驱动程序中存在错误?
最佳答案
我检查了可用的内核源代码,发现 hidraw 驱动程序不包含可用于向/dev/hidraw* 节点提供报告的源代码
我还发现 Bluedroid 在内部正确接收和发送报告。
我发现获取/设置/发送报告的最简单方法是修改 bluedroid 以直接与我的应用程序通信以获取特定于供应商的报告。我将我的守护进程直接集成到 Bluedroid 中。
关于android - hidraw 设置报告/发送报告不适用于 Android 6.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36333474/