altos: 3-axis accel calibration was invalid in explicit accel cal mode
authorKeith Packard <keithp@keithp.com>
Sat, 21 Dec 2013 06:06:52 +0000 (22:06 -0800)
committerKeith Packard <keithp@keithp.com>
Sat, 21 Dec 2013 06:06:52 +0000 (22:06 -0800)
When explicit Z-axis accel calibration values were provided to the 'c
a' command, the 3-axis accelerometer calibration values would get set
to uninitialized values. Not so helpful.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_config.c

index a30ec64a5e8a9d0c1c4c8ea59d7766e363ae5ea2..4a1c58b90afbd17ff0965da02ec8ca23b88e82dc 100644 (file)
@@ -353,9 +353,9 @@ ao_config_accel_calibrate_set(void) __reentrant
 {
        int16_t up, down;
 #if HAS_GYRO
-       int16_t accel_along_up, accel_along_down;
-       int16_t accel_across_up, accel_across_down;
-       int16_t accel_through_up, accel_through_down;
+       int16_t accel_along_up = 0, accel_along_down = 0;
+       int16_t accel_across_up = 0, accel_across_down = 0;
+       int16_t accel_through_up = 0, accel_through_down = 0;
 #endif
        
        ao_cmd_decimal();
@@ -390,9 +390,11 @@ ao_config_accel_calibrate_set(void) __reentrant
        ao_config.accel_plus_g = up;
        ao_config.accel_minus_g = down;
 #if HAS_GYRO
-       ao_config.accel_zero_along = (accel_along_up + accel_along_down) / 2;
-       ao_config.accel_zero_across = (accel_across_up + accel_across_down) / 2;
-       ao_config.accel_zero_through = (accel_through_up + accel_through_down) / 2;
+       if (ao_cmd_lex_i == 0) {
+               ao_config.accel_zero_along = (accel_along_up + accel_along_down) / 2;
+               ao_config.accel_zero_across = (accel_across_up + accel_across_down) / 2;
+               ao_config.accel_zero_through = (accel_through_up + accel_through_down) / 2;
+       }
 #endif
        _ao_config_edit_finish();
 }