Конфигурация RetroP ie и Bluetooth - PullRequest
0 голосов
/ 13 февраля 2020

У меня Raspberry Pi 3B + с запущенным RetroP ie, и я пытаюсь настроить свой контроллер PS3 на постоянную работу в «подчиненном» режиме, чтобы уменьшить задержки. Я получил идею из этого сообщения . Я проверил после запуска команды, и это действительно имеет значение.

Проблема в том, что он возвращается к «настройкам по умолчанию» после того, как контроллер отключил или перезагрузил устройство. Поэтому я стараюсь, чтобы это всегда применялось.

У меня есть этот сценарий оболочки (да, я знаю, что он написан плохо - я планирую его почистить, как только у меня все заработает):

#!/bin/sh
concount=0
while [ ! "$(hcitool con | grep -o "[[:xdigit:]:]\{11,17\}")" ]; do
    sleep 0.1
    if [ $concount -eq 30 ]; then
        break
    else
        echo "Try $concount - Device not found, retrying."
    fi
    concount=$(($concount + 1))
done

if [ $concount -eq 30 ]; then
    echo "Device not found after $concount checks."
else
    sudo hcitool sr $(hcitool con | grep -o "[[:xdigit:]:]\{11,17\}") slave
    echo "Device found and set to slave"
fi

Часть задержки заключается в том, что она сработает до того, как контроллер завершит соединение, и выйдет из строя. По сути, это дает 3 секунды на работу.

В любом случае, он работает нормально, когда я запускаю его вручную через командную строку, и время ожидания значительно уменьшается.

Connections:
        > ACL 00:26:43:CC:B0:FB handle 11 state 1 lm SLAVE
Ping: 00:26:43:CC:B0:FB from B8:27:EB:68:0E:9E (data size 44) ...
4 bytes from 00:26:43:CC:B0:FB id 0 time 14.97ms
4 bytes from 00:26:43:CC:B0:FB id 1 time 16.09ms
4 bytes from 00:26:43:CC:B0:FB id 2 time 9.78ms
4 bytes from 00:26:43:CC:B0:FB id 3 time 11.11ms
4 bytes from 00:26:43:CC:B0:FB id 4 time 13.58ms

I создал файл /etc/udev/rules.d/50-btslave.rules, содержащий:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="054C", ATTR{idProduct}=="0268", RUN+="/home/pi/btslave.sh"

(idvendor / idproduct возник из чтения системного журнала)

и добавил это к 99-sixaxis.rules.

ACTION=="add", SUBSYSTEMS=="input", ATTRS{name}=="*PLAYSTATION(R)3 Controller", TAG+="systemd", RUN+="/home/pi/btslave.sh"

затем udevadm control --reload применил правила.

Когда я пытаюсь восстановить соединение, системный журнал, кажется, не показывает ничего другого. Это восходит к «хозяину», и я получаю более высокую задержку, а также всплески.

Feb 12 20:31:14 retropie kernel: [ 2121.796762] sony 0005:054C:0268.0005: unknown main item tag 0x0
Feb 12 20:31:15 retropie kernel: [ 2122.292506] input: Sony PLAYSTATION(R)3 Controller Motion Sensors as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:054C:0268.0005/input/input7
Feb 12 20:31:15 retropie kernel: [ 2122.293773] input: Sony PLAYSTATION(R)3 Controller as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:054C:0268.0005/input/input6
Feb 12 20:31:15 retropie kernel: [ 2122.294645] sony 0005:054C:0268.0005: input,hidraw2: BLUETOOTH HID v80.00 Joystick [Sony PLAYSTATION(R)3 Controller] on b8:27:eb:68:0e:9e
Feb 12 20:31:15 retropie systemd[1]: Started sixaxis helper (sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:054C:0268.0005/input/input6).
Feb 12 20:31:15 retropie systemd[1]: Started sixaxis helper (/dev/input/event3).
Feb 12 20:31:15 retropie sixaxis-helper.sh[1403]: Calibrating: Sony PLAYSTATION(R)3 Controller (00:26:43:CC:B0:FB)
Feb 12 20:31:16 retropie sixaxis-helper.sh[1403]: Setting 600 second timeout on: Sony PLAYSTATION(R)3 Controller (00:26:43:CC:B0:FB)
Connections:
        > ACL 00:26:43:CC:B0:FB handle 11 state 1 lm MASTER
4 bytes from 00:26:43:CC:B0:FB id 0 time 36.31ms
4 bytes from 00:26:43:CC:B0:FB id 1 time 35.97ms
4 bytes from 00:26:43:CC:B0:FB id 2 time 36.07ms
4 bytes from 00:26:43:CC:B0:FB id 3 time 36.10ms
4 bytes from 00:26:43:CC:B0:FB id 4 time 34.82ms

Когда я перемещаю скрипт в другое место и снова тестирую, в системном журнале появляется ошибка, что скрипт не может быть найден:

Feb 12 20:40:36 retropie systemd-udevd[1579]: failed to execute '/home/pi/btslave.sh' '/home/pi/btslave.sh': No such file or directory
Feb 12 20:40:36 retropie systemd-udevd[1577]: Process '/home/pi/btslave.sh' failed with exit code 2.
Feb 12 20:40:36 retropie systemd-udevd[1591]: failed to execute '/home/pi/btslave.sh' '/home/pi/btslave.sh': No such file or directory
Feb 12 20:40:36 retropie systemd-udevd[1574]: Process '/home/pi/btslave.sh' failed with exit code 2.
Feb 12 20:40:36 retropie systemd-udevd[1592]: failed to execute '/home/pi/btslave.sh' '/home/pi/btslave.sh': No such file or directory
Feb 12 20:40:36 retropie systemd-udevd[1577]: Process '/home/pi/btslave.sh' failed with exit code 2.

Итак это говорит мне, что событие, похоже, сработало. Это просто ... на самом деле не делает этого. Некоторое время я искал Google и никуда не ходил. Я что-то здесь упускаю или есть более простой способ go об этом?

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

Итак, несколько часов спустя, и мне удалось выяснить это после большого количества отладок (и некоторых идей из поста Reddit). Очевидно, udev запускается слишком рано в последовательности, и никакое «ожидание» фактически не сможет получить адрес контроллера. Его нужно было запустить намного позже.

Итак, я удалил правило udev и решил просто отредактировать /usr/bin/sixaxis-helper.sh:

Добавлено

hcitool sr "$SIXAXIS_MAC" slave

после

sixaxis_calibrate

(путь внизу) Это некрасиво, но работает. :) Контроллер сразу подключается к «подчиненному» режиму, и задержка выглядит как сексуальный.

Оставьте это здесь для тех, кто sh реализует то же решение. Сейчас я счастлив и могу двигаться дальше. Возможно, я вернусь позже и попытаюсь улучшить его, чтобы он не требовал от меня редактирования существующего сценария (или кто-то другой принимает вызов).

...