Skip to content

Commit

Permalink
Enable paddles on the Xbox Elite controller when connected over USB
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Jan 20, 2023
1 parent 5d5d39b commit c4db072
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/joystick/hidapi/SDL_hidapi_xboxone.c
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,13 @@ static void HIDAPI_DriverXboxOne_HandleStatePacket(SDL_Joystick *joystick, SDL_D
Sint16 axis;
Uint64 timestamp = SDL_GetTicksNS();

/* Enable paddles on the Xbox Elite controller when connected over USB */
if (ctx->has_paddles && !ctx->has_unmapped_state && size == 50) {
Uint8 packet[] = { 0x4d, 0x00, 0x00, 0x02, 0x07, 0x00 };

SDL_HIDAPI_SendRumble(ctx->device, packet, sizeof(packet));
}

if (ctx->last_state[4] != data[4]) {
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_START, (data[4] & 0x04) ? SDL_PRESSED : SDL_RELEASED);
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_BACK, (data[4] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
Expand Down Expand Up @@ -808,6 +815,9 @@ static void HIDAPI_DriverXboxOne_HandleStatePacket(SDL_Joystick *joystick, SDL_D
SDL_SendJoystickAxis(timestamp, joystick, SDL_GAMEPAD_AXIS_RIGHTY, ~axis);

SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));

/* We don't have the unmapped state for this packet */
ctx->has_unmapped_state = SDL_FALSE;
}

static void HIDAPI_DriverXboxOne_HandleStatusPacket(SDL_Joystick *joystick, SDL_DriverXboxOne_Context *ctx, Uint8 *data, int size)
Expand Down

0 comments on commit c4db072

Please sign in to comment.