Skip to content

Commit

Permalink
hidapi: Use GameCube adapter controller port for player index
Browse files Browse the repository at this point in the history
The Nintendo USB GameCube adapter has four controller ports. Return
the port number as 0 to 3 from SDL_JoystickGetPlayerIndex() and
SDL_JoystickGetDevicePlayerIndex().
  • Loading branch information
zturtleman committed Jun 8, 2019
1 parent e7b514d commit 82af427
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 1 deletion.
18 changes: 18 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_gamecube.c
Expand Up @@ -267,6 +267,22 @@ HIDAPI_DriverGameCube_NumJoysticks(SDL_HIDAPI_DriverData *context)
return joysticks;
}

static int
HIDAPI_DriverGameCube_PlayerIndexForIndex(SDL_HIDAPI_DriverData *context, int index)
{
SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)context->context;
Uint8 i;
for (i = 0; i < 4; i += 1) {
if (ctx->joysticks[i] != -1) {
if (index == 0) {
return i;
}
index -= 1;
}
}
return -1; /* Should never get here! */
}

static SDL_JoystickID
HIDAPI_DriverGameCube_InstanceIDForIndex(SDL_HIDAPI_DriverData *context, int index)
{
Expand Down Expand Up @@ -294,6 +310,7 @@ HIDAPI_DriverGameCube_OpenJoystick(SDL_HIDAPI_DriverData *context, SDL_Joystick
joystick->nbuttons = 12;
joystick->naxes = 6;
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
joystick->player_index = i;
return SDL_TRUE;
}
}
Expand Down Expand Up @@ -334,6 +351,7 @@ SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverGameCube =
HIDAPI_DriverGameCube_QuitDriver,
HIDAPI_DriverGameCube_UpdateDriver,
HIDAPI_DriverGameCube_NumJoysticks,
HIDAPI_DriverGameCube_PlayerIndexForIndex,
HIDAPI_DriverGameCube_InstanceIDForIndex,
HIDAPI_DriverGameCube_OpenJoystick,
HIDAPI_DriverGameCube_Rumble
Expand Down
7 changes: 7 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_ps4.c
Expand Up @@ -338,6 +338,12 @@ HIDAPI_DriverPS4_NumJoysticks(SDL_HIDAPI_DriverData *context)
return 1;
}

static int
HIDAPI_DriverPS4_PlayerIndexForIndex(SDL_HIDAPI_DriverData *context, int index)
{
return -1;
}

static SDL_JoystickID
HIDAPI_DriverPS4_InstanceIDForIndex(SDL_HIDAPI_DriverData *context, int index)
{
Expand Down Expand Up @@ -592,6 +598,7 @@ SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverPS4 =
HIDAPI_DriverPS4_QuitDriver,
HIDAPI_DriverPS4_UpdateDriver,
HIDAPI_DriverPS4_NumJoysticks,
HIDAPI_DriverPS4_PlayerIndexForIndex,
HIDAPI_DriverPS4_InstanceIDForIndex,
HIDAPI_DriverPS4_OpenJoystick,
HIDAPI_DriverPS4_Rumble
Expand Down
7 changes: 7 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_switch.c
Expand Up @@ -914,6 +914,12 @@ HIDAPI_DriverSwitch_NumJoysticks(SDL_HIDAPI_DriverData *context)
return 1;
}

static int
HIDAPI_DriverSwitch_PlayerIndexForIndex(SDL_HIDAPI_DriverData *context, int index)
{
return -1;
}

static SDL_JoystickID
HIDAPI_DriverSwitch_InstanceIDForIndex(SDL_HIDAPI_DriverData *context, int index)
{
Expand All @@ -931,6 +937,7 @@ SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverSwitch =
HIDAPI_DriverSwitch_QuitDriver,
HIDAPI_DriverSwitch_UpdateDriver,
HIDAPI_DriverSwitch_NumJoysticks,
HIDAPI_DriverSwitch_PlayerIndexForIndex,
HIDAPI_DriverSwitch_InstanceIDForIndex,
HIDAPI_DriverSwitch_OpenJoystick,
HIDAPI_DriverSwitch_Rumble
Expand Down
7 changes: 7 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_xbox360.c
Expand Up @@ -330,6 +330,12 @@ HIDAPI_DriverXbox360_NumJoysticks(SDL_HIDAPI_DriverData *context)
return 1;
}

static int
HIDAPI_DriverXbox360_PlayerIndexForIndex(SDL_HIDAPI_DriverData *context, int index)
{
return -1;
}

static SDL_JoystickID
HIDAPI_DriverXbox360_InstanceIDForIndex(SDL_HIDAPI_DriverData *context, int index)
{
Expand Down Expand Up @@ -813,6 +819,7 @@ SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXbox360 =
HIDAPI_DriverXbox360_QuitDriver,
HIDAPI_DriverXbox360_UpdateDriver,
HIDAPI_DriverXbox360_NumJoysticks,
HIDAPI_DriverXbox360_PlayerIndexForIndex,
HIDAPI_DriverXbox360_InstanceIDForIndex,
HIDAPI_DriverXbox360_OpenJoystick,
HIDAPI_DriverXbox360_Rumble
Expand Down
7 changes: 7 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_xboxone.c
Expand Up @@ -207,6 +207,12 @@ HIDAPI_DriverXboxOne_NumJoysticks(SDL_HIDAPI_DriverData *context)
return 1;
}

static int
HIDAPI_DriverXboxOne_PlayerIndexForIndex(SDL_HIDAPI_DriverData *context, int index)
{
return -1;
}

static SDL_JoystickID
HIDAPI_DriverXboxOne_InstanceIDForIndex(SDL_HIDAPI_DriverData *context, int index)
{
Expand Down Expand Up @@ -350,6 +356,7 @@ SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXboxOne =
HIDAPI_DriverXboxOne_QuitDriver,
HIDAPI_DriverXboxOne_UpdateDriver,
HIDAPI_DriverXboxOne_NumJoysticks,
HIDAPI_DriverXboxOne_PlayerIndexForIndex,
HIDAPI_DriverXboxOne_InstanceIDForIndex,
HIDAPI_DriverXboxOne_OpenJoystick,
HIDAPI_DriverXboxOne_Rumble
Expand Down
14 changes: 13 additions & 1 deletion src/joystick/hidapi/SDL_hidapijoystick.c
Expand Up @@ -948,7 +948,19 @@ HIDAPI_JoystickGetDeviceName(int device_index)
static int
HIDAPI_JoystickGetDevicePlayerIndex(int device_index)
{
return -1;
SDL_HIDAPI_Device *device = SDL_HIDAPI_devices;
int joysticks;
while (device) {
if (device->driver) {
joysticks = device->driver->NumJoysticks(&device->devdata);
if (device_index < joysticks) {
break;
}
device_index -= joysticks;
}
device = device->next;
}
return device->driver->PlayerIndexForIndex(&device->devdata, device_index);
}

static SDL_JoystickGUID
Expand Down
2 changes: 2 additions & 0 deletions src/joystick/hidapi/SDL_hidapijoystick_c.h
Expand Up @@ -65,6 +65,8 @@ typedef struct _SDL_HIDAPI_DeviceDriver
SDL_bool (*UpdateDriver)(SDL_HIDAPI_DriverData *context,
int *num_joysticks);
int (*NumJoysticks)(SDL_HIDAPI_DriverData *context);
int (*PlayerIndexForIndex)(SDL_HIDAPI_DriverData *context,
int index);
SDL_JoystickID (*InstanceIDForIndex)(SDL_HIDAPI_DriverData *context,
int index);
SDL_bool (*OpenJoystick)(SDL_HIDAPI_DriverData *context,
Expand Down

0 comments on commit 82af427

Please sign in to comment.