X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=telegps%2FTeleGPS.java;h=e032726a1dfadd268e8fd96582bfe386fca505c0;hp=3b880b966fdc70f02261121035cc11743dc2e2da;hb=da914cd72411af8c36af05b13c11b9093c8a378c;hpb=4895f443e4a748de2677e51869f20c05d265c944 diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index 3b880b96..e032726a 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -3,7 +3,8 @@ * * 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. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,8 +25,8 @@ import java.io.*; import java.util.concurrent.*; import java.util.*; import java.text.*; -import org.altusmetrum.altoslib_7.*; -import org.altusmetrum.altosuilib_7.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPS extends AltosUIFrame @@ -53,6 +54,7 @@ public class TeleGPS AltosFlightReader reader; TeleGPSDisplayThread thread; + boolean idle_mode; JMenuBar menu_bar; @@ -71,7 +73,7 @@ public class TeleGPS JTabbedPane pane; - AltosUIMapNew map; + AltosUIMap map; TeleGPSInfo gps_info; TeleGPSState gps_state; AltosInfoTable info_table; @@ -150,7 +152,7 @@ public class TeleGPS status_update.saved_listener_state = listener_state; if (state == null) - state = new AltosState(); + state = new AltosState(new AltosCalData()); int i = 0; for (AltosFlightDisplay display : displays) { @@ -173,7 +175,7 @@ public class TeleGPS } void load_maps() { - new AltosUIMapPreloadNew(this); + new AltosUIMapPreload(this); } void disconnect() { @@ -186,12 +188,10 @@ public class TeleGPS disable_rate_menu(); } - void connect(AltosDevice device) { - if (reader != null) - disconnect(); + void connect_flight(AltosDevice device) { try { AltosFlightReader reader = new AltosTelemetryReader(new AltosSerial(device)); - set_reader(reader, device); + set_reader(reader, device, false); } catch (FileNotFoundException ee) { JOptionPane.showMessageDialog(this, ee.getMessage(), @@ -221,9 +221,51 @@ public class TeleGPS } } + void connect_idle(AltosDevice device) { + try { + AltosFlightReader reader = new AltosIdleReader(new AltosSerial(device), false); + set_reader(reader, device, true); + } catch (FileNotFoundException ee) { + JOptionPane.showMessageDialog(this, + ee.getMessage(), + String.format ("Cannot open %s", device.toShortString()), + JOptionPane.ERROR_MESSAGE); + } catch (AltosSerialInUseException si) { + JOptionPane.showMessageDialog(this, + String.format("Device \"%s\" already in use", + device.toShortString()), + "Device in use", + JOptionPane.ERROR_MESSAGE); + } catch (IOException ee) { + JOptionPane.showMessageDialog(this, + String.format ("Unknown I/O error on %s", device.toShortString()), + "Unknown I/O error", + JOptionPane.ERROR_MESSAGE); + } catch (TimeoutException te) { + JOptionPane.showMessageDialog(this, + String.format ("Timeout on %s", device.toShortString()), + "Timeout error", + JOptionPane.ERROR_MESSAGE); + } catch (InterruptedException ie) { + JOptionPane.showMessageDialog(this, + String.format("Interrupted %s", device.toShortString()), + "Interrupted exception", + JOptionPane.ERROR_MESSAGE); + } + } + + void connect(AltosDevice device) { + if (reader != null) + disconnect(); + if (device.matchProduct(AltosLib.product_basestation)) + connect_flight(device); + else + connect_idle(device); + } + void connect() { AltosDevice device = AltosDeviceUIDialog.show(this, - AltosLib.product_basestation); + AltosLib.product_any); if (device == null) return; connect(device); @@ -245,23 +287,30 @@ public class TeleGPS new TeleGPSConfig(this); } + private static AltosFlightSeries make_series(AltosRecordSet set) { + AltosFlightSeries series = new AltosFlightSeries(set.cal_data()); + set.capture_series(series); + series.finish(); + return series; + } + void export() { - AltosDataChooser chooser; - chooser = new AltosDataChooser(this); - AltosStateIterable states = chooser.runDialog(); - if (states == null) + AltosDataChooser chooser = new AltosDataChooser(this); + + AltosRecordSet set = chooser.runDialog(); + if (set == null) return; - new AltosCSVUI(this, states, chooser.file()); + AltosFlightSeries series = make_series(set); + new AltosCSVUI(this, series, series.cal_data, chooser.file()); } void graph() { - AltosDataChooser chooser; - chooser = new AltosDataChooser(this); - AltosStateIterable states = chooser.runDialog(); - if (states == null) + AltosDataChooser chooser = new AltosDataChooser(this); + AltosRecordSet set = chooser.runDialog(); + if (set == null) return; try { - new TeleGPSGraphUI(states, chooser.file()); + new TeleGPSGraphUI(set, chooser.file()); } catch (InterruptedException ie) { } catch (IOException ie) { } @@ -373,7 +422,6 @@ public class TeleGPS public void actionPerformed(ActionEvent e) { int rate = rates.rate(); try { - System.out.printf("set rate %d\n", rate); reader.set_telemetry_rate(rate); } catch (TimeoutException te) { } catch (InterruptedException ie) { @@ -398,7 +446,8 @@ public class TeleGPS } - public void set_reader(AltosFlightReader reader, AltosDevice device) { + public void set_reader(AltosFlightReader reader, AltosDevice device, boolean idle_mode) { + this.idle_mode = idle_mode; status_update = new TeleGPSStatusUpdate(telegps_status); telegps_status.start(status_update); @@ -408,8 +457,13 @@ public class TeleGPS thread.start(); if (device != null) { - enable_frequency_menu(device.getSerial(), reader); - enable_rate_menu(device.getSerial(), reader); + if (idle_mode) { + disable_frequency_menu(); + disable_rate_menu(); + } else { + enable_frequency_menu(device.getSerial(), reader); + enable_rate_menu(device.getSerial(), reader); + } } } @@ -481,8 +535,6 @@ public class TeleGPS bag = getContentPane(); bag.setLayout(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); - setTitle("TeleGPS"); menu_bar = new JMenuBar(); @@ -492,25 +544,16 @@ public class TeleGPS monitor_menu = make_menu("Monitor", monitor_menu_entries); device_menu = make_menu("Device", device_menu_entries); + set_inset(3); frequencies = new AltosUIFreqList(); frequencies.setEnabled(false); - c.gridx = 0; - c.gridy = 0; - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.WEST; - c.weightx = 0; - c.gridwidth = 1; - bag.add(frequencies, c); + bag.add(frequencies, constraints (0, 1)); rates = new AltosUIRateList(); rates.setEnabled(false); - c.gridx = 1; - c.gridy = 0; - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.WEST; - c.weightx = 0; - c.gridwidth = 1; - bag.add(rates, c); + bag.add(rates, constraints(1, 1)); + next_row(); + set_inset(0); displays = new LinkedList(); @@ -518,13 +561,9 @@ public class TeleGPS /* TeleGPS status is always visible */ telegps_status = new TeleGPSStatus(); - c.gridx = 0; - c.gridy = 1; - c.fill = GridBagConstraints.HORIZONTAL; - c.weightx = 1; - c.gridwidth = 2; - bag.add(telegps_status, c); - c.gridwidth = 1; + bag.add(telegps_status, constraints(0, 3, GridBagConstraints.HORIZONTAL)); + next_row(); + displays.add(telegps_status); @@ -534,15 +573,9 @@ public class TeleGPS pane = new JTabbedPane(); /* Make the tabbed pane use the rest of the window space */ - c.gridx = 0; - c.gridy = 2; - c.fill = GridBagConstraints.BOTH; - c.weightx = 1; - c.weighty = 1; - c.gridwidth = 2; - bag.add(pane, c); - - map = new AltosUIMapNew(); + bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH)); + + map = new AltosUIMap(); pane.add(map.getName(), map); displays.add(map); @@ -576,9 +609,9 @@ public class TeleGPS add_window(); } - public TeleGPS(AltosFlightReader reader) { + public TeleGPS(AltosFlightReader reader, boolean idle_mode) { this(); - set_reader(reader, null); + set_reader(reader, null, idle_mode); } public TeleGPS(AltosDevice device) { @@ -586,33 +619,28 @@ public class TeleGPS connect(device); } - static AltosStateIterable record_iterable(File file) { - FileInputStream in; + static AltosRecordSet record_set(File file) { try { - in = new FileInputStream(file); - } catch (Exception e) { - System.out.printf("Failed to open file '%s'\n", file); - return null; - } - if (file.getName().endsWith("telem")) - return new AltosTelemetryFile(in); - else - return new AltosEepromFile(in); + return AltosLib.record_set(file); + } catch (IOException ie) { + System.out.printf("%s\n", ie.getMessage()); + } + return null; } static AltosReplayReader replay_file(File file) { - AltosStateIterable states = record_iterable(file); - if (states == null) + AltosRecordSet set = record_set(file); + if (set == null) return null; - return new AltosReplayReader(states.iterator(), file); + return new AltosReplayReader(set, file); } static boolean process_graph(File file) { - AltosStateIterable states = record_iterable(file); - if (states == null) + AltosRecordSet set = record_set(file); + if (set == null) return false; try { - new TeleGPSGraphUI(states, file); + new TeleGPSGraphUI(set, file); } catch (Exception e) { return false; } @@ -624,7 +652,7 @@ public class TeleGPS if (new_reader == null) return false; - new TeleGPS(new_reader); + new TeleGPS(new_reader, true); return true; }