Using PS3 Control Pads via Bluetooth

Requirements

Overview

The PES image includes a compiled version of the QtSixA daemon and utilities written by falkTX. At boot time the sixad daemon will start-up providing the Bluetooth service has started.

Note

the sixad daemon will not start if a Bluetooth adapter is not present.

Pairing

As well as the sixad daemon that translates input from the PlayStation 3 control pads via Bluetooth, the sixpair utility is also installed. This allows a PlayStation 3 control pad to pair with your Bluetooth adapter when plugged in via USB. The PES image has been configured so that the sixpair utility is automatically executed when a PlayStation 3 control pad is connected to the Raspberry Pi via USB.

To pair your PlayStation 3 control pad, first make sure your Raspberry Pi has booted and the PES GUI has loaded.

Now connect your PlayStation 3 control pad via USB to your Raspberry Pi. The four red LEDs on the control pad should now flash to indicate that it is charging. Wait at least three seconds before unplugging the control pad.

Next press the PlayStation button on the control pad and after a few seconds the control pad should pair with your Raspberry Pi. The control pad will vibrate for a few seconds and the LED corresponding to player 1 should illuminate.

Warning

If after vibrating all four LEDs light up and PES reports no joysticks connected, then the sixad daemon either doesn’t recognise your control pad or your Bluetooth adapter is not compatible.

Finally, repeat for any additional control pads.

Note

once paired, you do not need to repeat this procedure unless you pair your control pads with another Bluetooth device

Turning Off Control Pads

A PlayStation 3 control pad can be turned off by holding down the PS3 button on the control pad until the red LEDs go off. This usually takes 12 seconds. Alternatively, turning off your Raspberry Pi will also cause the control pads to turn off afterwards.

Bluetooth Troubleshooting

Is the Bluetooth adapter running?

Use the hciconfig command to list any Bluetooth adapters that have been connected, e.g.:

[[email protected] arch]# hciconfig
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:0F:3B:81:B2:0D  ACL MTU: 1017:5  SCO MTU: 64:0
        UP RUNNING PSCAN
        RX bytes:1638756 acl:28296 sco:0 events:104 errors:0
        TX bytes:3874 acl:111 sco:0 commands:26 errors:0

If no devices are listed, then try power-cycling your Raspberry Pi. If after a reboot the adapter is still not listed try executing as root:

sudo hciconfig hci0 up

Bluetooth adapter is up but will not pair

Run the hciconfig command as root. If the adapter is listed as up but you do not see RUNNING PSCAN in the output run the following command to force the adapter to go into pairing mode:

sudo hciconfig hci0 pscan

Bluetooth adapter is up and running pscan but the control pad will not pair

Try connecting the control pad again via USB. If it still does not pair please check that you are using an official Sony PlayStation 3 control pad.

You can also try to pair the control pad manually when it is plugged in via USB by running (as root):

sudo /opt/qtsixad/sbin/sixpair

This command will report the MAC address of the Bluetooth adapter that the control pad has been paired to. If successful, the MAC address reported should match the MAC address shown by the hciconfig command. If it does not, then the pairing has failed.

Tested Bluetooth adapters with QtSixA

The following Bluetooth adapters have been tested with PES successfully. If you know of any others, I would be interested to know.

The following Bluetooth adapters fail to work with PES due to compatibility issues with the QtSixA daemon, but do work with Bluez (see below) instead:

Using Bluez instead of QtSixA

If your PlayStation 3 control pads will not connect you may want to try using the Bluez Linux libraries instead. So far I have yet to find a Bluetooth adapter that will not work with this library, but it doesn’t have the support for LEDs on the control pads and getting the control pads to be trusted by the adapter can be fiddly. I hope to automate this in the near future.

To use Bluez instead, please proceed as follows:

  1. Log into your Raspberry Pi either via SSH or using a keyboard at the console.
  2. Stop the sixad daemon:
sudo systemctl stop sixad.service
  1. Disable/enable services:
sudo systemctl disable sixad.service
sudo systemctl enable bluetooth.service
  1. Edit /etc/udev/rules.d/97-sixpair.rules and put a comment character (i.e. a “#”) at the beginning of the line in the file or remove the file entirely if you want. This file makes the control pads auto pair but it also stops them from working via USB.
  2. Power off the system and disconnect the power cable - do not reboot:
sudo poweroff
  1. Power on the system (reconnect power cable).
  2. If you have not already paired your control pads previously using sixpair, then do so now by connecting your control pad via USB and then run:
sudo /usr/sbin/sixpair

Repeat for any additional control pads.

  1. Make sure all control pads are disconnected.
  2. Run the bluetoothctl command as a normal user, i.e.
bluetoothctl
  1. Connect a PlayStation 3 control pad via USB. You will se some messages at the console stating that a new control pad has been detected.
  2. At the bluetoothctl prompt type “devices” and you should see your PlayStation 3 control pad listed. Take a note of the MAC.
  3. At the bluetoothctl prompt type:
agent on
trust MAC

where MAC is the MAC of your control pad.

  1. Now disconnect your control pad and press the PS3 button on it. At this point you should see a series of messages saying that the control pad has connected. You can check by looking for a /dev/input/js* entry.

E.g.

ls -l /dev/input
  1. Repeat for any additional control pads.