altos: All beep-enabled boards have beep config
[fw/altos] / src / kernel / ao_config.c
index 217b0ab1a8cd5145dbc6470f2c95bede280144f1..ece60ad355124e4bdcf4a703b6e8434713f82433 100644 (file)
@@ -145,6 +145,9 @@ _ao_config_get(void)
        }
        minor = ao_config.minor;
        if (minor != AO_CONFIG_MINOR) {
+#if AO_PYRO_NUM
+               ao_pyro_update_version();
+#endif
                /* Fixups for minor version 1 */
                if (minor < 1)
                        ao_config.apogee_delay = AO_CONFIG_DEFAULT_APOGEE_DELAY;
@@ -190,7 +193,7 @@ _ao_config_get(void)
                if (minor  < 14)
                        ao_config.radio_amp = AO_CONFIG_DEFAULT_RADIO_AMP;
 #endif
-#if HAS_GYRO
+#if HAS_IMU
                if (minor < 15) {
                        ao_config.accel_zero_along = 0;
                        ao_config.accel_zero_across = 0;
@@ -203,7 +206,7 @@ _ao_config_get(void)
                        ao_config.accel_minus_g = 0;
                }
 #endif
-#if HAS_BEEP_CONFIG
+#if HAS_BEEP
                if (minor < 16)
                        ao_config.mid_beep = AO_BEEP_MID_DEFAULT;
 #endif
@@ -395,7 +398,7 @@ ao_config_accel_calibrate_show(void)
 {
        printf("Accel cal +1g: %d -1g: %d\n",
               ao_config.accel_plus_g, ao_config.accel_minus_g);
-#if HAS_GYRO
+#if HAS_IMU
        printf ("IMU cal along %d across %d through %d\n",
                ao_config.accel_zero_along,
                ao_config.accel_zero_across,
@@ -406,7 +409,7 @@ ao_config_accel_calibrate_show(void)
 #define ACCEL_CALIBRATE_SAMPLES        1024
 #define ACCEL_CALIBRATE_SHIFT  10
 
-#if HAS_GYRO
+#if HAS_IMU
 static int16_t accel_cal_along;
 static int16_t accel_cal_across;
 static int16_t accel_cal_through;
@@ -418,7 +421,7 @@ ao_config_accel_calibrate_auto(char *orientation)
        uint16_t        i;
        int32_t         accel_total;
        uint8_t         cal_data_ring;
-#if HAS_GYRO
+#if HAS_IMU
        int32_t         accel_along_total = 0;
        int32_t         accel_across_total = 0;
        int32_t         accel_through_total = 0;
@@ -436,7 +439,7 @@ ao_config_accel_calibrate_auto(char *orientation)
                ao_sleep(&ao_sample_data);
                while (i && cal_data_ring != ao_sample_data) {
                        accel_total += (int32_t) ao_data_accel(&ao_data_ring[cal_data_ring]);
-#if HAS_GYRO
+#if HAS_IMU
                        accel_along_total += (int32_t) ao_data_along(&ao_data_ring[cal_data_ring]);
                        accel_across_total += (int32_t) ao_data_across(&ao_data_ring[cal_data_ring]);
                        accel_through_total += (int32_t) ao_data_through(&ao_data_ring[cal_data_ring]);
@@ -445,7 +448,7 @@ ao_config_accel_calibrate_auto(char *orientation)
                        i--;
                }
        }
-#if HAS_GYRO
+#if HAS_IMU
        accel_cal_along = accel_along_total >> ACCEL_CALIBRATE_SHIFT;
        accel_cal_across = accel_across_total >> ACCEL_CALIBRATE_SHIFT;
        accel_cal_through = accel_through_total >> ACCEL_CALIBRATE_SHIFT;
@@ -457,35 +460,31 @@ static void
 ao_config_accel_calibrate_set(void) 
 {
        int16_t up, down;
-       uint16_t r;
-#if HAS_GYRO
+       bool    auto_cal;
+#if HAS_IMU
        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
 
-       r = ao_cmd_decimal();
+       up = ao_cmd_decimal();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       if (r == 0) {
+       down = ao_cmd_decimal();
+       auto_cal = (up == 0 && ao_cmd_status != ao_cmd_success);
+       if (auto_cal) {
                up = ao_config_accel_calibrate_auto("up");
-#if HAS_GYRO
+#if HAS_IMU
                accel_along_up = accel_cal_along;
                accel_across_up = accel_cal_across;
                accel_through_up = accel_cal_through;
 #endif
                down = ao_config_accel_calibrate_auto("down");
-#if HAS_GYRO
+#if HAS_IMU
                accel_along_down = accel_cal_along;
                accel_across_down = accel_cal_across;
                accel_through_down = accel_cal_through;
 #endif
-       } else {
-               up = r;
-               r = ao_cmd_decimal();
-               if (ao_cmd_status != ao_cmd_success)
-                       return;
-               down = r;
        }
        if (up >= down) {
                printf("Invalid accel: up (%d) down (%d)\n",
@@ -495,11 +494,25 @@ ao_config_accel_calibrate_set(void)
        _ao_config_edit_start();
        ao_config.accel_plus_g = up;
        ao_config.accel_minus_g = down;
-#if HAS_GYRO
-       if (r == 0) {
+#if HAS_IMU
+       if (auto_cal) {
                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;
+       } else {
+               int16_t v;
+
+               v = ao_cmd_decimal();
+               if (ao_cmd_status == ao_cmd_success) {
+                       ao_config.accel_zero_along = v;
+                       v = ao_cmd_decimal();
+                       if (ao_cmd_status == ao_cmd_success) {
+                               ao_config.accel_zero_across = v;
+                               v = ao_cmd_decimal();
+                               if (ao_cmd_status == ao_cmd_success)
+                                       ao_config.accel_zero_through = v;
+                       }
+               }
        }
 #endif
        _ao_config_edit_finish();
@@ -832,7 +845,7 @@ ao_config_radio_power_set(void)
 
 #endif
 
-#if HAS_BEEP_CONFIG
+#if HAS_BEEP
 static void
 ao_config_beep_show(void)
 {
@@ -1039,7 +1052,7 @@ const struct ao_config_var ao_config_vars[] = {
          ao_config_log_set,            ao_config_log_show },
 #endif
 #if HAS_IGNITE
-       { "i <0 dual, 1 apogee, 2 main>\0Igniter mode",
+       { "i <0 dual, 1 apogee, 2 main, 3 booster>\0Igniter mode",
          ao_config_ignite_mode_set,    ao_config_ignite_mode_show },
 #endif
 #if HAS_AES
@@ -1056,7 +1069,7 @@ const struct ao_config_var ao_config_vars[] = {
        { "A <secs>\0APRS packet interval (0 disable)",
          ao_config_aprs_set, ao_config_aprs_show },
 #endif
-#if HAS_BEEP_CONFIG
+#if HAS_BEEP
        { "b <val>\0Beeper tone (freq = 1/2 (24e6/32) / beep",
          ao_config_beep_set, ao_config_beep_show },
 #endif