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:
- File:PlayStation BDRemote bd-remote.py bd-remote.py]
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