Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I'm trying to setup my Harmony Smart Control as a PS3 Bluetooth Remote Control (it pretends to be this remote) under Ubuntu 13.10 (latest kernel and updates installed). My bluetooth dongle wouldn't work out of the box, so I had to do the following:

modprobe btusb
echo "050d 065a" >> /sys/bus/usb/drivers/btusb/new_id

After that I can pair the remote fine using Bluetooth Manager from the GUI. It's registered looking like a normal PS3 remote, according to bt-device:

root@server:/dev/input# bt-device -i "BD Remote Contol"
[00:04:20:E8:B4:B4]
  Name: BD Remote Contol
  Alias: BD Remote Contol [rw]
  Address: 00:04:20:E8:B4:B4
  Icon: undefined
  Class: 0x250c
  Paired: 1
  Trusted: 1 [rw]
  Blocked: 0 [rw]
  Connected: 1
  UUIDs: [HumanInterfaceDevice, PnPInformation, 00001800-0000-1000-8000-00805f9b34fb]

I can see packages coming from bluetooth for every key press like this:

root@server:/dev/input# hcidump -x -i hci0
HCI sniffer - Bluetooth packet analyzer ver 2.5
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> ACL data: handle 11 flags 0x02 dlen 17
    L2CAP(d): cid 0x0041 len 13 [psm 0]
      A1 01 00 00 00 00 FF FF FF FF FF 01 05 
> ACL data: handle 11 flags 0x02 dlen 17
    L2CAP(d): cid 0x0041 len 13 [psm 0]
      A1 01 00 00 00 FF FF FF FF FF FF 00 05 

So the pairing is definitely ok and key presses are received. The device is recognised as an input device per syslog:

Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HIDP socket layer initialized
input: Bluetooth HID Boot Protocol Device as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/bluetooth/hci0/hci0:11/input14

But when I do a evtest on the device, I only get this:

root@server:/dev/input# evtest /dev/input/event6 
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x46d product 0xc129 version 0x0
Input device name: "Bluetooth HID Boot Protocol Device"
Supported events:
  Event type 0 (EV_SYN)
Properties:
Testing ... (interrupt to exit)

It looks to me like there is only one event type for this remote and no key press triggers it. Additional output from lsusb for my dongle below [1]. My questions:

  1. Is btusb the right kernel module to use?
  2. Why do I have to use the echo command for my dongle to be recognised by the module?
  3. Is there an additional configuration I need for the input layer to recognise the additional event types?

[1] lsusb output for bluetooth dongle: http://pastebin.com/xHM5YZXB

share|improve this question
    
With further investigation it looks like the original Harmony PS3 adapter had vendor:product 046d:0306 (supported by kernel 3.11.0 via module hid-sony) while the Harmony Smart Control PS3 remote emulator uses 046d:c129. So I guess kernel support is missing for this? –  Kevin Schmidt Nov 24 '13 at 0:05

1 Answer 1

up vote 1 down vote accepted

You may have already fixed this, but just in case, here's the kernel patch I used to get it working under Arch Linux with kernel 3.12.6:

diff -u linux-3.12.org/drivers/hid/hid-core.c linux-3.12/drivers/hid/hid-core.c
--- linux-3.12.org/drivers/hid/hid-core.c       2013-11-03 16:41:51.000000000 -0700
+++ linux-3.12/drivers/hid/hid-core.c   2014-01-10 19:53:45.000000000 -0700
@@ -1738,6 +1738,7 @@
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_SMART_PS3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
@@ -2347,7 +2348,8 @@
                        return true;
                break;
        case USB_VENDOR_ID_LOGITECH:
-               if (hdev->product >= USB_DEVICE_ID_LOGITECH_HARMONY_FIRST &&
+               if (hdev->product != USB_DEVICE_ID_LOGITECH_HARMONY_SMART_PS3 &&
+                   hdev->product >= USB_DEVICE_ID_LOGITECH_HARMONY_FIRST &&
                                hdev->product <= USB_DEVICE_ID_LOGITECH_HARMONY_LAST)
                        return true;
                /*
diff -u linux-3.12.org/drivers/hid/hid-ids.h linux-3.12/drivers/hid/hid-ids.h
--- linux-3.12.org/drivers/hid/hid-ids.h        2013-11-03 16:41:51.000000000 -0700
+++ linux-3.12/drivers/hid/hid-ids.h    2014-01-10 19:47:39.000000000 -0700
@@ -542,6 +542,7 @@
 #define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST  0xc110
 #define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
 #define USB_DEVICE_ID_LOGITECH_HARMONY_PS3 0x0306
+#define USB_DEVICE_ID_LOGITECH_HARMONY_SMART_PS3 0xc129
 #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD  0xc20a
 #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD       0xc211
 #define USB_DEVICE_ID_LOGITECH_EXTREME_3D      0xc215
diff -u linux-3.12.org/drivers/hid/hid-sony.c linux-3.12/drivers/hid/hid-sony.c
--- linux-3.12.org/drivers/hid/hid-sony.c       2013-11-03 16:41:51.000000000 -0700
+++ linux-3.12/drivers/hid/hid-sony.c   2014-01-10 19:47:39.000000000 -0700
@@ -709,6 +709,9 @@
        /* Logitech Harmony Adapter for PS3 */
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3),
                .driver_data = PS3REMOTE },
+       /* Logitech Harmony Smart Control for PS3 */
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_SMART_PS3),
+               .driver_data = PS3REMOTE },
        { }
 };
 MODULE_DEVICE_TABLE(hid, sony_devices);

The key mapping isn't great - I'm looking into that next!

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.