Skip to content

Commit

Permalink
Removed SDL_SYS_JoystickNeedsPolling().
Browse files Browse the repository at this point in the history
It was simpler to just have the polling (actually: hotplug detection)
 functions return immediately if it's not an appropriate time to poll.

Note that previously, if any joystick/controller was opened, we would poll
 every time anyhow, skipping this function.
  • Loading branch information
icculus committed Jun 15, 2014
1 parent 9e5504f commit 446d19c
Show file tree
Hide file tree
Showing 15 changed files with 46 additions and 160 deletions.
15 changes: 1 addition & 14 deletions src/events/SDL_events.c
Expand Up @@ -83,19 +83,6 @@ static struct
} SDL_EventQ = { NULL, SDL_TRUE };


static SDL_INLINE SDL_bool
SDL_ShouldPollJoystick()
{
#if !SDL_JOYSTICK_DISABLED
if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] ||
SDL_JoystickEventState(SDL_QUERY)) &&
SDL_PrivateJoystickNeedsPolling()) {
return SDL_TRUE;
}
#endif
return SDL_FALSE;
}

/* Public functions */

void
Expand Down Expand Up @@ -403,7 +390,7 @@ SDL_PumpEvents(void)
}
#if !SDL_JOYSTICK_DISABLED
/* Check for joystick state change */
if (SDL_ShouldPollJoystick()) {
if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) {
SDL_JoystickUpdate();
}
#endif
Expand Down
12 changes: 0 additions & 12 deletions src/joystick/SDL_joystick.c
Expand Up @@ -736,18 +736,6 @@ SDL_JoystickEventState(int state)
#endif /* SDL_EVENTS_DISABLED */
}

/* return 1 if you want to run the joystick update loop this frame, used by hotplug support */
SDL_bool
SDL_PrivateJoystickNeedsPolling()
{
if (SDL_joysticks != NULL) {
return SDL_TRUE;
} else {
return SDL_SYS_JoystickNeedsPolling();
}
}


/* return the guid for this index */
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
{
Expand Down
3 changes: 0 additions & 3 deletions src/joystick/SDL_joystick_c.h
Expand Up @@ -42,9 +42,6 @@ extern int SDL_PrivateJoystickHat(SDL_Joystick * joystick,
extern int SDL_PrivateJoystickButton(SDL_Joystick * joystick,
Uint8 button, Uint8 state);

/* Helper function to let lower sys layer tell the event system if the joystick code needs to think */
extern SDL_bool SDL_PrivateJoystickNeedsPolling();

/* Internal sanity checking functions */
extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick);

Expand Down
3 changes: 0 additions & 3 deletions src/joystick/SDL_sysjoystick.h
Expand Up @@ -68,9 +68,6 @@ extern int SDL_SYS_NumJoysticks();
/* Function to cause any queued joystick insertions to be processed */
extern void SDL_SYS_JoystickDetect();

/* Function to determine if the joystick loop needs to run right now */
extern SDL_bool SDL_SYS_JoystickNeedsPolling();

/* Function to get the device-dependent name of a joystick */
extern const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index);

Expand Down
5 changes: 0 additions & 5 deletions src/joystick/android/SDL_sysjoystick.c
Expand Up @@ -410,11 +410,6 @@ void SDL_SYS_JoystickDetect()
}
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_TRUE;
}

static SDL_joylist_item *
JoystickByDevIndex(int device_index)
{
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/bsd/SDL_sysjoystick.c
Expand Up @@ -213,11 +213,6 @@ void SDL_SYS_JoystickDetect()
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{
Expand Down
9 changes: 0 additions & 9 deletions src/joystick/darwin/SDL_sysjoystick.c
Expand Up @@ -601,15 +601,6 @@ SDL_SYS_JoystickDetect()
}
}

SDL_bool
SDL_SYS_JoystickNeedsPolling()
{
while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
/* no-op. Pending callbacks will fire in CFRunLoopRunInMode(). */
}
return s_bDeviceAdded || s_bDeviceRemoved;
}

/* Function to get the device-dependent name of a joystick */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/dummy/SDL_sysjoystick.c
Expand Up @@ -46,11 +46,6 @@ void SDL_SYS_JoystickDetect()
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/haiku/SDL_haikujoystick.cc
Expand Up @@ -94,11 +94,6 @@ extern "C"
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/iphoneos/SDL_sysjoystick.m
Expand Up @@ -49,11 +49,6 @@ void SDL_SYS_JoystickDetect()
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Expand Down
9 changes: 0 additions & 9 deletions src/joystick/linux/SDL_sysjoystick.c
Expand Up @@ -392,15 +392,6 @@ void SDL_SYS_JoystickDetect()

}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
#if SDL_USE_LIBUDEV
return SDL_TRUE;
#endif

return SDL_FALSE;
}

static SDL_joylist_item *
JoystickByDevIndex(int device_index)
{
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/psp/SDL_sysjoystick.c
Expand Up @@ -141,11 +141,6 @@ void SDL_SYS_JoystickDetect()
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{
Expand Down
112 changes: 45 additions & 67 deletions src/joystick/windows/SDL_dxjoystick.c
Expand Up @@ -797,80 +797,71 @@ EnumXInputDevices(JoyStick_DeviceData **pContext)
void SDL_SYS_JoystickDetect()
{
JoyStick_DeviceData *pCurList = NULL;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
#endif

/* only enum the devices if the joystick thread told us something changed */
if ( s_bDeviceAdded || s_bDeviceRemoved )
{
SDL_LockMutex( s_mutexJoyStickEnum );
if (!s_bDeviceAdded && !s_bDeviceRemoved) {
return; /* thread hasn't signaled, nothing to do right now. */
}

s_bDeviceAdded = SDL_FALSE;
s_bDeviceRemoved = SDL_FALSE;
SDL_LockMutex(s_mutexJoyStickEnum);

pCurList = SYS_Joystick;
SYS_Joystick = NULL;
s_bDeviceAdded = SDL_FALSE;
s_bDeviceRemoved = SDL_FALSE;

/* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
IDirectInput8_EnumDevices(dinput,
DI8DEVCLASS_GAMECTRL,
EnumJoysticksCallback,
&pCurList, DIEDFL_ATTACHEDONLY);
pCurList = SYS_Joystick;
SYS_Joystick = NULL;

SDL_free(SDL_RawDevList); /* in case we used this in DirectInput enumerator. */
SDL_RawDevList = NULL;
SDL_RawDevListCount = 0;
/* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
IDirectInput8_EnumDevices(dinput, DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, &pCurList, DIEDFL_ATTACHEDONLY);

/* Look for XInput devices. Do this last, so they're first in the final list. */
EnumXInputDevices(&pCurList);
SDL_free(SDL_RawDevList); /* in case we used this in DirectInput enumerator. */
SDL_RawDevList = NULL;
SDL_RawDevListCount = 0;

SDL_UnlockMutex( s_mutexJoyStickEnum );
}
/* Look for XInput devices. Do this last, so they're first in the final list. */
EnumXInputDevices(&pCurList);

if ( pCurList )
{
while ( pCurList )
{
JoyStick_DeviceData *pListNext = NULL;
SDL_UnlockMutex(s_mutexJoyStickEnum);

while (pCurList) {
JoyStick_DeviceData *pListNext = NULL;

#if SDL_HAPTIC_DINPUT
if (pCurList->bXInputDevice) {
XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId);
} else {
DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice);
}
if (pCurList->bXInputDevice) {
XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId);
} else {
DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice);
}
#endif

#if !SDL_EVENTS_DISABLED
{
SDL_Event event;
event.type = SDL_JOYDEVICEREMOVED;
SDL_zero(event);
event.type = SDL_JOYDEVICEREMOVED;

if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = pCurList->nInstanceID;
if ((SDL_EventOK == NULL)
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
}
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = pCurList->nInstanceID;
if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
#endif /* !SDL_EVENTS_DISABLED */

pListNext = pCurList->pNext;
SDL_free(pCurList->joystickname);
SDL_free(pCurList);
pCurList = pListNext;
}
#endif /* !SDL_EVENTS_DISABLED */

pListNext = pCurList->pNext;
SDL_free(pCurList->joystickname);
SDL_free(pCurList);
pCurList = pListNext;
}

if ( s_bDeviceAdded )
{
if (s_bDeviceAdded) {
JoyStick_DeviceData *pNewJoystick;
int device_index = 0;
s_bDeviceAdded = SDL_FALSE;
pNewJoystick = SYS_Joystick;
while ( pNewJoystick )
{
if ( pNewJoystick->send_add_event )
{
while (pNewJoystick) {
if (pNewJoystick->send_add_event) {
#if SDL_HAPTIC_DINPUT
if (pNewJoystick->bXInputDevice) {
XInputHaptic_MaybeAddDevice(pNewJoystick->XInputUserId);
Expand All @@ -880,18 +871,15 @@ void SDL_SYS_JoystickDetect()
#endif

#if !SDL_EVENTS_DISABLED
{
SDL_Event event;
SDL_zero(event);
event.type = SDL_JOYDEVICEADDED;

if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = device_index;
if ((SDL_EventOK == NULL)
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
}
}
#endif /* !SDL_EVENTS_DISABLED */
pNewJoystick->send_add_event = 0;
}
Expand All @@ -901,16 +889,6 @@ void SDL_SYS_JoystickDetect()
}
}

/* we need to poll if we have pending hotplug device changes or connected devices */
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
/* we have a new device or one was pulled, we need to think this frame please */
if ( s_bDeviceAdded || s_bDeviceRemoved )
return SDL_TRUE;

return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Expand Down
5 changes: 0 additions & 5 deletions src/joystick/windows/SDL_mmjoystick.c
Expand Up @@ -193,11 +193,6 @@ void SDL_SYS_JoystickDetect()
{
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}

/* Function to get the device-dependent name of a joystick */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Expand Down
8 changes: 0 additions & 8 deletions src/joystick/winrt/SDL_xinputjoystick.c
Expand Up @@ -230,14 +230,6 @@ void SDL_SYS_JoystickDetect()
SDL_UnlockMutex(g_DeviceInfoLock);
}

SDL_bool SDL_SYS_JoystickNeedsPolling()
{
/* Since XInput, or WinRT, provides any events to indicate when a game
controller gets connected, and instead indicates device availability
solely through polling, we'll poll (for new devices).
*/
return SDL_TRUE;
}

/* Internal function to retreive device capabilities.
This function will return an SDL-standard value of 0 on success
Expand Down

0 comments on commit 446d19c

Please sign in to comment.