Интерфейс контроллера Playstation DualShock 4 (DS4) в Linux с использованием переполнения стека

Я хотел бы заставить контроллер PS4 работать на моем ПК, а затем передавать данные на микроконтроллер через UART.

Проблема в том, что у меня нет опыта программирования на C ++ для Linux. UC часть больше в мою пользу.
Тем не менее, я хотел бы написать программу, которая может установить соединение с контроллером PS4 и читать все кнопки, джойстики, движения и трекпад. Также было бы неплохо иметь возможность контролировать гул и цвет светодиода.

Я использую Ubuntu 16.4 и прочитал, что контроллер PS4 изначально поддерживается начиная с версии. 14.xx. Но все, что я могу найти относительно подключения, — это настроить контроллер для Steam или игр в целом.
Но не о том, как получить информацию о состоянии и работать с ними с помощью C ++.

В интернете я нашел несколько проектов, но им по крайней мере 3-4 года, и они используют старую версию Ubuntu. Но так как контроллер изначально поддерживается, было бы неплохо использовать его без устаревших плагинов / драйверов, которые все равно устарели. Я также начал изучать HID-устройства, но это больше похоже на обходной путь, и я надеялся найти, например, библиотека для включения и использования …

Если кто-то может дать мне подсказку, это будет с благодарностью.

0

Решение

Я сделал большую часть этого на 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 для кнопки. 2 для оси (например, палка или другое аналоговое значение))
8. Идентификационный байт (то есть идентификатор кнопки, которую вы нажали. Например: 1 для x, 2 для квадрата, 5 для левой ручки x)

светодиоды:
Это немного сложнее. Единственный способ, который я нашел до сих пор, это доступ к /sys/class/leds
Эта папка должна содержать подпапку с именем что-то вроде 0005:054C:05C4.0009:<blue/green/red/global>
Это ваши каналы R / G / B. В этих папках есть файлы, называемые max_brightness а также brightness Например, чтобы изменить цвет на 0x00ff00, напишите 0 в red 255 до green и от 0 до blue

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]