ping - anyone interested in testing/committing this? would help some getting 
their PS4 dual-shock controllers properly mapped... 
--------------------------------------------
On Mon, 2/12/18, Thomas Frohwein <frohw...@ymail.com> wrote:

 Subject: Re: UPDATE devel/sdl2 - add ability to change gamecontroller mapping 
with environment variable
 To: ports@openbsd.org
 Cc: adam.w...@tintagel.pl
 Date: Monday, February 12, 2018, 8:20 AM
 
 ping - any takers who would import this?
 It's a brief and easy update and makes
 SDL2 gamepad use much more enjoyable.
 
 On Sun, Jan 21, 2018 at 04:13:29PM -0800,
 Thomas Frohwein wrote:
 > Hi,
 > 
 > The way that
 SDL2's gamecontroller API was enabled with the 2.0.7
 upgrade
 > hardcoded one controller
 mapping at compile time (which was an upgrade from 
 > not being able to use it all in FNA games,
 reportedly also PPSSPP before that).
 >
 
 > SDL2 *should* however be able to map
 the controller layout at runtime based on
 > 1) the SDL_GAMECONTROLLERCONFIG
 environment variable, and 2) files with
 >
 controller layout specifications, in several applications
 called
 > gamecontrollerdb.txt.
 > 
 > The below diff adds
 the ability to assign controller mapping at runtime via
 the
 > SDL_GAMECONTROLLERCONFIG env
 variable. It is a workaround because it is not
 > clear yet where the upstream SDL2 code
 fails to achieve this. Reading mapping
 >
 from file is not (yet) possible.
 > 
 > The diff only changes a handful of lines
 (see below). I tested it completely
 >
 remapping a Logitech Dual Action gamepad, including D-pad.
 The first 2 parts of
 > the string (guid
 and device name) don't have any functional impact at
 this
 > point when passed via the
 SDL_GAMECONTROLLERCONFIG.
 > 
 > My suggested approach at the moment is
 using the port sdl-jstest to display the
 > mapping string with 'sdl2-jstest
 -l', adjusting the buttons, axes, and dpad
 > from there and pass it into the
 SDL_GAMECONTROLLERCONfIG environment variable.
 > 
 > Empty
 SDL_GAMECONTROLLERCONFIG keeps default mappings. An invalid
 mapping
 > string seems to disable the
 gamepad in the application based on my testing.
 > 
 > Thanks.
 > 
 > Index: Makefile
 >
 ===================================================================
 > RCS file:
 /cvs/ports/devel/sdl2/Makefile,v
 >
 retrieving revision 1.20
 > diff -u -p
 -r1.20 Makefile
 > --- Makefile    12
 Jan 2018 19:32:54 -0000    1.20
 > +++
 Makefile    21 Jan 2018 23:40:12 -0000
 > @@ -9,7 +9,7 @@ DISTNAME=   
 SDL2-${V}
 >  PKGNAME=    sdl2-${V}
 >  CATEGORIES=    devel
 >  MASTER_SITES=    https://www.libsdl.org/release/
 > -REVISION=    0
 >
 +REVISION=    1
 >  
 >  SHARED_LIBS=    SDL2       
 0.4    # 0.7
 >  
 >
 Index: patches/patch-src_joystick_SDL_gamecontroller_c
 >
 ===================================================================
 > RCS file:
 /cvs/ports/devel/sdl2/patches/patch-src_joystick_SDL_gamecontroller_c,v
 > retrieving revision 1.1
 > diff -u -p -r1.1
 patch-src_joystick_SDL_gamecontroller_c
 >
 --- patches/patch-src_joystick_SDL_gamecontroller_c    7
 Jan 2018 22:56:46 -0000    1.1
 > +++
 patches/patch-src_joystick_SDL_gamecontroller_c    21 Jan
 2018 23:40:12 -0000
 > @@ -5,11 +5,12 @@
 also disable checking string "Xbox 360 W
 >  everything will be Xbox360 controller
 (works with generic joysticks)
 >  -
 note: the actual Xbox360 controller has buttons and axes
 messed up on
 >           openbsd
 with these mappings
 > +map to
 SDL_GAMECONTROLLERCONFIG envvar if available
 >  
 >  Index:
 src/joystick/SDL_gamecontroller.c
 >  ---
 src/joystick/SDL_gamecontroller.c.orig
 >  +++ src/joystick/SDL_gamecontroller.c
 > -@@ -884,15 +884,15 @@ static
 ControllerMapping_t *SDL_PrivateGetControllerMa
 > +@@ -884,15 +884,21 @@ static
 ControllerMapping_t *SDL_PrivateGetControllerMa
 >   #else
 >      
 (void) s_pEmscriptenMapping;  /* pacify ARMCC */
 >   #endif
 > @@ -20,10
 +21,17 @@ Index: src/joystick/SDL_gamecontroller.c
 >  +        //if (SDL_strstr(name,
 "Xbox 360 Wireless Receiver")) {
 >               /* The Linux driver
 xpad.c maps the wireless dpad to buttons */
 >               SDL_bool existing;
 > -             mapping =
 SDL_PrivateAddMappingForGUID(guid,
 > +- 
           mapping =
 SDL_PrivateAddMappingForGUID(guid,
 >
 ++        char guid_str[1024];
 >
 ++            SDL_JoystickGetGUIDString(guid,
 guid_str, sizeof(guid_str));
 > ++   
     if (SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG) ==
 NULL) {
 > ++            mapping =
 SDL_PrivateAddMappingForGUID(guid,
 >  
 "none,X360 Wireless
 
Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
 >                            
 &existing, SDL_CONTROLLER_MAPPING_PRIORITY_DEFAULT);
 >  -        }
 >
 ++        } else {
 > ++       
     mapping = SDL_PrivateAddMappingForGUID(guid,
 SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG), &existing,
 SDL_CONTROLLER_MAPPING_PRIORITY_DEFAULT);
 > ++        }
 > 
 +        //}
 >       }
 >   #endif /* __LINUX__ */
 > 
 
 
 -----Inline Attachment Follows-----
 
 

Reply via email to