Em 27-12-2010 17:02, David Henningsson escreveu:
> On 2010-12-27 17:51, Mauro Carvalho Chehab wrote:
>> Em 27-12-2010 13:54, David Henningsson escreveu:
>>> 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:
>>
>>>>> +/* 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);
>>>    }
>>
>> rc_keydown() already handles repeat events (see ir_do_keydown and 
>> rc_keydown, at
>> rc-main.c), so, you don't need it.
>>
>>> }
>>> else if (lastkey) {
>>>    rc_keyup(lastkey);
>>>    lastkey = 0;
>>> }
>>
>> Yeah, this makes sense, if bit 1 of rx[8] indicates keyup/keydown or repeat.
>>
>> You need to double check if you are not receiving any packet with this bit 
>> unset,
>> when you press and hold a key, as some devices use a bit to just indicate 
>> that
>> the info there is valid or not (a "done" bit).
> 
> As far as I can understand, a value of "1" indicates that a key is currently 
> pressed, and a value of "0" indicates that no key is pressed.

Ok.
> 
>>
>>>
>>> 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.
>>
>> yeah, you'll need either to create another table or to fix it. The better is 
>> to fix
>> the table and to use .scanmask = 0xff at the old drivers. This way, the same 
>> table
>> will work for both the legacy/incomplete get_scancode function and for the 
>> new one.
> 
> Ok. I did a grep for RC_MAP_TT_1500 and found one place only, so I'm 
> attaching two patches that should fix this, feel free to commit them if they 
> look good to you.

They are good. Applied, thanks!

> 
>>>> 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?
>>
>> This means nothing to me, but the only way to double check is to test the 
>> device
>> with other remote controllers. On several hardware, it is possible to use
>> RC5 remote controllers as well. As there are some empty (zero) fields, maybe
>> this device also supports RC6 protocols (that have more than 16 bits) and
>> NEC extended (24 bits or 32 bits, on a few variants).
> 
> Ok.
> 
>>>> 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?
>>
>> I don't have a Logitech Harmony, so I'm not sure about it. Maybe Jarod may 
>> have some
>> info about it.
> 
> Would you like me to provide a patch with RC_TYPE_UNKNOWN at this point (i e 
> what I showed you earlier + your review comments), and when I or somebody 
> else can provide more complete information, we make an additional patch with 
> better protocol support? Does that make sense to you?
> 

Yeah, this should be OK for me.

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

Reply via email to