public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: David Henningsson <david.henningsson@canonical.com>
To: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH] DVB: TechnoTrend CT-3650 IR support
Date: Mon, 27 Dec 2010 16:54:20 +0100	[thread overview]
Message-ID: <4D18B6AC.2040506@canonical.com> (raw)
In-Reply-To: <4D18623C.8080006@infradead.org>

On 2010-12-27 10:54, Mauro Carvalho Chehab wrote:
> Em 26-12-2010 17:38, David Henningsson escreveu:
>> On 2010-12-26 12:41, Mauro Carvalho Chehab wrote:
>>> Hi David,
>>>
>>> Em 26-12-2010 07:14, David Henningsson escreveu:
>>>> Hi Linux-media,
>>>>
>>>> As a spare time project I bought myself a TT CT-3650, to see if I could get it working. Waling Dijkstra did write a IR&   CI patch for this model half a year ago, so I was hopeful. (Reference: http://www.mail-archive.com/linux-media@vger.kernel.org/msg19860.html )
>>>>
>>>> Having tested the patch, the IR is working (tested all keys via the "evtest" tool), however descrambling is NOT working.
>>>>
>>>> Waling's patch was reviewed but never merged. So I have taken the IR part of the patch, cleaned it up a little, and hopefully this part is ready for merging now. Patch is against linux-2.6.git.
>>>
>>> Could you please rebase it to work with the rc_core support? I suspect that you
>>> based it on a kernel older than .36, as the dvb_usb rc struct changed.
>>
>> Ok, I have now done this, but I'm not completely satisfied, perhaps you can help out a little? I'm new to IR/RC stuff,
>> but I feel I'm missing correct "repeat" functionality, i e, if you keep a key pressed it appears as separate key presses
>> with whatever interval set as .rc_interval. (This was probably a problem with the old patch as well.) Is there any
>> support for this is rc_core?
>
>  From your decode logic, I suspect that the IR hardware decoder has its own logic for repeat.
> In this case, there's not much you can do, as it probably uses a very high time for repeat.
>
>> I'm attaching a temporary patch (just for review) so you know what I'm talking about.
>>
>>> The better is to base it over the latest V4L/DVB/RC development git, available at:
>>>      http://git.linuxtv.org/media_tree.git
>>
>> Ok. I was probably confused with this entry: http://linuxtv.org/news.php?entry=2010-01-19.mchehab
>> telling me to base it on v4l-dvb.git, which is not updated for four months. However, http://git.linuxtv.org/ correctly lists the media_tree.git as the repository of choice.
>
> Ah... yeah, old news;)
>
>> Thanks for the review!
>>
> Em 26-12-2010 17:38, David Henningsson escreveu:
>>  From 8c42121a08c5dabbd1a943cc1e5726ed99f0d957 Mon Sep 17 00:00:00 2001
>> From: David Henningsson<david.henningsson@canonical.com>
>> Date: Sun, 26 Dec 2010 14:23:58 +0100
>> Subject: [PATCH] DVB: IR support for CT-3650
>>
>> Signed-off-by: David Henningsson<david.henningsson@canonical.com>
>> ---
>>   drivers/media/dvb/dvb-usb/ttusb2.c |   28 ++++++++++++++++++++++++++++
>>   1 files changed, 28 insertions(+), 0 deletions(-)
>>   mode change 100644 =>  100755 debian/rules
>>
>> diff --git a/debian/rules b/debian/rules
>> old mode 100644
>> new mode 100755
>> diff --git a/drivers/media/dvb/dvb-usb/ttusb2.c b/drivers/media/dvb/dvb-usb/ttusb2.c
>> index a6de489..ded8a4b 100644
>> --- a/drivers/media/dvb/dvb-usb/ttusb2.c
>> +++ b/drivers/media/dvb/dvb-usb/ttusb2.c
>> @@ -128,6 +128,27 @@ static struct i2c_algorithm ttusb2_i2c_algo = {
>>   	.functionality = ttusb2_i2c_func,
>>   };
>>
>> +/* command to poll IR receiver (copied from pctv452e.c) */
>> +#define CMD_GET_IR_CODE     0x1b
>> +
>> +/* IR */
>> +static int tt3650_rc_query(struct dvb_usb_device *d)
>> +{
>> +	int ret;
>> +	u8 rx[9]; /* A CMD_GET_IR_CODE reply is 9 bytes long */
>> +	ret = ttusb2_msg(d, CMD_GET_IR_CODE, NULL, 0, rx, sizeof(rx));
>> +	if (ret != 0)
>> +		return ret;
>> +
>> +	if (rx[8]&  0x01) {
>
> Maybe (rx[8]&  0x01) == 0 indicates a keyup event. If so, if you map both keydown
> and keyup events, the in-kernel repeat logic will work.

Hmm. If I should fix keyup events, the most reliable version would 
probably be something like:

if (rx[8] & 0x01) {
   int currentkey = rx[2]; // or (rx[3]<<  8) | rx[2];
   if (currentkey == lastkey)
     rc_repeat(lastkey);
   else {
     if (lastkey)
       rc_keyup(lastkey);
     lastkey = currentkey;
     rc_keydown(currentkey);
   }
}
else if (lastkey) {
   rc_keyup(lastkey);
   lastkey = 0;
}

Does this sound reasonable to you?

>
>> +		/* got a "press" event */
>> +		deb_info("%s: cmd=0x%02x sys=0x%02x\n", __func__, rx[2], rx[3]);
>> +		rc_keydown(d->rc_dev, rx[2], 0);
>> +	}
>
> As you're receiving both command+address, please use the complete code:
> 	rc_keydown(d->rc_dev, (rx[3]<<  8) | rx[2], 0);

I've tried this, but it stops working. evtest shows only scancode 
events, so my guess is that this makes it incompatible with 
RC_MAP_TT_1500, which lists only the lower byte.

> Also as it is receiving 8 bytes from the device, maybe the IR decoding logic is
> capable of decoding more than just one protocol. Such feature is nice, as it
> allows replacing the original keycode table by a more complete one.

I've tried dumping all nine bytes but I can't make much out of it as I'm 
unfamiliar with RC protocols and decoders.

Typical reply is (no key pressed):

cc 35 0b 15 00 03 00 00 00

Does this tell you anything?

> One of the most interesting features of the new RC code is that it offers
> a sysfs class and some additional logic to allow dynamically change/replace
> the keymaps and keycodes via userspace. The idea is to remove all in-kernel
> keymaps in the future, using, instead, the userspace way, via ir-keytable
> tool, available at:
> 	http://git.linuxtv.org/v4l-utils.git
>
> The tool already supports auto-loading the keymap via udev.
>
> For IR's where we don't know the protocol or that we don't have the full scancode,
> loading the keymap via userspace will not bring any new feature. But, for those
> devices where we can be sure about the protocol and for those that also allow
> using other protocols, users can just replace the device-provided IR with a more
> powerful remote controller with more keys.

Yeah, that sounds like a really nice feature.

> So, it would be wonderful if you could identify what's the supported protocol(s)
> instead of using RC_TYPE_UNKNOWN. You can double check the protocol if you have
> with you another RC device that supports raw decoding. The rc-core internal decoders
> will tell you what protocol was used to decode a keycode, if you enable debug.

I don't have any such RC receiver device. I do have a Logitech Harmony 
525, so I tried pointing that one towards the CT 3650, but 
CMD_GET_IR_CODE didn't change for any of the devices I've currently told 
my Harmony to emulate.

So I don't really see how I can help further in this case?

-- 
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic

  reply	other threads:[~2010-12-27 15:54 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-26  9:14 [PATCH] DVB: TechnoTrend CT-3650 IR support David Henningsson
2010-12-26 11:41 ` Mauro Carvalho Chehab
2010-12-26 19:38   ` David Henningsson
2010-12-27  9:54     ` Mauro Carvalho Chehab
2010-12-27 15:54       ` David Henningsson [this message]
2010-12-27 16:51         ` Mauro Carvalho Chehab
2010-12-27 19:02           ` David Henningsson
2010-12-27 21:28             ` Mauro Carvalho Chehab
2010-12-29 12:04               ` David Henningsson
2010-12-29 12:37                 ` Mauro Carvalho Chehab

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=4D18B6AC.2040506@canonical.com \
    --to=david.henningsson@canonical.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@infradead.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