@@ -979,7 +979,7 @@ static bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx)
979
979
/* Stick calibration values are 12-bits each and are packed by bit
980
980
* For whatever reason the fields are in a different order for each stick
981
981
* Left: X-Max, Y-Max, X-Center, Y-Center, X-Min, Y-Min
982
- * Right: X-Center, Y-Center, X-Min , Y-Min , X-Max , Y-Max
982
+ * Right: X-Center, Y-Center, X-Max , Y-Max , X-Min , Y-Min
983
983
*/
984
984
985
985
// Left stick
@@ -993,10 +993,10 @@ static bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx)
993
993
// Right stick
994
994
ctx -> m_StickCalData [1 ].axis [0 ].sCenter = ((pRightStickCal [1 ] << 8 ) & 0xF00 ) | pRightStickCal [0 ]; // X Axis center
995
995
ctx -> m_StickCalData [1 ].axis [1 ].sCenter = (pRightStickCal [2 ] << 4 ) | (pRightStickCal [1 ] >> 4 ); // Y Axis center
996
- ctx -> m_StickCalData [1 ].axis [0 ].sMin = ((pRightStickCal [4 ] << 8 ) & 0xF00 ) | pRightStickCal [3 ]; // X Axis min below center
997
- ctx -> m_StickCalData [1 ].axis [1 ].sMin = (pRightStickCal [5 ] << 4 ) | (pRightStickCal [4 ] >> 4 ); // Y Axis min below center
998
- ctx -> m_StickCalData [1 ].axis [0 ].sMax = ((pRightStickCal [7 ] << 8 ) & 0xF00 ) | pRightStickCal [6 ]; // X Axis max above center
999
- ctx -> m_StickCalData [1 ].axis [1 ].sMax = (pRightStickCal [8 ] << 4 ) | (pRightStickCal [7 ] >> 4 ); // Y Axis max above center
996
+ ctx -> m_StickCalData [1 ].axis [0 ].sMax = ((pRightStickCal [4 ] << 8 ) & 0xF00 ) | pRightStickCal [3 ]; // X Axis max above center
997
+ ctx -> m_StickCalData [1 ].axis [1 ].sMax = (pRightStickCal [5 ] << 4 ) | (pRightStickCal [4 ] >> 4 ); // Y Axis max above center
998
+ ctx -> m_StickCalData [1 ].axis [0 ].sMin = ((pRightStickCal [7 ] << 8 ) & 0xF00 ) | pRightStickCal [6 ]; // X Axis min below center
999
+ ctx -> m_StickCalData [1 ].axis [1 ].sMin = (pRightStickCal [8 ] << 4 ) | (pRightStickCal [7 ] >> 4 ); // Y Axis min below center
1000
1000
1001
1001
// Filter out any values that were uninitialized (0xFFF) in the SPI read
1002
1002
for (stick = 0 ; stick < 2 ; ++ stick ) {
@@ -1109,14 +1109,17 @@ static Sint16 ApplyStickCalibration(SDL_DriverSwitch_Context *ctx, int nStick, i
1109
1109
{
1110
1110
sRawValue -= ctx -> m_StickCalData [nStick ].axis [nAxis ].sCenter ;
1111
1111
1112
- if (sRawValue > ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax ) {
1113
- ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax = sRawValue ;
1114
- }
1115
- if (sRawValue < ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin ) {
1116
- ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin = sRawValue ;
1112
+ if (sRawValue >= 0 ) {
1113
+ if (sRawValue > ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax ) {
1114
+ ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax = sRawValue ;
1115
+ }
1116
+ return (Sint16 )HIDAPI_RemapVal (sRawValue , 0 , ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax , 0 , SDL_MAX_SINT16 );
1117
+ } else {
1118
+ if (sRawValue < ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin ) {
1119
+ ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin = sRawValue ;
1120
+ }
1121
+ return (Sint16 )HIDAPI_RemapVal (sRawValue , ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin , 0 , SDL_MIN_SINT16 , 0 );
1117
1122
}
1118
-
1119
- return (Sint16 )HIDAPI_RemapVal (sRawValue , ctx -> m_StickExtents [nStick ].axis [nAxis ].sMin , ctx -> m_StickExtents [nStick ].axis [nAxis ].sMax , SDL_MIN_SINT16 , SDL_MAX_SINT16 );
1120
1123
}
1121
1124
1122
1125
static Sint16 ApplySimpleStickCalibration (SDL_DriverSwitch_Context * ctx , int nStick , int nAxis , Sint16 sRawValue )
@@ -1126,14 +1129,17 @@ static Sint16 ApplySimpleStickCalibration(SDL_DriverSwitch_Context *ctx, int nSt
1126
1129
1127
1130
sRawValue -= usJoystickCenter ;
1128
1131
1129
- if (sRawValue > ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax ) {
1130
- ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax = sRawValue ;
1131
- }
1132
- if (sRawValue < ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin ) {
1133
- ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin = sRawValue ;
1132
+ if (sRawValue >= 0 ) {
1133
+ if (sRawValue > ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax ) {
1134
+ ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax = sRawValue ;
1135
+ }
1136
+ return (Sint16 )HIDAPI_RemapVal (sRawValue , 0 , ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax , 0 , SDL_MAX_SINT16 );
1137
+ } else {
1138
+ if (sRawValue < ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin ) {
1139
+ ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin = sRawValue ;
1140
+ }
1141
+ return (Sint16 )HIDAPI_RemapVal (sRawValue , ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin , 0 , SDL_MIN_SINT16 , 0 );
1134
1142
}
1135
-
1136
- return (Sint16 )HIDAPI_RemapVal (sRawValue , ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMin , ctx -> m_SimpleStickExtents [nStick ].axis [nAxis ].sMax , SDL_MIN_SINT16 , SDL_MAX_SINT16 );
1137
1143
}
1138
1144
1139
1145
static Uint8 RemapButton (SDL_DriverSwitch_Context * ctx , Uint8 button )
0 commit comments