Re: Hauppauge Nova-S remote control broken in 2.6.38

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

 



Em 03-04-2011 11:48, Lawrence Rust escreveu:
> On Sun, 2011-04-03 at 11:25 -0300, Mauro Carvalho Chehab wrote:
>> > Em 03-04-2011 08:41, Lawrence Rust escreveu:
>>> > > I just installed a new 2.6.38.2 kernel and found that the remote control
>>> > > on my Hauppauge Nova-S plus is no longer working. 

The most interesting part is this one:

[ 5988.381443] ir_raw_event_store: sample: (01000us pulse)
[ 5988.381448] ir_raw_event_store: sample: (00750us space)
[ 5988.381452] ir_raw_event_store: sample: (00676us pulse)
[ 5988.381456] ir_raw_event_store: sample: (00926us space)
[ 5988.381460] ir_raw_event_store: sample: (00750us pulse)
[ 5988.381464] ir_raw_event_store: sample: (01000us space)
[ 5988.389445] ir_raw_event_store: sample: (00750us pulse)
[ 5988.389454] ir_raw_event_store: sample: (01000us space)
[ 5988.389458] ir_raw_event_store: sample: (00750us pulse)
[ 5988.389462] ir_raw_event_store: sample: (01000us space)
[ 5988.389466] ir_raw_event_store: sample: (00676us pulse)
[ 5988.389470] ir_raw_event_store: sample: (01000us space)
[ 5988.389473] ir_raw_event_store: sample: (00750us pulse)
[ 5988.389477] ir_raw_event_store: sample: (01000us space)
[ 5988.397435] ir_raw_event_store: sample: (00750us pulse)
[ 5988.397444] ir_raw_event_store: sample: (01000us space)
[ 5988.397448] ir_raw_event_store: sample: (00750us pulse)
[ 5988.397452] ir_raw_event_store: sample: (01000us space)
[ 5988.397455] ir_raw_event_store: sample: (00750us pulse)
[ 5988.397459] ir_raw_event_store: sample: (01000us space)
[ 5988.397463] ir_raw_event_store: sample: (00750us pulse)
[ 5988.397467] ir_raw_event_store: sample: (00926us space)
[ 5988.405444] ir_raw_event_store: sample: (00750us pulse)

[ 5988.493438] ir_raw_event_store: sample: (05498us space)
[ 5988.493447] ir_raw_event_store: sample: (00750us pulse)
[ 5988.493451] ir_raw_event_store: sample: (01000us space)
[ 5988.493455] ir_raw_event_store: sample: (00676us pulse)
[ 5988.493458] ir_raw_event_store: sample: (00676us space)
[ 5988.493462] ir_raw_event_store: sample: (00750us pulse)
[ 5988.501437] ir_raw_event_store: sample: (01000us space)
[ 5988.501445] ir_raw_event_store: sample: (01000us pulse)
[ 5988.501449] ir_raw_event_store: sample: (00750us space)
[ 5988.501453] ir_raw_event_store: sample: (01000us pulse)
[ 5988.501457] ir_raw_event_store: sample: (00750us space)
[ 5988.501461] ir_raw_event_store: sample: (00676us pulse)
[ 5988.501465] ir_raw_event_store: sample: (01000us space)
[ 5988.501469] ir_raw_event_store: sample: (00750us pulse)
[ 5988.509445] ir_raw_event_store: sample: (01000us space)
[ 5988.509454] ir_raw_event_store: sample: (01000us pulse)
[ 5988.509458] ir_raw_event_store: sample: (00750us space)
[ 5988.509462] ir_raw_event_store: sample: (01000us pulse)
[ 5988.509465] ir_raw_event_store: sample: (00750us space)
[ 5988.509469] ir_raw_event_store: sample: (01000us pulse)
[ 5988.509473] ir_raw_event_store: sample: (00750us space)
[ 5988.509476] ir_raw_event_store: sample: (01000us pulse)
[ 5988.517448] ir_raw_event_store: sample: (00676us space)
[ 5988.517457] ir_raw_event_store: sample: (00750us pulse)

[ 5988.605435] ir_raw_event_store: sample: (05498us space)
[ 5988.605443] ir_raw_event_store: sample: (00750us pulse)
[ 5988.605447] ir_raw_event_store: sample: (01000us space)
[ 5988.605451] ir_raw_event_store: sample: (00676us pulse)
[ 5988.605455] ir_raw_event_store: sample: (00676us space)
[ 5988.613439] ir_raw_event_store: sample: (01000us pulse)
[ 5988.613447] ir_raw_event_store: sample: (00750us space)
[ 5988.613451] ir_raw_event_store: sample: (01000us pulse)
[ 5988.613455] ir_raw_event_store: sample: (00750us space)
[ 5988.613458] ir_raw_event_store: sample: (01000us pulse)
[ 5988.613462] ir_raw_event_store: sample: (01000us space)
[ 5988.613466] ir_raw_event_store: sample: (00676us pulse)
[ 5988.613469] ir_raw_event_store: sample: (00750us space)
[ 5988.621441] ir_raw_event_store: sample: (01000us pulse)
[ 5988.621449] ir_raw_event_store: sample: (00750us space)
[ 5988.621453] ir_raw_event_store: sample: (01000us pulse)
[ 5988.621457] ir_raw_event_store: sample: (00750us space)
[ 5988.621460] ir_raw_event_store: sample: (01000us pulse)
[ 5988.621464] ir_raw_event_store: sample: (01000us space)
[ 5988.621468] ir_raw_event_store: sample: (00750us pulse)
[ 5988.621471] ir_raw_event_store: sample: (01000us space)
[ 5988.621475] ir_raw_event_store: sample: (00750us pulse)
[ 5988.629449] ir_raw_event_store: sample: (00676us space)
[ 5988.629457] ir_raw_event_store: sample: (01000us pulse)
[ 5988.789446] ir_raw_event_store: sample: (10057us space)

It seems that you hit 3 keycodes here. The decoders will try to detect the event format,
according with the protocol timings (see http://www.sbprojects.com/knowledge/ir/rc5.htm).
Both RC-5 and RC-6 use Manchester codes (http://en.wikipedia.org/wiki/Manchester_code).

If the IR were following the RC5 timings, you would be seen a sequence of 21 events for
each keycode, some with about 889 us and the others with about 1778 us (1778us = 889 x 2).

The decoders are a bit tolerant with timing shifts, but your remote has a high timing shift
when compared with the specs. Also, the long events should have twice the duration of the
short events.

To be worse, if we took the middle keystroke:

[ 5988.493438] ir_raw_event_store: sample: (05498us space)
[ 5988.493447] ir_raw_event_store: sample: (00750us pulse)
	Bit 1 - Start of the frame
[ 5988.493451] ir_raw_event_store: sample: (01000us space)
[ 5988.493455] ir_raw_event_store: sample: (00676us pulse)
	Should be a bit 1, also part of the start of frame, but it seems mangled
[ 5988.493458] ir_raw_event_store: sample: (00676us space)
[ 5988.493462] ir_raw_event_store: sample: (00750us pulse)
	Should be a bit 0, but it is mangled
[ 5988.501437] ir_raw_event_store: sample: (01000us space)
[ 5988.501445] ir_raw_event_store: sample: (01000us pulse)
	1st data bit
[ 5988.501449] ir_raw_event_store: sample: (00750us space)
[ 5988.501453] ir_raw_event_store: sample: (01000us pulse)
	2nd data bit
[ 5988.501457] ir_raw_event_store: sample: (00750us space)
[ 5988.501461] ir_raw_event_store: sample: (00676us pulse)
	3rd data bit

[ 5988.501465] ir_raw_event_store: sample: (01000us space)
[ 5988.501469] ir_raw_event_store: sample: (00750us pulse)
	4th data bit

[ 5988.509445] ir_raw_event_store: sample: (01000us space)
[ 5988.509454] ir_raw_event_store: sample: (01000us pulse)
	5th data bit

[ 5988.509458] ir_raw_event_store: sample: (00750us space)
[ 5988.509462] ir_raw_event_store: sample: (01000us pulse)
	6th data bit

[ 5988.509465] ir_raw_event_store: sample: (00750us space)
[ 5988.509469] ir_raw_event_store: sample: (01000us pulse)
	7th data bit

[ 5988.509473] ir_raw_event_store: sample: (00750us space)
[ 5988.509476] ir_raw_event_store: sample: (01000us pulse)
	8th data bit

[ 5988.517448] ir_raw_event_store: sample: (00676us space)
[ 5988.517457] ir_raw_event_store: sample: (00750us pulse)
	9th data bit

[ 5988.605435] ir_raw_event_store: sample: (05498us space)

There are just 12 bits there, being 3 control bits and 9 data
ones. That's not enough for the decoders to recognize this as
a RC-5 code.

The other 2 keystrokes are equally mangled.

If you look at the RC-5 state machine for the second keystroke:

[ 5988.493499] ir_rc5_decode: RC5(x) decode failed at state 1 (5498us space)
	(this event resets the state machine to start receiving a new sequence)

[ 5988.493524] ir_rc5_decode: RC5(x) decode started at state 0 (750us pulse)
[ 5988.493529] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.493545] ir_rc5_decode: RC5(x) decode started at state 1 (1000us space)
[ 5988.493562] ir_rc5_decode: RC5(x) decode started at state 2 (676us pulse)
[ 5988.493566] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.493582] ir_rc5_decode: RC5(x) decode started at state 1 (676us space)
[ 5988.493599] ir_rc5_decode: RC5(x) decode started at state 2 (750us pulse)
[ 5988.493603] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.501504] ir_rc5_decode: RC5(x) decode started at state 1 (1000us space)
[ 5988.501529] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.501534] ir_rc5_decode: RC5(x) decode started at state 1 (111us pulse)
[ 5988.501551] ir_rc5_decode: RC5(x) decode started at state 1 (750us space)
[ 5988.501568] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.501572] ir_rc5_decode: RC5(x) decode started at state 1 (111us pulse)
[ 5988.501589] ir_rc5_decode: RC5(x) decode started at state 1 (750us space)
[ 5988.501606] ir_rc5_decode: RC5(x) decode started at state 2 (676us pulse)
[ 5988.501610] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.501627] ir_rc5_decode: RC5(x) decode started at state 1 (1000us space)
[ 5988.501643] ir_rc5_decode: RC5(x) decode started at state 2 (750us pulse)
[ 5988.501648] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.509507] ir_rc5_decode: RC5(x) decode started at state 1 (1000us space)
[ 5988.509533] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.509537] ir_rc5_decode: RC5(x) decode started at state 3 (111us pulse)
[ 5988.509554] ir_rc5_decode: RC5(x) decode started at state 3 (750us space)
[ 5988.509558] ir_rc5_decode: RC5(x) decode started at state 1 (750us space)
[ 5988.509575] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.509579] ir_rc5_decode: RC5(x) decode started at state 1 (111us pulse)
[ 5988.509596] ir_rc5_decode: RC5(x) decode started at state 1 (750us space)
[ 5988.509612] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.509617] ir_rc5_decode: RC5(x) decode started at state 1 (111us pulse)
[ 5988.509633] ir_rc5_decode: RC5(x) decode started at state 1 (750us space)
[ 5988.509650] ir_rc5_decode: RC5(x) decode started at state 2 (1000us pulse)
[ 5988.509654] ir_rc5_decode: RC5(x) decode started at state 1 (111us pulse)
[ 5988.517491] ir_rc5_decode: RC5(x) decode started at state 1 (676us space)
[ 5988.517516] ir_rc5_decode: RC5(x) decode started at state 2 (750us pulse)
[ 5988.517520] ir_rc5_decode: RC5(x) decode started at state 1 (0us pulse)
[ 5988.605480] ir_rc5_decode: RC5(x) decode started at state 1 (5498us space)
[ 5988.605486] ir_rc5_decode: RC5(x) decode failed at state 1 (5498us space)

The RC-5 decoder has accepted the timings for your remote. It only failed when it
detected less bits than required for a RC-5 protocol.

I have here 3 different Remote Controllers produced by Hauppauge (the black one,
the grey/gold one and the grey one). All of them are properly decoded by the
RC-5 software decoder inside the kernel.

My first bet is that your remote is broken (or needs to replace the batteries).

If you are using a new pair of batteries, and are you sure that the remote works
fine, then my next bet is that cx88_ir_irq(), at cx88-input.c is doing something
wrong, or it is loosing events. The Nova-S seems to be programmed to sample the
GPIO16 pin at 4 kHz rate, and generate interrupts reporting it (I think it will
generate one IRQ on every 4000/32 Hz - although I didn't double-checked the cx23883
datasheet to be sure). If your system has lots of pending tasks, you
may eventually loose events, and the net result is the above: you'll get
only half of the samples for a given keystroke.

You should try to compile your kernel with CONFIG_HZ = 1000, and test the remote
controller without any other load, to double check it. You may also try to play with
ir_samplerate modprobe parameter, to change the sample rate from 4kHz to another
rate, between 1-16 kHz. The higher value, the higher will be the IRQ load, so, you
may try to decrease it to 3 or 2, in order to test if all bits will be catched. A rate
of 1 kHz is probably not enough for the RC-5 protocol.

If none of the above fixes it, I would take a look at ir_raw_event_store_with_filter().





Cheers,
Mauro.




--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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