从游戏 Controller.via 蓝牙捕获 HID 描述符流

Capturing HID Descriptor stream from Game Controller.via Bluetooth

我正在尝试通过蓝牙从索尼 PS4 控制器捕获 HID 描述符。我已成功使用以下代码建立连接。

void findController() {
    int[] deviceIds = mInputManager.getInputDeviceIds();
    for (int deviceId : deviceIds) {
        InputDevice dev = mInputManager.getInputDevice(deviceId);
        int sources = dev.getSources();
        if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) ||
                ((sources & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK)) {
            // Device is a gamepad or joystick
            listStr = "Controller Found: \r\n";
            listTxt.setText(listStr);
        }
    }
}

然后我使用侦听器来查找按键或动作事件,但我现在被告知我需要从包含不同描述符的控制器中查找数据流。数据以二进制数据包发送,需要转换成字符串数据。我今天大部分时间都在 Google 上,虽然有很多关于 HID 描述符的信息,但我仍然不清楚我是如何收集数据的。 如果有人按照这些思路做了一些事情并且可以帮助我指明正确的方向或提供任何有用的链接来帮助我解决这个问题,我们将不胜感激。

I'm trying to capture HID Descriptors...

确保您要收集 HID DescriptorsHID data event。 HID over Bluetooth(BR/EDR 或 HOGP)的工作原理如下: 1)HID主机使用SDP检测HID设备的描述符,即找出HID设备是什么(例如鼠标,键盘)并解析描述符以找出哪个键代表哪个事件。这个过程主要发生在主机和设备第一次连接时。 2)HID 主机将此设备注册到本地系统。 3) 一旦 HID 主机和 HID 设备连接,HID 主机将解析 HID 数据流或说从 HID 设备发送的事件,然后将事件镜像到系统事件,例如单击将它们弹出到系统。

所以,如果你想找出描述符,你不妨取消配对设备,然后嗅探日志(对于 Android,btsnoop.log 应该是有效的)找出来两个设备连接开始时的描述符。