The device can be seen under Linux, but doesn’t support any input handlers:

I: Bus=0005 Vendor=054c Product=0306 Version=0100
N: Name="Sony Computer Entertainment Inc BD Remote Control"

When dumping the data from a bluetooth connection, the stream looks like this:

ACL data: handle 43 flags 0x02 dlen 17
  L2CAP(d): cid 0x0041 len 13 [psm 0]
    A1 01 b1 b2 b3 keycode FF FF FF FF FF dn 05 

When multiple buttons are pressed down, the keycode will be FF as if no buttons are pressed, e.g. pressing and holding triangle and circle and releasing them in the same order results in the following stream:

    A1 01 00 10 00 5C FF FF FF FF FF 01 05 
    A1 01 00 30 00 FF FF FF FF FF FF 01 05 
    A1 01 00 20 00 5D FF FF FF FF FF 01 05 
    A1 01 00 00 00 FF FF FF FF FF FF 00 05 

So, for games / motion, we really want to use the button bit masks and the dn flag that indicates buttons are pressed.

Of note, L3 and R3 mapped to left and right hats, so L3 and R3 is probably their official terminology and and additional button ENTER is provided over and above the standard six axis digital buttons.

Apart from the missing extra 00 byte at the start of the stream, it is very similar to the start of the controller stream.

Key events
Key keycode
nothing or mutliple FF
EJECT 16
1 00
2 01
3 02
AUDIO 64
4 03
5 04
6 05
ANGLE 65
7 06
8 07
9 08
SUBTITLE 63
CLEAR 0F
0 09
TIME 28
RED 81
GREEN 82
YELLOW 83
BLUE 80
DISPLAY 70
TOP MENU 1A
POPUP MENU 40
RETURN 0E
TRIANGLE 5C (b2⇒10)
CIRCLE 5D (b2⇒20)
CROSS 5E (b2⇒40)
SQUARE 5F (b2⇒80)
UP 54 (b1⇒10)
RIGHT 55 (b1⇒20)
DOWN 56 (b1⇒40)
LEFT 57 (b1⇒80)
ENTER 0B (b3⇒08)
L1 5A (b2⇒04)
L2 58 (b2⇒01)
L3 51 (b1⇒02)
R1 5B (b2⇒08)
R2 59 (b2⇒02)
R3 52 (b1⇒04)
PS 43 (b3⇒01)
SELECT 50 (b1⇒01)
START 53 (b1⇒08)
SCAN L 33
PLAY 32
SCAN R 34
PREV 30
STOP 38
NEXT 31
SLOW L 60
PAUSE 39
SLOW R 61

The HID report protocol for the remote is very odd:

 Global   05 01     usage page (generic desktop)
 Local    09 05     usage (gamepad)
 Main     a1 01     collection (Application)
 Global   85 01     report ID (1)
 Global   15 00     local minimum 0000
 Global   26 ff 00  local maximum 00FF
 Global   75 08     report size 8
 Global   95 0b     report count 11
 Global   06 00 ff  usage page (0xFF00)
 Local    09 01     usage (0x0001)
 Main     81 00     input (data, array [this is wrong], absolute, no wrap, linear)
 Global   85 01     report ID (1)
 Global   95 0b     report count 11
 Local    09 01     usage (0x0001)
 Main     b1 00     feature (data, array, absolute)
 Global   85 02     report ID (2)
 Global   95 0b     report count 11
 Local    09 01     usage (1)
 Main     b1 00     feature (data, array, abs)
 Global   85 03     report ID (3)
 Global   95 0b     report count 11
 Local    09 01     usage (1)
 Main     b1 00     feature (data, array, abs)
 Global   85 04     report id (4)
 Global   95 0b     report count 11
 Local    09 01     usage (1)
 Main     b1 00     feature (data, array, abs)
 Global   85 05     report id (5)
 Global   95 0b     report count 11
 Local    09 01     usage (1)
 Main     b1 00     feature (data, array, abs)
 Global   85 06     report id (6)
 Global   95 0b     report count 11
 Local    09 01     usage (1)
 Main     b1 00     feature (data, array, abs)
 Main     c0        end collection
 Main     00

Now, I’m very new to these HID descriptors, but from what I can tell, the input should probably be encoded as 81 01 (read a collection of values) and I’ve no idea what the feature stuff is trying to achieve... it just looks very broken.

Experimental patch supporting ps3 remote for 2.6.22 kernel [ftp://ftp.perex.cz/pub/ps3/ps3.bdremote.patch] (no button bitmask support yet).

Note that with above patch, the event device gets unregistered after some time, but the L2 connection keeps running. Add something like:

ACTION=="remove",KERNEL=="event*",ENV{ID_SERIAL}=="Sony_Bluetooth_Transceiver", PROGRAM="hcitool dc 00:19:aa:bb:cc:dd"

to udev rules to destroy l2 and let register new event device.

 
ps3/hardware/remote.txt · Last modified: 2008/05/15 00:07
 
Recent changes RSS feed Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki