Re: Improvements to the GameController API

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Improvements to the GameController API

RodrigoCard







Sentmoraap wrote:
Hello,

the gamepad API is far better than a "i have X buttons and Y axes" API and a gamepad-specific API for having good default mappings and consistent mappings from one gamepad to another and from one OS to another.

Some issues has already been addressed:
http://sdl.5483.n7.nabble.com/Extending-GameController-mapping-syntax-td38149.html
https://bugzilla.libsdl.org/show_bug.cgi?id=2181
https://github.com/cxong/SDL_JoystickButtonNames

There is already someone assigned to this bugzilla, but I am willing to contribute if there are improvements which everyone agrees to.
I also would like to have more informations on some design decisions.


The current syntax does not allow mapping half an axis. On some controller the D-Pad is exposed as 2 axes, and the triggers are halves of the same axis.
Sometimes you also need to invert an axis.
There is a proposal to have a0+, a0- for halves and a0i (or !a0, ~a0) for an inverted axis.
This issue is addressed in the first two links.
There is someone assigned, but I have not seen anything new since november 2013.

They also discuss about dead zones. I am not sure if handling deadzones fits with the purpose of SDL2 GameController. The game could handle this.

We have some mappings defined in SDL_gamecontrollerdb.h, and the project SDL2 game controller. Do we need SDL_gamecontrollerdb.h, can't we just use a text file, provided with the game, which will be easily updatable by the user ?

For now the controllers are identified by GUID, which is an OS-dependent number. So we have to provide mappings for every supported platform. The GUID contains the vendor id and the device id. We could provide mappings with the vendor id and the device id instead, assuming the OSes sees the buttons and the axes in the same order. We just have to take into account OS differences (d-pad as axes on Linux etc...). We could provide platform-specific mappings only when it's needed.

Linux has an API which provides mappings in a way similar to SDL2 Gamepad.
https://www.kernel.org/doc/Documentation/input/gamepad.txt
We could use it to provide default mappings when it's not provided by the database. We have to recognize if the mappings complies with the new API. If all buttons and axes used are contiguous, it's likely that the driver did not map events according to the gamepad layout.

About the labels. For now we can show the Xbox equivalent, show generic button names, or both. We could add a field "labels:something", which could be generic, xbox, playstation, etc.... This field will just be ignored by the current version. We could just have a fixed set or another database containing the name and color of buttons.

Thoughts on those ?

Regards.


pretty sure SDL_GameController syntax needs some additions,
flipping the axes is the most important of them.

Steelseries MFI controllers seems to have an inverted Y axis on Mac. Fully Mapping to the GameController API is not possible with these controller because of this.


Also the Button Names seems to be a neat idea, anyone working on this?




Rodrigo Cardoso Rocha
@RodrigoRodrigoR - twitter.com/RodrigoRodrigoR
Chibata Creations - chibatacreations.com

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Improvements to the GameController API

Ed Phillips
On Thu, 1 Dec 2016, RodrigoCard wrote:

>
>                                           Sentmoraap wrote:
>
>
>
>
>
>                                                Hello,
>
> the gamepad API is far better than a "i have X buttons and Y axes" API and a gamepad-specific API for
>  having good default mappings and consistent mappings from one gamepad to another and from one OS to
>                                               another.
>
>                                Some issues has already been addressed:
>          http://sdl.5483.n7.nabble.com/Extending-GameController-mapping-syntax-td38149.html
>                           https://bugzilla.libsdl.org/show_bug.cgi?id=2181
>                           https://github.com/cxong/SDL_JoystickButtonNames
>
>    There is already someone assigned to this bugzilla, but I am willing to contribute if there are
>                                improvements which everyone agrees to.
>                 I also would like to have more informations on some design decisions.
>
>
> The current syntax does not allow mapping half an axis. On some controller the D-Pad is exposed as 2
>                          axes, and the triggers are halves of the same axis.
>                              Sometimes you also need to invert an axis.
>      There is a proposal to have a0+, a0- for halves and a0i (or !a0, ~a0) for an inverted axis.
>                            This issue is addressed in the first two links.
>           There is someone assigned, but I have not seen anything new since november 2013.

The half-axis thing does matter to me.  So far I've handled that with my
mapping GUI, and it figures out things like the MOMO Racing Wheel pedals
in split-mode vs. combined mode.

Also, it's important (for a racing game, at least) to know whether the
steering axis is a racing wheel or equivalent with high-precision (i.e.
you can use 1-to-1 input values for in-game steering) or an analog
thumbstick or such (i.e. you need to use a response curve for input to
compensate for lack of near-centered accuracy).

> They also discuss about dead zones. I am not sure if handling deadzones fits with the purpose of SDL2
>                              GameController. The game could handle this.

This is a similar issue to the "precision" of the input axis.

I think the Steam controller configuration mentality will push all of this
to their config GUI - it will likely allow you to set dead zone, response,
damping, adjust the centering if needed, etc.  They can get away with this
because the Steam API will intercept input and then translate that int
"actions" and "readings" for the game code.  This has the potential to
greatly simplify programming input stuff on the game side, at the expense
of an extra configuration file ("actions") and maybe some default configs
based on button layout for popular devices.

> We have some mappings defined in SDL_gamecontrollerdb.h, and the project SDL2 game controller. Do we
>   need SDL_gamecontrollerdb.h, can't we just use a text file, provided with the game, which will be
>                                    easily updatable by the user ?

Yeah, I was wondering why there are configs in a header.  I'm okay with
that for things like the variants of the Xpads.

>    For now the controllers are identified by GUID, which is an OS-dependent number. So we have to
> provide mappings for every supported platform. The GUID contains the vendor id and the device id. We
>    could provide mappings with the vendor id and the device id instead, assuming the OSes sees the
>  buttons and the axes in the same order. We just have to take into account OS differences (d-pad as
>       axes on Linux etc...). We could provide platform-specific mappings only when it's needed.

The Xpad GUID - that gives us know way to tell what ACTUAL controller is
being used, and therefore, no way to differentiate between controllers
except via the "... #1", "... #2" in the contrived device names returned
by SDL.  That might be a bit backwards, and confusing to the user.  Some
Xpad devices don't have the 4-segment LED so you can't tell by looking
which one is "... #2".

>              Linux has an API which provides mappings in a way similar to SDL2 Gamepad.
>                      https://www.kernel.org/doc/Documentation/input/gamepad.txt
>    We could use it to provide default mappings when it's not provided by the database. We have to
>   recognize if the mappings complies with the new API. If all buttons and axes used are contiguous,
>            it's likely that the driver did not map events according to the gamepad layout.
>
>   About the labels. For now we can show the Xbox equivalent, show generic button names, or both. We
>  could add a field "labels:something", which could be generic, xbox, playstation, etc.... This field
>    will just be ignored by the current version. We could just have a fixed set or another database
>                               containing the name and color of buttons.

I would vote to have an additional set of mappings that map the
button/axis/hat/etc. inputs to the real names for non-Xpad devices, maybe
even with simple glyphs.

The existing "Xpad mappings for every device" are already useful for the
"make this controller work like an Xpad" purpose.

Side note: There was talk in the article I linked in my previous message
about how there is a possibility that the Steam client mapping feature
might be separated out from the Steam client so it would be generally
useful for any client, or potentially for games to use directly without
the client.  That is an interesting prospect... not sure it will ever
happen tho'.  It would be interesting for SDL to provide a similar
action-mapping system with a GUI so the devs could set up a default config
and users would have a standard way to alter configs for their own
devices.

  Ed
_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Improvements to the GameController API

Sam Lantinga-4
In reply to this post by RodrigoCard
I've implemented support for inverted axes and independently binding separated halves of axes:

The syntax for binding half of a game controller axis is:
-leftx
+leftx

The syntax for binding half of a joystick axis is:
+a0
-a0

The syntax for inverting an axis is:
a0~

The controllermap test program has been updated to generate the new syntax controller config if it detects the appropriate binding types, and allows you to map a D-Pad as a thumbstick and vice versa.

Please let me know if there are any problems with this!

On Thu, Dec 1, 2016 at 1:17 PM, RodrigoCard <[hidden email]> wrote:



Sentmoraap wrote:

Hello,

the gamepad API is far better than a "i have X buttons and Y axes" API and a gamepad-specific API for having good default mappings and consistent mappings from one gamepad to another and from one OS to another.

Some issues has already been addressed:
http://sdl.5483.n7.nabble.com/Extending-GameController-mapping-syntax-td38149.html
https://bugzilla.libsdl.org/show_bug.cgi?id=2181
https://github.com/cxong/SDL_JoystickButtonNames

There is already someone assigned to this bugzilla, but I am willing to contribute if there are improvements which everyone agrees to.
I also would like to have more informations on some design decisions.


The current syntax does not allow mapping half an axis. On some controller the D-Pad is exposed as 2 axes, and the triggers are halves of the same axis.
Sometimes you also need to invert an axis.
There is a proposal to have a0+, a0- for halves and a0i (or !a0, ~a0) for an inverted axis.
This issue is addressed in the first two links.
There is someone assigned, but I have not seen anything new since november 2013.

They also discuss about dead zones. I am not sure if handling deadzones fits with the purpose of SDL2 GameController. The game could handle this.

We have some mappings defined in SDL_gamecontrollerdb.h, and the project SDL2 game controller. Do we need SDL_gamecontrollerdb.h, can't we just use a text file, provided with the game, which will be easily updatable by the user ?

For now the controllers are identified by GUID, which is an OS-dependent number. So we have to provide mappings for every supported platform. The GUID contains the vendor id and the device id. We could provide mappings with the vendor id and the device id instead, assuming the OSes sees the buttons and the axes in the same order. We just have to take into account OS differences (d-pad as axes on Linux etc...). We could provide platform-specific mappings only when it's needed.

Linux has an API which provides mappings in a way similar to SDL2 Gamepad.
https://www.kernel.org/doc/Documentation/input/gamepad.txt
We could use it to provide default mappings when it's not provided by the database. We have to recognize if the mappings complies with the new API. If all buttons and axes used are contiguous, it's likely that the driver did not map events according to the gamepad layout.

About the labels. For now we can show the Xbox equivalent, show generic button names, or both. We could add a field "labels:something", which could be generic, xbox, playstation, etc.... This field will just be ignored by the current version. We could just have a fixed set or another database containing the name and color of buttons.

Thoughts on those ?

Regards.




pretty sure SDL_GameController syntax needs some additions,
flipping the axes is the most important of them.

Steelseries MFI controllers seems to have an inverted Y axis on Mac. Fully Mapping to the GameController API is not possible with these controller because of this.


Also the Button Names seems to be a neat idea, anyone working on this?




Rodrigo Cardoso Rocha
@RodrigoRodrigoR - twitter.com/RodrigoRodrigoR
Chibata Creations - chibatacreations.com

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org



_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Improvements to the GameController API

Ed Phillips
Thanks, Sam!

-- Ed

On Dec 27, 2016, at 4:53 AM, Sam Lantinga <[hidden email]> wrote:

I've implemented support for inverted axes and independently binding separated halves of axes:

The syntax for binding half of a game controller axis is:
-leftx
+leftx

The syntax for binding half of a joystick axis is:
+a0
-a0

The syntax for inverting an axis is:
a0~

The controllermap test program has been updated to generate the new syntax controller config if it detects the appropriate binding types, and allows you to map a D-Pad as a thumbstick and vice versa.

Please let me know if there are any problems with this!

On Thu, Dec 1, 2016 at 1:17 PM, RodrigoCard <[hidden email]> wrote:



Sentmoraap wrote:

Hello,

the gamepad API is far better than a "i have X buttons and Y axes" API and a gamepad-specific API for having good default mappings and consistent mappings from one gamepad to another and from one OS to another.

Some issues has already been addressed:
http://sdl.5483.n7.nabble.com/Extending-GameController-mapping-syntax-td38149.html
https://bugzilla.libsdl.org/show_bug.cgi?id=2181
https://github.com/cxong/SDL_JoystickButtonNames

There is already someone assigned to this bugzilla, but I am willing to contribute if there are improvements which everyone agrees to.
I also would like to have more informations on some design decisions.


The current syntax does not allow mapping half an axis. On some controller the D-Pad is exposed as 2 axes, and the triggers are halves of the same axis.
Sometimes you also need to invert an axis.
There is a proposal to have a0+, a0- for halves and a0i (or !a0, ~a0) for an inverted axis.
This issue is addressed in the first two links.
There is someone assigned, but I have not seen anything new since november 2013.

They also discuss about dead zones. I am not sure if handling deadzones fits with the purpose of SDL2 GameController. The game could handle this.

We have some mappings defined in SDL_gamecontrollerdb.h, and the project SDL2 game controller. Do we need SDL_gamecontrollerdb.h, can't we just use a text file, provided with the game, which will be easily updatable by the user ?

For now the controllers are identified by GUID, which is an OS-dependent number. So we have to provide mappings for every supported platform. The GUID contains the vendor id and the device id. We could provide mappings with the vendor id and the device id instead, assuming the OSes sees the buttons and the axes in the same order. We just have to take into account OS differences (d-pad as axes on Linux etc...). We could provide platform-specific mappings only when it's needed.

Linux has an API which provides mappings in a way similar to SDL2 Gamepad.
https://www.kernel.org/doc/Documentation/input/gamepad.txt
We could use it to provide default mappings when it's not provided by the database. We have to recognize if the mappings complies with the new API. If all buttons and axes used are contiguous, it's likely that the driver did not map events according to the gamepad layout.

About the labels. For now we can show the Xbox equivalent, show generic button names, or both. We could add a field "labels:something", which could be generic, xbox, playstation, etc.... This field will just be ignored by the current version. We could just have a fixed set or another database containing the name and color of buttons.

Thoughts on those ?

Regards.




pretty sure SDL_GameController syntax needs some additions,
flipping the axes is the most important of them.

Steelseries MFI controllers seems to have an inverted Y axis on Mac. Fully Mapping to the GameController API is not possible with these controller because of this.


Also the Button Names seems to be a neat idea, anyone working on this?




Rodrigo Cardoso Rocha
@RodrigoRodrigoR - twitter.com/RodrigoRodrigoR
Chibata Creations - chibatacreations.com

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Improvements to the GameController API

Sam Lantinga-4
You're welcome! :)

On Tue, Dec 27, 2016 at 5:52 AM, Ed Phillips <[hidden email]> wrote:
Thanks, Sam!

-- Ed

On Dec 27, 2016, at 4:53 AM, Sam Lantinga <[hidden email]> wrote:

I've implemented support for inverted axes and independently binding separated halves of axes:

The syntax for binding half of a game controller axis is:
-leftx
+leftx

The syntax for binding half of a joystick axis is:
+a0
-a0

The syntax for inverting an axis is:
a0~

The controllermap test program has been updated to generate the new syntax controller config if it detects the appropriate binding types, and allows you to map a D-Pad as a thumbstick and vice versa.

Please let me know if there are any problems with this!

On Thu, Dec 1, 2016 at 1:17 PM, RodrigoCard <[hidden email]> wrote:



Sentmoraap wrote:

Hello,

the gamepad API is far better than a "i have X buttons and Y axes" API and a gamepad-specific API for having good default mappings and consistent mappings from one gamepad to another and from one OS to another.

Some issues has already been addressed:
http://sdl.5483.n7.nabble.com/Extending-GameController-mapping-syntax-td38149.html
https://bugzilla.libsdl.org/show_bug.cgi?id=2181
https://github.com/cxong/SDL_JoystickButtonNames

There is already someone assigned to this bugzilla, but I am willing to contribute if there are improvements which everyone agrees to.
I also would like to have more informations on some design decisions.


The current syntax does not allow mapping half an axis. On some controller the D-Pad is exposed as 2 axes, and the triggers are halves of the same axis.
Sometimes you also need to invert an axis.
There is a proposal to have a0+, a0- for halves and a0i (or !a0, ~a0) for an inverted axis.
This issue is addressed in the first two links.
There is someone assigned, but I have not seen anything new since november 2013.

They also discuss about dead zones. I am not sure if handling deadzones fits with the purpose of SDL2 GameController. The game could handle this.

We have some mappings defined in SDL_gamecontrollerdb.h, and the project SDL2 game controller. Do we need SDL_gamecontrollerdb.h, can't we just use a text file, provided with the game, which will be easily updatable by the user ?

For now the controllers are identified by GUID, which is an OS-dependent number. So we have to provide mappings for every supported platform. The GUID contains the vendor id and the device id. We could provide mappings with the vendor id and the device id instead, assuming the OSes sees the buttons and the axes in the same order. We just have to take into account OS differences (d-pad as axes on Linux etc...). We could provide platform-specific mappings only when it's needed.

Linux has an API which provides mappings in a way similar to SDL2 Gamepad.
https://www.kernel.org/doc/Documentation/input/gamepad.txt
We could use it to provide default mappings when it's not provided by the database. We have to recognize if the mappings complies with the new API. If all buttons and axes used are contiguous, it's likely that the driver did not map events according to the gamepad layout.

About the labels. For now we can show the Xbox equivalent, show generic button names, or both. We could add a field "labels:something", which could be generic, xbox, playstation, etc.... This field will just be ignored by the current version. We could just have a fixed set or another database containing the name and color of buttons.

Thoughts on those ?

Regards.




pretty sure SDL_GameController syntax needs some additions,
flipping the axes is the most important of them.

Steelseries MFI controllers seems to have an inverted Y axis on Mac. Fully Mapping to the GameController API is not possible with these controller because of this.


Also the Button Names seems to be a neat idea, anyone working on this?




Rodrigo Cardoso Rocha
@RodrigoRodrigoR - twitter.com/RodrigoRodrigoR
Chibata Creations - chibatacreations.com

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org



_______________________________________________
SDL mailing list
[hidden email]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Loading...