summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java4
-rw-r--r--altoslib/AltosConfigData.java12
-rw-r--r--altoslib/AltosIdleFetch.java8
-rw-r--r--altoslib/AltosIdleMonitor.java4
-rw-r--r--altoslib/AltosIdleMonitorListener.java1
-rw-r--r--altoslib/AltosMma655x.java14
-rw-r--r--altoslib/AltosStateUpdate.java4
-rw-r--r--altoslib/AltosUnknownProduct.java26
-rw-r--r--altoslib/Makefile.am1
-rw-r--r--altosui/AltosIdleMonitorUI.java13
10 files changed, 78 insertions, 9 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
index 7c5fde50..3c1a1782 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
@@ -700,4 +700,8 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene
public void failed() {
}
+
+ public void error(String reason) {
+ stop_idle_monitor();
+ }
}
diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java
index 7affbdec..812296f3 100644
--- a/altoslib/AltosConfigData.java
+++ b/altoslib/AltosConfigData.java
@@ -476,6 +476,18 @@ public class AltosConfigData implements Iterable<String> {
}
+ public boolean mma655x_inverted() throws AltosUnknownProduct {
+ if (product.startsWith("EasyMega-v1"))
+ return false;
+ if (product.startsWith("TeleMetrum-v2"))
+ return true;
+ if (product.startsWith("TeleMega-v2"))
+ return false;
+ if (product.startsWith("TeleMega-v1"))
+ return false;
+ throw new AltosUnknownProduct(product);
+ }
+
public void get_values(AltosConfigValues source) throws AltosConfigDataException {
/* HAS_FLIGHT */
diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java
index 3e96f3b8..0095bb73 100644
--- a/altoslib/AltosIdleFetch.java
+++ b/altoslib/AltosIdleFetch.java
@@ -40,7 +40,7 @@ class AltosIdler {
static final int idle_sensor_tmini = 14;
static final int idle_sensor_tgps = 15;
- public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException {
+ public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException, AltosUnknownProduct {
for (int idler : idlers) {
AltosIdle idle = null;
switch (idler) {
@@ -137,8 +137,9 @@ public class AltosIdleFetch implements AltosStateUpdate {
double frequency;
String callsign;
- public void update_state(AltosState state) throws InterruptedException {
+ public void update_state(AltosState state) throws InterruptedException, AltosUnknownProduct {
try {
+ boolean matched = false;
/* Fetch config data from remote */
AltosConfigData config_data = new AltosConfigData(link);
state.set_state(AltosLib.ao_flight_stateless);
@@ -150,9 +151,12 @@ public class AltosIdleFetch implements AltosStateUpdate {
for (AltosIdler idler : idlers) {
if (idler.matches(config_data)) {
idler.update_state(state, link, config_data);
+ matched = true;
break;
}
}
+ if (!matched)
+ throw new AltosUnknownProduct(config_data.product);
state.set_received_time(System.currentTimeMillis());
} catch (TimeoutException te) {
}
diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java
index bcf20ef3..c67b4d8a 100644
--- a/altoslib/AltosIdleMonitor.java
+++ b/altoslib/AltosIdleMonitor.java
@@ -51,7 +51,7 @@ public class AltosIdleMonitor extends Thread {
return link.reply_abort;
}
- boolean update_state(AltosState state) throws InterruptedException, TimeoutException {
+ boolean update_state(AltosState state) throws InterruptedException, TimeoutException, AltosUnknownProduct {
boolean worked = false;
boolean aborted = false;
@@ -99,6 +99,8 @@ public class AltosIdleMonitor extends Thread {
update_state(state);
listener.update(state, listener_state);
} catch (TimeoutException te) {
+ } catch (AltosUnknownProduct ae) {
+ listener.error(String.format("Unknown product \"%s\"", ae.product));
}
if (link.has_error || link.reply_abort) {
listener.failed();
diff --git a/altoslib/AltosIdleMonitorListener.java b/altoslib/AltosIdleMonitorListener.java
index 235e609e..36857f58 100644
--- a/altoslib/AltosIdleMonitorListener.java
+++ b/altoslib/AltosIdleMonitorListener.java
@@ -19,5 +19,6 @@ package org.altusmetrum.altoslib_10;
public interface AltosIdleMonitorListener {
public void update(AltosState state, AltosListenerState listener_state);
+ public void error(String reason);
public void failed();
}
diff --git a/altoslib/AltosMma655x.java b/altoslib/AltosMma655x.java
index da57c27f..b09ec74b 100644
--- a/altoslib/AltosMma655x.java
+++ b/altoslib/AltosMma655x.java
@@ -21,7 +21,7 @@ import java.util.concurrent.*;
public class AltosMma655x implements Cloneable {
- int accel;
+ private int accel;
public boolean parse_line(String line) throws NumberFormatException {
if (line.startsWith("MMA655X value")) {
@@ -45,12 +45,18 @@ public class AltosMma655x implements Cloneable {
return n;
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, AltosUnknownProduct {
try {
AltosMma655x mma655x = new AltosMma655x(link);
- if (mma655x != null)
- state.set_accel(mma655x.accel);
+ if (mma655x != null) {
+ int accel = mma655x.accel;
+ if (config_data.mma655x_inverted())
+ accel = 4095 - accel;
+ if (config_data.pad_orientation == 1)
+ accel = 4095 - accel;
+ state.set_accel(accel);
+ }
} catch (TimeoutException te) {
} catch (NumberFormatException ne) {
}
diff --git a/altoslib/AltosStateUpdate.java b/altoslib/AltosStateUpdate.java
index cfc010a1..12d4dd41 100644
--- a/altoslib/AltosStateUpdate.java
+++ b/altoslib/AltosStateUpdate.java
@@ -18,5 +18,5 @@
package org.altusmetrum.altoslib_10;
public interface AltosStateUpdate {
- public void update_state(AltosState state) throws InterruptedException;
-} \ No newline at end of file
+ public void update_state(AltosState state) throws InterruptedException, AltosUnknownProduct;
+}
diff --git a/altoslib/AltosUnknownProduct.java b/altoslib/AltosUnknownProduct.java
new file mode 100644
index 00000000..ff536f57
--- /dev/null
+++ b/altoslib/AltosUnknownProduct.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright © 2010 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_10;
+
+public class AltosUnknownProduct extends Exception {
+ public String product;
+
+ public AltosUnknownProduct (String in_product) {
+ product = in_product;
+ }
+}
diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am
index 73638782..dc9da8fd 100644
--- a/altoslib/Makefile.am
+++ b/altoslib/Makefile.am
@@ -113,6 +113,7 @@ altoslib_JAVA = \
AltosTelemetrySatellite.java \
AltosTelemetryStandard.java \
AltosUnitsListener.java \
+ AltosUnknownProduct.java \
AltosMs5607.java \
AltosIMU.java \
AltosMag.java \
diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java
index 2f14e2df..d789de77 100644
--- a/altosui/AltosIdleMonitorUI.java
+++ b/altosui/AltosIdleMonitorUI.java
@@ -128,6 +128,19 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
SwingUtilities.invokeLater(r);
}
+ public void error(final String reason) {
+ Runnable r = new Runnable() {
+ public void run() {
+ disconnect();
+ JOptionPane.showMessageDialog(AltosIdleMonitorUI.this,
+ reason,
+ "Error fetching data",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ };
+ SwingUtilities.invokeLater(r);
+ }
+
Container bag;
AltosUIFreqList frequencies;
JTextField callsign_value;