X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosIdleMonitor.java;h=2e4ddef25705d5ab2cf40778c860b6db321783eb;hb=b878ca38045b1bee6ea4d649298727ac3fa197c2;hp=ae3b7b06b94748aa7c3862d3688baecb8c13d2a0;hpb=218c73b5bd5bd5673dc6f259f62b39541c52d6ff;p=fw%2Faltos diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index ae3b7b06..2e4ddef2 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.AltosLib; +package org.altusmetrum.altoslib_1; import java.io.*; import java.util.concurrent.*; @@ -27,7 +27,9 @@ public class AltosIdleMonitor extends Thread { AltosState state; boolean remote; double frequency; + String callsign; AltosState previous_state; + AltosListenerState listener_state; AltosConfigData config_data; AltosGPS gps; @@ -45,44 +47,63 @@ public class AltosIdleMonitor extends Thread { return rssi; } + boolean has_sensor_tm(AltosConfigData config_data) { + return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMini"); + } + + boolean has_sensor_mm(AltosConfigData config_data) { + return config_data.product.startsWith("TeleMega"); + } + + boolean has_gps(AltosConfigData config_data) { + return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMega"); + } + + AltosRecord sensor_mm(AltosConfigData config_data) throws InterruptedException, TimeoutException { + AltosRecordMM record_mm = new AltosRecordMM(); + AltosSensorMM sensor = new AltosSensorMM(link); + AltosMs5607 ms5607 = new AltosMs5607Query(link); + AltosIMU imu = new AltosIMUQuery(link); + + record_mm.accel_plus_g = config_data.accel_cal_plus; + record_mm.accel_minus_g = config_data.accel_cal_minus; + + record_mm.ground_accel = sensor.accel; + record_mm.accel = sensor.accel; + record_mm.ground_pres = ms5607.pa; + record_mm.pres = ms5607.pa; + record_mm.temp = ms5607.cc; + + record_mm.v_batt = sensor.v_batt; + record_mm.v_pyro = sensor.v_pyro; + record_mm.sense = sensor.sense; + + record_mm.imu = imu; + + return record_mm; + } + void update_state() throws InterruptedException, TimeoutException { AltosRecord record = null; try { if (remote) { link.set_radio_frequency(frequency); + link.set_callsign(callsign); link.start_remote(); } else link.flush_input(); config_data = new AltosConfigData(link); - if (config_data.product.startsWith("TeleMetrum")) { - record = new AltosSensorTM(link, config_data); - } else if (config_data.product.startsWith("MegaMetrum")) { - AltosRecordMM record_mm = new AltosRecordMM(); - AltosSensorMM sensor = new AltosSensorMM(link); - AltosMs5607 ms5607 = new AltosMs5607Query(link); - AltosIMU imu = new AltosIMUQuery(link); - record_mm.accel_plus_g = config_data.accel_cal_plus; - record_mm.accel_minus_g = config_data.accel_cal_minus; - - record_mm.ground_accel = sensor.accel; - record_mm.accel = sensor.accel; - record_mm.ground_pres = ms5607.pa; - record_mm.pres = ms5607.pa; - record_mm.temp = ms5607.cc; - - record_mm.v_batt = sensor.v_batt; - record_mm.v_pyro = sensor.v_pyro; - record_mm.sense = sensor.sense; - - record_mm.imu = imu; - - record = record_mm; - } else - record = new AltosRecord(); + if (has_sensor_tm(config_data)) + record = new AltosSensorTM(link, config_data); + else if (has_sensor_mm(config_data)) + record = sensor_mm(config_data); + else + record = new AltosRecordNone(); - gps = new AltosGPSQuery(link, config_data); + if (has_gps(config_data)) + gps = new AltosGPSQuery(link, config_data); record.version = 0; record.callsign = config_data.callsign; @@ -96,8 +117,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(); + listener_state.battery = link.monitor_battery(); + } } else { if (record != null) record.rssi = 0; @@ -108,10 +131,27 @@ public class AltosIdleMonitor extends Thread { public void set_frequency(double in_frequency) { frequency = in_frequency; + link.abort_reply(); + } + + public void set_callsign(String in_callsign) { + callsign = in_callsign; + link.abort_reply(); } public void post_state() { - listener.update(state); + listener.update(state, listener_state); + } + + public void abort() { + if (isAlive()) { + interrupt(); + link.abort_reply(); + try { + join(); + } catch (InterruptedException ie) { + } + } } public void run() { @@ -135,5 +175,6 @@ public class AltosIdleMonitor extends Thread { link = in_link; remote = in_remote; state = null; + listener_state = new AltosListenerState(); } }