diff --git a/src/i_gyro.c b/src/i_gyro.c index 189ed641..c26c7664 100644 --- a/src/i_gyro.c +++ b/src/i_gyro.c @@ -224,7 +224,12 @@ void I_UpdateGyroCalibrationState(void) switch (cal.state) { case GYRO_CALIBRATION_INACTIVE: - if (!motion.calibrating) + cal.state = GYRO_CALIBRATION_STARTING; + cal.start_time = I_GetTimeMS(); + break; + + case GYRO_CALIBRATION_STARTING: + if (I_GetTimeMS() - cal.start_time > 1500) { motion.calibrating = true; ClearGyroCalibration(); @@ -234,7 +239,7 @@ void I_UpdateGyroCalibrationState(void) break; case GYRO_CALIBRATION_ACTIVE: - if (I_GetTimeMS() - cal.start_time > 1000) + if (I_GetTimeMS() - cal.start_time > 3000) { motion.calibrating = false; PostProcessCalibration(); @@ -244,7 +249,7 @@ void I_UpdateGyroCalibrationState(void) break; case GYRO_CALIBRATION_COMPLETE: - if (I_GetTimeMS() - cal.finish_time > 1000) + if (I_GetTimeMS() - cal.finish_time > 1500) { cal.state = GYRO_CALIBRATION_INACTIVE; } diff --git a/src/i_gyro.h b/src/i_gyro.h index 1dfd52e5..3796f66f 100644 --- a/src/i_gyro.h +++ b/src/i_gyro.h @@ -38,6 +38,7 @@ extern float gyro_axes[NUM_GYRO_AXES]; // Calculated gyro values. typedef enum gyro_calibration_state_e { GYRO_CALIBRATION_INACTIVE, + GYRO_CALIBRATION_STARTING, GYRO_CALIBRATION_ACTIVE, GYRO_CALIBRATION_COMPLETE, } gyro_calibration_state_t; diff --git a/src/mn_setup.c b/src/mn_setup.c index 64881bac..052e064a 100644 --- a/src/mn_setup.c +++ b/src/mn_setup.c @@ -1091,8 +1091,13 @@ static void DrawGyroCalibration(void) case GYRO_CALIBRATION_INACTIVE: break; - case GYRO_CALIBRATION_ACTIVE: + case GYRO_CALIBRATION_STARTING: block_input = true; + DrawNotification("Starting calibration...", CR_GRAY); + I_UpdateGyroCalibrationState(); + break; + + case GYRO_CALIBRATION_ACTIVE: DrawNotification("Calibrating, please wait...", CR_GRAY); I_UpdateGyroCalibrationState(); break;