X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosCSV.java;h=16c57ec187104e5f8449f3ba030d496f734bd894;hb=3ed101d634968666cd3ee2d8c49737970caf406b;hp=aed187283c43d4adf30e5986c6978525738c566e;hpb=a61217f0a6d0ef48b6471f632c4600255867e831;p=fw%2Faltos diff --git a/altoslib/AltosCSV.java b/altoslib/AltosCSV.java index aed18728..16c57ec1 100644 --- a/altoslib/AltosCSV.java +++ b/altoslib/AltosCSV.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_14; import java.io.*; import java.util.*; @@ -28,18 +28,26 @@ public class AltosCSV implements AltosWriter { boolean seen_boost; int boost_tick; + boolean has_call; boolean has_basic; + boolean has_accel; + boolean has_baro; + boolean has_pyro; + boolean has_radio; boolean has_battery; boolean has_flight_state; - boolean has_advanced; + boolean has_3d_accel; + boolean has_imu; + boolean has_igniter; boolean has_gps; boolean has_gps_sat; boolean has_companion; + boolean has_motor_pressure; AltosFlightSeries series; int[] indices; - static final int ALTOS_CSV_VERSION = 5; + static final int ALTOS_CSV_VERSION = 6; /* Version 4 format: * @@ -49,7 +57,8 @@ public class AltosCSV implements AltosWriter { * flight number * callsign * time (seconds since boost) - * clock (tick count / 100) + * + * Radio info (if available) * rssi * link quality * @@ -81,6 +90,14 @@ public class AltosCSV implements AltosWriter { * mag_x (g) * mag_y (g) * mag_z (g) + * tilt (d) + * + * Extra igniter voltages (if available) + * pyro (V) + * igniter_a (V) + * igniter_b (V) + * igniter_c (V) + * igniter_d (V) * * GPS data (if available) * connected (1/0) @@ -115,13 +132,30 @@ public class AltosCSV implements AltosWriter { */ void write_general_header() { - out.printf("version,serial,flight,call,time,clock,rssi,lqi"); + out.printf("version,serial,flight"); + if (series.cal_data().callsign != null) + out.printf(",call"); + out.printf(",time"); } double time() { return series.time(indices); } + void write_general() { + out.printf("%s, %d, %d", + ALTOS_CSV_VERSION, + series.cal_data().serial, + series.cal_data().flight); + if (series.cal_data().callsign != null) + out.printf(",%s", series.cal_data().callsign); + out.printf(", %8.2f", time()); + } + + void write_radio_header() { + out.printf("rssi,lqi"); + } + int rssi() { return (int) series.value(AltosFlightSeries.rssi_name, indices); } @@ -130,12 +164,8 @@ public class AltosCSV implements AltosWriter { return (int) series.value(AltosFlightSeries.status_name, indices); } - void write_general() { - double time = time(); - out.printf("%s, %d, %d, %s, %8.2f, %8.2f, %4d, %3d", - ALTOS_CSV_VERSION, series.cal_data.serial, - series.cal_data.flight, series.cal_data.callsign, - time, time, + void write_radio() { + out.printf("%4d, %3d", rssi(), status() & 0x7f); } @@ -149,11 +179,19 @@ public class AltosCSV implements AltosWriter { void write_flight() { int state = state(); - out.printf("%d,%8s", state, AltosLib.state_name(state)); + out.printf("%2d,%8s", state, AltosLib.state_name(state)); } void write_basic_header() { - out.printf("acceleration,pressure,altitude,height,accel_speed,baro_speed,temperature,drogue_voltage,main_voltage"); + if (has_accel) + out.printf("acceleration,"); + if (has_baro) + out.printf("pressure,altitude,"); + out.printf("height,speed"); + if (has_baro) + out.printf(",temperature"); + if (has_pyro) + out.printf(",drogue_voltage,main_voltage"); } double acceleration() { return series.value(AltosFlightSeries.accel_name, indices); } @@ -166,16 +204,19 @@ public class AltosCSV implements AltosWriter { double main_voltage() { return series.value(AltosFlightSeries.main_voltage_name, indices); } void write_basic() { - out.printf("%8.2f,%10.2f,%8.2f,%8.2f,%8.2f,%8.2f,%5.1f,%5.2f,%5.2f", - acceleration(), - pressure(), - altitude(), - height(), - speed(), - speed(), - temperature(), - apogee_voltage(), - main_voltage()); + if (has_accel) + out.printf("%8.2f,", acceleration()); + if (has_baro) + out.printf("%10.2f,%8.2f,", + pressure(), altitude()); + out.printf("%8.2f,%8.2f", + height(), speed()); + if (has_baro) + out.printf(",%5.1f", temperature()); + if (has_pyro) + out.printf(",%5.2f,%5.2f", + apogee_voltage(), + main_voltage()); } void write_battery_header() { @@ -188,14 +229,33 @@ public class AltosCSV implements AltosWriter { out.printf("%5.2f", battery_voltage()); } - void write_advanced_header() { - out.printf("accel_x,accel_y,accel_z,gyro_x,gyro_y,gyro_z,mag_x,mag_y,mag_z"); + void write_motor_pressure_header() { + out.printf("motor_pressure"); + } + + double motor_pressure() { return series.value(AltosFlightSeries.motor_pressure_name, indices); } + + void write_motor_pressure() { + out.printf("%10.1f", motor_pressure()); + } + + void write_3d_accel_header() { + out.printf("accel_x,accel_y,accel_z"); } double accel_along() { return series.value(AltosFlightSeries.accel_along_name, indices); } double accel_across() { return series.value(AltosFlightSeries.accel_across_name, indices); } double accel_through() { return series.value(AltosFlightSeries.accel_through_name, indices); } + void write_3d_accel() { + out.printf("%7.2f,%7.2f,%7.2f", + accel_along(), accel_across(), accel_through()); + } + + void write_imu_header() { + out.printf("gyro_roll,gyro_pitch,gyro_yaw,mag_x,mag_y,mag_z,tilt"); + } + double gyro_roll() { return series.value(AltosFlightSeries.gyro_roll_name, indices); } double gyro_pitch() { return series.value(AltosFlightSeries.gyro_pitch_name, indices); } double gyro_yaw() { return series.value(AltosFlightSeries.gyro_yaw_name, indices); } @@ -204,11 +264,29 @@ public class AltosCSV implements AltosWriter { double mag_across() { return series.value(AltosFlightSeries.mag_across_name, indices); } double mag_through() { return series.value(AltosFlightSeries.mag_through_name, indices); } - void write_advanced() { - out.printf("%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f", - accel_along(), accel_across(), accel_through(), + double tilt() { return series.value(AltosFlightSeries.orient_name, indices); } + + void write_imu() { + out.printf("%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f,%7.2f", gyro_roll(), gyro_pitch(), gyro_yaw(), - mag_along(), mag_across(), mag_through()); + mag_along(), mag_across(), mag_through(), + tilt()); + } + + void write_igniter_header() { + out.printf("pyro"); + for (int i = 0; i < series.igniter_voltage.length; i++) + out.printf(",%s", AltosLib.igniter_short_name(i)); + } + + double pyro() { return series.value(AltosFlightSeries.pyro_voltage_name, indices); } + + double igniter_value(int channel) { return series.value(series.igniter_voltage_name(channel), indices); } + + void write_igniter() { + out.printf("%5.2f", pyro()); + for (int i = 0; i < series.igniter_voltage.length; i++) + out.printf(",%5.2f", igniter_value(i)); } void write_gps_header() { @@ -220,8 +298,8 @@ public class AltosCSV implements AltosWriter { AltosGreatCircle from_pad; - if (series.cal_data.gps_pad != null && gps != null) - from_pad = new AltosGreatCircle(series.cal_data.gps_pad, gps); + if (series.cal_data().gps_pad != null && gps != null) + from_pad = new AltosGreatCircle(series.cal_data().gps_pad, gps); else from_pad = new AltosGreatCircle(); @@ -306,6 +384,10 @@ public class AltosCSV implements AltosWriter { void write_header() { out.printf("#"); write_general_header(); + if (has_radio) { + out.printf(","); + write_radio_header(); + } if (has_flight_state) { out.printf(","); write_flight_header(); @@ -318,9 +400,21 @@ public class AltosCSV implements AltosWriter { out.printf(","); write_battery_header(); } - if (has_advanced) { + if (has_motor_pressure) { + out.printf(","); + write_motor_pressure_header(); + } + if (has_3d_accel) { out.printf(","); - write_advanced_header(); + write_3d_accel_header(); + } + if (has_imu) { + out.printf(","); + write_imu_header(); + } + if (has_igniter) { + out.printf(","); + write_igniter_header(); } if (has_gps) { out.printf(","); @@ -339,6 +433,10 @@ public class AltosCSV implements AltosWriter { void write_one() { write_general(); + if (has_radio) { + out.printf(","); + write_radio(); + } if (has_flight_state) { out.printf(","); write_flight(); @@ -351,9 +449,21 @@ public class AltosCSV implements AltosWriter { out.printf(","); write_battery(); } - if (has_advanced) { + if (has_motor_pressure) { + out.printf(","); + write_motor_pressure(); + } + if (has_3d_accel) { + out.printf(","); + write_3d_accel(); + } + if (has_imu) { out.printf(","); - write_advanced(); + write_imu(); + } + if (has_igniter) { + out.printf(","); + write_igniter(); } if (has_gps) { out.printf(","); @@ -395,22 +505,45 @@ public class AltosCSV implements AltosWriter { series.finish(); + has_radio = false; has_flight_state = false; has_basic = false; + has_accel = false; + has_baro = false; + has_pyro = false; has_battery = false; - has_advanced = false; + has_motor_pressure = false; + has_3d_accel = false; + has_imu = false; + has_igniter = false; has_gps = false; has_gps_sat = false; has_companion = false; + if (series.has_series(AltosFlightSeries.rssi_name)) + has_radio = true; if (series.has_series(AltosFlightSeries.state_name)) has_flight_state = true; - if (series.has_series(AltosFlightSeries.accel_name) || series.has_series(AltosFlightSeries.pressure_name)) + if (series.has_series(AltosFlightSeries.accel_name)) { has_basic = true; + has_accel = true; + } + if (series.has_series(AltosFlightSeries.pressure_name)) { + has_basic = true; + has_baro = true; + } + if (series.has_series(AltosFlightSeries.apogee_voltage_name)) + has_pyro = true; if (series.has_series(AltosFlightSeries.battery_voltage_name)) has_battery = true; + if (series.has_series(AltosFlightSeries.motor_pressure_name)) + has_motor_pressure = true; if (series.has_series(AltosFlightSeries.accel_across_name)) - has_advanced = true; + has_3d_accel = true; + if (series.has_series(AltosFlightSeries.gyro_roll_name)) + has_imu = true; + if (series.has_series(AltosFlightSeries.pyro_voltage_name)) + has_igniter = true; if (series.gps_series != null) has_gps = true;