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

时间:2016-08-22 14:44:58

标签: android bluetooth android-bluetooth hid

我试图通过蓝牙从索尼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描述符的信息,但我还不清楚如何收集数据。 如果有人在这些方面做了一些事情并且可以帮助指出我正确的方向或提供任何有用的链接来帮助我解决这个问题,将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

我试图捕获HID描述符...

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

所以,如果你想找出描述符,你可以取消配对设备,然后嗅探日志(对于Android,btsnoop.log应该工作)来找出两个设备开头的描述符& #39;连接。