Re: [PATCH v2 7/7] media: rc: mceusb: allow the timeout to be configurable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sean!

[ I trimmed the Cc list, as this is mceusb specific ]

On Sat, Apr 21, 2018 at 07:41:21PM +0200, Matthias Reichl wrote:
> On Sat, Apr 21, 2018 at 03:18:52PM +0200, Matthias Reichl wrote:
> > Another bug report came in, button press results in multiple
> > key down/up events
> > https://forum.kodi.tv/showthread.php?tid=298461&pid=2727837#pid2727837
> > (and following posts).

The original reporter gave up before I could get enough info
to understand what's going on, but now another user with an identical
receiver and the same problems showed up and I could get debug logs.

FYI: I've uploaded the full dmesg here if you need more info
or I snipped off too much:
http://www.horus.com/~hias/tmp/mceusb-settimeout-issue.txt

Here's the info about the IR receiver:
[    2.208684] usb 1-1.3: New USB device found, idVendor=1784, idProduct=0011
[    2.208699] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.208708] usb 1-1.3: Product: eHome Infrared Transceiver
[    2.208716] usb 1-1.3: Manufacturer: Topseed Technology Corp.
[    2.208724] usb 1-1.3: SerialNumber: EID0137AG-8-0000104054

With timeout configuration in the mceusb driver disabled everything
works fine. But with timeout configuration enabled spurious "keyup"
events show up during a button press and sometimes also a spurious
"ghost" keypress several seconds after the original button press.

Here's the ir-keytable -t output to illustrate the behaviour:

80.385585: event type EV_MSC(0x04): scancode = 0x800f0422
80.385585: event type EV_KEY(0x01) key_down: KEY_OK(0x0160)
80.385585: event type EV_SYN(0x00).
80.492469: event type EV_MSC(0x04): scancode = 0x800f0422
80.492469: event type EV_SYN(0x00).
80.633371: event type EV_KEY(0x01) key_up: KEY_OK(0x0160)
80.633371: event type EV_SYN(0x00).
80.642478: event type EV_MSC(0x04): scancode = 0x800f0422
80.642478: event type EV_KEY(0x01) key_down: KEY_OK(0x0160)
80.642478: event type EV_SYN(0x00).
80.783375: event type EV_KEY(0x01) key_up: KEY_OK(0x0160)
80.783375: event type EV_SYN(0x00).
84.318011: event type EV_MSC(0x04): scancode = 0x800f0422
84.318011: event type EV_KEY(0x01) key_down: KEY_OK(0x0160)
84.318011: event type EV_SYN(0x00).
84.460049: event type EV_KEY(0x01) key_up: KEY_OK(0x0160)
84.460049: event type EV_SYN(0x00).

>From the kernel log the first 2 scancodes are perfectly fine,
we get the timeout space in chunks, followed by the "End of raw IR data"
message and the scancode is properly decoded. Then about 45ms later
the pulses of the following IR message come in.

Snippet from end of second scancode:

[   80.505896] mceusb 1-1.3:1.0: rx data: 81 7f (length=2)
[   80.505902] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.505907] mceusb 1-1.3:1.0: Storing space with duration 6350000
[   80.505911] mceusb 1-1.3:1.0: processed IR data
[   80.506894] mceusb 1-1.3:1.0: rx data: 81 05 (length=2)
[   80.506899] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.506904] mceusb 1-1.3:1.0: Storing space with duration 250000
[   80.506908] rc rc0: enter idle mode
[   80.506913] rc rc0: sample: (25650us space)
[   80.506918] mceusb 1-1.3:1.0: rx data: 80 (length=1)
[   80.506922] mceusb 1-1.3:1.0: End of raw IR data
[   80.506925] mceusb 1-1.3:1.0: processed IR data
[   80.506943] rc rc0: RC6 decode started at state 6 (25650us space)
[   80.506949] rc rc0: RC6 decode started at state 8 (25650us space)
[   80.506955] rc rc0: RC6(6A) proto 0x0013, scancode 0x800f0422 (toggle: 1)
[   80.506961] rc rc0: Media Center Ed. eHome Infrared Remote Transceiver (1784:0011): scancode 0x800f0422 keycode 0x160
[   80.552906] mceusb 1-1.3:1.0: rx data: 81 b5 (length=2)
[   80.552914] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.552919] mceusb 1-1.3:1.0: Storing pulse with duration 2650000
[   80.552924] rc rc0: leave idle mode

But then, the end of the third scancode gets interesting. The
last chunk of the timeout space is missing and instead we get
a combined message with the remaining space and a zero-length
pulse just before the fourth IR message starts. Of course, this is
too late and the keyup timer had already expired:

[   80.612896] mceusb 1-1.3:1.0: rx data: 81 7f (length=2)
[   80.612903] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.612908] mceusb 1-1.3:1.0: Storing space with duration 6350000
[   80.612912] mceusb 1-1.3:1.0: processed IR data
[   80.647880] rc rc0: keyup key 0x0160
[   80.656901] mceusb 1-1.3:1.0: rx data: 82 05 80 (length=3)
[   80.656908] mceusb 1-1.3:1.0: Raw IR data, 2 pulse/space samples
[   80.656913] mceusb 1-1.3:1.0: Storing space with duration 250000
[   80.656918] rc rc0: enter idle mode
[   80.656923] rc rc0: sample: (25650us space)
[   80.656928] mceusb 1-1.3:1.0: Storing pulse with duration 0
[   80.656931] rc rc0: leave idle mode
[   80.656935] mceusb 1-1.3:1.0: processed IR data
[   80.656967] rc rc0: RC6 decode started at state 6 (25650us space)
[   80.656973] rc rc0: RC6 decode started at state 8 (25650us space)
[   80.656979] rc rc0: RC6(6A) proto 0x0013, scancode 0x800f0422 (toggle: 1)
[   80.656986] rc rc0: Media Center Ed. eHome Infrared Remote Transceiver (1784:0011): scancode 0x800f0422 keycode 0x160
[   80.656998] rc rc0: Media Center Ed. eHome Infrared Remote Transceiver (1784:0011): key down event, key 0x0160, protocol 0x0013, scancode 0x800f0422
[   80.659900] mceusb 1-1.3:1.0: rx data: 81 b6 (length=2)
[   80.659908] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.659913] mceusb 1-1.3:1.0: Storing pulse with duration 2700000
[   80.659916] mceusb 1-1.3:1.0: processed IR data

A similar thing happened on the fourth IR message, a spurious pulse
picked up by the IR receiver about 4 seconds after the message seems
to have made it send out it's data and flush the decoder:

[   80.719899] mceusb 1-1.3:1.0: rx data: 81 7f (length=2)
[   80.719905] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   80.719910] mceusb 1-1.3:1.0: Storing space with duration 6350000
[   80.719914] mceusb 1-1.3:1.0: processed IR data
[   80.797908] rc rc0: keyup key 0x0160
[   84.332919] mceusb 1-1.3:1.0: rx data: 83 05 80 81 (length=4)
[   84.332934] mceusb 1-1.3:1.0: Raw IR data, 3 pulse/space samples
[   84.332944] mceusb 1-1.3:1.0: Storing space with duration 250000
[   84.332954] rc rc0: enter idle mode
[   84.332964] rc rc0: sample: (25650us space)
[   84.332973] mceusb 1-1.3:1.0: Storing pulse with duration 0
[   84.332981] rc rc0: leave idle mode
[   84.332989] mceusb 1-1.3:1.0: Storing pulse with duration 50000
[   84.332997] mceusb 1-1.3:1.0: processed IR data
[   84.333046] rc rc0: RC6 decode started at state 6 (25650us space)
[   84.333057] rc rc0: RC6 decode started at state 8 (25650us space)
[   84.333068] rc rc0: RC6(6A) proto 0x0013, scancode 0x800f0422 (toggle: 1)
[   84.333080] rc rc0: Media Center Ed. eHome Infrared Remote Transceiver (1784:0011): scanco
de 0x800f0422 keycode 0x160
[   84.333098] rc rc0: Media Center Ed. eHome Infrared Remote Transceiver (1784:0011): key do
wn event, key 0x0160, protocol 0x0013, scancode 0x800f0422
[   84.339912] mceusb 1-1.3:1.0: rx data: 81 7f (length=2)
[   84.339925] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   84.339934] mceusb 1-1.3:1.0: Storing space with duration 6350000
[   84.339944] rc rc0: sample: (00050us pulse)
[   84.339952] mceusb 1-1.3:1.0: processed IR data
[   84.339994] rc rc0: RC6 decode failed at state 0 (50us pulse)
[   84.345908] mceusb 1-1.3:1.0: rx data: 81 7f (length=2)
[   84.345918] mceusb 1-1.3:1.0: Raw IR data, 1 pulse/space samples
[   84.345927] mceusb 1-1.3:1.0: Storing space with duration 6350000
[   84.345935] mceusb 1-1.3:1.0: processed IR data

We have both rc-6 and NEC protocol enabled and the timeout is
therefore auto-configured to 25650us. I'm wondering if this could
have something to do with the odd behaviour as we'll get a very
short 250us space message from the IR receiver (in addition to
the 4 6350us spaces). Maybe this triggers some bug in the IR
receiver?

As we saw those issues on RPi, where USB has always been a bit
problematic, I wouldn't rule that out as a possible cause as well.

I've asked the reporter to test with various other timeout values,
this should hopefully provide some more info.

so long,

Hias



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux