[linux-dvb] Hauppauge IR remote codes & basic C programming
Darren Salt
linux at youmustbejoking.demon.co.uk
Fri Apr 28 21:37:50 CEST 2006
I demand that Simon Baxter may or may not have written...
>> (Don't worry if you see 37fd or 37bd. That's normal; bit 11 is toggled by
>> the remote control on each new key press. Bits 12 to 15 are fixed; bits 0
>> to 5 are the key code.)
>> Plugging the numbers into ((value >> 6) & 0x1F), we get 0x1F and 0x1E.
> Sorry, I'm confused. How do we arrive at 0x1F and 0x1E ?
$ printf %#x\\n $(((0x37fd >> 6) & 0x1F))
0x1f
$ printf %#x\\n $(((0x37bd >> 6) & 0x1F))
0x1e
$
The numbers are pulled from the "biphase decoded" lines in the kernel message
buffer.
> Here's where I'm up to now:
> [root at media ~]# echo 1 >/sys/module/cx88xx/parameters/ir_debug
> [root at media ~]# input-events -t 240 2
> /dev/input/event2
> bustype : BUS_PCI
> vendor : 0x70
> product : 0x9002
> version : 1
> name : "cx88 IR (Hauppauge Nova-T DVB-T"
> phys : "pci-0000:00:0a.2/ir0"
> bits ev : EV_SYN EV_KEY EV_REP
[snip]
> ------------>>> above: Hit the 'menu' key on the R808, and then the
> 'mute' key on my Phillips TV remote
> and the 'dmesg' for that action:
> cx88[0] IR: biphase decoded: 3fcd
[snip repeat then 2×0x37fd]
=> 0x1F.
> cx88[0] IR: biphase decoded: 300d
[snip repeat then 2×0x380d]
=> 0x00.
[snip]
> 3fcd/37cd = Hauppauge menu button
> 300d/380d = Phillips mute button
That looks about right.
> ------------>>> above: As you can see, the cx88xx is seeing different
> codes, but the IR decode is seeing it as the same keystroke...
Yes; your module isn't checking bit 11. The attached patch (apply on top of
my other cx88-input patch) should fix this.
--
| Darren Salt | linux or ds at | nr. Ashington, | Toon
| RISC OS, Linux | youmustbejoking,demon,co,uk | Northumberland | Army
| <URL:http://www.youmustbejoking.demon.co.uk/> (PGP 2.6, GPG keys)
The wise shepherd never trusts his flock to a smiling wolf.
-------------- next part --------------
cx88-input: properly handle new-keypress edge signal for Hauppauge RCs
From: Darren Salt <linux at youmustbejoking.demon.co.uk>
This patch causes key-up events to be generated whenever bit 11 of the IR
data is toggled. (This bit is toggled by the remote control whenever it
detects a keypress.)
Signed-off-by: Darren Salt <linux at youmustbejoking.demon.co.uk>
diff -r 9112ece99990 linux/drivers/media/video/cx88/cx88-input.c
--- a/linux/drivers/media/video/cx88/cx88-input.c Thu Apr 27 14:30:46 2006 +0100
+++ b/linux/drivers/media/video/cx88/cx88-input.c Thu Apr 27 18:17:14 2006 +0100
@@ -402,6 +402,16 @@ void cx88_ir_irq(struct cx88_core *core)
if (!ir_any_address &&
((ircode ^ ir->sampling) & (0x1F << 6)))
break;
+
+ /* if either the new-keypress edge signal is changed or the
+ * RC5 address doesn't match that of the previous keypress,
+ * say "key-up"
+ */
+ if (((ircode ^ ir->last_gpio) & (1 << 11)) ||
+ ((ircode ^ ir->last_gpio) & (0x1F << 6)))
+ ir_input_nokey(ir->input, &ir->ir);
+
+ ir->last_gpio = ircode;
ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode);
ir->release = jiffies + msecs_to_jiffies(120);
break;
More information about the linux-dvb
mailing list