X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=ao-tools%2Fao-eeprom%2Fao-eeprom.c;h=d9b331953d35bd84677046fbe98940d71096e13f;hb=c1708f3fa4ff412da8817ba0fa58d05fe7ef44f5;hp=2f0762420432fece69f082c618a6a0a20b296bbf;hpb=0ca9a7c6fc914c4b555c99863828861ec54fa01d;p=fw%2Faltos diff --git a/ao-tools/ao-eeprom/ao-eeprom.c b/ao-tools/ao-eeprom/ao-eeprom.c index 2f076242..d9b33195 100644 --- a/ao-tools/ao-eeprom/ao-eeprom.c +++ b/ao-tools/ao-eeprom/ao-eeprom.c @@ -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,8 +354,8 @@ main (int argc, char **argv) len = 2; break; case AO_LOG_FORMAT_TELEMEGA_4: + case AO_LOG_FORMAT_TELEMEGA_5: len = 32; - break; max_adc= 4095; adc_ref = 3.3; batt_r1 = 5600; @@ -361,9 +363,24 @@ main (int argc, char **argv) sense_r1 = 100e3; sense_r2 = 27e3; break; + case AO_LOG_FORMAT_EASYMOTOR: + len = 16; + max_adc = 32767; + adc_ref = 3.3; + pressure_sensor = 1600.0; + batt_r1 = 5600; + batt_r2 = 10000; + sense_r1 = 5600; + sense_r2 = 10000; + break; } 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, @@ -385,6 +402,7 @@ main (int argc, char **argv) struct ao_log_metrum *log_metrum; struct ao_log_gps *log_gps; struct ao_log_firetwo *log_firetwo; + struct ao_log_motor *log_motor; if (!csum && !ao_csum_valid(&eeprom->data[pos], len)) { if (verbose) @@ -409,14 +427,18 @@ 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: 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, @@ -513,10 +535,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, @@ -542,11 +566,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: @@ -619,7 +645,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); @@ -636,7 +663,82 @@ main (int argc, char **argv) break; case AO_LOG_FORMAT_TELEGPS: log_gps = (struct ao_log_gps *) &eeprom->data[pos]; - (void) log_gps; + switch (log_gps->type) { + case AO_LOG_GPS_TIME: + printf(" lat %10.7f ° lon %10.7f ° alt %8d m", + log_gps->u.gps.latitude / 10000000.0, + log_gps->u.gps.longitude/ 10000000.0, + (int32_t) (log_gps->u.gps.altitude_low | + (log_gps->u.gps.altitude_high << 16))); + printf(" time %02d:%02d:%02d %04d-%02d-%02d flags %02x", + log_gps->u.gps.hour, + log_gps->u.gps.minute, + log_gps->u.gps.second, + log_gps->u.gps.year + 2000, + log_gps->u.gps.month, + log_gps->u.gps.day, + log_gps->u.gps.flags); + printf(" course %3d ground_speed %5u climb_rate %6d pdop %3d hdop %3d vdop %3d mode %3d", + log_gps->u.gps.course, + log_gps->u.gps.ground_speed, + log_gps->u.gps.climb_rate, + log_gps->u.gps.pdop, + log_gps->u.gps.hdop, + log_gps->u.gps.vdop, + log_gps->u.gps.mode); + break; + case AO_LOG_GPS_SAT: + printf(" channels %2d", + log_gps->u.gps_sat.channels); + for (i = 0; i < 12; i++) { + printf(" svid %3d c_n %2d", + log_gps->u.gps_sat.sats[i].svid, + log_gps->u.gps_sat.sats[i].c_n); + } + break; + default: + printf (" unknown"); + break; + } + break; + case AO_LOG_FORMAT_EASYMOTOR: + log_motor = (struct ao_log_motor *) &eeprom->data[pos]; + switch (log_motor->type) { + case AO_LOG_FLIGHT: + printf(" serial %5u flight %5u ground_accel %6d", + eeprom->serial_number, + log_motor->u.flight.flight, + log_motor->u.flight.ground_accel); + printf(" along %6d aross %6d through %6d", + log_motor->u.flight.ground_accel_along, + log_motor->u.flight.ground_accel_across, + log_motor->u.flight.ground_accel_through); + ao_volts("ground pressure", + log_motor->u.flight.ground_motor_pressure, + max_adc, adc_ref, + sense_r1, sense_r2); + break; + case AO_LOG_STATE: + ao_state(log_motor->u.state.state, + log_motor->u.state.reason); + break; + case AO_LOG_SENSOR: + ao_volts("pressure", + log_motor->u.sensor.pressure, + max_adc, adc_ref, + sense_r1, sense_r2); + ao_volts("v_batt", + log_motor->u.sensor.v_batt, + max_adc, + adc_ref, batt_r1, batt_r2); + printf(" accel %6d", + log_motor->u.sensor.accel); + printf(" along %6d aross %6d through %6d", + log_motor->u.sensor.accel_along, + log_motor->u.sensor.accel_across, + log_motor->u.sensor.accel_through); + break; + } break; case AO_LOG_FORMAT_DETHERM: break;