diff options
-rw-r--r-- | altoslib/AltosEepromIterable.java | 25 | ||||
-rw-r--r-- | altosui/AltosAscent.java | 43 | ||||
-rw-r--r-- | altosui/AltosDescent.java | 54 | ||||
-rw-r--r-- | altosui/AltosKML.java | 1 | ||||
-rw-r--r-- | altosui/AltosLanded.java | 40 | ||||
-rw-r--r-- | altosui/AltosPad.java | 61 | ||||
-rw-r--r-- | src/cc1111/ao_arch.h | 6 | ||||
-rw-r--r-- | src/cc1111/ao_string.c | 6 |
8 files changed, 154 insertions, 82 deletions
diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 2ac10e85..986b7a2c 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -23,15 +23,7 @@ import java.text.*; public class AltosEepromIterable extends AltosRecordIterable { - static final int seen_flight = 1; - static final int seen_sensor = 2; - static final int seen_temp_volt = 4; - static final int seen_deploy = 8; - static final int seen_gps_time = 16; - static final int seen_gps_lat = 32; - static final int seen_gps_lon = 64; - - static final int seen_basic = seen_flight|seen_sensor; + static final int seen_basic = AltosRecord.seen_flight|AltosRecord.seen_sensor; boolean has_accel; boolean has_gps; @@ -64,7 +56,7 @@ public class AltosEepromIterable extends AltosRecordIterable { state.tick = record.tick; switch (record.cmd) { case AltosLib.AO_LOG_FLIGHT: - eeprom.seen |= seen_flight; + eeprom.seen |= AltosRecord.seen_flight; state.ground_accel = record.a; state.flight_accel = record.a; state.flight = record.b; @@ -82,10 +74,10 @@ public class AltosEepromIterable extends AltosRecordIterable { state.flight_pres = (state.flight_pres * 15 + state.pres) / 16; } state.flight_accel = (state.flight_accel * 15 + state.accel) / 16; - if ((eeprom.seen & seen_sensor) == 0) + if ((eeprom.seen & AltosRecord.seen_sensor) == 0) eeprom.sensor_tick = record.tick - 1; state.flight_vel += (state.accel_plus_g - state.accel) * (record.tick - eeprom.sensor_tick); - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; eeprom.sensor_tick = record.tick; has_accel = true; break; @@ -96,17 +88,17 @@ public class AltosEepromIterable extends AltosRecordIterable { eeprom.n_pad_samples++; state.ground_pres = state.pres; } - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; break; case AltosLib.AO_LOG_TEMP_VOLT: state.temp = record.a; state.batt = record.b; - eeprom.seen |= seen_temp_volt; + eeprom.seen |= AltosRecord.seen_temp_volt; break; case AltosLib.AO_LOG_DEPLOY: state.drogue = record.a; state.main = record.b; - eeprom.seen |= seen_deploy; + eeprom.seen |= AltosRecord.seen_deploy; has_ignite = true; break; case AltosLib.AO_LOG_STATE: @@ -114,6 +106,7 @@ public class AltosEepromIterable extends AltosRecordIterable { break; case AltosLib.AO_LOG_GPS_TIME: eeprom.gps_tick = state.tick; + eeprom.seen |= AltosRecord.seen_gps_time; AltosGPS old = state.gps; state.gps = new AltosGPS(); @@ -136,10 +129,12 @@ public class AltosEepromIterable extends AltosRecordIterable { has_gps = true; break; case AltosLib.AO_LOG_GPS_LAT: + eeprom.seen |= AltosRecord.seen_gps_lat; int lat32 = record.a | (record.b << 16); state.gps.lat = (double) lat32 / 1e7; break; case AltosLib.AO_LOG_GPS_LON: + eeprom.seen |= AltosRecord.seen_gps_lon; int lon32 = record.a | (record.b << 16); state.gps.lon = (double) lon32 / 1e7; break; diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index 945af7e2..007c74ec 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -43,6 +43,20 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { } void show(AltosState state, int crc_errors) {} + + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void reset() { value.setText(""); lights.set(false); @@ -104,6 +118,19 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { value.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void hide() { label.setVisible(false); value.setVisible(false); @@ -260,8 +287,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Apogee extends AscentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -273,8 +299,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Main extends AscentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -286,11 +311,10 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Lat extends AscentValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null) - value.setText(pos(state.gps.lat,"N", "S")); + show(pos(state.gps.lat,"N", "S")); else - value.setText("???"); + show("???"); } public Lat (GridBagLayout layout, int y) { super (layout, y, "Latitude"); @@ -301,11 +325,10 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Lon extends AscentValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null) - value.setText(pos(state.gps.lon,"E", "W")); + show(pos(state.gps.lon,"E", "W")); else - value.setText("???"); + show("???"); } public Lon (GridBagLayout layout, int y) { super (layout, y, "Longitude"); diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java index 61709afe..e9ff590b 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -37,6 +37,15 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { lights.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(String format, double value) { + show(String.format(format, value)); + } + void hide() { label.setVisible(false); value.setVisible(false); @@ -111,16 +120,17 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { value.setVisible(false); } - void show(AltosUnits units, double v) { - value.setText(units.show(8, v)); + void show(String v) { + show(); + value.setText(v); } - void show(String format, double v) { - value.setText(String.format(format, v)); + void show(AltosUnits units, double v) { + show(units.show(8, v)); } - void show(String v) { - value.setText(v); + void show(String format, double v) { + show(String.format(format, v)); } void set_font() { @@ -297,10 +307,22 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { Lon lon; + class Distance extends DescentValue { + void show(AltosState state, int crc_errors) { + show(AltosConvert.distance, state.from_pad.distance); + } + + public Distance (GridBagLayout layout, int x, int y) { + super(layout, x, y, "Ground Distance"); + } + } + + Distance distance; + + class Apogee extends DescentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -312,8 +334,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { class Main extends DescentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -369,6 +390,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { speed.reset(); bearing.reset(); range.reset(); + distance.reset(); elevation.reset(); main.reset(); apogee.reset(); @@ -381,6 +403,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { speed.set_font(); bearing.set_font(); range.set_font(); + distance.set_font(); elevation.set_font(); main.set_font(); apogee.set_font(); @@ -392,12 +415,14 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { if (state.gps != null && state.gps.connected) { bearing.show(state, crc_errors); range.show(state, crc_errors); + distance.show(state, crc_errors); elevation.show(state, crc_errors); lat.show(state, crc_errors); lon.show(state, crc_errors); } else { bearing.hide(); range.hide(); + distance.hide(); elevation.hide(); lat.hide(); lon.hide(); @@ -423,10 +448,11 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { elevation = new Elevation(layout, 0, 1); range = new Range(layout, 2, 1); bearing = new Bearing(layout, 0, 2); - lat = new Lat(layout, 0, 3); - lon = new Lon(layout, 2, 3); + distance = new Distance(layout, 0, 3); + lat = new Lat(layout, 0, 4); + lon = new Lon(layout, 2, 4); - apogee = new Apogee(layout, 4); - main = new Main(layout, 5); + apogee = new Apogee(layout, 5); + main = new Main(layout, 6); } } diff --git a/altosui/AltosKML.java b/altosui/AltosKML.java index 952fb141..57339b19 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -130,6 +130,7 @@ public class AltosKML implements AltosWriter { if (gps == null) return; + if ((record.seen & (AltosRecord.seen_flight)) == 0) return; if ((record.seen & (AltosRecord.seen_gps_lat)) == 0) diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index c6ef55fd..57c2d476 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -40,6 +40,19 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio value.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + public void set_font() { label.setFont(Altos.label_font); value.setFont(Altos.value_font); @@ -50,12 +63,6 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio value.setVisible(false); } - void show(String format, double v) { - show(); - value.setText(String.format(format, v)); - } - - public LandedValue (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1; @@ -96,11 +103,10 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Lat extends LandedValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null && state.gps.connected) - value.setText(pos(state.gps.lat,"N", "S")); + show(pos(state.gps.lat,"N", "S")); else - value.setText("???"); + show("???"); } public Lat (GridBagLayout layout, int y) { super (layout, y, "Latitude"); @@ -113,9 +119,9 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio void show (AltosState state, int crc_errors) { show(); if (state.gps != null && state.gps.connected) - value.setText(pos(state.gps.lon,"E", "W")); + show(pos(state.gps.lon,"E", "W")); else - value.setText("???"); + show("???"); } public Lon (GridBagLayout layout, int y) { super (layout, y, "Longitude"); @@ -130,7 +136,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio if (state.from_pad != null) show("%3.0f°", state.from_pad.bearing); else - value.setText("???"); + show("???"); } public Bearing (GridBagLayout layout, int y) { super (layout, y, "Bearing"); @@ -143,9 +149,9 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio void show (AltosState state, int crc_errors) { show(); if (state.from_pad != null) - show("%6.0f m", state.from_pad.distance); + show(AltosConvert.distance, state.from_pad.distance); else - value.setText("???"); + show("???"); } public Distance (GridBagLayout layout, int y) { super (layout, y, "Distance"); @@ -156,7 +162,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Height extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m", state.max_height); + show(AltosConvert.height, state.max_height); } public Height (GridBagLayout layout, int y) { super (layout, y, "Maximum Height"); @@ -167,7 +173,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Speed extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m/s", state.max_speed); + show(AltosConvert.speed, state.max_speed); } public Speed (GridBagLayout layout, int y) { super (layout, y, "Maximum Speed"); @@ -178,7 +184,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Accel extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m/s²", state.max_acceleration); + show(AltosConvert.accel, state.max_acceleration); } public Accel (GridBagLayout layout, int y) { super (layout, y, "Maximum Acceleration"); diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index f2deb165..2d9c8323 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -30,6 +30,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { AltosLights lights; void show(AltosState state, int crc_errors) {} + void reset() { value.setText(""); lights.set(false); @@ -41,6 +42,19 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { lights.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(String format, double value) { + show(String.format(format, value)); + } + + void show(String format, int value) { + show(String.format(format, value)); + } + public void hide() { label.setVisible(false); value.setVisible(false); @@ -108,9 +122,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { value.setFont(Altos.value_font); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void reset() { value.setText(""); } + public LaunchValue (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad); @@ -140,7 +168,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Battery extends LaunchStatus { void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.2f V", state.battery)); + show("%4.2f V", state.battery); lights.set(state.battery > 3.7); } public Battery (GridBagLayout layout, int y) { @@ -152,8 +180,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Apogee extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -165,8 +192,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Main extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -178,17 +204,16 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class LoggingReady extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); if (state.data.flight != 0) { if (state.data.state <= Altos.ao_flight_pad) - value.setText("Ready to record"); + show("Ready to record"); else if (state.data.state < Altos.ao_flight_landed) - value.setText("Recording data"); + show("Recording data"); else - value.setText("Recorded data"); + show("Recorded data"); } else - value.setText("Storage full"); + show("Storage full"); lights.set(state.data.flight != 0); } public LoggingReady (GridBagLayout layout, int y) { @@ -200,8 +225,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class GPSLocked extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4d sats", state.gps.nsat)); + show("%4d sats", state.gps.nsat); lights.set(state.gps.locked && state.gps.nsat >= 4); } public GPSLocked (GridBagLayout layout, int y) { @@ -213,11 +237,10 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class GPSReady extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); if (state.gps_ready) - value.setText("Ready"); + show("Ready"); else - value.setText(String.format("Waiting %d", state.gps_waiting)); + show("Waiting %d", state.gps_waiting); lights.set(state.gps_ready); } public GPSReady (GridBagLayout layout, int y) { @@ -240,8 +263,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadLat extends LaunchValue { void show (AltosState state, int crc_errors) { - show(); - value.setText(pos(state.pad_lat,"N", "S")); + show(pos(state.pad_lat,"N", "S")); } public PadLat (GridBagLayout layout, int y) { super (layout, y, "Pad Latitude"); @@ -252,8 +274,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadLon extends LaunchValue { void show (AltosState state, int crc_errors) { - show(); - value.setText(pos(state.pad_lon,"E", "W")); + show(pos(state.pad_lon,"E", "W")); } public PadLon (GridBagLayout layout, int y) { super (layout, y, "Pad Longitude"); @@ -264,7 +285,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadAlt extends LaunchValue { void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.0f m", state.pad_alt)); + show("%4.0f m", state.pad_alt); } public PadAlt (GridBagLayout layout, int y) { super (layout, y, "Pad Altitude"); diff --git a/src/cc1111/ao_arch.h b/src/cc1111/ao_arch.h index a97515a7..7fdfad80 100644 --- a/src/cc1111/ao_arch.h +++ b/src/cc1111/ao_arch.h @@ -229,17 +229,17 @@ ao_button_clear(void) __critical; /* ao_string.c */ void -_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count); +_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count); #define ao_xmemcpy(d,s,c) _ao_xmemcpy(d,s,c) void -_ao_xmemset(__xdata void *dst, uint8_t value, uint8_t count); +_ao_xmemset(__xdata void *dst, uint8_t value, uint16_t count); #define ao_xmemset(d,v,c) _ao_xmemset(d,v,c) int8_t -_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count); +_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count); #define ao_xmemcmp(d,s,c) _ao_xmemcmp((d), (s), (c)) diff --git a/src/cc1111/ao_string.c b/src/cc1111/ao_string.c index 3a07e47e..85d6383e 100644 --- a/src/cc1111/ao_string.c +++ b/src/cc1111/ao_string.c @@ -18,7 +18,7 @@ #include "ao.h" void -_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count) +_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count) { while (count--) { *(__xdata uint8_t *) dst = *(__xdata uint8_t *) src; @@ -28,7 +28,7 @@ _ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count) } void -_ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count) +_ao_xmemset(__xdata void *dst, uint8_t v, uint16_t count) { while (count--) { *(__xdata uint8_t *) dst = v; @@ -37,7 +37,7 @@ _ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count) } int8_t -_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count) +_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count) { while (count--) { int8_t d = *(__xdata int8_t *) a - *(__xdata int8_t *) b; |