X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=ao-tools%2Fao-eeprom%2Fao-eeprom.c;h=f63676300ebd76817b3cb6ac462d0d22c69f1af0;hb=681638032041efcb05b9623e2a0332ca4e2d0958;hp=91a6ccb352ac1740da8f89280dcdbc3c2769cfeb;hpb=25be2785cf34773bdcac5ec7b2a41769e352812a;p=fw%2Faltos diff --git a/ao-tools/ao-eeprom/ao-eeprom.c b/ao-tools/ao-eeprom/ao-eeprom.c index 91a6ccb3..f6367630 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; @@ -351,6 +353,26 @@ main (int argc, char **argv) case AO_LOG_FORMAT_MICROPEAK2: len = 2; break; + case AO_LOG_FORMAT_TELEMEGA_4: + len = 32; + break; + max_adc= 4095; + adc_ref = 3.3; + batt_r1 = 5600; + batt_r2 = 10000; + 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; @@ -375,6 +397,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) @@ -398,14 +421,18 @@ main (int argc, char **argv) case AO_LOG_FORMAT_TELEMEGA: case AO_LOG_FORMAT_TELEMEGA_3: case AO_LOG_FORMAT_EASYMEGA_2: + case AO_LOG_FORMAT_TELEMEGA_4: 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, @@ -502,10 +529,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, @@ -531,11 +560,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: @@ -608,7 +639,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); @@ -625,10 +657,71 @@ 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_DETHERM: 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", + eeprom->serial_number, + log_motor->u.flight.flight); + break; + case AO_LOG_STATE: + ao_state(log_motor->u.state.state, + log_motor->u.state.reason); + break; + case AO_LOG_SENSOR: + ao_pressure(log_motor->u.sensor.pressure, + max_adc, adc_ref, + sense_r1, sense_r2, + pressure_sensor); + ao_volts("v_batt", + log_motor->u.sensor.v_batt, + max_adc, + adc_ref, + batt_r1, batt_r2); + break; + } + break; } } printf("\n");