altos: Clear callsign on initial config load
[fw/altos] / src / ao_sample.c
index ef403393cb6c276fbd81c38c46cbe4f559d3dd1a..b2b8e9f63ff662385054b6a904797f38e6c77ce9 100644 (file)
@@ -37,21 +37,21 @@ __data uint8_t              ao_sample_adc;
  * Sensor calibration values
  */
 
-__xdata int16_t                ao_ground_pres;         /* startup pressure */
-__xdata int16_t                ao_ground_height;       /* MSL of ao_ground_pres */
+__pdata int16_t                ao_ground_pres;         /* startup pressure */
+__pdata int16_t                ao_ground_height;       /* MSL of ao_ground_pres */
 
 #if HAS_ACCEL
-__xdata int16_t                ao_ground_accel;        /* startup acceleration */
-__xdata int16_t                ao_accel_2g;            /* factory accel calibration */
-__xdata int32_t                ao_accel_scale;         /* sensor to m/s² conversion */
+__pdata int16_t                ao_ground_accel;        /* startup acceleration */
+__pdata int16_t                ao_accel_2g;            /* factory accel calibration */
+__pdata int32_t                ao_accel_scale;         /* sensor to m/s² conversion */
 #endif
 
-static __xdata uint8_t ao_preflight;           /* in preflight mode */
+static __pdata uint8_t ao_preflight;           /* in preflight mode */
 
-static __xdata uint16_t        nsamples;
-__xdata int32_t ao_sample_pres_sum;
+static __pdata uint16_t        nsamples;
+__pdata int32_t ao_sample_pres_sum;
 #if HAS_ACCEL
-__xdata int32_t ao_sample_accel_sum;
+__pdata int32_t ao_sample_accel_sum;
 #endif
 
 static void
@@ -68,16 +68,17 @@ ao_sample_preflight(void)
 #endif
                ao_sample_pres_sum += ao_sample_pres;
                ++nsamples;
-               ao_preflight = FALSE;
-       }
-       ao_config_get();
+       } else {
+               ao_config_get();
 #if HAS_ACCEL
-       ao_ground_accel = ao_sample_accel_sum >> 9;
-       ao_accel_2g = ao_config.accel_minus_g - ao_config.accel_plus_g;
-       ao_accel_scale = to_fix32(GRAVITY * 2 * 16) / ao_accel_2g;
+               ao_ground_accel = ao_sample_accel_sum >> 9;
+               ao_accel_2g = ao_config.accel_minus_g - ao_config.accel_plus_g;
+               ao_accel_scale = to_fix32(GRAVITY * 2 * 16) / ao_accel_2g;
 #endif
-       ao_ground_pres = ao_sample_pres_sum >> 9;
-       ao_ground_height = ao_pres_to_altitude(ao_ground_pres);
+               ao_ground_pres = ao_sample_pres_sum >> 9;
+               ao_ground_height = ao_pres_to_altitude(ao_ground_pres);
+               ao_preflight = FALSE;
+       }
 }
 
 uint8_t
@@ -138,7 +139,7 @@ ao_sample(void)
                 *
                 *                      ao_sample_accel       32767
                 *                    = ------------ *  ------------
-                *                         32737        ao_accel_ref
+                *                         32767        ao_accel_ref
                 *
                 * Multiply through by 32767:
                 *
@@ -178,6 +179,8 @@ ao_sample(void)
                 * just dropped a bit of noise off the low end.
                 */
                ao_sample_accel = (uint16_t) ((((uint32_t) ao_sample_accel << 16) / (ao_accel_ref[ao_sample_adc] << 1))) >> 1;
+               if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
+                       ao_sample_accel = 0x7fff - ao_sample_accel;
                ao_adc->accel = ao_sample_accel;
 #endif
 #endif