Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)

Posted

技术标签:

【中文标题】Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)【英文标题】:Android: Using HID over GATT directly in Application (Gadget=HID → control Application) 【发布时间】:2017-11-10 13:43:40 【问题描述】:

我有一个带有几个按钮的蓝牙 LE 操纵杆。我想不使用蓝牙设置直接将它连接到应用程序,而是通过BluetoothLeScanner 连接到它。

我已经可以连接到心率监测器并定期收到心率值通知。

我还创建了一个带有 ESP32 的小型温度/光/湿度传感器,我还可以连接到该传感器并在应用程序中显示传感器值。

我对这款 HID 设备的理解可能有误。在 App BLE Scanner 的帮助下,我可以通过 BLE 连接到这个小工具并查看提供的服务。

其中一个是0x1812 HUMAN INTERFACE DEVICE,其中包含REPORT 类型的几个特征,其中描述了HID OVER GATT PROFILE SPECIFICATION (HOGP_SPEC)

我怎样才能知道按下了哪个按钮,操纵杆移到了哪个位置?我想这必须通过我必须订阅的通知来实现。

是否有任何可用于处理 HID 输入设备的 android 库?我不想做的是使用蓝牙设置并连接到设备并将其检测为 HID 设备并用一些奇怪的映射替换键盘。我根本不希望操作系统参与进来,就像我连接和使用 HRM 和 ESP32 时一样。

我找不到这方面的任何信息。

我可以使用我的应用程序连接到设备,列举服务和特征。但从那时起,我不知道如何使用 HID。理想情况下,我会收到诸如“按钮 A 已被按下”“操纵杆已移至 x=32”之类的通知,其中 x 的范围为 -127 到 127,例如。

【问题讨论】:

不管怎样,一个朋友中风了,现在几乎不能说话。我期待创建一个可以通过 10 美元的多按钮/操纵杆 BLE 设备轻松控制的应用程序。将是开源的。 Daniel 做得很好,按下按钮时设备是否通过任何类型的确认 没有。连接后,我会“订阅”onServicesDiscovered 中报告特征的通知。但我从未从设备收到任何其他信息,onCharacteristicChanged 不会在按下按钮时被调用。我正在阅读github.com/kshoji/BLE-HID-Peripheral-for-Android/blob/master/…,以尝试了解 HID 设备的行为方式。也许我需要以某种方式绑定它。 你也许应该做一个 GATT 服务器连接?也许下一个答案应该可以帮助您咬一口:***.com/questions/55680180/… 【参考方案1】:

自 Android 5.0 起,访问 HID 特征需要 BLUETOOTH_PRIVILEGED 权限。应用获得该权限的唯一方法是使用与系统应用相同的证书进行签名。

这是一项安全功能,可防止应用从您的键盘接收 HID 事件并窃取您的密码。

引用https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/BLE_5F00_on_5F00_Android_5F00_v1.0.1.pdf

4.6 受保护的服务

Android 不允许对以下特征(及其描述符)读取或写入数据:

    HID 服务(自 Android 5 起):
a.  HID Information
b.  Report Map
c.  HID Control Point
d.  Report
    FIDO (https://fidoalliance.org/)(自 Android 6 起)
a.  U2F (0000FFFD-0000-1000-8000-00805F9B34FB)

仅具有 BLUETOOTH_PRIVILEGED 的应用程序,即已签名的应用程序 具有与系统相同的证书,能够读写 这些特征的数据。

【讨论】:

以上是关于Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

Android 5.0.2 及更高版本不允许通过蓝牙 LE 进行 HID 访问

USB驱动之Android usb鼠标驱动

USB接口程序编写

USB-HID的介绍

Android基于wifi的无线HID设备实现

在 Windows 应用商店应用中读取 HID 代理卡