使用 C++ 在 Linux 上连接 Playstation DualShock 4 (DS4) 控制器

Interface Playstation DualShock 4 (DS4) Controller on Linux using C++

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

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

我正在使用 Ubuntu 16.4 并了解到 PS4 控制器自 ver. 14.xx。但我能找到的关于连接的所有信息都是如何为 Steam 或一般游戏设置控制器。 但不是如何获取状态信息并使用 C++ 使用它们。

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

如果有人能给我提示,将不胜感激。

我在 raspberry pi 上完成了大部分工作,但大部分仍然适用,因为底层驱动程序大体相同

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

控件: 您最好的选择是阅读 /dev/input/jsX,其中 x 是您所连接的控制器的编号(通常为 0)。这适用于正常的文件读取,所以应该没有问题。该文件包含从按钮按下到触控板事件和所有其他传感器数据的所有内容。它是基于事件的,所以如果您按下一个按钮,您将获得一个 8 字节的突发数据。结构如下所示:
1. 时间戳最低字节
2.时间戳倒数第二个字节
3.时间戳第二高字节
4.时间戳最高字节
5. 测量数据MSB
6. 测量数据LSB
7. 类型(1 代表 Button。2 代表 Axis(所以是一根棍子或另一个模拟值))
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 写入 red 255 到 green 和 0 到 blue