diff --git a/quantum/process_keycode/process_joystick.c b/quantum/process_keycode/process_joystick.c index c0c58015cc..f26b6c6f3f 100644 --- a/quantum/process_keycode/process_joystick.c +++ b/quantum/process_keycode/process_joystick.c @@ -114,15 +114,20 @@ bool process_joystick_analogread_quantum() { int16_t axis_val = joystick_axes[axis_index].mid_digit; # endif - // test the converted value against the lower range - uint16_t ref = joystick_axes[axis_index].mid_digit; - uint16_t range = joystick_axes[axis_index].min_digit; - int16_t ranged_val = -127 * fminf(1.f, (axis_val - (float)(ref)) / (range - (float)ref)); - if (ranged_val > 0) { - // the value is in the higher range - range = joystick_axes[axis_index].max_digit; - ranged_val = 127 * fminf(1.f, (axis_val - (float)(ref)) / (range - (float)ref)); + //test the converted value against the lower range + int32_t ref = joystick_axes[axis_index].mid_digit; + int32_t range = joystick_axes[axis_index].min_digit; + int32_t ranged_val = ((axis_val - ref)* -127)/(range - ref) ; + + if (ranged_val > 0){ + //the value is in the higher range + range = joystick_axes[axis_index].max_digit; + ranged_val = ((axis_val - ref)* 127)/(range - ref); } + + //clamp the result in the valid range + ranged_val = ranged_val<-127 ? -127 : ranged_val; + ranged_val = ranged_val>127 ? 127 : ranged_val; if (ranged_val != joystick_status.axes[axis_index]) { joystick_status.axes[axis_index] = ranged_val;