2010-01-09 15:01:40

by Roel Kluin

[permalink] [raw]
Subject: HID: is scancode correctly reported after key status change in hidinput_hid_event()?

vi drivers/hid/hid-input.c +634 and not in hidinput_hid_event()

/* report the usage code as scancode if the key status has changed */
if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value)
input_event(input, EV_MSC, MSC_SCAN, usage->hid);

Only if value is 1 or 0 the input_event() can occur, but value doesn't
seem to be intended to be used as a boolean. are we really doing the
correct test here?

Roel


2010-01-09 15:15:30

by Jiri Kosina

[permalink] [raw]
Subject: Re: HID: is scancode correctly reported after key status change in hidinput_hid_event()?

On Sat, 9 Jan 2010, Roel Kluin wrote:

> vi drivers/hid/hid-input.c +634 and not in hidinput_hid_event()
>
> /* report the usage code as scancode if the key status has changed */
> if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value)
> input_event(input, EV_MSC, MSC_SCAN, usage->hid);
>
> Only if value is 1 or 0 the input_event() can occur, but value doesn't
> seem to be intended to be used as a boolean. are we really doing the
> correct test here?

Hi Roel,

well, value 2 means 'repeated' key, and there is no other possibility for
EV_KEY value than 0,1,2.

For EV_KEY events generated by HID devices, the autorepeat is done by
input core (as the device sends the report only when status is changed),
so there is no easy way how to inject EV_MSC into the 'autorepeat reports'
anyway.

Are you hitting some bug because of this, or have you found this out
solely by code reading?

Thanks,

--
Jiri Kosina
SUSE Labs, Novell Inc.

2010-01-09 18:51:44

by Roel Kluin

[permalink] [raw]
Subject: Re: HID: is scancode correctly reported after key status change in hidinput_hid_event()?

On Sat, Jan 9, 2010 at 4:15 PM, Jiri Kosina <[email protected]> wrote:
> On Sat, 9 Jan 2010, Roel Kluin wrote:
>
>> vi drivers/hid/hid-input.c +634 and not in hidinput_hid_event()
>>
>>       /* report the usage code as scancode if the key status has changed */
>>       if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value)
>>               input_event(input, EV_MSC, MSC_SCAN, usage->hid);
>>
>> Only if value is 1 or 0 the input_event() can occur, but value doesn't
>> seem to be intended to be used as a boolean. are we really doing the
>> correct test here?
>
> Hi Roel,
>
> well, value 2 means 'repeated' key, and there is no other possibility for
> EV_KEY value than 0,1,2.
>
> For EV_KEY events generated by HID devices, the autorepeat is done by
> input core (as the device sends the report only when status is changed),
> so there is no easy way how to inject EV_MSC into the 'autorepeat reports'
> anyway.
>
> Are you hitting some bug because of this, or have you found this out
> solely by code reading?

only code reading.

Thanks