Hi all, Frank and I have been working on a kernel driver for the Dualshock 4 and we're having problems with the BT connection (USB is OK). When powered on the DS4 will initiate a connection to the PC once it knows it's Bdaddr (via pairing), but will power off shortly there after. This seems to be related to incorrect (??) data sent from Bluez, or if no hid connection is made within a short window. On the two systems I have tried: 1) Debian with bluez 4.99, I can 'hidd --connect xxx' to hold the connection. I get joystick data but can't send data to DS4 to drive ff/leds. (I am told that 'hidd' is deprated) 2) Fedora LiveCD with bluez 5.13. Connection is immediately terminated by the controller. HCI log attached. It appears that the controller is insisting on a encrypted link ('noenc' and 'noauth' make no difference) and does not like the 'unplug virtual cable' which is sent (presumably as the link is being brought down to re-start encrypted). In the BT HID 1.1 spec (page 48) it says -- If the HIDVirtualCable SDP attribute is set to TRUE, then a Virtual Cable is considered to be established after both the HID Control and HID Interrupt L2CAP channels have been opened. -- However the Fedora system does not have a copy of the SDP records for the controller, it never pulled them and I have never managed to make a connection long enough to read them. My theory is that the controller is rejecting the 'Unplug Virtual Cable' command as it shouldn't have been established, but I'm not really sure. I managed use my Debian system to read SDP records but that barfs on what's sent.... files also attached. Does anyone have any suggestions on what I should try next? Thanks, Simon
Attachment:
hcidump_records.txt.gz
Description: application/gzip
Service Name: Wireless Controller Service Description: Game Controller Service Provider: Sony Computer Entertainment Service RecHandle: 0x10001 Service Class ID List: "Human Interface Device" (0x1124) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 17 "HIDP" (0x0011) Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Human Interface Device" (0x1124) Version: 0x0100 Service RecHandle: 0x10002 Service Class ID List: "PnP Information" (0x1200) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 1 "SDP" (0x0001) Profile Descriptor List: "PnP Information" (0x1200) Version: 0x0103
Sequence Attribute 0x0000 - ServiceRecordHandle UINT32 0x00010001 Attribute 0x0001 - ServiceClassIDList Sequence UUID16 0x1124 - HumanInterfaceDeviceService (HID) Attribute 0x0004 - ProtocolDescriptorList Sequence Sequence UUID16 0x0100 - L2CAP UINT16 0x0011 Sequence UUID16 0x0011 - HIDP 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 Wireless Controller Attribute 0x0101 String Game Controller Attribute 0x0102 String Sony Computer Entertainment Attribute 0x0200 UINT16 0x0100 Attribute 0x0201 UINT16 0x0111 Attribute 0x0202 UINT8 0x08 Attribute 0x0203 UINT8 0x00 Attribute 0x0204 Bool False Attribute 0x0205 Bool True Attribute 0x0206 Sequence Sequence UINT8 0x22 Data 05 01 09 05 a1 01 85 01 09 30 09 31 09 32 09 35 15 00 26 ff 00 75 08 95 04 81 02 09 39 15 00 25 07 75 04 95 01 81 42 05 09 19 01 29 0e 15 00 25 01 75 01 95 0e 81 02 75 06 95 01 81 01 05 01 09 33 09 34 15 00 26 ff 00 75 08 95 02 81 02 06 04 ff 85 02 09 24 95 24 b1 02 85 a3 09 25 95 30 b1 02 85 05 09 26 95 28 b1 02 85 06 09 27 95 34 b1 02 85 07 09 28 95 30 b1 02 85 08 09 29 95 2f b1 02 06 03 ff 85 03 09 21 95 26 b1 02 85 04 09 22 95 2e b1 02 85 f0 09 47 95 3f b1 02 85 f1 09 48 95 3f b1 02 85 f2 09 49 95 0f b1 02 06 00 ff 85 11 09 20 15 00 26 ff 00 75 08 95 4d 81 02 09 21 91 02 85 12 09 22 95 8d 81 02 09 23 91 02 85 13 09 24 95 cd 81 02 09 25 91 02 85 14 09 26 96 0d 01 81 02 09 27 91 02 85 15 09 28 96 4d 01 81 02 09 29 91 02 85 16 09 2a 96 8d 01 81 02 09 2b 91 02 85 17 09 2c 96 cd 01 81 02 09 2d 91 02 85 18 09 2e 96 0d 02 81 02 09 2f 91 02 85 19 09 30 96 22 02 81 02 09 31 91 02 06 80 ff 85 82 09 22 95 3f b1 02 85 83 09 23 b1 02 85 84 09 24 b1 02 85 90 09 30 b1 02 85 91 09 31 b1 02 85 92 09 32 b1 02 85 93 09 33 b1 02 85 a0 09 40 b1 02 85 a4 09 44 b1 02 c0 00 Sequence Attribute 0x0000 - ServiceRecordHandle UINT32 0x00010002 Attribute 0x0001 - ServiceClassIDList Sequence UUID16 0x1200 - PnPInformation Attribute 0x0004 - ProtocolDescriptorList Sequence Sequence UUID16 0x0100 - L2CAP UINT16 0x0001 Sequence UUID16 0x0001 - SDP Attribute 0x0009 - BluetoothProfileDescriptorList Sequence Sequence UUID16 0x1200 - PnPInformation UINT16 0x0103 Attribute 0x0200 UINT16 0x0103 Attribute 0x0201 UINT16 0x054c Attribute 0x0202 UINT16 0x05c4 Attribute 0x0203 UINT16 0x0100 Attribute 0x0204 Bool True Attribute 0x0205 UINT16 0x0002
HCI sniffer - Bluetooth packet analyzer ver 5.12 device: hci0 snap_len: 1500 filter: 0xffffffff > HCI Event: Connect Request (0x04) plen 10 bdaddr 1C:66:6D:07:C3:E0 class 0x002508 type ACL < HCI Command: Accept Connection Request (0x01|0x0009) plen 7 bdaddr 1C:66:6D:07:C3:E0 role 0x00 Role: Master > HCI Event: Command Status (0x0f) plen 4 Accept Connection Request (0x01|0x0009) status 0x00 ncmd 1 > HCI Event: Role Change (0x12) plen 8 status 0x00 bdaddr 1C:66:6D:07:C3:E0 role 0x00 Role: Master > HCI Event: Connect Complete (0x03) plen 11 status 0x00 handle 41 bdaddr 1C:66:6D:07:C3:E0 type ACL encrypt 0x00 < HCI Command: Read Remote Supported Features (0x01|0x001b) plen 2 handle 41 > HCI Event: Page Scan Repetition Mode Change (0x20) plen 7 bdaddr 1C:66:6D:07:C3:E0 mode 1 > HCI Event: Command Status (0x0f) plen 4 Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 0 > HCI Event: Max Slots Change (0x1b) plen 3 handle 41 slots 5 > HCI Event: Command Status (0x0f) plen 4 Unknown (0x00|0x0000) status 0x00 ncmd 1 < HCI Command: Change Connection Packet Type (0x01|0x000f) plen 4 handle 41 ptype 0xcc18 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 > HCI Event: Command Status (0x0f) plen 4 Change Connection Packet Type (0x01|0x000f) status 0x00 ncmd 1 > HCI Event: Connection Packet Type Changed (0x1d) plen 5 status 0x00 handle 41 ptype 0xcc18 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 > HCI Event: Read Remote Supported Features (0x0b) plen 11 status 0x00 handle 41 Features: 0xff 0xfe 0x0d 0xfe 0x98 0x7f 0x79 0x87 < HCI Command: Remote Name Request (0x01|0x0019) plen 10 bdaddr 1C:66:6D:07:C3:E0 mode 2 clkoffset 0x0000 > HCI Event: Command Status (0x0f) plen 4 Remote Name Request (0x01|0x0019) status 0x00 ncmd 1 > ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Connect req: psm 1 scid 0x0040 < ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0040 result 1 status 0 Connection pending - No futher information available < ACL data: handle 41 flags 0x02 dlen 10 L2CAP(s): Info req: type 2 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Info rsp: type 2 result 0 Extended feature mask 0x0000 < ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0040 result 0 status 0 Connection successful < ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Config req: dcid 0x0040 flags 0x00 clen 0 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Config req: dcid 0x0040 flags 0x00 clen 4 MTU 672 < ACL data: handle 41 flags 0x02 dlen 18 L2CAP(s): Config rsp: scid 0x0040 flags 0x00 result 0 clen 4 MTU 672 > ACL data: handle 41 flags 0x02 dlen 18 L2CAP(s): Config rsp: scid 0x0040 flags 0x00 result 0 clen 4 MTU 672 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 24 L2CAP(d): cid 0x0040 len 20 [psm 1] SDP SSA Req: tid 0x1 len 0xf pat uuid-16 0x0100 (L2CAP) max 2048 aid(s) 0x0000 - 0xffff cont 00 < ACL data: handle 41 flags 0x02 dlen 192 < ACL data: handle 41 flags 0x01 dlen 192 < ACL data: handle 41 flags 0x01 dlen 93 L2CAP(d): cid 0x0040 len 473 [psm 1] SDP SSA Rsp: tid 0x1 len 0x1d4 count 465 record #0 aid 0x0000 (SrvRecHndl) uint 0x10001 aid 0x0001 (SrvClassIDList) < uuid-16 0x1800 > aid 0x0004 (ProtocolDescList) < < uuid-16 0x0100 (L2CAP) uint 0x1f > < uuid-16 0x0007 uint 0x1 uint 0x8 > > aid 0x0005 (BrwGrpList) < uuid-16 0x1002 (PubBrwsGrp) > aid 0x000a (DocURL) url "http://www.bluez.org/" aid 0x000b (ClientExeURL) url "http://www.bluez.org/" aid 0x000c (IconURL) url "http://www.bluez.org/" aid 0x0100 (SrvName) str "Generic Access Profile" aid 0x0102 (ProviderName) str "BlueZ" record #1 aid 0x0000 (SrvRecHndl) uint 0x10002 aid 0x0001 (SrvClassIDList) < uuid-16 0x1801 > aid 0x0004 (ProtocolDescList) < < uuid-16 0x0100 (L2CAP) uint 0x1f > < uuid-16 0x0007 uint 0x10 uint 0x10 > > aid 0x0005 (BrwGrpList) < uuid-16 0x1002 (PubBrwsGrp) > aid 0x0100 (SrvName) str "Generic Attribute Profile" aid 0x0102 (ProviderName) str "BlueZ" record #2 aid 0x0000 (SrvRecHndl) uint 0x10003 aid 0x0001 (SrvClassIDList) < uuid-16 0x110e (AVRemote) uuid-16 0x110f (AVRemCt) > aid 0x0004 (ProtocolDescList) < < uuid-16 0x0100 (L2CAP) uint 0x17 > < uuid-16 0x0017 (AVCTP) uint 0x103 > > aid 0x0005 (BrwGrpList) < uuid-16 0x1002 (PubBrwsGrp) > aid 0x0009 (BTProfileDescList) < < uuid-16 0x110e (AVRemote) uint 0x105 > > aid 0x000d (AdditionalProtocolDescLists) < < < uuid-16 0x0100 (L2CAP) uint 0x1b > < uuid-16 0x0017 (AVCTP) uint 0x103 > > > aid 0x0100 (SrvName) str "AVRCP CT" aid 0x0311 (SuppFeatures) uint 0x4f record #3 aid 0x0000 (SrvRecHndl) uint 0x10004 aid 0x0001 (SrvClassIDList) < uuid-16 0x110c (AVRemTarget) > aid 0x0004 (ProtocolDescList) < < uuid-16 0x0100 (L2CAP) uint 0x17 > < uuid-16 0x0017 (AVCTP) uint 0x103 > > aid 0x0005 (BrwGrpList) < uuid-16 0x1002 (PubBrwsGrp) > aid 0x0009 (BTProfileDescList) < < uuid-16 0x110e (AVRemote) uint 0x104 > > aid 0x000d (AdditionalProtocolDescLists) < < < uuid-16 0x0100 (L2CAP) uint 0x1b > < uuid-16 0x0017 (AVCTP) uint 0x103 > > > aid 0x0100 (SrvName) str "AVRCP TG" aid 0x0311 (SuppFeatures) uint 0x5f cont 00 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 2 > ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Disconn req: dcid 0x0040 scid 0x0040 < ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Disconn rsp: dcid 0x0040 scid 0x0040 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Remote Name Req Complete (0x07) plen 255 status 0x00 bdaddr 1C:66:6D:07:C3:E0 name 'Wireless Controller' > HCI Event: Link Key Request (0x17) plen 6 bdaddr 1C:66:6D:07:C3:E0 < HCI Command: Link Key Request Reply (0x01|0x000b) plen 22 bdaddr 1C:66:6D:07:C3:E0 key DCD82F85FA8F56D21A7AFBF7B227F7E9 > HCI Event: Command Complete (0x0e) plen 10 Link Key Request Reply (0x01|0x000b) ncmd 1 status 0x00 bdaddr 1C:66:6D:07:C3:E0 > HCI Event: Encrypt Change (0x08) plen 4 <============================= status 0x00 handle 41 encrypt 0x01 > ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Connect req: psm 17 scid 0x0041 < ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0041 result 0 status 0 Connection successful < ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Config req: dcid 0x0041 flags 0x00 clen 0 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Config req: dcid 0x0040 flags 0x00 clen 4 MTU 672 < ACL data: handle 41 flags 0x02 dlen 18 L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 0 clen 4 MTU 672 > ACL data: handle 41 flags 0x02 dlen 18 L2CAP(s): Config rsp: scid 0x0040 flags 0x00 result 0 clen 4 MTU 672 < ACL data: handle 41 flags 0x02 dlen 5 L2CAP(d): cid 0x0041 len 1 [psm 17] HIDP: Control: Virtual cable unplug <====================== < ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Disconn req: dcid 0x0041 scid 0x0040 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Connect req: psm 19 scid 0x0042 < ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Connect rsp: dcid 0x0041 scid 0x0042 result 1 status 2 Connection pending - Authorization pending <====================== < ACL data: handle 41 flags 0x02 dlen 16 L2CAP(s): Connect rsp: dcid 0x0041 scid 0x0042 result 3 status 0 Connection refused - security block <===================== > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 5 L2CAP(d): cid 0x0040 len 1 [psm 17] <==================== HIDP: Handshake: Unsupported request > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > ACL data: handle 41 flags 0x02 dlen 12 L2CAP(s): Disconn rsp: dcid 0x0041 scid 0x0040 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Number of Completed Packets (0x13) plen 5 handle 41 packets 1 > HCI Event: Disconn Complete (0x05) plen 4 status 0x00 handle 41 reason 0x13 Reason: Remote User Terminated Connection <====================
Attachment:
info
Description: Binary data