|
@@ -112,7 +112,7 @@ Emscripten_JoyStickConnected(int eventType, const EmscriptenGamepadEvent *gamepa
|
|
|
event.type = SDL_JOYDEVICEADDED;
|
|
|
|
|
|
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
|
|
|
- event.jdevice.which = item->index;
|
|
|
+ event.jdevice.which = numjoysticks - 1;
|
|
|
if ( (SDL_EventOK == NULL) ||
|
|
|
(*SDL_EventOK) (SDL_EventOKParam, &event) ) {
|
|
|
SDL_PushEvent(&event);
|
|
@@ -235,6 +235,21 @@ SDL_SYS_JoystickInit(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/* Returns item matching given SDL device index. */
|
|
|
+static SDL_joylist_item *
|
|
|
+JoystickByDeviceIndex(int device_index)
|
|
|
+{
|
|
|
+ SDL_joylist_item *item = SDL_joylist;
|
|
|
+
|
|
|
+ while (0 < device_index) {
|
|
|
+ --device_index;
|
|
|
+ item = item->next;
|
|
|
+ }
|
|
|
+
|
|
|
+ return item;
|
|
|
+}
|
|
|
+
|
|
|
+/* Returns item matching given HTML gamepad index. */
|
|
|
static SDL_joylist_item *
|
|
|
JoystickByIndex(int index)
|
|
|
{
|
|
@@ -265,27 +280,15 @@ void SDL_SYS_JoystickDetect()
|
|
|
|
|
|
/* Function to get the device-dependent name of a joystick */
|
|
|
const char *
|
|
|
-SDL_SYS_JoystickNameForDeviceIndex(int index)
|
|
|
+SDL_SYS_JoystickNameForDeviceIndex(int device_index)
|
|
|
{
|
|
|
- SDL_joylist_item *item = JoystickByIndex(index);
|
|
|
- if (item == NULL) {
|
|
|
- SDL_SetError("Joystick with index %d not found", index);
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- return item->name;
|
|
|
+ return JoystickByDeviceIndex(device_index)->name;
|
|
|
}
|
|
|
|
|
|
/* Function to perform the mapping from device index to the instance id for this index */
|
|
|
-SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int index)
|
|
|
+SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
|
|
|
{
|
|
|
- SDL_joylist_item *item = JoystickByIndex(index);
|
|
|
- if (item == NULL) {
|
|
|
- SDL_SetError("Joystick with index %d not found", index);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- return item->device_instance;
|
|
|
+ return JoystickByDeviceIndex(device_index)->device_instance;
|
|
|
}
|
|
|
|
|
|
/* Function to open a joystick for use.
|
|
@@ -294,9 +297,9 @@ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int index)
|
|
|
It returns 0, or -1 if there is an error.
|
|
|
*/
|
|
|
int
|
|
|
-SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int index)
|
|
|
+SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
|
|
{
|
|
|
- SDL_joylist_item *item = JoystickByIndex(index);
|
|
|
+ SDL_joylist_item *item = JoystickByDeviceIndex(device_index);
|
|
|
|
|
|
if (item == NULL ) {
|
|
|
return SDL_SetError("No such device");
|
|
@@ -405,18 +408,19 @@ SDL_SYS_JoystickQuit(void)
|
|
|
emscripten_set_gamepaddisconnected_callback(NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
-SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int index)
|
|
|
+SDL_JoystickGUID
|
|
|
+SDL_SYS_JoystickGetDeviceGUID(int device_index)
|
|
|
{
|
|
|
SDL_JoystickGUID guid;
|
|
|
/* the GUID is just the first 16 chars of the name for now */
|
|
|
- const char *name = SDL_SYS_JoystickNameForDeviceIndex(index);
|
|
|
+ const char *name = SDL_SYS_JoystickNameForDeviceIndex(device_index);
|
|
|
SDL_zero(guid);
|
|
|
SDL_memcpy(&guid, name, SDL_min(sizeof(guid), SDL_strlen(name)));
|
|
|
return guid;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick)
|
|
|
+SDL_JoystickGUID
|
|
|
+SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick)
|
|
|
{
|
|
|
SDL_JoystickGUID guid;
|
|
|
/* the GUID is just the first 16 chars of the name for now */
|