From: Filippo Argiolas <filippo.argiolas@gmail.com>
To: Filippo Argiolas <filippo.argiolas@gmail.com>
Cc: linux-dvb <linux-dvb@linuxtv.org>
Subject: Re: [linux-dvb] [patch] support for key repeat with dib0700 ir receiver
Date: Sun, 02 Mar 2008 20:45:25 +0100 [thread overview]
Message-ID: <1204487125.6799.16.camel@tux> (raw)
In-Reply-To: <1203499665.7026.66.camel@tux>
[-- Attachment #1: Type: text/plain, Size: 1164 bytes --]
Il giorno mer, 20/02/2008 alle 10.29 +0100, Filippo Argiolas ha scritto:
> I don't know yet how this could be done and maybe it involves some work
> rewriting the ir stuff. So I think in the meanwhile my patch could be
> merged (if you think it's good) waiting for this work to be done.
Hi all,
it's been a while since I've posted this patch. Looking at the whole
thread the overall impression is that it works properly. No one
complained about it causing any trouble. Many users tested it and
reported it works good. I've been using it during this time and it seems
fine to me. It also fixed the annoying bug that flooded syslog with
unknown key messages.
So what does it need to be merged? Is a post in this list the proper way
to ask for inclusion? I'm not familiar to mercurial so I've created the
patch as I would do with a svn with "hg diff", it something wrong with
it? Is there a better way to produce a patch for submission?
I've attached a new patch where I've removed the keymaps I've used for
testing since these are not complete and I doubt anyone could find them
useful.
Please let me know what you think about it, thanks!
Best regards,
Filippo
[-- Attachment #2: remote-repeat.diff --]
[-- Type: text/x-patch, Size: 4923 bytes --]
diff -r 127f67dea087 linux/drivers/media/dvb/dvb-usb/dib0700.h
--- a/linux/drivers/media/dvb/dvb-usb/dib0700.h Tue Feb 26 20:43:56 2008 +0000
+++ b/linux/drivers/media/dvb/dvb-usb/dib0700.h Sun Mar 02 20:30:41 2008 +0100
@@ -37,6 +37,7 @@ struct dib0700_state {
u8 channel_state;
u16 mt2060_if1[2];
u8 rc_toggle;
+ u8 rc_counter;
u8 is_dib7000pc;
};
@@ -44,12 +45,15 @@ extern int dib0700_ctrl_clock(struct dvb
extern int dib0700_ctrl_clock(struct dvb_usb_device *d, u32 clk_MHz, u8 clock_out_gp3);
extern int dib0700_ctrl_rd(struct dvb_usb_device *d, u8 *tx, u8 txlen, u8 *rx, u8 rxlen);
extern int dib0700_download_firmware(struct usb_device *udev, const struct firmware *fw);
+extern int dib0700_rc_setup(struct dvb_usb_device *d);
extern int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff);
extern struct i2c_algorithm dib0700_i2c_algo;
extern int dib0700_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props,
struct dvb_usb_device_description **desc, int *cold);
extern int dib0700_device_count;
+extern int dvb_usb_dib0700_ir_proto;
extern struct dvb_usb_device_properties dib0700_devices[];
extern struct usb_device_id dib0700_usb_id_table[];
+
#endif
diff -r 127f67dea087 linux/drivers/media/dvb/dvb-usb/dib0700_core.c
--- a/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Tue Feb 26 20:43:56 2008 +0000
+++ b/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Sun Mar 02 20:30:41 2008 +0100
@@ -13,7 +13,7 @@ module_param_named(debug,dvb_usb_dib0700
module_param_named(debug,dvb_usb_dib0700_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info,2=fw,4=fwdata,8=data (or-able))." DVB_USB_DEBUG_STATUS);
-static int dvb_usb_dib0700_ir_proto = 1;
+int dvb_usb_dib0700_ir_proto = 1;
module_param(dvb_usb_dib0700_ir_proto, int, 0644);
MODULE_PARM_DESC(dvb_usb_dib0700_ir_proto, "set ir protocol (0=NEC, 1=RC5 (default), 2=RC6).");
@@ -261,7 +261,7 @@ int dib0700_streaming_ctrl(struct dvb_us
return dib0700_ctrl_wr(adap->dev, b, 4);
}
-static int dib0700_rc_setup(struct dvb_usb_device *d)
+int dib0700_rc_setup(struct dvb_usb_device *d)
{
u8 rc_setup[3] = {REQUEST_SET_RC, dvb_usb_dib0700_ir_proto, 0};
int i = dib0700_ctrl_wr(d, rc_setup, 3);
diff -r 127f67dea087 linux/drivers/media/dvb/dvb-usb/dib0700_devices.c
--- a/linux/drivers/media/dvb/dvb-usb/dib0700_devices.c Tue Feb 26 20:43:56 2008 +0000
+++ b/linux/drivers/media/dvb/dvb-usb/dib0700_devices.c Sun Mar 02 20:30:41 2008 +0100
@@ -301,6 +301,9 @@ static int stk7700d_tuner_attach(struct
static u8 rc_request[] = { REQUEST_POLL_RC, 0 };
+/* Number of keypresses to ignore before start repeating */
+#define RC_REPEAT_DELAY 2
+
static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
{
u8 key[4];
@@ -314,18 +317,67 @@ static int dib0700_rc_query(struct dvb_u
err("RC Query Failed");
return -1;
}
+
+ /* losing half of KEY_0 events from Philipps rc5 remotes.. */
if (key[0]==0 && key[1]==0 && key[2]==0 && key[3]==0) return 0;
- if (key[3-1]!=st->rc_toggle) {
+
+ /* info("%d: %2X %2X %2X %2X",dvb_usb_dib0700_ir_proto,(int)key[3-2],(int)key[3-3],(int)key[3-1],(int)key[3]); */
+
+ dib0700_rc_setup(d); /* reset ir sensor data to prevent false events */
+
+ switch (dvb_usb_dib0700_ir_proto) {
+ case 0: {
+ /* NEC protocol sends repeat code as 0 0 0 FF */
+ if ((key[3-2] == 0x00) && (key[3-3] == 0x00) &&
+ (key[3] == 0xFF)) {
+ st->rc_counter++;
+ if(st->rc_counter > RC_REPEAT_DELAY) {
+ *event = d->last_event;
+ *state = REMOTE_KEY_PRESSED;
+ st->rc_counter = RC_REPEAT_DELAY;
+ }
+ return 0;
+ }
for (i=0;i<d->props.rc_key_map_size; i++) {
if (keymap[i].custom == key[3-2] && keymap[i].data == key[3-3]) {
+ st->rc_counter = 0;
*event = keymap[i].event;
*state = REMOTE_KEY_PRESSED;
- st->rc_toggle=key[3-1];
+ d->last_event = keymap[i].event;
return 0;
}
}
- err("Unknown remote controller key : %2X %2X",(int)key[3-2],(int)key[3-3]);
- }
+ break;
+ }
+ default: {
+ /* RC-5 protocol changes toggle bit on new keypress */
+ for (i=0;i<d->props.rc_key_map_size; i++) {
+ if (keymap[i].custom == key[3-2] && keymap[i].data == key[3-3]) {
+ if((d->last_event == keymap[i].event) &&
+ (key[3-1] == st->rc_toggle)) {
+ st->rc_counter++;
+ /* prevents unwanted double hits */
+ if(st->rc_counter > RC_REPEAT_DELAY) {
+ *event = d->last_event;
+ *state = REMOTE_KEY_PRESSED;
+ st->rc_counter = RC_REPEAT_DELAY;
+ }
+
+ return 0;
+ }
+ st->rc_counter = 0;
+ *event = keymap[i].event;
+ *state = REMOTE_KEY_PRESSED;
+ st->rc_toggle = key[3-1];
+ d->last_event = keymap[i].event;
+ return 0;
+ }
+ }
+ break;
+ }
+ }
+ err("Unknown remote controller key: %2X %2X %2X %2X",(int)key[3-2],(int)key[3-3], (int)key[3-1],(int)key[3]);
+ d->last_event = 0;
return 0;
}
[-- Attachment #3: Type: text/plain, Size: 150 bytes --]
_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
next prev parent reply other threads:[~2008-03-02 19:45 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-19 15:17 [linux-dvb] [patch] support for key repeat with dib0700 ir receiver Filippo Argiolas
2008-02-19 17:21 ` Nicolas Will
2008-02-19 17:30 ` Filippo Argiolas
2008-02-19 19:19 ` Nicolas Will
2008-02-19 19:30 ` Nicolas Will
2008-02-19 21:10 ` Matthew Vermeulen
2008-02-19 22:09 ` Nicolas Will
2008-02-20 7:39 ` Matthew Vermeulen
2008-02-20 7:54 ` Nicolas Will
2008-02-20 13:10 ` Matthew Vermeulen
2008-02-20 8:22 ` Filippo Argiolas
2008-02-20 8:27 ` Filippo Argiolas
2008-02-20 12:36 ` Matthew Vermeulen
2008-02-20 13:23 ` Nicolas Will
2008-02-20 13:43 ` Matthew Vermeulen
2008-02-20 14:15 ` Filippo Argiolas
[not found] ` <1203517472.6682.37.camel@acropora>
2008-02-20 20:09 ` Patrik Hansson
2008-02-20 22:57 ` Matthew Vermeulen
2008-02-20 23:08 ` Matthew Vermeulen
2008-02-20 8:22 ` Filippo Argiolas
2008-02-19 21:14 ` Patrick Boettcher
2008-02-19 21:41 ` Jonas Anden
2008-02-19 22:16 ` Nicolas Will
2008-02-19 22:29 ` Patrick Boettcher
2008-02-19 22:50 ` hermann pitton
2008-02-20 4:18 ` Supported device? Lyal Collins
2008-02-19 22:52 ` [linux-dvb] [patch] support for key repeat with dib0700 ir receiver Nicolas Will
2008-02-20 9:00 ` Jonas Anden
2008-02-20 2:05 ` Darren Salt
2008-02-20 9:27 ` Filippo Argiolas
2008-02-20 9:39 ` Nicolas Will
2008-02-20 10:06 ` Filippo Argiolas
2008-03-02 19:45 ` Filippo Argiolas [this message]
2008-03-10 22:17 ` Nicolas Will
2008-02-27 11:04 ` Nicolas Will
-- strict thread matches above, loose matches on Subject: below --
2008-02-19 16:33 Eduard Huguet
2008-02-19 16:49 ` Filippo Argiolas
2008-02-19 17:07 ` Eduard Huguet
[not found] <mailman.77.1203547335.926.linux-dvb@linuxtv.org>
2008-02-21 9:54 ` Eduard Huguet
2008-02-21 15:42 ` Filippo Argiolas
2008-02-22 10:56 ` Matthew Vermeulen
2008-02-22 11:07 ` Nicolas Will
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1204487125.6799.16.camel@tux \
--to=filippo.argiolas@gmail.com \
--cc=linux-dvb@linuxtv.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox