Re: New "ABS_WHEEL2" axis?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 30, 2011 at 11:11 PM, Dmitry Torokhov
<dmitry.torokhov@xxxxxxxxx> wrote:
> On Wed, Nov 30, 2011 at 03:52:55PM -0800, Jason Gerecke wrote:
>> On Wed, Nov 30, 2011 at 3:19 PM, Dmitry Torokhov
>> <dmitry.torokhov@xxxxxxxxx> wrote:
>> > On Wed, Nov 30, 2011 at 02:42:09PM -0800, Ping Cheng wrote:
>> >> > On Thu, Oct 06, 2011 at 01:31:09PM -0700, Jason Gerecke wrote:
>> >> >> On Wed, Oct 5, 2011 at 8:34 PM, Dmitry Torokhov
>> >> >> <dmitry.torokhov@xxxxxxxxx> wrote:
>> >> >> > On Wednesday, October 05, 2011 12:44:40 PM Jason Gerecke wrote:
>> >> >> >> I'm working on adding support for the recently-announced Cintiq 24HD,
>> >> >> >> and am hashing out most of the details on the linuxwacom mailing list.
>> >> >> >> In the discussions there, it was suggested that we add a new e.g.
>> >> >> >> "ABS_WHEEL2" axis to the input.h header to represent the second touch
>> >> >> >> ring available on the 24HD. I think it's a good idea, but wanted to
>> >> >> >> get some opinions from over here before making a patch. The other
>> >> >> >> option we have available is to use an axis not already in use by the
>> >> >> >> wacom driver (such as ABS_RUDDER), but none have a matching semantic
>> >> >> >> meaning.
>> >> >
>> >> > Looking at this once more ABS_WHEEL does not semantically match to what
>> >> > Wacom driver users it for either. ABS_WHEEL is not "an abstract
>> >> > circular-shaped sensor on a device" for rather a "steering wheel"-like
>> >> > control on a game controller. So Wacom needs to move away from using this
>> >> > event.
>> >>
>> >> We can move away from using the WHEEL. But, we do still need to use
>> >> something to report the values. We need a constructive suggestion to
>> >> "move away" ;).
>> >>
>> >> >> The rings are controls built into the "pad" -- the hardware you bring
>> >> >> the stylus in proximity to. Along with the touch rings, there are also
>> >> >> buttons and touch strips. Now, some devices have controls on only the
>> >> >> left-hand side of the pad, while others have the controls on both
>> >> >> sides of the pad. While one could argue that this makes each "side" a
>> >> >> complete context that can be broken apart into separate devices, that
>> >> >> doesn't really solve anything. What's stopping us from grouping
>> >> >> several rings together?
>> >> >
>> >> > Well, there are several topics here...
>> >> >
>> >> > What you apparently have is a group of unclassified, as far as Linux
>> >> > input subsystem concerned, sensors. When I say unclassified I mean that
>> >> > there is no appropriate event code we can assign to the control to allow
>> >> > a generic consumer determine the purpose of that sensor. You need help
>> >> > of a specialized driver to decide what to do with the data or, in case
>> >> > of generic driver, user has to explicitly map it to some action, but
>> >> > there is no way for automatic discovery/configuration which is the goal
>> >> > of input core. The only and closest event that we have that is suitable
>> >> > here is ABS_MISC.
>> >> >
>> >> > Here however is a problem: there is only one ABS_MISC and we often have
>> >> > several such sensors on a device. I do not want to have ABS_MISCx as
>> >> > again, it does not solve anything, manufactures always come with bigger
>> >> > and bigger devices (there some music controllers with dozens of
>> >> > sliders). Encoding data into ABS_MISC (let's say highest byte denotes
>> >> > sensor number) is awkward as well. So that is why I propose splitting
>> >> > them into separate input devices and have driver discover and handle
>> >> > them as it sees fit.
>> >>
>> >> The rings are on the tablet. Events from them are combined with the
>> >> events from the other tools moving on the tablet. Splitting the
>> >> wheels/expresskeys from the tablet would only complicate the
>> >> situation. We would have to link the wheels back to the tablet in the
>> >> user land, an unnecessary step that we should/could avoid in the
>> >> kernel.
>> >
>> > The fact that they are in the same physical package does not mean that
>> > they are necessarily mapped to a single input device. For example my USB
>> > keyboard consists of 3 logical devices.
>> >
>> > I understand that having data from them in the same event stream would
>> > be nice and if you have an idea how to achieve that in a generic way
>> > without resorting to ABS_MISC55 - that would be great. Maybe we
>> > need something similar to multitouch protocol solution, but for
>> > unclassified data.
>> >
>> > OTOH separate input devices complicate userland in cases when driver
>> > wants to handle them together but is really flexible.
>> >
>> > --
>> > Dmitry
>>
>> Confound my slow reply speeds... I was just about to hit the "send"
>> button too! :D
>>
>> I'm not sure there is a good solution given the current expectations
>> of and by the input subsystem. Abusing/ignoring semantic meaning of
>> axes can confuse the userland. Arbitrarily adding new axes is not
>> sustainable. Splitting the hardware into per-sensor devices requires
>> additional needlesly-difficult re-unification code.
>>
>> Augmenting the input subsystem with something similar to the MT
>> protocol would be one possible way of "properly" tackling the issue.
>> You'd have to figure out a way to deal with arbitrary tool types
>> though. For instance, say the touch strip on the 24HD were exposed to
>> the user as a strip and not faux-buttons. Two of the three
>> unclassified sensors producing the same "kind" of data, while the
>> third sensor produces a different "kind" of data.
>
> Right, this requires knowledge in userspace driver as to how use the
> data from different sensors. But that is not different from
> ABS_WHEEL/ABS_WHEEL2 - _your_ driver knows what they mean but a generic
> either has no idea or even a wrong idea.
>
>>
>> Regardless, how should we handle the issue that presents itself in the
>> here-and-now? Even if refactoring things to split the tablet into more
>> devices is the route we ultimately decide on, that's going to take
>> some time to implement. It'd be nice if 24HD support weren't stalled
>> waiting for yet-to-be-written code to appear, and preferable if the
>> hardware worked in its entirety (meaning substituting ABS_WHEEL2 with
>> e.g. ABS_THROTTLE for the time being).
>>
>
> Probably multiplexing through ABS_MISC would be not too painful as an
> interim solution.
>

Here are a few thoughts I have on it.

First, I think that REL_WHEEL is closest meaning the ring has to user
land expectations.  Its advertised in user manual to do things you'd
often do with scroll wheel on a mouse.  The default mode is sending
generic zooming/scrolling events.  The extended usages of the wheel
seem only to be directing the zooming/scrolling to application
specific features.  For example, push button 1 and ring zooms whole
canvas.  Press button 2 and it zooms size of brush.  I think mapping
movement to keystroke feature is outside scope of this thread so I'll
ignore that part.

I do not think user land apps cares much about exact position user is
touching like they would with a steering wheel so I don't think
ABS_WHEEL is needed.   There is the tapping specific parts of ring
feature to do minor increments but I think driver can hide that by
sending REL_WHEEL with +5/-5 for scrolls and +1/-1 for taps.

Above part was for the semantic part of thread.  It still doesn't
address needing a REL_WHEEL1/2/3/4 for this device and maybe to be
used by one of those crazy gaming mice that has way to many buttons
and wheels.

I don't have much to provide here other than I'd also suggest Dmitry's
idea of multiplex both rings onto 1 REL_WHEEL.  I'm not even sure I'd
do multiplexing so much as reporting both as if they were a single
ring.  Sure, I'd like to use one ring for zooming canvas and one for
zooming paint brush some day but I'd prefer a working driver today
that has both rings zooming the same thing.

If we move to MT approach for reporting wheels, I suspect we will also
have the "pointer emulation" concept where REL_WHEEL has some hybrid
meaning to work nicely with older applications and
REL_MULTI_WHEEL/REL_MULTI_WHEEL_SLOT for multiplexing wheel data.  So
an intermediate step of merging doesn't sound like a dead end.

Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux