From Fedora Project Wiki

PlayStation 3 Blu-ray Disc Remote

Questions and Comments

What's the best way to implement a driver?

  • With hidd running an input device gets created, but nothing except a SYN event gets reported there (checked with evtest ). This is because the HID descriptor does not define anything except an 11-byte data input package.
  • Some ideas might be taken from CWiid project .

Someone else started to tinker with this some time ago. I can't find more than the first version of a python script . This won't run on Fedora PPC because of an endianness bug in pybluez. And hidd needs to be stopped to get it working.

Test Script

Here's a python script I wrote for testing purposes:

It's based on WillWoods' wiimote script .

Device Information

Output of Command Line Tools

Inquiring ...
00:19:C1:2D:91:F2	clock offset: 0x30b3	class: 0x00250c

Requesting information ...
BD Address:  00:19:C1:2D:91:F2
Device Name: BD Remote Control
LMP Version: 2.0 (0x3) LMP Subversion: 0x229
Manufacturer: Broadcom Corporation (15)
Features: 0xbc 0x02 0x04 0x38 0x08 0x00 0x00 0x00
<encryption> <slot offset> <timing accuracy> <role switch>
<sniff mode> <RSSI> <power control> <enhanced iscan>
<interlaced iscan> <interlaced pscan> <AFH cap. slave>

Sequence
Attribute 0x0000 - ServiceRecordHandle
UINT32 0x00010000
Attribute 0x0001 - ServiceClassIDList
Sequence
UUID16 0x1124 - HumanInterfaceDeviceService (HID)
Attribute 0x0004 - ProtocolDescriptorList
Sequence
Sequence
UUID16 0x0100 - L2CAP
UINT16 0x0011
Sequence
UUID16 0x0011 - HIDP
Attribute 0x0005 - BrowseGroupList
Sequence
UUID16 0x1002 - PublicBrowseGroup
Attribute 0x0006 - LanguageBaseAttributeIDList
Sequence
UINT16 0x656e
UINT16 0x006a
UINT16 0x0100
Attribute 0x0009 - BluetoothProfileDescriptorList
Sequence
Sequence
UUID16 0x1124 - HumanInterfaceDeviceService (HID)
UINT16 0x0100
Attribute 0x000d - AdditionalProtocolDescriptorLists
Sequence
Sequence
Sequence
UUID16 0x0100 - L2CAP
UINT16 0x0013
Sequence
UUID16 0x0011 - HIDP
Attribute 0x0100
String BD Remote Control
Attribute 0x0101
String BD Remote Control
Attribute 0x0102
String Sony Computer Entertainment Inc
Attribute 0x0200
UINT16 0x0100
Attribute 0x0201
UINT16 0x0111
Attribute 0x0202
UINT8 0x0c
Attribute 0x0203
UINT8 0x21
Attribute 0x0204
Bool True
Attribute 0x0205
Bool True
Attribute 0x0206
Sequence
Sequence
UINT8 0x22
Data 05 01 09 05 a1 01 85 01 15 00 26 ff 00 75 08 95
0b 06 00 ff 09 01 81 00 85 01 95 0b 09 01 b1 00 85 02 95 0b 09 01 b1 00 85 03 95 0b 09
01 b1 00 85 04 95 0b 09 01 b1 00 85 05 95 0b 09 01 b1 00 85 06 95 0b 09 01 b1 00 c0 00
Attribute 0x0207
Sequence
Sequence
UINT16 0x0409
UINT16 0x0100
Attribute 0x0208
Bool False
Attribute 0x0209
Bool True
Attribute 0x020a
Bool True
Attribute 0x020b
UINT16 0x0100
Attribute 0x020c
UINT16 0x1f40
Attribute 0x020d
Bool False
Attribute 0x020e
Bool False

HID Descriptor

See attribute 0x0206 of the first sequence of sdptool output. Decoded with Device Class Definition spec available at www.usb.org .

05 01		Usage Page (Generic Desktop)
09 05		Usage ID (Game Pad)
a1 01		Collection (Application)
85 01			Report ID (1)
15 00			Logical Minimum (0)
26 ff 00		Logical Maximum (255)
75 08			Report Size (8)
95 0b			Report Count (11)
06 00 ff		Usage Page (Vendor Defined Page 1)
09 01			Usage (Vendor Usage 1)
81 00			Input (Data,Array,Absolute)
85 01			Report ID (1)
95 0b			Report Count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
85 02			Report ID (2)
95 0b			Report Count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
85 03			Report ID (3)
95 0b			Report Count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
85 04			Report ID (4)
95 0b			Report Count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
85 05			Report ID (5)
95 0b			Report count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
85 06			Report ID (6)
95 0b			Report count (11)
09 01			Usage (Vendor Usage 1)
b1 00			Feature (Data,Array,Absolute)
c0		End Collection
00

Key Mapping

  • Retrieved with /usr/sbin/hcidump -Y -x
  • Packet length: 13 bytes
  • Example: A1 01 00 00 00 FF FF FF FF FF FF 00 05

Byte 0

  • Transaction and Report Type 0xA1
  • Transaction Type: DATA Request (0xA0)
  • Report Type: Input (0x01)

See Human Interface Device Profile spec available at www.bluetooth.com .

Byte 1

  • Report ID 0x01

Bytes 2-4 - Mapping for buttons to be pressed with others

Byte 2

Bit 0 SELECT
Bit 1 L3
Bit 2 R3
Bit 3 START
Bit 4 UP
Bit 5 RIGHT
Bit 6 DOWN
Bit 7 LEFT

Byte 3

Bit 0 L2
Bit 1 R2
Bit 2 L1
Bit 3 R1
Bit 4 OPTIONS
Bit 5 BACK
Bit 6 CROSS
Bit 7 VIEW

Byte 4

Bit 0 PSBUTTON
Bit 1 None
Bit 2 None
Bit 3 ENTER
Bit 4 None
Bit 5 None
Bit 6 None
Bit 7 None

Byte 5 - Mapping for single button presses

  • If none or more than one button is pressed it is 0xFF.
NUM1 0x00
NUM2 0x01
NUM3 0x02
NUM4 0x03
NUM5 0x04
NUM6 0x05
NUM7 0x06
NUM8 0x07
NUM9 0x08
NUM0 0x09
ENTER 0x0B
RETURN 0x0E
CLEAR 0x0F
EJECT 0x16
TOPMENU 0x1A
TIME 0x28
PREV 0x30
NEXT 0x31
PLAY 0x32
FASTRWD 0x33
FASTFWD 0x34
STOP 0x38
PAUSE 0x39
POPUPMENU 0x40
PSBUTTON 0x43
SELECT 0x50
L3 0x51
R3 0x52
START 0x53
UP 0x54
RIGHT 0x55
DOWN 0x56
LEFT 0x57
L2 0x58
R2 0x59
L1 0x5A
R1 0x5B
OPTIONS 0x5C
BACK 0x5D
CROSS 0x5E
VIEW 0x5F
SLOWRWD 0x60
SLOWFWD 0x61
SUBTITLE 0x63
AUDIO 0x64
ANGLE 0x65
DISPLAY 0x70
BLUE 0x80
RED 0x81
GREEN 0x82
YELLOW 0x83

Byte 6-10

  • Fix at 0xFF

Byte 11 - Button pressed or released

RELEASED 0x00
PRESSED 0x01

Byte 12

  • Very likely the battery status
  • With a pair of fresh 1.5V batteries this byte reports 0x05
  • A pair of 1.2V accumulators (probably not fully loaded) gives 0x03