android - hidraw 设置报告/发送报告不适用于 Android 6.x

标签 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 身份作为 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/

相关文章:

android - 从 github 查看 Android 源代码

android - 如何在应用程序关闭时重新启动服务?

java - 如何让 myfirstapp 在 android studio 上运行?

java - 在 TextView 中保留最近收到的短信

java - 用于连接到 Android 设备的桌面应用程序

ios - 将数据同时传输到多个外围设备 ios BLE

c# - 在我的蓝牙 LE 设备上,我可以更改外围设备上的特征属性吗?

ios - 什么是 AWDL(Apple Wireless Direct Link)及其工作原理?

java - "No rule to make target"在android源程序中添加库时出错

android - 如何在 AOSP 构建中设置默认属性?