Note:The use of Bluetooth authentication and encryption has not been investigated yet.
Running in non-secure mode, as described in this document, might be inappropriate for some applications, and may also make the host computer temporarily vulnerable to attacks.
Requirements:
- linux-2.6.21 or later. Earlier kernels do not support Bluetooth HID devices in "Report Protocol" mode.
- patch-hidd-3.9-pabr3 (http://www.pabr.org/sixlinux/patch-hidd-3.9-pabr3) or patch-hidd-3.19-pabr3 (http://www.pabr.org/sixlinux/patch-hidd-3.19-pabr3) .
This patch causes the Linux Bluetooth HIDP daemon (hidd) to send a special command to the SIXAXIS when it connects. Sony already published a similar patch for enabling reporting in USB mode.
- sixpair.c. (http://www.pabr.org/sixlinux/sixpair.c)
Only required if the SIXAXIS is to be used with a non-PS3 Bluetooth master. The SIXAXIS apparently does not support the standard Bluetooth pairing procedure; instead, pairing is done over USB, which is arguably simpler and more secure. This command-line utility searches USB buses for SIXAXIS controllers and tells them to connect to a new Bluetooth master.
Alternatively, it might be possible to support the Bluetooth HID "Report Protocol" on older kernels by using bthid instead of hidd, with a similar patch.
Besides, the new "input service" (bluetoothd-service-input), which replaces hidd in recent versions of bluez-utils, should support the SIXAXIS without any patch. However, since it does not accept connections from unknown Bluetooth devices, authorizations must be set-up by another utility, such as a udev plugin, as suggested in this discussion (http://thread.gmane.org/gmane.linux.bluez.devel/14354).
Note: Bluetooth experts use the word "controller" to refer to the Bluetooth network adapter inside the host or the PS3, whereas everybody else thinks "game controller" (a.k.a. joystick). This sometimes causes confusion.
Operation:
Ensure /etc/bluetooth/hcid.conf contains:
Enable Bluetooth:Code:iscan disable; pscan enable; #auth enable; #encrypt enable;
If the host is not the PS3, pairing is required:Code:# service bluetooth restart
Connect the SIXAXIS with a USB cable. Run sixpair:
Disconnect the USB cable. Run the HIDP daemon:Code:# gcc -o sixpair sixpair.c -lusb # ./sixpair Current Bluetooth master: xx:xx:xx:xx:xx:xx Setting master bd_addr to xx:xx:xx:xx:xx:xx
(Note: --nocheck is only required for the first connection.)Code:# hidd --server --nocheck -n
Optionally run hcidump in another shell, for troubleshooting and comparison with this successful trace (http://www.pabr.org/sixlinux/hcidump-2.6.21-good.txt)
Press the PS button on the SIXAXIS. hidd should report:Code:# hcidump -t -V -x
/var/log/messages should report:Code:# hidd --server --nocheck -n hidd[8332]: Bluetooth HID daemon hidd[8332]: New HID device 00:19:C1:xx:xx:xx (Sony Computer Entertainment Wireless Controller)
Check that the SIXAXIS is recognized as a joystick:Code:input: Sony Computer Entertainment Wireless Controller as /class/input/inputX
jstest should report buttons being pressed and sticks being moved. After testing, restore the security settings in /etc/bluetooth/hcid.conf:Code:# modprobe joydev # jstest /dev/js0 # or jstest /dev/input/js0
And apply them with:Code:auth enable; encrypt enable;
Using Inertial Sensors with the Hidraw Interface:Code:# service bluetooth restart
The Linux joystick interfacedoes not report inertial measurements from the accelerometers and gyro. The hidraw interface can be used instead. It transfers raw HID input reports to user-space and works identically in USB mode and in Bluetooth mode.Code:(joydev.ko, /dev/input/js*)
Requirements:
A kernel withenabled. patch-bluetooth-hidraw-pabr1. Adds hidraw support to hidp.ko for use in Bluetooth mode. Not required in USB mode.Code:CONFIG_HIDRAW
Operation:
Connect the device with a USB cable and press PS. dmesg should report:
(or another minor number) should be created automatically.Code:input,hidraw1: USB HID v1.11 Joystick [Sony PLAYSTATION(R)3 Controller] on usb-xxxx:xx:xx.x-x and /dev/hidraw1
In Bluetooth mode, a:
device is created as well, but dmesg does not report its minor number.Code:/dev/hidrawX
Raw input reports can be read from /dev/hidraw1:
sixhidtest.c (http://www.pabr.org/sixlinux/sixhidtest.c) decodes inertial measurements:Code:# hexdump -v -e '48/1 "%02x " "\n"' < /dev/hidraw1 00 00 00 00 00 74 7b 7c 7c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 ee 10 00 00 00 00 02 b2 77 01 81 02 05 01 ed 01 a4 00 02
xsixhidtest.c (http://www.pabr.org/sixlinux/xsixhidtest.c) graphically displays speed, position and orientation derived from accelerometer measurements. High-pass filtering is used to control integration drift; this works well for fast periodic signals, e.g. circular motion. In this simple example, no attempt is made to track simultaneous translations and rotations, nor rotations around the vertical axis.Code:# gcc -o sixhidtest sixhidtest.c # ./sixhidtest < /dev/hidraw1 ax= 517 ay= 493 az= 420
Known Issues:Code:# gcc -o xsixhidtest xsixhidtest.c -lX11 -lm # ./xsixhidtest < /dev/hidraw1
- A 2.0 Bluetooth adapter is recommended. Otherwise, incoming input reports may be truncated to 12 bytes.
- On some PS3 hosts, hcidump shows "Role Change" "Role: Master" and dmesg reports "hci_acldata_packet: hci0 ACL packet for unknown connection handle". Upgrading to linux-2.6.23 or later should solve this problem.
- The Bluetooth adapter in the PS3 supports remote wake-up. This has not been tested with Linux.
- Bluetooth authentication and encryption have not been investigated. This probably requires a key exchange procedure over USB.
- The LEDs are not supported. /dev/js0 should have the first LED turned on, and so on.
- Hand-over between USB mode and Bluetooth mode is not transparent for applications.
- Monitoring of battery status is not implemented.
13250 HeyManHRU
13207 PS3 News
11287 elser1
11119 oVERSoLDiER
9248 GrandpaHomer
8578 Tidusnake666
7968 saviour07
7340 condorstrike
7258 deank
6858 OGroteKoning
24961 PS3 News
5279 Starlight
2965 HeyManHRU
2173 CJPC
2123 elser1
1818 cfwprophet
1756 her0
1570 oVERSoLDiER
1291 GrandpaHomer
1080 barrybarryk




