Re: [PATCH 2/2] hid-sony: DS3: Report analog buttons for Sixaxis

From: Roderick Colenbrander
Date: Wed Sep 06 2023 - 11:45:30 EST


On Tue, Aug 29, 2023 at 12:12 PM Max Staudt <max@xxxxxxxxx> wrote:
>
> On 8/27/23 00:21, Max Staudt wrote:
> > This change exposes these buttons as axes in a way that is as backwards
> > compatible and as close to the Linux gamepad spec as possible.
> >
> > [...]
> >
> > - The D-Pad as ABS_HAT0X/ABS_HAT0Y, -255 to 255
>
>
> One further idea:
>
> The DualShock 3 reports all 4 D-pad buttons separately, and hid-sony currently reports them as discrete digital buttons to userspace.
>
>
> Would it be better to do the same with the analog buttons, i.e. to report the 4 measurements as discrete axes, rather than the current patch's approach of merging them into two logical axes?
>
> Of course, this would require 4 more axes, this would not fit into any existing scheme, and since we've run out of ABS_MISC+n at this point, this could be a further reason for officially reserving a range of axes for analog buttons. Something like:
>
>
> #define ABS_BTN_SOUTH 0x40
> #define ABS_BTN_A ABS_BTN_SOUTH
> #define ABS_BTN_EAST 0x41
> #define ABS_BTN_B ABS_BTN_EAST
> #define ABS_BTN_C 0x42
> #define ABS_BTN_NORTH 0x43
> #define ABS_BTN_X ABS_BTN_NORTH
> #define ABS_BTN_WEST 0x44
> #define ABS_BTN_Y ABS_BTN_WEST
> #define ABS_BTN_Z 0x45
>
> #define ABS_BTN_DPAD_UP 0x46
> #define ABS_BTN_DPAD_DOWN 0x47
> #define ABS_BTN_DPAD_LEFT 0x48
> #define ABS_BTN_DPAD_RIGHT 0x49
>
> #define ABS_MAX 0x4f
> #define ABS_CNT (ABS_MAX+1)
>
>
>
> Max
>

Hi Max,

Sorry for the late response, but I have been on vacation and just got back.

Analog buttons are as you know, fairly common on game controllers. For
this reason, I was working on this about 5 years ago as my company had
a need for it, but the need died out. I did send a proposal at the
time to linux-input, which I encourage you to look at ('Proposal to
support pressure sensitive "analog" buttons in evdev' on linux-input).
There are some good comments in there.

The summary of the discussion and also my thoughts is not to simply
reuse existing axes, but think of things in a bigger picture. In
particular I brought the example of analog keyboards into the
discussion at the time (Wooting made one) in which ALL buttons are
analog. The landscape has probably changed and I haven't caught up.
Quickly looking it looks like Razor now has one too and there are
probably more.

The key question is what are the similarities between these analog
devices. It feels it are not 'just' axes. There might be some level of
configurability (though not all of that) for example some keyboards
seem to use it as a way to trigger digital key presses at configurable
thresholds among others. Please look at the old discussion as there
were some good suggestions there if I recall from Peter Hutterer among
others.

Thanks,
Roderick