@@ -20,6 +20,7 @@ typedef struct
2020 int hapticEffect;
2121
2222 u_char* padData;
23+ bool switchingAnalog;
2324} PsyXController;
2425
2526PsyXController g_controllers[MAX_CONTROLLERS];
@@ -98,6 +99,7 @@ void PsyX_Pad_OpenController(Sint32 deviceId, int slot)
9899 }
99100
100101 controller->gc = SDL_GameControllerOpen (deviceId);
102+ controller->switchingAnalog = false ;
101103
102104 if (controller->gc )
103105 {
@@ -234,32 +236,30 @@ void PsyX_Pad_InternalPadUpdates()
234236
235237 // In order to switch From/To analog user has to use left gamepad stick
236238
237- // Select + Start pressed + left stick Down
238- if (pad-> analog [ 3 ] == 255 )
239+ // Select + Start pressed
240+ if ((test & 0x1 ) == 0 && (test & 0x8 ) == 0 )
239241 {
240- if ((test & 0x1 ) == 0 && (test & 0x8 ) == 0 )
242+ *(u_short*)pad->buttons = 0xffff ;
243+
244+ if (!controller->switchingAnalog )
241245 {
242246 // switch to analog state
243247 if (pad->id == 0x41 )
244248 {
245249 eprintf (" Port %d ANALOG: ON\n " , i + 1 );
246250 pad->id = 0x73 ;
247251 }
248- }
249- }
250-
251- // Select + Start pressed + left stick Up
252- if (pad->analog [3 ] == 0 )
253- {
254- if ((test & 0x1 ) == 0 && (test & 0x8 ) == 0 )
255- {
256- // switch to analog state
257- if (pad->id == 0x73 )
252+ else
258253 {
259254 eprintf (" Port %d ANALOG: OFF\n " , i + 1 );
260255 pad->id = 0x41 ;
261256 }
262257 }
258+ controller->switchingAnalog = true ;
259+ }
260+ else
261+ {
262+ controller->switchingAnalog = false ;
263263 }
264264
265265 // Update keyboard for PAD
0 commit comments