summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altoslib/AltosConfigData.java6
-rw-r--r--altoslib/AltosFlightReader.java4
-rw-r--r--altoslib/AltosGPS.java57
-rw-r--r--altoslib/AltosIdleMonitor.java6
-rw-r--r--altoslib/AltosLink.java57
-rw-r--r--altoslib/AltosListenerState.java28
-rw-r--r--altoslib/AltosRecord.java24
-rw-r--r--altoslib/AltosSensorMM.java122
-rw-r--r--altoslib/AltosSensorTM.java80
-rw-r--r--altoslib/AltosState.java21
-rw-r--r--altoslib/AltosTelemetryReader.java8
-rw-r--r--altoslib/Makefile.am1
-rw-r--r--altosui/AltosAscent.java36
-rw-r--r--altosui/AltosCompanionInfo.java2
-rw-r--r--altosui/AltosDescent.java48
-rw-r--r--altosui/AltosDisplayThread.java55
-rw-r--r--altosui/AltosFlightDisplay.java2
-rw-r--r--altosui/AltosFlightStatus.java38
-rw-r--r--altosui/AltosFlightStatusUpdate.java12
-rw-r--r--altosui/AltosFlightUI.java31
-rw-r--r--altosui/AltosGraphUI.java2
-rw-r--r--altosui/AltosIdleMonitorUI.java10
-rw-r--r--altosui/AltosInfoTable.java213
-rw-r--r--altosui/AltosLanded.java32
-rw-r--r--altosui/AltosPad.java199
-rw-r--r--altosui/AltosSiteMap.java6
-rw-r--r--altosui/AltosSiteMapTile.java2
-rw-r--r--src/core/ao.h2
-rw-r--r--src/stm/ao_timer.c11
29 files changed, 632 insertions, 483 deletions
diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java
index 45b95646..57605607 100644
--- a/altoslib/AltosConfigData.java
+++ b/altoslib/AltosConfigData.java
@@ -135,6 +135,12 @@ public class AltosConfigData implements Iterable<String> {
}
}
+ public boolean has_monitor_battery() {
+ if (product.startsWith("TeleBT"))
+ return true;
+ return false;
+ }
+
int[] parse_version(String v) {
String[] parts = v.split("\\.");
int r[] = new int[parts.length];
diff --git a/altoslib/AltosFlightReader.java b/altoslib/AltosFlightReader.java
index 3039b4dc..34526658 100644
--- a/altoslib/AltosFlightReader.java
+++ b/altoslib/AltosFlightReader.java
@@ -45,4 +45,8 @@ public class AltosFlightReader {
public boolean supports_telemetry(int telemetry) { return false; }
public File backing_file() { return null; }
+
+ public boolean has_monitor_battery() { return false; }
+
+ public double monitor_battery() { return AltosRecord.MISSING; }
}
diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java
index 068d8c9c..f23842f3 100644
--- a/altoslib/AltosGPS.java
+++ b/altoslib/AltosGPS.java
@@ -217,33 +217,38 @@ public class AltosGPS {
}
public AltosGPS(AltosGPS old) {
- nsat = old.nsat;
- locked = old.locked;
- connected = old.connected;
- lat = old.lat; /* degrees (+N -S) */
- lon = old.lon; /* degrees (+E -W) */
- alt = old.alt; /* m */
- year = old.year;
- month = old.month;
- day = old.day;
- hour = old.hour;
- minute = old.minute;
- second = old.second;
-
- ground_speed = old.ground_speed; /* m/s */
- course = old.course; /* degrees */
- climb_rate = old.climb_rate; /* m/s */
- hdop = old.hdop; /* unitless? */
- h_error = old.h_error; /* m */
- v_error = old.v_error; /* m */
-
- if (old.cc_gps_sat != null) {
- cc_gps_sat = new AltosGPSSat[old.cc_gps_sat.length];
- for (int i = 0; i < old.cc_gps_sat.length; i++) {
- cc_gps_sat[i] = new AltosGPSSat();
- cc_gps_sat[i].svid = old.cc_gps_sat[i].svid;
- cc_gps_sat[i].c_n0 = old.cc_gps_sat[i].c_n0;
+ if (old != null) {
+ nsat = old.nsat;
+ locked = old.locked;
+ connected = old.connected;
+ lat = old.lat; /* degrees (+N -S) */
+ lon = old.lon; /* degrees (+E -W) */
+ alt = old.alt; /* m */
+ year = old.year;
+ month = old.month;
+ day = old.day;
+ hour = old.hour;
+ minute = old.minute;
+ second = old.second;
+
+ ground_speed = old.ground_speed; /* m/s */
+ course = old.course; /* degrees */
+ climb_rate = old.climb_rate; /* m/s */
+ hdop = old.hdop; /* unitless? */
+ h_error = old.h_error; /* m */
+ v_error = old.v_error; /* m */
+
+ if (old.cc_gps_sat != null) {
+ cc_gps_sat = new AltosGPSSat[old.cc_gps_sat.length];
+ for (int i = 0; i < old.cc_gps_sat.length; i++) {
+ cc_gps_sat[i] = new AltosGPSSat();
+ cc_gps_sat[i].svid = old.cc_gps_sat[i].svid;
+ cc_gps_sat[i].c_n0 = old.cc_gps_sat[i].c_n0;
+ }
}
+ } else {
+ ClearGPSTime();
+ cc_gps_sat = null;
}
}
}
diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java
index f2f75bbb..ec51b9c1 100644
--- a/altoslib/AltosIdleMonitor.java
+++ b/altoslib/AltosIdleMonitor.java
@@ -116,8 +116,10 @@ public class AltosIdleMonitor extends Thread {
} finally {
if (remote) {
link.stop_remote();
- if (record != null)
- record.rssi = AltosRSSI();
+ if (record != null) {
+ record.rssi = link.rssi();
+ record.monitor_battery = link.monitor_battery();
+ }
} else {
if (record != null)
record.rssi = 0;
diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java
index 9eb25ce0..159ebfe1 100644
--- a/altoslib/AltosLink.java
+++ b/altoslib/AltosLink.java
@@ -364,6 +364,63 @@ public abstract class AltosLink implements Runnable {
remote = false;
}
+ public int rssi() throws TimeoutException, InterruptedException {
+ if (remote)
+ return 0;
+ printf("s\n");
+ String line = get_reply_no_dialog(5000);
+ if (line == null)
+ throw new TimeoutException();
+ String[] items = line.split("\\s+");
+ if (items.length < 2)
+ return 0;
+ if (!items[0].equals("RSSI:"))
+ return 0;
+ int rssi = Integer.parseInt(items[1]);
+ return rssi;
+ }
+
+ public String[] adc() throws TimeoutException, InterruptedException {
+ printf("a\n");
+ for (;;) {
+ String line = get_reply_no_dialog(5000);
+ if (line == null) {
+ throw new TimeoutException();
+ }
+ if (!line.startsWith("tick:"))
+ continue;
+ String[] items = line.split("\\s+");
+ return items;
+ }
+ }
+
+ public boolean has_monitor_battery() {
+ return config_data.has_monitor_battery();
+ }
+
+ public double monitor_battery() {
+ int monitor_batt = AltosRecord.MISSING;
+
+ if (config_data.has_monitor_battery()) {
+ try {
+ String[] items = adc();
+ for (int i = 0; i < items.length;) {
+ if (items[i].equals("batt")) {
+ monitor_batt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ i++;
+ }
+ } catch (InterruptedException ie) {
+ } catch (TimeoutException te) {
+ }
+ }
+ if (monitor_batt == AltosRecord.MISSING)
+ return AltosRecord.MISSING;
+ return AltosConvert.cc_battery_to_voltage(monitor_batt);
+ }
+
public AltosLink() {
callsign = "";
}
diff --git a/altoslib/AltosListenerState.java b/altoslib/AltosListenerState.java
new file mode 100644
index 00000000..2fb4673e
--- /dev/null
+++ b/altoslib/AltosListenerState.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_1;
+
+public class AltosListenerState {
+ public int crc_errors;
+ public double battery;
+
+ public AltosListenerState() {
+ crc_errors = 0;
+ battery = AltosRecord.MISSING;
+ }
+}
diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java
index f8c44cc5..7046b9f1 100644
--- a/altoslib/AltosRecord.java
+++ b/altoslib/AltosRecord.java
@@ -17,7 +17,7 @@
package org.altusmetrum.altoslib_1;
-public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable {
+public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
public static final int seen_flight = 1;
public static final int seen_sensor = 2;
@@ -75,15 +75,17 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable
* temperature: °C
*/
- abstract public double pressure();
- abstract public double ground_pressure();
- abstract public double acceleration();
+ public double pressure() { return MISSING; }
+ public double ground_pressure() { return MISSING; }
+ public double acceleration() { return MISSING; }
public double altitude() {
double p = pressure();
- if (p == MISSING)
+ if (p == MISSING) {
+ System.out.printf ("altitude missing\n");
return MISSING;
+ }
return AltosConvert.pressure_to_altitude(p);
}
@@ -126,7 +128,11 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable
return tick - o.tick;
}
- abstract public AltosRecord clone();
+ public AltosRecord clone() {
+ AltosRecord n = new AltosRecord();
+ n.copy(this);
+ return n;
+ }
public void copy(AltosRecord old) {
seen = old.seen;
@@ -150,13 +156,13 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable
seen = 0;
version = 0;
callsign = "N0CALL";
- serial = 0;
- flight = 0;
+ serial = MISSING;
+ flight = MISSING;
rssi = 0;
status = 0;
state = AltosLib.ao_flight_startup;
tick = 0;
- gps = new AltosGPS();
+ gps = null;
new_gps = false;
companion = null;
diff --git a/altoslib/AltosSensorMM.java b/altoslib/AltosSensorMM.java
index 8372d047..6d1b61c0 100644
--- a/altoslib/AltosSensorMM.java
+++ b/altoslib/AltosSensorMM.java
@@ -28,75 +28,65 @@ class AltosSensorMM {
int accel_ref;
public AltosSensorMM(AltosLink link) throws InterruptedException, TimeoutException {
- link.printf("a\n");
- for (;;) {
- String line = link.get_reply_no_dialog(5000);
- if (line == null) {
- throw new TimeoutException();
+ String[] items = link.adc();
+ sense = new int[6];
+ for (int i = 0; i < items.length;) {
+ if (items[i].equals("tick:")) {
+ tick = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("0:")) {
+ sense[0] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("1:")) {
+ sense[1] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("2:")) {
+ sense[2] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("3:")) {
+ sense[3] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("4:")) {
+ sense[4] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("5:")) {
+ sense[5] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("6:")) {
+ v_batt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("7:")) {
+ v_pyro = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("8:")) {
+ accel = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
}
- if (!line.startsWith("tick:"))
+ if (items[i].equals("9:")) {
+ accel_ref = Integer.parseInt(items[i+1]);
+ i += 2;
continue;
- String[] items = line.split("\\s+");
- sense = new int[6];
- for (int i = 0; i < items.length;) {
- if (items[i].equals("tick:")) {
- tick = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("0:")) {
- sense[0] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("1:")) {
- sense[1] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("2:")) {
- sense[2] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("3:")) {
- sense[3] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("4:")) {
- sense[4] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("5:")) {
- sense[5] = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("6:")) {
- v_batt = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("7:")) {
- v_pyro = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("8:")) {
- accel = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("9:")) {
- accel_ref = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- i++;
}
- break;
+ i++;
}
}
}
diff --git a/altoslib/AltosSensorTM.java b/altoslib/AltosSensorTM.java
index f5fa83a5..754dc5bb 100644
--- a/altoslib/AltosSensorTM.java
+++ b/altoslib/AltosSensorTM.java
@@ -23,54 +23,44 @@ class AltosSensorTM extends AltosRecordTM {
public AltosSensorTM(AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException {
super();
- link.printf("a\n");
- for (;;) {
- String line = link.get_reply_no_dialog(5000);
- if (line == null) {
- throw new TimeoutException();
+ String[] items = link.adc();
+ for (int i = 0; i < items.length;) {
+ if (items[i].equals("tick:")) {
+ tick = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("accel:")) {
+ accel = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("pres:")) {
+ pres = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("temp:")) {
+ temp = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("batt:")) {
+ batt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("drogue:")) {
+ drogue = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
}
- if (!line.startsWith("tick:"))
+ if (items[i].equals("main:")) {
+ main = Integer.parseInt(items[i+1]);
+ i += 2;
continue;
- String[] items = line.split("\\s+");
- for (int i = 0; i < items.length;) {
- if (items[i].equals("tick:")) {
- tick = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("accel:")) {
- accel = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("pres:")) {
- pres = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("temp:")) {
- temp = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("batt:")) {
- batt = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("drogue:")) {
- drogue = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- if (items[i].equals("main:")) {
- main = Integer.parseInt(items[i+1]);
- i += 2;
- continue;
- }
- i++;
}
- break;
+ i++;
}
ground_accel = config_data.accel_cal_plus;
ground_pres = pres;
diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java
index 8a3bbd4c..f1bcb1c1 100644
--- a/altoslib/AltosState.java
+++ b/altoslib/AltosState.java
@@ -155,30 +155,41 @@ public class AltosState {
/* compute barometric speed */
double height_change = height - prev_state.height;
+
+ double prev_baro_speed = prev_state.baro_speed;
+ if (prev_baro_speed == AltosRecord.MISSING)
+ prev_baro_speed = 0;
+
if (time_change > 0)
- baro_speed = (prev_state.baro_speed * 3 + (height_change / time_change)) / 4.0;
+ baro_speed = (prev_baro_speed * 3 + (height_change / time_change)) / 4.0;
else
baro_speed = prev_state.baro_speed;
+ double prev_accel_speed = prev_state.accel_speed;
+
+ if (prev_accel_speed == AltosRecord.MISSING)
+ prev_accel_speed = 0;
+
if (acceleration == AltosRecord.MISSING) {
/* Fill in mising acceleration value */
accel_speed = baro_speed;
- if (time_change > 0)
- acceleration = (accel_speed - prev_state.accel_speed) / time_change;
+
+ if (time_change > 0 && accel_speed != AltosRecord.MISSING)
+ acceleration = (accel_speed - prev_accel_speed) / time_change;
else
acceleration = prev_state.acceleration;
} else {
/* compute accelerometer speed */
- accel_speed = prev_state.accel_speed + acceleration * time_change;
+ accel_speed = prev_accel_speed + acceleration * time_change;
}
}
-
} else {
npad = 0;
ngps = 0;
gps = null;
baro_speed = AltosRecord.MISSING;
accel_speed = AltosRecord.MISSING;
+ pad_alt = AltosRecord.MISSING;
max_baro_speed = 0;
max_accel_speed = 0;
max_height = 0;
diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java
index f365b821..b4293c73 100644
--- a/altoslib/AltosTelemetryReader.java
+++ b/altoslib/AltosTelemetryReader.java
@@ -107,6 +107,14 @@ public class AltosTelemetryReader extends AltosFlightReader {
return log.file();
}
+ public boolean has_monitor_battery() {
+ return link.has_monitor_battery();
+ }
+
+ public double monitor_battery() {
+ return link.monitor_battery();
+ }
+
public AltosTelemetryReader (AltosLink in_link)
throws IOException, InterruptedException, TimeoutException {
link = in_link;
diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am
index 8e5701ad..30a9d954 100644
--- a/altoslib/Makefile.am
+++ b/altoslib/Makefile.am
@@ -37,6 +37,7 @@ altoslib_JAVA = \
AltosIMUQuery.java \
AltosLine.java \
AltosLink.java \
+ AltosListenerState.java \
AltosLog.java \
AltosMs5607.java \
AltosMs5607Query.java \
diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java
index 80a5b759..4da4d591 100644
--- a/altosui/AltosAscent.java
+++ b/altosui/AltosAscent.java
@@ -42,7 +42,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
label.setVisible(false);
}
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void show(String s) {
show();
@@ -107,7 +107,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
public class AscentValue {
JLabel label;
JTextField value;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void reset() {
value.setText("");
@@ -174,7 +174,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
JTextField max_value;
double max;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void reset() {
value.setText("");
@@ -239,7 +239,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
class Height extends AscentValueHold {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.height, state.height);
}
public Height (GridBagLayout layout, int y) {
@@ -250,7 +250,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
Height height;
class Speed extends AscentValueHold {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
double speed = state.accel_speed;
if (!state.ascent)
speed = state.baro_speed;
@@ -264,7 +264,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
Speed speed;
class Accel extends AscentValueHold {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.accel, state.acceleration);
}
public Accel (GridBagLayout layout, int y) {
@@ -286,7 +286,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
}
class Apogee extends AscentStatus {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show("%4.2f V", state.drogue_sense);
lights.set(state.drogue_sense > 3.2);
}
@@ -298,7 +298,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
Apogee apogee;
class Main extends AscentStatus {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show("%4.2f V", state.main_sense);
lights.set(state.main_sense > 3.2);
}
@@ -310,7 +310,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
Main main;
class Lat extends AscentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.gps != null)
show(pos(state.gps.lat,"N", "S"));
else
@@ -324,7 +324,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
Lat lat;
class Lon extends AscentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.gps != null)
show(pos(state.gps.lon,"E", "W"));
else
@@ -359,25 +359,25 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
accel.set_font();
}
- public void show(AltosState state, int crc_errors) {
+ public void show(AltosState state, AltosListenerState listener_state) {
if (state.gps != null && state.gps.connected) {
- lat.show(state, crc_errors);
- lon.show(state, crc_errors);
+ lat.show(state, listener_state);
+ lon.show(state, listener_state);
} else {
lat.hide();
lon.hide();
}
- height.show(state, crc_errors);
+ height.show(state, listener_state);
if (state.main_sense != AltosRecord.MISSING)
- main.show(state, crc_errors);
+ main.show(state, listener_state);
else
main.hide();
if (state.drogue_sense != AltosRecord.MISSING)
- apogee.show(state, crc_errors);
+ apogee.show(state, listener_state);
else
apogee.hide();
- speed.show(state, crc_errors);
- accel.show(state, crc_errors);
+ speed.show(state, listener_state);
+ accel.show(state, listener_state);
}
public void labels(GridBagLayout layout, int y) {
diff --git a/altosui/AltosCompanionInfo.java b/altosui/AltosCompanionInfo.java
index 7dd36aec..ebe1d1f9 100644
--- a/altosui/AltosCompanionInfo.java
+++ b/altosui/AltosCompanionInfo.java
@@ -83,7 +83,7 @@ public class AltosCompanionInfo extends JTable {
}
}
- public void show(AltosState state, int crc_errors) {
+ public void show(AltosState state, AltosListenerState listener_state) {
if (state == null)
return;
if (state.data.companion != null)
diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java
index 9838f46b..29d33ddc 100644
--- a/altosui/AltosDescent.java
+++ b/altosui/AltosDescent.java
@@ -29,7 +29,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
JTextField value;
AltosLights lights;
- abstract void show(AltosState state, int crc_errors);
+ abstract void show(AltosState state, AltosListenerState listener_state);
void show() {
label.setVisible(true);
@@ -108,7 +108,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
value.setText("");
}
- abstract void show(AltosState state, int crc_errors);
+ abstract void show(AltosState state, AltosListenerState listener_state);
void show() {
label.setVisible(true);
@@ -192,7 +192,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
value2.setFont(Altos.value_font);
}
- abstract void show(AltosState state, int crc_errors);
+ abstract void show(AltosState state, AltosListenerState listener_state);
void show(String v1, String v2) {
show();
@@ -244,7 +244,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
}
class Height extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.height, state.height);
}
public Height (GridBagLayout layout, int x, int y) {
@@ -255,7 +255,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Height height;
class Speed extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
double speed = state.accel_speed;
if (!state.ascent)
speed = state.baro_speed;
@@ -280,7 +280,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
}
class Lat extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.gps != null && state.gps.connected)
show(pos(state.gps.lat,"N", "S"));
else
@@ -294,7 +294,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Lat lat;
class Lon extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.gps != null && state.gps.connected)
show(pos(state.gps.lon,"W", "E"));
else
@@ -308,7 +308,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Lon lon;
class Distance extends DescentValue {
- void show(AltosState state, int crc_errors) {
+ void show(AltosState state, AltosListenerState listener_state) {
if (state.from_pad != null)
show(AltosConvert.distance, state.from_pad.distance);
else
@@ -324,7 +324,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
class Apogee extends DescentStatus {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show("%4.2f V", state.drogue_sense);
lights.set(state.drogue_sense > 3.2);
}
@@ -336,7 +336,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Apogee apogee;
class Main extends DescentStatus {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show("%4.2f V", state.main_sense);
lights.set(state.main_sense > 3.2);
}
@@ -348,7 +348,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Main main;
class Bearing extends DescentDualValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.from_pad != null) {
show( String.format("%3.0f°", state.from_pad.bearing),
state.from_pad.bearing_words(
@@ -365,7 +365,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Bearing bearing;
class Range extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.distance, state.range);
}
public Range (GridBagLayout layout, int x, int y) {
@@ -376,7 +376,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
Range range;
class Elevation extends DescentValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show("%3.0f°", state.elevation);
}
public Elevation (GridBagLayout layout, int x, int y) {
@@ -412,16 +412,16 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
apogee.set_font();
}
- public void show(AltosState state, int crc_errors) {
- height.show(state, crc_errors);
- speed.show(state, crc_errors);
+ public void show(AltosState state, AltosListenerState listener_state) {
+ height.show(state, listener_state);
+ speed.show(state, listener_state);
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);
+ bearing.show(state, listener_state);
+ range.show(state, listener_state);
+ distance.show(state, listener_state);
+ elevation.show(state, listener_state);
+ lat.show(state, listener_state);
+ lon.show(state, listener_state);
} else {
bearing.hide();
range.hide();
@@ -431,11 +431,11 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
lon.hide();
}
if (state.main_sense != AltosRecord.MISSING)
- main.show(state, crc_errors);
+ main.show(state, listener_state);
else
main.hide();
if (state.drogue_sense != AltosRecord.MISSING)
- apogee.show(state, crc_errors);
+ apogee.show(state, listener_state);
else
apogee.hide();
}
diff --git a/altosui/AltosDisplayThread.java b/altosui/AltosDisplayThread.java
index 6f8aa9ee..095bed99 100644
--- a/altosui/AltosDisplayThread.java
+++ b/altosui/AltosDisplayThread.java
@@ -29,21 +29,17 @@ public class AltosDisplayThread extends Thread {
IdleThread idle_thread;
AltosVoice voice;
AltosFlightReader reader;
- int crc_errors;
+ AltosState old_state, state;
+ AltosListenerState listener_state;
AltosFlightDisplay display;
- void show_internal(AltosState state, int crc_errors) {
- if (state != null)
- display.show(state, crc_errors);
- }
-
- void show_safely(AltosState in_state, int in_crc_errors) {
- final AltosState state = in_state;
- final int crc_errors = in_crc_errors;
+ synchronized void show_safely() {
+ final AltosState my_state = state;
+ final AltosListenerState my_listener_state = listener_state;
Runnable r = new Runnable() {
public void run() {
try {
- show_internal(state, crc_errors);
+ display.show(my_state, my_listener_state);
} catch (Exception ex) {
}
}
@@ -73,7 +69,6 @@ public class AltosDisplayThread extends Thread {
class IdleThread extends Thread {
boolean started;
- private AltosState state;
int reported_landing;
int report_interval;
long report_time;
@@ -129,7 +124,7 @@ public class AltosDisplayThread extends Thread {
++reported_landing;
if (state.state != Altos.ao_flight_landed) {
state.state = Altos.ao_flight_landed;
- show_safely(state, 0);
+ show_safely();
}
}
}
@@ -145,6 +140,10 @@ public class AltosDisplayThread extends Thread {
public void run () {
try {
for (;;) {
+ if (reader.has_monitor_battery()) {
+ listener_state.battery = reader.monitor_battery();
+ show_safely();
+ }
set_report_time();
for (;;) {
voice.drain();
@@ -155,6 +154,7 @@ public class AltosDisplayThread extends Thread {
wait(sleep_time);
}
}
+
report(false);
}
} catch (InterruptedException ie) {
@@ -164,18 +164,7 @@ public class AltosDisplayThread extends Thread {
}
}
- public synchronized void notice(AltosState new_state, boolean spoken) {
- AltosState old_state = state;
- state = new_state;
- if (!started && state.state > Altos.ao_flight_pad) {
- started = true;
- start();
- }
-
- if (state.state < Altos.ao_flight_drogue)
- report_interval = 10000;
- else
- report_interval = 20000;
+ public synchronized void notice(boolean spoken) {
if (old_state != null && old_state.state != state.state) {
report_time = now();
this.notify();
@@ -184,13 +173,12 @@ public class AltosDisplayThread extends Thread {
}
public IdleThread() {
- state = null;
reported_landing = 0;
report_interval = 10000;
}
}
- boolean tell(AltosState state, AltosState old_state) {
+ synchronized boolean tell() {
boolean ret = false;
if (old_state == null || old_state.state != state.state) {
voice.speak(state.data.state());
@@ -222,12 +210,10 @@ public class AltosDisplayThread extends Thread {
public void run() {
boolean interrupted = false;
- //String line;
- AltosState state = null;
- AltosState old_state = null;
boolean told;
idle_thread = new IdleThread();
+ idle_thread.start();
try {
for (;;) {
@@ -238,14 +224,14 @@ public class AltosDisplayThread extends Thread {
old_state = state;
state = new AltosState(record, state);
reader.update(state);
- show_safely(state, crc_errors);
- told = tell(state, old_state);
- idle_thread.notice(state, told);
+ show_safely();
+ told = tell();
+ idle_thread.notice(told);
} catch (ParseException pp) {
System.out.printf("Parse error: %d \"%s\"\n", pp.getErrorOffset(), pp.getMessage());
} catch (AltosCRCException ce) {
- ++crc_errors;
- show_safely(state, crc_errors);
+ ++listener_state.crc_errors;
+ show_safely();
}
}
} catch (InterruptedException ee) {
@@ -264,6 +250,7 @@ public class AltosDisplayThread extends Thread {
}
public AltosDisplayThread(Frame in_parent, AltosVoice in_voice, AltosFlightDisplay in_display, AltosFlightReader in_reader) {
+ listener_state = new AltosListenerState();
parent = in_parent;
voice = in_voice;
display = in_display;
diff --git a/altosui/AltosFlightDisplay.java b/altosui/AltosFlightDisplay.java
index d1ed7d2f..4f4c158e 100644
--- a/altosui/AltosFlightDisplay.java
+++ b/altosui/AltosFlightDisplay.java
@@ -22,7 +22,7 @@ import org.altusmetrum.altoslib_1.*;
public interface AltosFlightDisplay {
void reset();
- void show(AltosState state, int crc_errors);
+ void show(AltosState state, AltosListenerState listener_state);
void set_font();
}
diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java
index 20539a9f..d2910414 100644
--- a/altosui/AltosFlightStatus.java
+++ b/altosui/AltosFlightStatus.java
@@ -28,7 +28,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
JLabel label;
JTextField value;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void reset() {
value.setText("");
@@ -64,7 +64,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
}
class Call extends FlightValue {
- void show(AltosState state, int crc_errors) {
+ void show(AltosState state, AltosListenerState listener_state) {
value.setText(state.data.callsign);
}
public Call (GridBagLayout layout, int x) {
@@ -75,8 +75,11 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
Call call;
class Serial extends FlightValue {
- void show(AltosState state, int crc_errors) {
- value.setText(String.format("%d", state.data.serial));
+ void show(AltosState state, AltosListenerState listener_state) {
+ if (state.data.serial == AltosRecord.MISSING)
+ value.setText("none");
+ else
+ value.setText(String.format("%d", state.data.serial));
}
public Serial (GridBagLayout layout, int x) {
super (layout, x, "Serial");
@@ -86,8 +89,11 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
Serial serial;
class Flight extends FlightValue {
- void show(AltosState state, int crc_errors) {
- value.setText(String.format("%d", state.data.flight));
+ void show(AltosState state, AltosListenerState listener_state) {
+ if (state.data.flight == AltosRecord.MISSING)
+ value.setText("none");
+ else
+ value.setText(String.format("%d", state.data.flight));
}
public Flight (GridBagLayout layout, int x) {
super (layout, x, "Flight");
@@ -97,7 +103,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
Flight flight;
class FlightState extends FlightValue {
- void show(AltosState state, int crc_errors) {
+ void show(AltosState state, AltosListenerState listener_state) {
value.setText(state.data.state());
}
public FlightState (GridBagLayout layout, int x) {
@@ -108,7 +114,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
FlightState flight_state;
class RSSI extends FlightValue {
- void show(AltosState state, int crc_errors) {
+ void show(AltosState state, AltosListenerState listener_state) {
value.setText(String.format("%d", state.data.rssi));
}
public RSSI (GridBagLayout layout, int x) {
@@ -119,7 +125,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
RSSI rssi;
class LastPacket extends FlightValue {
- void show(AltosState state, int crc_errors) {
+ void show(AltosState state, AltosListenerState listener_state) {
long secs = (System.currentTimeMillis() - state.report_time + 500) / 1000;
value.setText(String.format("%d", secs));
}
@@ -148,13 +154,13 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay
last_packet.set_font();
}
- public void show (AltosState state, int crc_errors) {
- call.show(state, crc_errors);
- serial.show(state, crc_errors);
- flight.show(state, crc_errors);
- flight_state.show(state, crc_errors);
- rssi.show(state, crc_errors);
- last_packet.show(state, crc_errors);
+ public void show (AltosState state, AltosListenerState listener_state) {
+ call.show(state, listener_state);
+ serial.show(state, listener_state);
+ flight.show(state, listener_state);
+ flight_state.show(state, listener_state);
+ rssi.show(state, listener_state);
+ last_packet.show(state, listener_state);
}
public int height() {
diff --git a/altosui/AltosFlightStatusUpdate.java b/altosui/AltosFlightStatusUpdate.java
index bf679b85..962a08f7 100644
--- a/altosui/AltosFlightStatusUpdate.java
+++ b/altosui/AltosFlightStatusUpdate.java
@@ -22,12 +22,16 @@ import org.altusmetrum.altoslib_1.*;
public class AltosFlightStatusUpdate implements ActionListener {
- public AltosState saved_state;
- AltosFlightStatus flightStatus;
+ public AltosState saved_state;
+ public AltosListenerState saved_listener_state;
+ AltosFlightStatus flightStatus;
public void actionPerformed (ActionEvent e) {
- if (saved_state != null)
- flightStatus.show(saved_state, 0);
+ if (saved_state != null) {
+ if (saved_listener_state == null)
+ saved_listener_state = new AltosListenerState();
+ flightStatus.show(saved_state, saved_listener_state);
+ }
}
public AltosFlightStatusUpdate (AltosFlightStatus in_flightStatus) {
diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java
index c04a4357..6b258f2e 100644
--- a/altosui/AltosFlightUI.java
+++ b/altosui/AltosFlightUI.java
@@ -98,11 +98,15 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A
AltosFlightStatusUpdate status_update;
- public void show(AltosState state, int crc_errors) {
+ public void show(AltosState state, AltosListenerState listener_state) {
status_update.saved_state = state;
- JComponent tab = which_tab(state);
- try {
- pad.show(state, crc_errors);
+
+ if (state == null) {
+ System.out.printf ("no state provided\n");
+ state = new AltosState(new AltosRecord());
+ }
+
+ pad.show(state, listener_state);
if (state.state != Altos.ao_flight_startup) {
if (!has_state) {
@@ -114,25 +118,26 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A
}
}
- ascent.show(state, crc_errors);
- descent.show(state, crc_errors);
- landed.show(state, crc_errors);
+ ascent.show(state, listener_state);
+ descent.show(state, listener_state);
+ landed.show(state, listener_state);
+ JComponent tab = which_tab(state);
if (tab != cur_tab) {
if (cur_tab == pane.getSelectedComponent()) {
pane.setSelectedComponent(tab);
}
cur_tab = tab;
}
- flightStatus.show(state, crc_errors);
- flightInfo.show(state, crc_errors);
+ flightStatus.show(state, listener_state);
+ flightInfo.show(state, listener_state);
if (state.data.companion != null) {
if (!has_companion) {
pane.add("Companion", companion);
has_companion= true;
}
- companion.show(state, crc_errors);
+ companion.show(state, listener_state);
} else {
if (has_companion) {
pane.remove(companion);
@@ -144,17 +149,13 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A
pane.add("Site Map", sitemap);
has_map = true;
}
- sitemap.show(state, crc_errors);
+ sitemap.show(state, listener_state);
} else {
if (has_map) {
pane.remove(sitemap);
has_map = false;
}
}
- } catch (Exception e) {
- System.out.print("Show exception " + e + "\n");
- e.printStackTrace();
- }
}
public void set_exit_on_close() {
diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java
index f6e57e7e..d8b8f6dd 100644
--- a/altosui/AltosGraphUI.java
+++ b/altosui/AltosGraphUI.java
@@ -35,7 +35,7 @@ public class AltosGraphUI extends AltosUIFrame
if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) {
if (map == null)
map = new AltosSiteMap();
- map.show(state, 0);
+ map.show(state, null);
has_gps = true;
}
}
diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java
index 8c883eeb..1ef30f0a 100644
--- a/altosui/AltosIdleMonitorUI.java
+++ b/altosui/AltosIdleMonitorUI.java
@@ -63,12 +63,12 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
AltosFlightStatusUpdate status_update;
- public void show(AltosState state, int crc_errors) {
+ public void show(AltosState state, AltosListenerState listener_state) {
status_update.saved_state = state;
try {
- pad.show(state, crc_errors);
- flightStatus.show(state, crc_errors);
- flightInfo.show(state, crc_errors);
+ pad.show(state, listener_state);
+ flightStatus.show(state, listener_state);
+ flightInfo.show(state, listener_state);
} catch (Exception e) {
System.out.print("Show exception" + e);
}
@@ -77,7 +77,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
public void update(final AltosState state) {
Runnable r = new Runnable() {
public void run() {
- show(state, 0);
+ show(state, null);
}
};
SwingUtilities.invokeLater(r);
diff --git a/altosui/AltosInfoTable.java b/altosui/AltosInfoTable.java
index 1dce6daf..3d16faf2 100644
--- a/altosui/AltosInfoTable.java
+++ b/altosui/AltosInfoTable.java
@@ -104,111 +104,118 @@ public class AltosInfoTable extends JTable {
model.clear();
}
- public void show(AltosState state, int crc_errors) {
- if (state == null)
- return;
+ public void show(AltosState state, AltosListenerState listener_state) {
info_reset();
- if (state.altitude != AltosRecord.MISSING)
- info_add_row(0, "Altitude", "%6.0f m", state.altitude);
- if (state.ground_altitude != AltosRecord.MISSING)
- info_add_row(0, "Pad altitude", "%6.0f m", state.ground_altitude);
- if (state.height != AltosRecord.MISSING)
- info_add_row(0, "Height", "%6.0f m", state.height);
- if (state.max_height != AltosRecord.MISSING)
- info_add_row(0, "Max height", "%6.0f m", state.max_height);
- if (state.acceleration != AltosRecord.MISSING)
- info_add_row(0, "Acceleration", "%8.1f m/s²", state.acceleration);
- if (state.max_acceleration != AltosRecord.MISSING)
- info_add_row(0, "Max acceleration", "%8.1f m/s²", state.max_acceleration);
- if (state.speed() != AltosRecord.MISSING)
- info_add_row(0, "Speed", "%8.1f m/s", state.speed());
- if (state.max_speed() != AltosRecord.MISSING)
- info_add_row(0, "Max Speed", "%8.1f m/s", state.max_accel_speed);
- if (state.temperature != AltosRecord.MISSING)
- info_add_row(0, "Temperature", "%9.2f °C", state.temperature);
- if (state.battery != AltosRecord.MISSING)
- info_add_row(0, "Battery", "%9.2f V", state.battery);
- if (state.drogue_sense != AltosRecord.MISSING)
- info_add_row(0, "Drogue", "%9.2f V", state.drogue_sense);
- if (state.main_sense != AltosRecord.MISSING)
- info_add_row(0, "Main", "%9.2f V", state.main_sense);
- info_add_row(0, "CRC Errors", "%6d", crc_errors);
-
- if (state.gps == null || !state.gps.connected) {
- info_add_row(1, "GPS", "not available");
- } else {
- if (state.gps_ready)
- info_add_row(1, "GPS state", "%s", "ready");
- else
- info_add_row(1, "GPS state", "wait (%d)",
- state.gps_waiting);
- if (state.data.gps.locked)
- info_add_row(1, "GPS", " locked");
- else if (state.data.gps.connected)
- info_add_row(1, "GPS", " unlocked");
- else
- info_add_row(1, "GPS", " missing");
- info_add_row(1, "Satellites", "%6d", state.data.gps.nsat);
- info_add_deg(1, "Latitude", state.gps.lat, 'N', 'S');
- info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W');
- info_add_row(1, "GPS altitude", "%6d", state.gps.alt);
- info_add_row(1, "GPS height", "%6.0f", state.gps_height);
-
- /* The SkyTraq GPS doesn't report these values */
- /*
- if (false) {
- info_add_row(1, "GPS ground speed", "%8.1f m/s %3d°",
- state.gps.ground_speed,
- state.gps.course);
- info_add_row(1, "GPS climb rate", "%8.1f m/s",
- state.gps.climb_rate);
- info_add_row(1, "GPS error", "%6d m(h)%3d m(v)",
- state.gps.h_error, state.gps.v_error);
- }
- */
-
- info_add_row(1, "GPS hdop", "%8.1f", state.gps.hdop);
-
- if (state.npad > 0) {
- if (state.from_pad != null) {
- info_add_row(1, "Distance from pad", "%6d m",
- (int) (state.from_pad.distance + 0.5));
- info_add_row(1, "Direction from pad", "%6d°",
- (int) (state.from_pad.bearing + 0.5));
- info_add_row(1, "Elevation from pad", "%6d°",
- (int) (state.elevation + 0.5));
- info_add_row(1, "Range from pad", "%6d m",
- (int) (state.range + 0.5));
- } else {
- info_add_row(1, "Distance from pad", "unknown");
- info_add_row(1, "Direction from pad", "unknown");
- info_add_row(1, "Elevation from pad", "unknown");
- info_add_row(1, "Range from pad", "unknown");
+ if (state != null) {
+ if (state.altitude != AltosRecord.MISSING)
+ info_add_row(0, "Altitude", "%6.0f m", state.altitude);
+ if (state.ground_altitude != AltosRecord.MISSING)
+ info_add_row(0, "Pad altitude", "%6.0f m", state.ground_altitude);
+ if (state.height != AltosRecord.MISSING)
+ info_add_row(0, "Height", "%6.0f m", state.height);
+ if (state.height != AltosRecord.MISSING)
+ info_add_row(0, "Max height", "%6.0f m", state.max_height);
+ if (state.acceleration != AltosRecord.MISSING)
+ info_add_row(0, "Acceleration", "%8.1f m/s²", state.acceleration);
+ if (state.acceleration != AltosRecord.MISSING)
+ info_add_row(0, "Max acceleration", "%8.1f m/s²", state.max_acceleration);
+ if (state.speed() != AltosRecord.MISSING)
+ info_add_row(0, "Speed", "%8.1f m/s", state.speed());
+ if (state.speed() != AltosRecord.MISSING)
+ info_add_row(0, "Max Speed", "%8.1f m/s", state.max_accel_speed);
+ if (state.temperature != AltosRecord.MISSING)
+ info_add_row(0, "Temperature", "%9.2f °C", state.temperature);
+ if (state.battery != AltosRecord.MISSING)
+ info_add_row(0, "Battery", "%9.2f V", state.battery);
+ if (state.drogue_sense != AltosRecord.MISSING)
+ info_add_row(0, "Drogue", "%9.2f V", state.drogue_sense);
+ if (state.main_sense != AltosRecord.MISSING)
+ info_add_row(0, "Main", "%9.2f V", state.main_sense);
+ }
+ if (listener_state != null) {
+ info_add_row(0, "CRC Errors", "%6d", listener_state.crc_errors);
+
+ if (listener_state.battery != AltosRecord.MISSING)
+ info_add_row(0, "Receiver Battery", "%9.2f", listener_state.battery);
+ }
+
+ if (state != null) {
+ if (state.gps == null || !state.gps.connected) {
+ info_add_row(1, "GPS", "not available");
+ } else {
+ if (state.gps_ready)
+ info_add_row(1, "GPS state", "%s", "ready");
+ else
+ info_add_row(1, "GPS state", "wait (%d)",
+ state.gps_waiting);
+ if (state.data.gps.locked)
+ info_add_row(1, "GPS", " locked");
+ else if (state.data.gps.connected)
+ info_add_row(1, "GPS", " unlocked");
+ else
+ info_add_row(1, "GPS", " missing");
+ info_add_row(1, "Satellites", "%6d", state.data.gps.nsat);
+ info_add_deg(1, "Latitude", state.gps.lat, 'N', 'S');
+ info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W');
+ info_add_row(1, "GPS altitude", "%6d", state.gps.alt);
+ info_add_row(1, "GPS height", "%6.0f", state.gps_height);
+
+ /* The SkyTraq GPS doesn't report these values */
+ /*
+ if (false) {
+ info_add_row(1, "GPS ground speed", "%8.1f m/s %3d°",
+ state.gps.ground_speed,
+ state.gps.course);
+ info_add_row(1, "GPS climb rate", "%8.1f m/s",
+ state.gps.climb_rate);
+ info_add_row(1, "GPS error", "%6d m(h)%3d m(v)",
+ state.gps.h_error, state.gps.v_error);
+ }
+ */
+
+ info_add_row(1, "GPS hdop", "%8.1f", state.gps.hdop);
+
+ if (state.npad > 0) {
+ if (state.from_pad != null) {
+ info_add_row(1, "Distance from pad", "%6d m",
+ (int) (state.from_pad.distance + 0.5));
+ info_add_row(1, "Direction from pad", "%6d°",
+ (int) (state.from_pad.bearing + 0.5));
+ info_add_row(1, "Elevation from pad", "%6d°",
+ (int) (state.elevation + 0.5));
+ info_add_row(1, "Range from pad", "%6d m",
+ (int) (state.range + 0.5));
+ } else {
+ info_add_row(1, "Distance from pad", "unknown");
+ info_add_row(1, "Direction from pad", "unknown");
+ info_add_row(1, "Elevation from pad", "unknown");
+ info_add_row(1, "Range from pad", "unknown");
+ }
+ info_add_deg(1, "Pad latitude", state.pad_lat, 'N', 'S');
+ info_add_deg(1, "Pad longitude", state.pad_lon, 'E', 'W');
+ info_add_row(1, "Pad GPS alt", "%6.0f m", state.pad_alt);
}
- info_add_deg(1, "Pad latitude", state.pad_lat, 'N', 'S');
- info_add_deg(1, "Pad longitude", state.pad_lon, 'E', 'W');
- info_add_row(1, "Pad GPS alt", "%6.0f m", state.pad_alt);
- }
- info_add_row(1, "GPS date", "%04d-%02d-%02d",
- state.gps.year,
- state.gps.month,
- state.gps.day);
- info_add_row(1, "GPS time", " %02d:%02d:%02d",
- state.gps.hour,
- state.gps.minute,
- state.gps.second);
- //int nsat_vis = 0;
- int c;
-
- if (state.gps.cc_gps_sat == null)
- info_add_row(2, "Satellites Visible", "%4d", 0);
- else {
- info_add_row(2, "Satellites Visible", "%4d", state.gps.cc_gps_sat.length);
- for (c = 0; c < state.gps.cc_gps_sat.length; c++) {
- info_add_row(2, "Satellite id,C/N0",
- "%4d, %4d",
- state.gps.cc_gps_sat[c].svid,
- state.gps.cc_gps_sat[c].c_n0);
+ info_add_row(1, "GPS date", "%04d-%02d-%02d",
+ state.gps.year,
+ state.gps.month,
+ state.gps.day);
+ info_add_row(1, "GPS time", " %02d:%02d:%02d",
+ state.gps.hour,
+ state.gps.minute,
+ state.gps.second);
+ //int nsat_vis = 0;
+ int c;
+
+ if (state.gps.cc_gps_sat == null)
+ info_add_row(2, "Satellites Visible", "%4d", 0);
+ else {
+ info_add_row(2, "Satellites Visible", "%4d", state.gps.cc_gps_sat.length);
+ for (c = 0; c < state.gps.cc_gps_sat.length; c++) {
+ info_add_row(2, "Satellite id,C/N0",
+ "%4d, %4d",
+ state.gps.cc_gps_sat[c].svid,
+ state.gps.cc_gps_sat[c].c_n0);
+ }
}
}
}
diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java
index a245dde3..1d209bda 100644
--- a/altosui/AltosLanded.java
+++ b/altosui/AltosLanded.java
@@ -29,7 +29,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
public class LandedValue {
JLabel label;
JTextField value;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void reset() {
value.setText("");
@@ -102,7 +102,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
}
class Lat extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
if (state.gps != null && state.gps.connected)
show(pos(state.gps.lat,"N", "S"));
else
@@ -116,7 +116,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Lat lat;
class Lon extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show();
if (state.gps != null && state.gps.connected)
show(pos(state.gps.lon,"E", "W"));
@@ -131,7 +131,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Lon lon;
class Bearing extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show();
if (state.from_pad != null)
show("%3.0f°", state.from_pad.bearing);
@@ -146,7 +146,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Bearing bearing;
class Distance extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show();
if (state.from_pad != null)
show(AltosConvert.distance, state.from_pad.distance);
@@ -161,7 +161,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Distance distance;
class Height extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.height, state.max_height);
}
public Height (GridBagLayout layout, int y) {
@@ -172,7 +172,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Height height;
class Speed extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.speed, state.max_speed());
}
public Speed (GridBagLayout layout, int y) {
@@ -183,7 +183,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
Speed speed;
class Accel extends LandedValue {
- void show (AltosState state, int crc_errors) {
+ void show (AltosState state, AltosListenerState listener_state) {
show(AltosConvert.accel, state.max_acceleration);
}
public Accel (GridBagLayout layout, int y) {
@@ -213,21 +213,21 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio
accel.set_font();
}
- public void show(AltosState state, int crc_errors) {
+ public void show(AltosState state, AltosListenerState listener_state) {
if (state.gps != null && state.gps.connected) {
- bearing.show(state, crc_errors);
- distance.show(state, crc_errors);
- lat.show(state, crc_errors);
- lon.show(state, crc_errors);
+ bearing.show(state, listener_state);
+ distance.show(state, listener_state);
+ lat.show(state, listener_state);
+ lon.show(state, listener_state);
} else {
bearing.hide();
distance.hide();
lat.hide();
lon.hide();
}
- height.show(state, crc_errors);
- speed.show(state, crc_errors);
- accel.show(state, crc_errors);
+ height.show(state, listener_state);
+ speed.show(state, listener_state);
+ accel.show(state, listener_state);
if (reader.backing_file() != null)
graph.setEnabled(true);
}
diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java
index eb08525c..e2316a13 100644
--- a/altosui/AltosPad.java
+++ b/altosui/AltosPad.java
@@ -29,7 +29,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
JTextField value;
AltosLights lights;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void reset() {
value.setText("");
@@ -109,7 +109,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
public class LaunchValue {
JLabel label;
JTextField value;
- void show(AltosState state, int crc_errors) {}
+ void show(AltosState state, AltosListenerState listener_state) {}
void show() {
label.setVisible(true);
@@ -175,8 +175,8 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
}
class Battery extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- if (state.battery == AltosRecord.MISSING)
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.battery == AltosRecord.MISSING)
hide();
else {
show("%4.2f V", state.battery);
@@ -191,9 +191,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
Battery battery;
class Apogee extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- show("%4.2f V", state.drogue_sense);
- lights.set(state.drogue_sense > 3.2);
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.drogue_sense == AltosRecord.MISSING)
+ hide();
+ else {
+ show("%4.2f V", state.drogue_sense);
+ lights.set(state.drogue_sense > 3.2);
+ }
}
public Apogee (GridBagLayout layout, int y) {
super(layout, y, "Apogee Igniter Voltage");
@@ -203,9 +207,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
Apogee apogee;
class Main extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- show("%4.2f V", state.main_sense);
- lights.set(state.main_sense > 3.2);
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.main_sense == AltosRecord.MISSING)
+ hide();
+ else {
+ show("%4.2f V", state.main_sense);
+ lights.set(state.main_sense > 3.2);
+ }
}
public Main (GridBagLayout layout, int y) {
super(layout, y, "Main Igniter Voltage");
@@ -215,18 +223,21 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
Main main;
class LoggingReady extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- if (state.data.flight != 0) {
- if (state.data.state <= Altos.ao_flight_pad)
- show("Ready to record");
- else if (state.data.state < Altos.ao_flight_landed)
- show("Recording data");
- else
- show("Recorded data");
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.data.flight == AltosRecord.MISSING) {
+ hide();
+ } else {
+ if (state.data.flight != 0) {
+ if (state.data.state <= Altos.ao_flight_pad)
+ show("Ready to record");
+ else if (state.data.state < Altos.ao_flight_landed)
+ show("Recording data");
+ else
+ show("Recorded data");
+ } else
+ show("Storage full");
+ lights.set(state.data.flight != 0);
}
- else
- show("Storage full");
- lights.set(state.data.flight != 0);
}
public LoggingReady (GridBagLayout layout, int y) {
super(layout, y, "On-board Data Logging");
@@ -236,9 +247,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
LoggingReady logging_ready;
class GPSLocked extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- show("%4d sats", state.gps.nsat);
- lights.set(state.gps.locked && state.gps.nsat >= 4);
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.gps == null)
+ hide();
+ else {
+ show("%4d sats", state.gps.nsat);
+ lights.set(state.gps.locked && state.gps.nsat >= 4);
+ }
}
public GPSLocked (GridBagLayout layout, int y) {
super (layout, y, "GPS Locked");
@@ -248,12 +263,16 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
GPSLocked gps_locked;
class GPSReady extends LaunchStatus {
- void show (AltosState state, int crc_errors) {
- if (state.gps_ready)
- show("Ready");
- else
- show("Waiting %d", state.gps_waiting);
- lights.set(state.gps_ready);
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.gps == null)
+ hide();
+ else {
+ if (state.gps_ready)
+ show("Ready");
+ else
+ show("Waiting %d", state.gps_waiting);
+ lights.set(state.gps_ready);
+ }
}
public GPSReady (GridBagLayout layout, int y) {
super (layout, y, "GPS Ready");
@@ -262,6 +281,22 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
GPSReady gps_ready;
+ class ReceiverBattery extends LaunchStatus {
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (listener_state == null || listener_state.battery == AltosRecord.MISSING)
+ hide();
+ else {
+ show("%4.2f V", listener_state.battery);
+ lights.set(listener_state.battery > 3.7);
+ }
+ }
+ public ReceiverBattery (GridBagLayout layout, int y) {
+ super(layout, y, "Receiver Battery");
+ }
+ }
+
+ ReceiverBattery receiver_battery;
+
String pos(double p, String pos, String neg) {
String h = pos;
if (p < 0) {
@@ -274,13 +309,17 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
}
class PadLat extends LaunchValue {
- void show (AltosState state, int crc_errors) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null) {
- show(pos(state.gps.lat,"N", "S"));
- set_label("Latitude");
- } else {
- show(pos(state.pad_lat,"N", "S"));
- set_label("Pad Latitude");
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.gps == null) {
+ hide();
+ } else {
+ if (state.state < AltosLib.ao_flight_pad) {
+ show(pos(state.gps.lat,"N", "S"));
+ set_label("Latitude");
+ } else {
+ show(pos(state.pad_lat,"N", "S"));
+ set_label("Pad Latitude");
+ }
}
}
public PadLat (GridBagLayout layout, int y) {
@@ -291,13 +330,17 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
PadLat pad_lat;
class PadLon extends LaunchValue {
- void show (AltosState state, int crc_errors) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null) {
- show(pos(state.gps.lon,"E", "W"));
- set_label("Longitude");
- } else {
- show(pos(state.pad_lon,"E", "W"));
- set_label("Pad Longitude");
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null || state.gps == null) {
+ hide();
+ } else {
+ if (state.state < AltosLib.ao_flight_pad) {
+ show(pos(state.gps.lon,"E", "W"));
+ set_label("Longitude");
+ } else {
+ show(pos(state.pad_lon,"E", "W"));
+ set_label("Pad Longitude");
+ }
}
}
public PadLon (GridBagLayout layout, int y) {
@@ -308,16 +351,20 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
PadLon pad_lon;
class PadAlt extends LaunchValue {
- void show (AltosState state, int crc_errors) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null) {
- show("%4.0f m", state.gps.alt);
- set_label("Altitude");
- } else {
- if (state.pad_alt == AltosRecord.MISSING)
- hide();
- else {
- show("%4.0f m", state.pad_alt);
- set_label("Pad Altitude");
+ void show (AltosState state, AltosListenerState listener_state) {
+ if (state == null)
+ hide();
+ else {
+ if (state.state < AltosLib.ao_flight_pad && state.gps != null) {
+ show("%4.0f m", state.gps.alt);
+ set_label("Altitude");
+ } else {
+ if (state.pad_alt == AltosRecord.MISSING)
+ hide();
+ else {
+ show("%4.0f m", state.pad_alt);
+ set_label("Pad Altitude");
+ }
}
}
}
@@ -335,6 +382,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
logging_ready.reset();
gps_locked.reset();
gps_ready.reset();
+ receiver_battery.reset();
pad_lat.reset();
pad_lon.reset();
pad_alt.reset();
@@ -347,34 +395,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
logging_ready.set_font();
gps_locked.set_font();
gps_ready.set_font();
+ receiver_battery.set_font();
pad_lat.set_font();
pad_lon.set_font();
pad_alt.set_font();
}
- public void show(AltosState state, int crc_errors) {
- battery.show(state, crc_errors);
- if (state.drogue_sense == AltosRecord.MISSING)
- apogee.hide();
- else
- apogee.show(state, crc_errors);
- if (state.main_sense == AltosRecord.MISSING)
- main.hide();
- else
- main.show(state, crc_errors);
- logging_ready.show(state, crc_errors);
- pad_alt.show(state, crc_errors);
- if (state.gps != null && state.gps.connected) {
- gps_locked.show(state, crc_errors);
- gps_ready.show(state, crc_errors);
- pad_lat.show(state, crc_errors);
- pad_lon.show(state, crc_errors);
- } else {
- gps_locked.hide();
- gps_ready.hide();
- pad_lat.hide();
- pad_lon.hide();
- }
+ public void show(AltosState state, AltosListenerState listener_state) {
+ battery.show(state, listener_state);
+ apogee.show(state, listener_state);
+ main.show(state, listener_state);
+ logging_ready.show(state, listener_state);
+ pad_alt.show(state, listener_state);
+ receiver_battery.show(state, listener_state);
+ gps_locked.show(state, listener_state);
+ gps_ready.show(state, listener_state);
+ pad_lat.show(state, listener_state);
+ pad_lon.show(state, listener_state);
}
public AltosPad() {
@@ -398,8 +435,10 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
logging_ready = new LoggingReady(layout, 3);
gps_locked = new GPSLocked(layout, 4);
gps_ready = new GPSReady(layout, 5);
- pad_lat = new PadLat(layout, 6);
- pad_lon = new PadLon(layout, 7);
- pad_alt = new PadAlt(layout, 8);
+ receiver_battery = new ReceiverBattery(layout, 6);
+ pad_lat = new PadLat(layout, 7);
+ pad_lon = new PadLon(layout, 8);
+ pad_alt = new PadAlt(layout, 9);
+ show(null, null);
}
}
diff --git a/altosui/AltosSiteMap.java b/altosui/AltosSiteMap.java
index f614eae6..5bf02e54 100644
--- a/altosui/AltosSiteMap.java
+++ b/altosui/AltosSiteMap.java
@@ -264,7 +264,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
initMaps(lat, lon);
scrollRocketToVisible(pt(lat, lon));
}
- public void show(final AltosState state, final int crc_errors) {
+ public void show(final AltosState state, final AltosListenerState listener_state) {
// if insufficient gps data, nothing to update
if (!state.gps.locked && state.gps.nsat < 4)
return;
@@ -294,7 +294,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
Point2D.Double ref, lref;
ref = translatePoint(pt, tileCoordOffset(offset));
lref = translatePoint(last_pt, tileCoordOffset(offset));
- tile.show(state, crc_errors, lref, ref);
+ tile.show(state, listener_state, lref, ref);
if (0 <= ref.x && ref.x < px_size)
if (0 <= ref.y && ref.y < px_size)
in_any = true;
@@ -307,7 +307,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
lref = translatePoint(last_pt, tileCoordOffset(offset));
AltosSiteMapTile tile = createTile(offset);
- tile.show(state, crc_errors, lref, ref);
+ tile.show(state, listener_state, lref, ref);
initMap(offset);
finishTileLater(tile, offset);
}
diff --git a/altosui/AltosSiteMapTile.java b/altosui/AltosSiteMapTile.java
index 10e65bcd..365e4b6c 100644
--- a/altosui/AltosSiteMapTile.java
+++ b/altosui/AltosSiteMapTile.java
@@ -56,7 +56,7 @@ public class AltosSiteMapTile extends JLayeredPane {
private boolean drawn_landed_circle = false;
private boolean drawn_boost_circle = false;
- public synchronized void show(AltosState state, int crc_errors,
+ public synchronized void show(AltosState state, AltosListenerState listener_state,
Point2D.Double last_pt, Point2D.Double pt)
{
if (0 <= state.state && state.state < stateColors.length) {
diff --git a/src/core/ao.h b/src/core/ao.h
index 6c790f69..977e10b8 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -94,7 +94,7 @@ extern volatile __data AO_TICK_TYPE ao_tick_count;
#define AO_SEC_TO_TICKS(s) ((s) * AO_HERTZ)
/* Returns the current time in ticks */
-uint16_t
+AO_TICK_TYPE
ao_time(void);
/* Suspend the current task until ticks time has passed */
diff --git a/src/stm/ao_timer.c b/src/stm/ao_timer.c
index e07625d8..8b7c2327 100644
--- a/src/stm/ao_timer.c
+++ b/src/stm/ao_timer.c
@@ -18,15 +18,12 @@
#include "ao.h"
#include <ao_task.h>
-volatile __data AO_TICK_TYPE ao_tick_count;
+volatile AO_TICK_TYPE ao_tick_count;
-uint16_t ao_time(void)
+AO_TICK_TYPE
+ao_time(void)
{
- uint16_t v;
- ao_arch_critical(
- v = ao_tick_count;
- );
- return v;
+ return ao_tick_count;
}
#if AO_DATA_ALL