first cut at turnon scripts for EasyTimer v2
[fw/altos] / ao-tools / ao-eeprom / ao-eeprom.c
index 780badbed3d0d4a9ee56176690aba18777751303..8650f38d7f35e0a947447c065d2abc6f93ca32b3 100644 (file)
@@ -148,7 +148,7 @@ ao_thrust(int16_t value, int16_t max_adc, double ref, double r1, double r2)
 }
 
 static void
-ao_pressure(int16_t value, int16_t max_adc, double ref, double r1, double r2)
+ao_pressure(int16_t value, int16_t max_adc, double ref, double r1, double r2, double sensor_range)
 {
        printf(" pressure %5d", value);
        if (r1 && r2 && ref) {
@@ -156,7 +156,7 @@ ao_pressure(int16_t value, int16_t max_adc, double ref, double r1, double r2)
                if (volts < 0.5) volts = 0.5;
                if (volts > 4.5) volts = 4.5;
 
-               double psi = (volts - 0.5) / 4.0 * 2500.0;
+               double psi = (volts - 0.5) / 4.0 * sensor_range;
                double pa = psi_to_pa(psi);
                printf(" %9.3f kPa", pa / 1000.0);
        }
@@ -261,6 +261,7 @@ main (int argc, char **argv)
                double  sense_r1 = 0.0, sense_r2 = 0.0;
                double  batt_r1 = 0.0, batt_r2 = 0.0;
                double  adc_ref = 0.0;
+               double  pressure_sensor = 0.0;
                int16_t max_adc = 0;
 
                switch (eeprom->log_format) {
@@ -315,6 +316,7 @@ main (int argc, char **argv)
                        break;
                case AO_LOG_FORMAT_TELEFIRETWO:
                        len = 32;
+                       pressure_sensor = 2500.0;
                        max_adc = 4095;
                        adc_ref = 3.3;
                        sense_r1 = batt_r1 = 5600;
@@ -352,6 +354,8 @@ main (int argc, char **argv)
                        len = 2;
                        break;
                case AO_LOG_FORMAT_TELEMEGA_4:
+               case AO_LOG_FORMAT_TELEMEGA_5:
+               case AO_LOG_FORMAT_TELEMEGA_6:
                        len = 32;
                        max_adc= 4095;
                        adc_ref = 3.3;
@@ -364,6 +368,7 @@ main (int argc, char **argv)
                        len = 16;
                        max_adc = 32767;
                        adc_ref = 3.3;
+                       pressure_sensor = 1600.0;
                        batt_r1 = 5600;
                        batt_r2 = 10000;
                        sense_r1 = 5600;
@@ -372,6 +377,11 @@ main (int argc, char **argv)
                }
                if (arg_len)
                        len = arg_len;
+               if (len == 0) {
+                       fprintf(stderr, "Unknown eeprom format %d and no specified length\n",
+                               eeprom->log_format);
+                       exit(1);
+               }
                if (verbose)
                        printf("config major %d minor %d log format %d total %u len %d\n",
                               eeprom->config.major,
@@ -418,14 +428,19 @@ main (int argc, char **argv)
                                case AO_LOG_FORMAT_TELEMEGA_3:
                                case AO_LOG_FORMAT_EASYMEGA_2:
                                case AO_LOG_FORMAT_TELEMEGA_4:
+                               case AO_LOG_FORMAT_TELEMEGA_5:
+                               case AO_LOG_FORMAT_TELEMEGA_6:
                                        log_mega = (struct ao_log_mega *) &eeprom->data[pos];
                                        switch (log_mega->type) {
                                        case AO_LOG_FLIGHT:
-                                               printf(" serial %5u flight %5u ground_accel %6d ground_pres %9u",
+                                               printf(" serial %5u flight %5u ground_accel %6d ground_pres %9u kPa  %7.1f  %7.1f m",
                                                       eeprom->serial_number,
                                                       log_mega->u.flight.flight,
                                                       log_mega->u.flight.ground_accel,
-                                                      log_mega->u.flight.ground_pres);
+                                                      log_mega->u.flight.ground_pres,
+                                                      log_mega->u.flight.ground_pres / 1000.0,
+                                                      ao_pressure_to_altitude(log_mega->u.flight.ground_pres));
+
                                                printf(" along %6d aross %6d through %6d",
                                                       log_mega->u.flight.ground_accel_along,
                                                       log_mega->u.flight.ground_accel_across,
@@ -522,10 +537,12 @@ main (int argc, char **argv)
                                        log_mini = (struct ao_log_mini *) &eeprom->data[pos];
                                        switch (log_mini->type) {
                                        case AO_LOG_FLIGHT:
-                                               printf(" serial %5u flight %5u ground_pres %9u",
+                                               printf(" serial %5u flight %5u ground_pres %9u kPa  %7.1f  %7.1f m",
                                                       eeprom->serial_number,
                                                       log_mini->u.flight.flight,
-                                                      log_mini->u.flight.ground_pres);
+                                                      log_mini->u.flight.ground_pres,
+                                                      log_mini->u.flight.ground_pres / 1000.0,
+                                                      ao_pressure_to_altitude(log_mini->u.flight.ground_pres));
                                                break;
                                        case AO_LOG_STATE:
                                                ao_state(log_mini->u.state.state,
@@ -551,11 +568,13 @@ main (int argc, char **argv)
                                        log_metrum = (struct ao_log_metrum *) &eeprom->data[pos];
                                        switch (log_metrum->type) {
                                        case AO_LOG_FLIGHT:
-                                               printf(" serial %5u flight %5u ground_accel %6d ground_pres %9u ground_temp %9u",
+                                               printf(" serial %5u flight %5u ground_accel %6d ground_pres %9u kPa  %7.1f  %7.1f m ground_temp %9u",
                                                       eeprom->serial_number,
                                                       log_metrum->u.flight.flight,
                                                       log_metrum->u.flight.ground_accel,
                                                       log_metrum->u.flight.ground_pres,
+                                                      log_metrum->u.flight.ground_pres / 1000.0,
+                                                      ao_pressure_to_altitude(log_metrum->u.flight.ground_pres),
                                                       log_metrum->u.flight.ground_temp);
                                                break;
                                        case AO_LOG_SENSOR:
@@ -628,7 +647,8 @@ main (int argc, char **argv)
                                        case AO_LOG_SENSOR:
                                                ao_pressure(log_firetwo->u.sensor.pressure,
                                                            max_adc, adc_ref,
-                                                           sense_r1, sense_r2);
+                                                           sense_r1, sense_r2,
+                                                           pressure_sensor);
                                                ao_thrust(log_firetwo->u.sensor.thrust,
                                                          max_adc, adc_ref,
                                                          sense_r1, sense_r2);