-public class AltosIdleMonitor extends Thread {
- AltosLink link;
- AltosIdleMonitorListener listener;
- AltosState state;
- boolean remote;
- double frequency;
- AltosState previous_state;
- AltosConfigData config_data;
- AltosADC adc;
- AltosGPS gps;
-
- int AltosRSSI() throws TimeoutException, InterruptedException {
- link.printf("s\n");
- String line = link.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;
- }
-
- void update_state() throws InterruptedException, TimeoutException {
- AltosRecordTM record = new AltosRecordTM();
- int rssi;
-
- try {
- if (remote) {
- link.set_radio_frequency(frequency);
- link.start_remote();
- } else
- link.flush_input();
- config_data = new AltosConfigData(link);
- adc = new AltosADC(link);
- gps = new AltosGPSQuery(link, config_data);
- } finally {
- if (remote) {
- link.stop_remote();
- rssi = AltosRSSI();
- } else
- rssi = 0;
- }
-
- record.version = 0;
- record.callsign = config_data.callsign;
- record.serial = config_data.serial;
- record.flight = config_data.log_available() > 0 ? 255 : 0;
- record.rssi = rssi;
- record.status = 0;
- record.state = AltosLib.ao_flight_idle;
-
- record.tick = adc.tick;
-
- record.accel = adc.accel;
- record.pres = adc.pres;
- record.batt = adc.batt;
- record.temp = adc.temp;
- record.drogue = adc.drogue;
- record.main = adc.main;
-
- record.ground_accel = record.accel;
- record.ground_pres = record.pres;
- record.accel_plus_g = config_data.accel_cal_plus;
- record.accel_minus_g = config_data.accel_cal_minus;
- record.acceleration = 0;
- record.speed = 0;
- record.height = 0;
- record.gps = gps;
- state = new AltosState (record, state);
- }
-
- public void set_frequency(double in_frequency) {
- frequency = in_frequency;
- }
-
- public void post_state() {
- listener.update(state);
- }
-
- public void run() {
- try {
- for (;;) {
- try {
- update_state();
- post_state();
- } catch (TimeoutException te) {
- }
- Thread.sleep(1000);
- }
- } catch (InterruptedException ie) {
- link.close();
- }
- }
-
- public AltosIdleMonitor(AltosIdleMonitorListener in_listener, AltosLink in_link, boolean in_remote)
- throws FileNotFoundException, InterruptedException, TimeoutException {
- listener = in_listener;
- link = in_link;
- remote = in_remote;
- state = null;
- }
-}