ps3 bluetooth, удаленный соединенный как устройство ввода данных Linux, имеет только один тип события на 13,10

Я пытаюсь установить свою Гармонию Умное Управление как дистанционное управление PS3 Bluetooth (это симулирует быть этим удаленным) в соответствии с Ubuntu 13.10 (последнее ядро и установленные обновления). Мой аппаратный ключ Bluetooth не работал бы из поля, таким образом, я должен был сделать следующее:

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

После этого я могу соединить удаленное прекрасное использование менеджер по Bluetooth от GUI. Это зарегистрировало сходство с нормальным удаленным PS3, согласно купленному устройству:

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]

Я вижу, что пакеты прибывают из Bluetooth для каждого нажатия клавиши как это:

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 

Таким образом, соединение определенно в порядке, и нажатия клавиш получены. Устройство распознано как устройство ввода данных на системный журнал:

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

Но когда я делаю evtest на устройстве, я только получаю это:

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)

Это смотрит на меня, любят существует только один тип события для этого удаленного, и никакое нажатие клавиши не инициировало его. Дополнительный вывод от lsusb для моего аппаратного ключа ниже [1]. Мои вопросы:

  1. Действительно ли btusb является правильным модулем ядра для использования?
  2. Почему я должен использовать команду эха для своего аппаратного ключа, который будет распознан модулем?
  3. Существует ли дополнительная конфигурация, в которой я нуждаюсь, чтобы входной слой распознал дополнительные типы событий?

[1] lsusb производят для аппаратного ключа Bluetooth: http://pastebin.com/xHM5YZXB

4
задан 23 November 2013 в 01:18

1 ответ

Возможно, вы уже исправили это, но на всякий случай вот патч ядра, который я использовал, чтобы заставить его работать под Arch Linux с ядром 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);

Отображение клавиш не велико - Я смотрю на это дальше!

0
ответ дан 23 November 2013 в 01:18

Другие вопросы по тегам:

Похожие вопросы: