int SDL_SYS_JoystickInit(void) { SDL_SYS_JoystickDetect(); if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE)) { /* Default behavior, accelerometer as joystick */ Android_AddJoystick(ANDROID_ACCELEROMETER_DEVICE_ID, ANDROID_ACCELEROMETER_NAME, ANDROID_ACCELEROMETER_NAME, SDL_TRUE, 0, 3, 0, 0); } return (numjoysticks); }
void SDL_JoystickUpdate(void) { SDL_Joystick *joystick; joystick = SDL_joysticks; while (joystick) { SDL_Joystick *joysticknext; /* save off the next pointer, the Update call may cause a joystick removed event * and cause our joystick pointer to be freed */ joysticknext = joystick->next; SDL_updating_joystick = joystick; SDL_SYS_JoystickUpdate(joystick); if (joystick->force_recentering) { int i; /* Tell the app that everything is centered/unpressed... */ for (i = 0; i < joystick->naxes; i++) { SDL_PrivateJoystickAxis(joystick, i, joystick->axes_zero[i]); } for (i = 0; i < joystick->nbuttons; i++) { SDL_PrivateJoystickButton(joystick, i, 0); } for (i = 0; i < joystick->nhats; i++) { SDL_PrivateJoystickHat(joystick, i, SDL_HAT_CENTERED); } joystick->force_recentering = SDL_FALSE; } SDL_updating_joystick = NULL; /* If the joystick was closed while updating, free it here */ if (joystick->ref_count <= 0) { SDL_JoystickClose(joystick); } joystick = joysticknext; } /* this needs to happen AFTER walking the joystick list above, so that any dangling hardware data from removed devices can be free'd */ SDL_SYS_JoystickDetect(); }
int SDL_SYS_JoystickInit(void) { const char *hint; SDL_SYS_JoystickDetect(); hint = SDL_GetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK); if (!hint || SDL_atoi(hint)) { /* Default behavior, accelerometer as joystick */ Android_AddJoystick(ANDROID_ACCELEROMETER_DEVICE_ID, ANDROID_ACCELEROMETER_NAME, SDL_TRUE, 0, 3, 0, 0); } return (numjoysticks); }
static SDL_joylist_item * JoystickByDeviceId(int device_id) { SDL_joylist_item *item = SDL_joylist; while (item != NULL) { if (item->device_id == device_id) { return item; } item = item->next; } /* Joystick not found, try adding it */ SDL_SYS_JoystickDetect(); while (item != NULL) { if (item->device_id == device_id) { return item; } item = item->next; } return NULL; }
void SDL_JoystickUpdate(void) { SDL_Joystick *joystick; SDL_LockJoystickList(); if (SDL_updating_joystick) { /* The joysticks are already being updated */ SDL_UnlockJoystickList(); return; } SDL_updating_joystick = SDL_TRUE; /* Make sure the list is unlocked while dispatching events to prevent application deadlocks */ SDL_UnlockJoystickList(); for (joystick = SDL_joysticks; joystick; joystick = joystick->next) { SDL_SYS_JoystickUpdate(joystick); if (joystick->force_recentering) { int i; /* Tell the app that everything is centered/unpressed... */ for (i = 0; i < joystick->naxes; i++) { if (joystick->axes[i].has_initial_value) { SDL_PrivateJoystickAxis(joystick, i, joystick->axes[i].zero); } } for (i = 0; i < joystick->nbuttons; i++) { SDL_PrivateJoystickButton(joystick, i, 0); } for (i = 0; i < joystick->nhats; i++) { SDL_PrivateJoystickHat(joystick, i, SDL_HAT_CENTERED); } joystick->force_recentering = SDL_FALSE; } } SDL_LockJoystickList(); SDL_updating_joystick = SDL_FALSE; /* If any joysticks were closed while updating, free them here */ for (joystick = SDL_joysticks; joystick; joystick = joystick->next) { if (joystick->ref_count <= 0) { SDL_JoystickClose(joystick); } } /* this needs to happen AFTER walking the joystick list above, so that any dangling hardware data from removed devices can be free'd */ SDL_SYS_JoystickDetect(); SDL_UnlockJoystickList(); }