4

我想让 PS4 控制器在我的 PC 上工作,然后通过 UART 将数据中继到微控制器。

问题是,我在 Linux 的 C++ 编程方面没有经验。uC部分对我更有利。不过,我想编写一个程序,它可以与 PS4 控制器建立连接并读取所有按钮、摇杆、动作和触控板。此外,如果能够控制隆隆声和 LED 颜色,那就太好了。

我正在使用 Ubuntu 16.4 并且已经读到 PS4 控制器自版本以来就受到本机支持。14.xx。但我能找到的关于连接的所有信息都是如何为蒸汽或游戏设置控制器。但不是如何获取该状态信息并使用 C++ 使用它们。

在互联网上,我找到了一些项目,但它们都至少有 3-4 年的历史,并且使用的是旧版本的 Ubuntu。但是由于控制器本身是受支持的,所以在没有过时的插件/驱动程序的情况下使用它会很好,无论如何这些都是过时的。我也开始研究 HID 设备,但这似乎更像是一种解决方法,我希望找到例如一个库来包含和使用......

如果有人可以给我一个提示,将不胜感激。

4

1 回答 1

9

我在树莓派上做了大部分,但大部分仍然适用,因为底层驱动程序大多相同

连接https ://wiki.gentoo.org/wiki/Sony_DualShock查看有关 bluetoothctl 的部分,然后尝试遵循该部分或获取无线加密狗。(应该自动设置)

Controlls: 最好的办法是读取/dev/input/jsX其中 x 是您连接到的控制器的编号(通常为 0)。这适用于正常的文件读取,所以应该没有问题。该文件包含从按钮按下到触控板事件和所有其他传感器数据的所有内容。它是基于事件的,因此如果您按下按钮,您将获得 8 字节的数据突发。结构如下所示:
1. 时间戳最低字节
2. 时间戳第二低字节
3. 时间戳第二高字节
4. 时间戳最高字节
5. 测量数据 MSB
6. 测量数据 LSB
7. 类型(1 代表按钮。2 代表轴(所以一个棒或另一个模拟值))
8。ID字节(所以你按下的按钮的ID。例如:1代表x,2代表正方形,5代表左棒x)

LED: 这个有点复杂。到目前为止,我发现的唯一方法是访问/sys/class/leds
该文件夹应该包含一个名为0005:054C:05C4.0009:<blue/green/red/global>
“那些是你的 R/G/B 频道”的子文件夹。在这些文件夹中,有一些文件称为max_brightnessbrightness要将颜色更改为 0x00ff00 例如将 0 写入red255green和 0 到blue

于 2017-12-20T15:38:22.907 回答