mirror of https://github.com/encounter/SDL.git
joystick: Fix endianness issues in Xbox HIDAPI drivers
This commit is contained in:
parent
2f21648528
commit
3242265ff1
|
@ -263,16 +263,16 @@ HIDAPI_DriverXbox360_HandleStatePacket(SDL_Joystick *joystick, SDL_DriverXbox360
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
axis = ((int)data[5] * 257) - 32768;
|
axis = ((int)data[5] * 257) - 32768;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
||||||
axis = *(Sint16*)(&data[6]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[6]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
||||||
axis = *(Sint16*)(&data[8]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[8]));
|
||||||
if (invert_y_axes) {
|
if (invert_y_axes) {
|
||||||
axis = ~axis;
|
axis = ~axis;
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
||||||
axis = *(Sint16*)(&data[10]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[10]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
||||||
axis = *(Sint16*)(&data[12]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[12]));
|
||||||
if (invert_y_axes) {
|
if (invert_y_axes) {
|
||||||
axis = ~axis;
|
axis = ~axis;
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,16 +229,16 @@ HIDAPI_DriverXbox360W_HandleStatePacket(SDL_Joystick *joystick, SDL_hid_device *
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
axis = ((int)data[5] * 257) - 32768;
|
axis = ((int)data[5] * 257) - 32768;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
||||||
axis = *(Sint16*)(&data[6]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[6]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
||||||
axis = *(Sint16*)(&data[8]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[8]));
|
||||||
if (invert_y_axes) {
|
if (invert_y_axes) {
|
||||||
axis = ~axis;
|
axis = ~axis;
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
||||||
axis = *(Sint16*)(&data[10]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[10]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
||||||
axis = *(Sint16*)(&data[12]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[12]));
|
||||||
if (invert_y_axes) {
|
if (invert_y_axes) {
|
||||||
axis = ~axis;
|
axis = ~axis;
|
||||||
}
|
}
|
||||||
|
|
|
@ -605,7 +605,7 @@ HIDAPI_DriverXboxOne_HandleStatePacket(SDL_Joystick *joystick, SDL_DriverXboxOne
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = ((int)*(Sint16*)(&data[6]) * 64) - 32768;
|
axis = ((int)SDL_SwapLE16(*(Sint16*)(&data[6])) * 64) - 32768;
|
||||||
if (axis == 32704) {
|
if (axis == 32704) {
|
||||||
axis = 32767;
|
axis = 32767;
|
||||||
}
|
}
|
||||||
|
@ -614,7 +614,7 @@ HIDAPI_DriverXboxOne_HandleStatePacket(SDL_Joystick *joystick, SDL_DriverXboxOne
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
|
|
||||||
axis = ((int)*(Sint16*)(&data[8]) * 64) - 32768;
|
axis = ((int)SDL_SwapLE16(*(Sint16*)(&data[8])) * 64) - 32768;
|
||||||
if (axis == -32768 && size == 30 && (data[22] & 0x40) != 0) {
|
if (axis == -32768 && size == 30 && (data[22] & 0x40) != 0) {
|
||||||
axis = 32767;
|
axis = 32767;
|
||||||
}
|
}
|
||||||
|
@ -623,13 +623,13 @@ HIDAPI_DriverXboxOne_HandleStatePacket(SDL_Joystick *joystick, SDL_DriverXboxOne
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
||||||
|
|
||||||
axis = *(Sint16*)(&data[10]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[10]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
||||||
axis = *(Sint16*)(&data[12]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[12]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, ~axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, ~axis);
|
||||||
axis = *(Sint16*)(&data[14]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[14]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
||||||
axis = *(Sint16*)(&data[16]);
|
axis = SDL_SwapLE16(*(Sint16*)(&data[16]));
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, ~axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, ~axis);
|
||||||
|
|
||||||
SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
|
SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
|
||||||
|
@ -826,25 +826,25 @@ HIDAPI_DriverXboxOneBluetooth_HandleStatePacket(SDL_Joystick *joystick, SDL_Driv
|
||||||
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = ((int)*(Sint16*)(&data[9]) * 64) - 32768;
|
axis = ((int)SDL_SwapLE16(*(Sint16*)(&data[9])) * 64) - 32768;
|
||||||
if (axis == 32704) {
|
if (axis == 32704) {
|
||||||
axis = 32767;
|
axis = 32767;
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
|
|
||||||
axis = ((int)*(Sint16*)(&data[11]) * 64) - 32768;
|
axis = ((int)SDL_SwapLE16(*(Sint16*)(&data[11])) * 64) - 32768;
|
||||||
if (axis == 32704) {
|
if (axis == 32704) {
|
||||||
axis = 32767;
|
axis = 32767;
|
||||||
}
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
||||||
|
|
||||||
axis = (int)*(Uint16*)(&data[1]) - 0x8000;
|
axis = (int)SDL_SwapLE16(*(Uint16*)(&data[1])) - 0x8000;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
||||||
axis = (int)*(Uint16*)(&data[3]) - 0x8000;
|
axis = (int)SDL_SwapLE16(*(Uint16*)(&data[3])) - 0x8000;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
|
||||||
axis = (int)*(Uint16*)(&data[5]) - 0x8000;
|
axis = (int)SDL_SwapLE16(*(Uint16*)(&data[5])) - 0x8000;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
|
||||||
axis = (int)*(Uint16*)(&data[7]) - 0x8000;
|
axis = (int)SDL_SwapLE16(*(Uint16*)(&data[7])) - 0x8000;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
||||||
|
|
||||||
SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
|
SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
|
||||||
|
|
Loading…
Reference in New Issue