From 2b41f497db5f5f98ee4f355c9cadfea3b169f969 Mon Sep 17 00:00:00 2001 From: Francisco Javier Trujillo Mata Date: Thu, 18 Nov 2021 01:09:45 +0100 Subject: [PATCH] Improve Joystick removing semaphores --- src/joystick/psp/SDL_sysjoystick.c | 86 +++++++----------------------- 1 file changed, 19 insertions(+), 67 deletions(-) diff --git a/src/joystick/psp/SDL_sysjoystick.c b/src/joystick/psp/SDL_sysjoystick.c index a5422592b..df3be5681 100644 --- a/src/joystick/psp/SDL_sysjoystick.c +++ b/src/joystick/psp/SDL_sysjoystick.c @@ -24,7 +24,6 @@ /* This is the PSP implementation of the SDL joystick API */ #include -#include #include /* For the definition of NULL */ #include @@ -34,15 +33,9 @@ #include "SDL_events.h" #include "SDL_error.h" -#include "SDL_mutex.h" -#include "SDL_timer.h" -#include "../../thread/SDL_systhread.h" /* Current pad state */ static SceCtrlData pad = { .Lx = 0, .Ly = 0, .Buttons = 0 }; -static SDL_sem *pad_sem = NULL; -static SDL_Thread *thread = NULL; -static int running = 0; static const enum PspCtrlButtons button_map[] = { PSP_CTRL_TRIANGLE, PSP_CTRL_CIRCLE, PSP_CTRL_CROSS, PSP_CTRL_SQUARE, PSP_CTRL_LTRIGGER, PSP_CTRL_RTRIGGER, @@ -82,23 +75,6 @@ static int calc_bezier_y(float t) return dest.y; } -/* - * Collect pad data about once per frame - */ -int JoystickUpdate(void *data) -{ - while (running) { - SDL_SemWait(pad_sem); - sceCtrlPeekBufferPositive(&pad, 1); - SDL_SemPost(pad_sem); - /* Delay 1/60th of a second */ - sceKernelDelayThread(1000000 / 60); - } - return 0; -} - - - /* Function to scan the system for joysticks. * Joystick 0 should be the system default joystick. * It should return number of joysticks, or -1 on an unrecoverable fatal error. @@ -111,15 +87,6 @@ static int PSP_JoystickInit(void) sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); - /* Start thread to read data */ - if((pad_sem = SDL_CreateSemaphore(1)) == NULL) { - return SDL_SetError("Can't create input semaphore"); - } - running = 1; - if((thread = SDL_CreateThreadInternal(JoystickUpdate, "JoystickThread", 4096, NULL)) == NULL) { - return SDL_SetError("Can't create input thread"); - } - /* Create an accurate map from analog inputs (0 to 255) to SDL joystick positions (-32768 to 32767) */ for (i = 0; i < 128; i++) @@ -132,7 +99,7 @@ static int PSP_JoystickInit(void) return 1; } -static int PSP_NumJoysticks(void) +static int PSP_JoystickGetCount(void) { return 1; } @@ -141,21 +108,17 @@ static void PSP_JoystickDetect(void) { } -#if 0 -static const char *PSP_JoystickName(int idx) -{ - if (idx == 0) return "PSP controller"; - SDL_SetError("No joystick available with that index"); - return NULL; -} -#endif - +/* Function to get the device-dependent name of a joystick */ static const char *PSP_JoystickGetDeviceName(int device_index) { - return "PSP builtin joypad"; + if (device_index == 0) + return "PSP builtin joypad"; + + SDL_SetError("No joystick available with that index"); + return(NULL); } -static const char *PSP_JoystickGetDevicePath(int device_index) +static const char *PSP_JoystickGetDevicePath(int index) { return NULL; } @@ -165,8 +128,7 @@ static int PSP_JoystickGetDevicePlayerIndex(int device_index) return -1; } -static void -PSP_JoystickSetDevicePlayerIndex(int device_index, int player_index) +static void PSP_JoystickSetDevicePlayerIndex(int device_index, int player_index) { } @@ -193,21 +155,20 @@ static SDL_JoystickID PSP_JoystickGetDeviceInstanceID(int device_index) */ static int PSP_JoystickOpen(SDL_Joystick *joystick, int device_index) { - joystick->nbuttons = 14; + joystick->nbuttons = SDL_arraysize(button_map); joystick->naxes = 2; joystick->nhats = 0; + joystick->instance_id = device_index; return 0; } -static int -PSP_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) +static int PSP_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) { return SDL_Unsupported(); } -static int -PSP_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble) +static int PSP_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble) { return SDL_Unsupported(); } @@ -217,14 +178,12 @@ static Uint32 PSP_JoystickGetCapabilities(SDL_Joystick *joystick) return 0; } -static int -PSP_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue) +static int PSP_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue) { return SDL_Unsupported(); } -static int -PSP_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size) +static int PSP_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size) { return SDL_Unsupported(); } @@ -248,11 +207,10 @@ static void PSP_JoystickUpdate(SDL_Joystick *joystick) static enum PspCtrlButtons old_buttons = 0; static unsigned char old_x = 0, old_y = 0; - SDL_SemWait(pad_sem); + sceCtrlReadBufferPositive(&pad, 1); buttons = pad.Buttons; x = pad.Lx; y = pad.Ly; - SDL_SemPost(pad_sem); /* Axes */ if(old_x != x) { @@ -268,8 +226,8 @@ static void PSP_JoystickUpdate(SDL_Joystick *joystick) changed = old_buttons ^ buttons; old_buttons = buttons; if(changed) { - for(i=0; i