Re: Linux USB HID should ignore values outside Logical Minimum/Maximum range

Denilson Figueiredo de Sá
2011-11-02T23:39:59Z

On Mon, 31 Oct 2011 13:24:09 -0200, Jiri Kosina <jkosina@suse.cz> wrote:

> I personally find the wording of the spec here a bit unfortunate (the
> 'declaring bit field in a report that is capable of containing a range of
> values largen than those actually generated by the control' seems to be a
> bit too foggy and vague).

I don't think it is vague.

"declaring bit field in a report" -> Input()
"that is capable of containing a range of values" -> Report_size()
"larger than those actually generated by the control" -> The entire range
repreented using Report_size bits is larger than the Logical
minimum/maximum,

For me, that paragraph is not foggy. Maybe other pieces of the spec are,
but that one seemed clear for me.

>> > + if (value < field->logical_minimum ||
>> > + value > field->logical_maximum) {
>
> After thinking about it a little bit more, I think I agree.
[...]
> So please let me know the result of your testing.

Seems to work on my device, thanks!
I haven't done more than a couple of minutes of testing, though. But it
seems to work.

(another test below)

I've also tested the behavior when one axis is valid, while the other one
as an invalid (and thus discarded) value.

This was based on a question from Chris Friesen:
https://lkml.org/lkml/2011/10/24/290

Running "evtest /dev/input/event9" only shows the valid axis. That's good,
it seems invalid values don't generate events.

But Xorg moves the pointer in both axes at once, instead of just one of
them.
IMHO, that's not perfect, but it seems good enough, specially considering
this is a somewhat unlikely edge-case (remember I'm talking about one axis
valid and another discarded). It might also be a bug in Xorg.

(if anything in this message doesn't make much sense, that's probably
because I need some sleep - but I wanted to give you feedback as soon as I
could)

--
Denilson Figueiredo de Sá
Rio de Janeiro - Brasil