altosui: Complete split out of separate java library
authorKeith Packard <keithp@keithp.com>
Tue, 3 Jan 2012 01:26:59 +0000 (17:26 -0800)
committerKeith Packard <keithp@keithp.com>
Sun, 3 Jun 2012 02:26:29 +0000 (19:26 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
85 files changed:
altosui/Altos.java
altosui/AltosAscent.java
altosui/AltosBTManage.java
altosui/AltosCSV.java
altosui/AltosCSVUI.java
altosui/AltosChannelMenu.java
altosui/AltosCompanionInfo.java
altosui/AltosConfig.java
altosui/AltosConfigData.java
altosui/AltosConfigFreqUI.java
altosui/AltosConfigUI.java
altosui/AltosConfigureUI.java
altosui/AltosDataChooser.java
altosui/AltosDataPointReader.java
altosui/AltosDebug.java
altosui/AltosDescent.java
altosui/AltosDialog.java
altosui/AltosDisplayThread.java
altosui/AltosEepromChunk.java
altosui/AltosEepromDelete.java
altosui/AltosEepromDownload.java
altosui/AltosEepromIterable.java
altosui/AltosEepromList.java
altosui/AltosEepromLog.java
altosui/AltosEepromManage.java
altosui/AltosEepromMonitor.java
altosui/AltosEepromRecord.java
altosui/AltosEepromTeleScience.java
altosui/AltosFile.java
altosui/AltosFlash.java
altosui/AltosFlashUI.java
altosui/AltosFlightInfoTableModel.java
altosui/AltosFlightReader.java
altosui/AltosFlightStats.java
altosui/AltosFlightStatsTable.java
altosui/AltosFlightStatus.java
altosui/AltosFlightStatusTableModel.java
altosui/AltosFlightUI.java
altosui/AltosFrame.java
altosui/AltosFreqList.java
altosui/AltosGraph.java
altosui/AltosGraphTime.java
altosui/AltosGraphUI.java
altosui/AltosGreatCircle.java
altosui/AltosHexfile.java
altosui/AltosIdleMonitorUI.java
altosui/AltosIgnite.java
altosui/AltosIgniteUI.java
altosui/AltosInfoTable.java
altosui/AltosKML.java
altosui/AltosLanded.java
altosui/AltosLaunch.java
altosui/AltosLaunchUI.java
altosui/AltosLed.java
altosui/AltosLights.java
altosui/AltosLog.java
altosui/AltosPad.java
altosui/AltosPreferences.java [deleted file]
altosui/AltosReader.java
altosui/AltosReplayReader.java
altosui/AltosRomconfig.java
altosui/AltosRomconfigUI.java
altosui/AltosScanUI.java
altosui/AltosSerial.java
altosui/AltosSiteMap.java
altosui/AltosSiteMapCache.java
altosui/AltosSiteMapPreload.java
altosui/AltosSiteMapTile.java
altosui/AltosState.java
altosui/AltosTelemetryReader.java [new file with mode: 0644]
altosui/AltosUI.java
altosui/AltosUIPreferences.java
altosui/AltosWriter.java
altosui/GrabNDrag.java
altosui/Makefile.am
altosui/altoslib/Makefile.am
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosConvert.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosFrequency.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosGPS.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosGPSSat.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosParse.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosPreferences.java [new file with mode: 0644]
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosRecord.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosRecordCompanion.java
altosui/altoslib/src/org/altusmetrum/AltosLib/AltosTelemetryReader.java [deleted file]

index 3e2a7a4076634caa4030629c4755fad61636a958..380796cc2598d50fe357f7f3eb8b1eb589c99e75 100644 (file)
@@ -96,6 +96,7 @@ public class Altos extends AltosLib {
        static boolean map_initialized = false;
 
        static final int tab_elt_pad = 5;
+
        static Font label_font;
        static Font value_font;
        static Font status_font;
index c8e5f3af07ea61fee1e21f4b8297fd22227d91d2..38b3b30fe8cec9ee6ccd79306b0696fd5add6cc9 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosAscent extends JComponent implements AltosFlightDisplay {
        GridBagLayout   layout;
index 6d46070196a7ee0340eb5b757be71924f91a2844..d2899d65fa34aa38220cd2b55b682056b714914d 100644 (file)
@@ -29,6 +29,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index db398a6157519589f32d062d73e82a4308281802..be86a4544855d602655646b39b6664d7dd405290 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.*;
 import java.io.*;
 import java.text.*;
 import java.util.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosCSV implements AltosWriter {
        File                    name;
index 6d3e9065e15a6435fa27057ad1b5986430e67823..2702668bfb9fdf768c9b2ced2702530c20aebc88 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosCSVUI
        extends AltosDialog
index abbb86f43c31ea56e75b6cd6e5a48b11e18a5a24..0249a0bd4197bb5006a179e5ca85cfb8b1b7a782 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosChannelMenu extends JComboBox implements ActionListener {
        int                             channel;
index 82bde62355345da96feca7b7a1d27d57ef21e533..4ba8fe985b794d0d40dc61b6e57c1c30f5d05723 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosCompanionInfo extends JTable {
        private AltosFlightInfoTableModel model;
index bd9302068ffa6ec853ca0ab72117f2fe0ab2ce15..35fef08030c00bc6c37dbaadde46b728cbe1bdf1 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 64d9f0956c6ae9588891e97596756be72a225a3e..ef34dd3ee06747ed6e2e0260e54bd670c2f816cb 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index ecb554495b21940ed109bca100e1f0499a177b0f..7958a21c29cd26533ad4a988a40c35b4e2139fa5 100644 (file)
@@ -29,6 +29,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 class AltosEditFreqUI extends AltosDialog implements ActionListener {
        Frame           frame;
index eddb223ffda155a942facc12b87f05d7d24114ff..62394fa6ca722c3c143d90d78b321ebb83202876 100644 (file)
@@ -28,6 +28,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 1789cd25c59de70fb341b51b2ccfa46759ff03b5..deb179d6e965ae78c2e504b58e9c14230ae4cc05 100644 (file)
@@ -30,6 +30,7 @@ import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
 import javax.swing.plaf.basic.*;
+import org.altusmetrum.AltosLib.*;
 
 class DelegatingRenderer implements ListCellRenderer {
 
index c4a46d01c2e7ca02262fa7c841064bd68dcc01bd..0d629b3c2cca994443e74507bcb413cb58b03b2a 100644 (file)
@@ -26,6 +26,7 @@ import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosDataChooser extends JFileChooser {
        JFrame  frame;
index c3aabb0c674721299d5202bfa0b0d5bb131db1a9..821b0771b7f7101ee200dd358822b34958020a3c 100644 (file)
@@ -9,6 +9,7 @@ import java.text.ParseException;
 import java.lang.UnsupportedOperationException;
 import java.util.NoSuchElementException;
 import java.util.Iterator;
+import org.altusmetrum.AltosLib.*;
 
 class AltosDataPointReader implements Iterable<AltosDataPoint> {
     Iterator<AltosRecord> iter;
index ce1cf5dda7c5508c9bfd50c85056beeacd3bf3f2..23e38bc02f9df4f5896aad3a1d38341d39c7bb05 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.*;
 import java.io.*;
 import java.util.concurrent.*;
 import java.util.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 0fcd690b781180548e31c8d5f13cdcd209a414c0..664c5ea662ec1439d58cada5a60336325f7a844c 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosDescent extends JComponent implements AltosFlightDisplay {
        GridBagLayout   layout;
index 1e8e538cea9005d7ef1a1b7a6d8e3d5b0b1e2bd5..ff38c3e47fe2c842f9dbe4820f7b0f9ff7ff5a4b 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index ce8d9159e7de420e9573806dec5d53217dd50539..03ce4efda1d918e88c693e9378bfd0795c08ac45 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosDisplayThread extends Thread {
 
index 77707f7bedf6acb9c55170ff72e4b01726d37082..e4d116583db4e49b071983d99df8248e94f82cf5 100644 (file)
@@ -21,6 +21,7 @@ import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosEepromChunk {
 
index fcce8155e634f976b259f339db3e2ee3dfff6307..73f3a00f06420dd571c61c826081304c34f3c840 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 8f7a8544dc4a57f5b2820115e9c8622fa4de4894..080bfc99cfa94c4e248e5c18e86c7b55751a6f95 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index b8e21ece275601699b2c19232e7365573b75f386..11cb97e40997c2171999e4144405e9865f829828 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 /*
  * AltosRecords with an index field so they can be sorted by tick while preserving
index 945746dd2f4ff42bbd7210320f1b1effad91ed25..6a656215083796c2eaca6512a68c51b79626d06a 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 475d7f122a6bb50e319591b390b9058ac429c56e..a24e82c0f0cbf9236c0da8f0f51d38d854462328 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 1e06f4ca86d1aa17b3629630b6b98a9e8a24ad82..563c90b3ce78dd0b81228854c9f74d112fda9fff 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 34f5b891c02f8763396bdb27f371d6019d5eac67..75643442b1a374aa299b48963b81a147d3b8ec5f 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosEepromMonitor extends AltosDialog {
 
index d8a07951a72369f7a73fa7cecd45565bb3c51476..ea003a1e020fba2e8f8b016240b941f3e587b420 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index ee1840b06b3cbc4ec828d8ca962cadc0b605f953..0c237e118b73f9c49d84cfac5b433fce8ead4bde 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosEepromTeleScience {
        int     type;
index e2b6d5a65b09b58c4f725e54c65bb05f23af9a3f..4cf7de3cf9056044d2fcdece68ad1f9cb359814b 100644 (file)
@@ -20,6 +20,7 @@ package altosui;
 import java.lang.*;
 import java.io.File;
 import java.util.*;
+import org.altusmetrum.AltosLib.*;
 
 class AltosFile extends File {
 
index e91e98065b0cebb3594d499d2cfd941075a6e71b..bd0c8a5077057c5ea22da315312cdf99540abe75 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlash {
        File            file;
index f91c542dfd5e7b24cc1b53b762a5f04ddd407b54..4ab73a6dbeb1d23a082c74e9e2ef7ffe1ff67a37 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlashUI
        extends AltosDialog
index e23eff68f45beb0d4dca1649e95da3a078ae6d55..77969a89ffdfc3f727684a449f3fb150e9d13ac4 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightInfoTableModel extends AbstractTableModel {
        final static private String[] columnNames = {"Field", "Value"};
index 3ddf171d3b7788286701de65235c9caa90c6fb3f..1ac9f848e9acdb14022f9f67a82fbae6c2a901af 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.*;
 import java.text.*;
 import java.io.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightReader {
        String name;
index 578be3f94dd66c31cd3a8a57253cfa6ab168e80d..ab094c805d6e0d53ee7ef7ff2fe97854b87ba3f2 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightStats {
        double          max_height;
index 2d34c6e2f14190e044f02fc72619eae7f3e6f83b..c311b23167b08001ae709103b77fd801e3786377 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightStatsTable extends JComponent {
        GridBagLayout   layout;
index 45e55b4b787286a9defa3582d676257f9d5e7987..6a351004b6ab6aa4b11e63f6a81dc2a935d91dd5 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightStatus extends JComponent implements AltosFlightDisplay {
        GridBagLayout   layout;
index 4c24b6ace99a794b5ce487cdd4201b048042124c..75bf16eb19c8991bf3c79c9b3a88df8c1e5147c3 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightStatusTableModel extends AbstractTableModel {
        private String[] columnNames = {"Height (m)", "State", "RSSI (dBm)", "Speed (m/s)" };
index 5c6e06297abe54aa4ddf5ad56338bf392d1758a0..ddc54cbd18a82958b4cefc1bd809a43cc7b80c1e 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFlightUI extends AltosFrame implements AltosFlightDisplay, AltosFontListener {
        AltosVoice              voice;
index 36ddcae986503f60ad1eddcf5d3a4436410d618e..70598634f6990b4e7c0985236a9fbbf3ac3a16c1 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index e4135df7c7a41c81eef01a2a2bc401b7fb9e32f9..1bbc97c6ce36d7b582b225c13d0a516e56015646 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosFreqList extends JComboBox {
 
index fbcefd61acd4f033c4038dcd7ed497c6bc830a36..54d2bb0b7834bcb1a09dcbf4fbe55b62d7a27964 100644 (file)
@@ -8,6 +8,7 @@ import java.io.*;
 
 import org.jfree.chart.JFreeChart;
 import org.jfree.chart.ChartUtilities;
+import org.altusmetrum.AltosLib.*;
 
 abstract class AltosGraph {
     public String filename;
index 6a084b2ceab2c7d2fd3f02770b4896a09a0b5842..0955f6e6e444883e07774bfdd1f9c9afb5f33f0c 100644 (file)
@@ -12,6 +12,7 @@ import java.text.*;
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.HashMap;
+import org.altusmetrum.AltosLib.*;
 
 import org.jfree.chart.ChartUtilities;
 import org.jfree.chart.JFreeChart;
index c30dc476048d55a2e1b661697c2b45b54b2141e8..527a7d280b138b4718b149c7b4b7800bf930e205 100644 (file)
@@ -12,6 +12,7 @@ import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.table.*;
+import org.altusmetrum.AltosLib.*;
 
 import org.jfree.chart.ChartPanel;
 import org.jfree.chart.ChartUtilities;
index fb1b6ab3e129fa3781fcafe95a0e46a325cc083f..e4af3c189e2276f342177f445d24baa2ef4dbd24 100644 (file)
@@ -18,6 +18,7 @@
 package altosui;
 
 import java.lang.Math;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosGreatCircle {
        double  distance;
index 19e35ae1d2a72ce0da8e368bfc9778ecf02bab78..d52b46c3bcddd6f2623617d1e67d2c3eee40a370 100644 (file)
@@ -23,6 +23,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.LinkedList;
 import java.util.Iterator;
 import java.util.Arrays;
+import org.altusmetrum.AltosLib.*;
 
 class HexFileInputStream extends PushbackInputStream {
        public int line;
index 8eb0d520c339f88ad5d99c5a87d1f9561e580dfd..02295ea98c05fde6c36e5979c88793ab1ebe0414 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 class AltosADC {
        int     tick;
index 3e52ea369d471f82efb91d96281745670a816bb2..c0cd44f1c4197ff05f46b93ab187c561a1f71c71 100644 (file)
@@ -25,6 +25,7 @@ import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.table.*;
 import javax.swing.event.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosIgnite {
        AltosDevice     device;
index 8623cbef3ace51a255f36899b68951727f867d45..076d99b209d537ded052eaf6257ca6c982e87705 100644 (file)
@@ -28,6 +28,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosIgniteUI
        extends AltosDialog
index c023369e55c3678bd0fad2fe00ab3864f092387b..aa6a6d4e5d1ff7b55693ed240cf4dff6c922101b 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosInfoTable extends JTable {
        private AltosFlightInfoTableModel model;
index 6bdbeccabb4e9d388a9c9be42bc2490fd09bc896..2993607be281ca1840dffd7b83f04f6dafef5b23 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.*;
 import java.io.*;
 import java.text.*;
 import java.util.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosKML implements AltosWriter {
 
index 4dd9a2dddd7dfe19295db71d8d68c17f0b654dd5..a47e1cbdc3c8a1e8b2551cb6a345c1f2e3b8bf15 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosLanded extends JComponent implements AltosFlightDisplay, ActionListener {
        GridBagLayout   layout;
index 77f681b8aae3901437f7c034afa6bce5cd867059..0e493b91363f9607e466a92650f9199462f171c8 100644 (file)
@@ -25,6 +25,7 @@ import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.table.*;
 import javax.swing.event.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosLaunch {
        AltosDevice     device;
index a6c3660424e464ed0afc7f9bcdaa3be635506859..eb76243db8784b1d0a5cd4f91eab10d9ca3caf76 100644 (file)
@@ -28,6 +28,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 class FireButton extends JButton {
        protected void processMouseEvent(MouseEvent e) {
index e08e9960102a7814c2c20c5a2cb35a59da14ac53..1358cd48161d43cbf4636861feb8879c5c1ff403 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosLed extends JLabel {
        ImageIcon       on, off;
index 2fa38412c7c4a677af367f1153e5978882349412..8bd9e7de22c49fd47d466f0272864a0efa3447e8 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosLights extends JComponent {
 
index a5f1830d89d0986149cf1bc88781dcc82296cb77..740f0be600ecd1301a2b20be9c1a31ff4265395d 100644 (file)
@@ -22,6 +22,7 @@ import java.lang.*;
 import java.util.*;
 import java.text.ParseException;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 /*
  * This creates a thread to capture telemetry data and write it to
index 6ef66f7a937484eb11b8a24872dcc44e34d7c3c5..0a3f3d65842520659be28026a07722e140868554 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosPad extends JComponent implements AltosFlightDisplay {
        GridBagLayout   layout;
diff --git a/altosui/AltosPreferences.java b/altosui/AltosPreferences.java
deleted file mode 100644 (file)
index 7510c7c..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * 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 altosui;
-import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.awt.Component;
-import javax.swing.*;
-import javax.swing.filechooser.FileSystemView;
-
-class AltosPreferences {
-       public static Preferences preferences;
-
-       /* logdir preference name */
-       final static String logdirPreference = "LOGDIR";
-
-       /* channel preference name */
-       final static String channelPreferenceFormat = "CHANNEL-%d";
-
-       /* frequency preference name */
-       final static String frequencyPreferenceFormat = "FREQUENCY-%d";
-
-       /* telemetry format preference name */
-       final static String telemetryPreferenceFormat = "TELEMETRY-%d";
-
-       /* voice preference name */
-       final static String voicePreference = "VOICE";
-
-       /* callsign preference name */
-       final static String callsignPreference = "CALLSIGN";
-
-       /* firmware directory preference name */
-       final static String firmwaredirPreference = "FIRMWARE";
-
-       /* serial debug preference name */
-       final static String serialDebugPreference = "SERIAL-DEBUG";
-
-       /* scanning telemetry preferences name */
-       final static String scanningTelemetryPreference = "SCANNING-TELEMETRY";
-
-       /* Launcher serial preference name */
-       final static String launcherSerialPreference = "LAUNCHER-SERIAL";
-
-       /* Launcher channel preference name */
-       final static String launcherChannelPreference = "LAUNCHER-CHANNEL";
-       
-       /* Default logdir is ~/TeleMetrum */
-       final static String logdirName = "TeleMetrum";
-
-       /* Log directory */
-       static File logdir;
-
-       /* Map directory -- hangs of logdir */
-       static File mapdir;
-
-       /* Frequency (map serial to frequency) */
-       static Hashtable<Integer, Double> frequencies;
-
-       /* Telemetry (map serial to telemetry format) */
-       static Hashtable<Integer, Integer> telemetries;
-
-       /* Voice preference */
-       static boolean voice;
-
-       /* Callsign preference */
-       static String callsign;
-
-       /* Firmware directory */
-       static File firmwaredir;
-
-       /* Serial debug */
-       static boolean serial_debug;
-
-       /* Scanning telemetry */
-       static int scanning_telemetry;
-
-       /* List of frequencies */
-       final static String common_frequencies_node_name = "COMMON-FREQUENCIES";
-       static AltosFrequency[] common_frequencies;
-
-       final static String     frequency_count = "COUNT";
-       final static String     frequency_format = "FREQUENCY-%d";
-       final static String     description_format = "DESCRIPTION-%d";
-
-       static AltosFrequency[] load_common_frequencies() {
-               AltosFrequency[] frequencies = null;
-               boolean existing = false;
-               try {
-                       existing = preferences.nodeExists(common_frequencies_node_name);
-               } catch (BackingStoreException be) {
-                       existing = false;
-               }
-               if (existing) {
-                       Preferences     node = preferences.node(common_frequencies_node_name);
-                       int             count = node.getInt(frequency_count, 0);
-
-                       frequencies = new AltosFrequency[count];
-                       for (int i = 0; i < count; i++) {
-                               double  frequency;
-                               String  description;
-
-                               frequency = node.getDouble(String.format(frequency_format, i), 0.0);
-                               description = node.get(String.format(description_format, i), null);
-                               frequencies[i] = new AltosFrequency(frequency, description);
-                       }
-               } else {
-                       frequencies = new AltosFrequency[10];
-                       for (int i = 0; i < 10; i++) {
-                               frequencies[i] = new AltosFrequency(434.550 + i * .1,
-                                                                          String.format("Channel %d", i));
-                       }
-               }
-               return frequencies;
-       }
-
-       static void save_common_frequencies(AltosFrequency[] frequencies) {
-               Preferences     node = preferences.node(common_frequencies_node_name);
-
-               node.putInt(frequency_count, frequencies.length);
-               for (int i = 0; i < frequencies.length; i++) {
-                       node.putDouble(String.format(frequency_format, i), frequencies[i].frequency);
-                       node.put(String.format(description_format, i), frequencies[i].description);
-               }
-       }
-       static int launcher_serial;
-
-       static int launcher_channel;
-
-       public static void init() {
-               preferences = Preferences.userRoot().node("/org/altusmetrum/altosui");
-
-               /* Initialize logdir from preferences */
-               String logdir_string = preferences.get(logdirPreference, null);
-               if (logdir_string != null)
-                       logdir = new File(logdir_string);
-               else {
-                       /* Use the file system view default directory */
-                       logdir = new File(FileSystemView.getFileSystemView().getDefaultDirectory(), logdirName);
-                       if (!logdir.exists())
-                               logdir.mkdirs();
-               }
-               mapdir = new File(logdir, "maps");
-               if (!mapdir.exists())
-                       mapdir.mkdirs();
-
-               frequencies = new Hashtable<Integer, Double>();
-
-               telemetries = new Hashtable<Integer,Integer>();
-
-               voice = preferences.getBoolean(voicePreference, true);
-
-               callsign = preferences.get(callsignPreference,"N0CALL");
-
-               scanning_telemetry = preferences.getInt(scanningTelemetryPreference,(1 << Altos.ao_telemetry_standard));
-
-               launcher_serial = preferences.getInt(launcherSerialPreference, 0);
-
-               launcher_channel = preferences.getInt(launcherChannelPreference, 0);
-
-               String firmwaredir_string = preferences.get(firmwaredirPreference, null);
-               if (firmwaredir_string != null)
-                       firmwaredir = new File(firmwaredir_string);
-               else
-                       firmwaredir = null;
-
-               serial_debug = preferences.getBoolean(serialDebugPreference, false);
-               AltosSerial.set_debug(serial_debug);
-
-               common_frequencies = load_common_frequencies();
-
-       }
-
-       static { init(); }
-
-       static void flush_preferences() {
-               try {
-                       preferences.flush();
-               } catch (BackingStoreException ee) {
-/*
-                       if (component != null)
-                               JOptionPane.showMessageDialog(component,
-                                                             preferences.absolutePath(),
-                                                             "Cannot save prefernces",
-                                                             JOptionPane.ERROR_MESSAGE);
-                       else
-*/
-                               System.err.printf("Cannot save preferences\n");
-               }
-       }
-
-       public static void set_logdir(File new_logdir) {
-               logdir = new_logdir;
-               mapdir = new File(logdir, "maps");
-               if (!mapdir.exists())
-                       mapdir.mkdirs();
-               synchronized (preferences) {
-                       preferences.put(logdirPreference, logdir.getPath());
-                       flush_preferences();
-               }
-       }
-
-       public static File logdir() {
-               return logdir;
-       }
-
-       public static File mapdir() {
-               return mapdir;
-       }
-
-       public static void set_frequency(int serial, double new_frequency) {
-               frequencies.put(serial, new_frequency);
-               synchronized (preferences) {
-                       preferences.putDouble(String.format(frequencyPreferenceFormat, serial), new_frequency);
-                       flush_preferences();
-               }
-       }
-
-       public static double frequency(int serial) {
-               if (frequencies.containsKey(serial))
-                       return frequencies.get(serial);
-               double frequency = preferences.getDouble(String.format(frequencyPreferenceFormat, serial), 0);
-               if (frequency == 0.0) {
-                       int channel = preferences.getInt(String.format(channelPreferenceFormat, serial), 0);
-                       frequency = AltosConvert.radio_channel_to_frequency(channel);
-               }
-               frequencies.put(serial, frequency);
-               return frequency;
-       }
-
-       public static void set_telemetry(int serial, int new_telemetry) {
-               telemetries.put(serial, new_telemetry);
-               synchronized (preferences) {
-                       preferences.putInt(String.format(telemetryPreferenceFormat, serial), new_telemetry);
-                       flush_preferences();
-               }
-       }
-
-       public static int telemetry(int serial) {
-               if (telemetries.containsKey(serial))
-                       return telemetries.get(serial);
-               int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial),
-                                                  Altos.ao_telemetry_standard);
-               telemetries.put(serial, telemetry);
-               return telemetry;
-       }
-
-       public static void set_scanning_telemetry(int new_scanning_telemetry) {
-               scanning_telemetry = new_scanning_telemetry;
-               synchronized (preferences) {
-                       preferences.putInt(scanningTelemetryPreference, scanning_telemetry);
-                       flush_preferences();
-               }
-       }
-
-       public static int scanning_telemetry() {
-               return scanning_telemetry;
-       }
-
-       public static void set_voice(boolean new_voice) {
-               voice = new_voice;
-               synchronized (preferences) {
-                       preferences.putBoolean(voicePreference, voice);
-                       flush_preferences();
-               }
-       }
-
-       public static boolean voice() {
-               return voice;
-       }
-
-       public static void set_callsign(String new_callsign) {
-               callsign = new_callsign;
-               synchronized(preferences) {
-                       preferences.put(callsignPreference, callsign);
-                       flush_preferences();
-               }
-       }
-
-       public static String callsign() {
-               return callsign;
-       }
-
-       public static void set_firmwaredir(File new_firmwaredir) {
-               firmwaredir = new_firmwaredir;
-               synchronized (preferences) {
-                       preferences.put(firmwaredirPreference, firmwaredir.getPath());
-                       flush_preferences();
-               }
-       }
-
-       public static File firmwaredir() {
-               return firmwaredir;
-       }
-
-       public static void set_serial_debug(boolean new_serial_debug) {
-               serial_debug = new_serial_debug;
-               AltosSerial.set_debug(serial_debug);
-               synchronized (preferences) {
-                       preferences.putBoolean(serialDebugPreference, serial_debug);
-                       flush_preferences();
-               }
-       }
-
-       public static boolean serial_debug() {
-               return serial_debug;
-       }
-
-       public static void set_launcher_serial(int new_launcher_serial) {
-               launcher_serial = new_launcher_serial;
-               System.out.printf("set launcher serial to %d\n", new_launcher_serial);
-               synchronized (preferences) {
-                       preferences.putInt(launcherSerialPreference, launcher_serial);
-                       flush_preferences();
-               }
-       }
-
-       public static int launcher_serial() {
-               return launcher_serial;
-       }
-
-       public static void set_launcher_channel(int new_launcher_channel) {
-               launcher_channel = new_launcher_channel;
-               System.out.printf("set launcher channel to %d\n", new_launcher_channel);
-               synchronized (preferences) {
-                       preferences.putInt(launcherChannelPreference, launcher_channel);
-                       flush_preferences();
-               }
-       }
-
-       public static int launcher_channel() {
-               return launcher_channel;
-       }
-       
-       public static Preferences bt_devices() {
-               return preferences.node("bt_devices");
-       }
-
-       public static AltosFrequency[] common_frequencies() {
-               return common_frequencies;
-       }
-
-       public static void set_common_frequencies(AltosFrequency[] frequencies) {
-               common_frequencies = frequencies;
-               synchronized(preferences) {
-                       save_common_frequencies(frequencies);
-                       flush_preferences();
-               }
-       }
-
-       public static void add_common_frequency(AltosFrequency frequency) {
-               AltosFrequency[]        new_frequencies = new AltosFrequency[common_frequencies.length + 1];
-               int                     i;
-
-               for (i = 0; i < common_frequencies.length; i++) {
-                       if (frequency.frequency == common_frequencies[i].frequency)
-                               return;
-                       if (frequency.frequency < common_frequencies[i].frequency)
-                               break;
-                       new_frequencies[i] = common_frequencies[i];
-               }
-               new_frequencies[i] = frequency;
-               for (; i < common_frequencies.length; i++)
-                       new_frequencies[i+1] = common_frequencies[i];
-               set_common_frequencies(new_frequencies);
-       }
-}
index b9280a0cee1bf1ad13c17e299fe3403f05ed60b0..aafd5f81127aa873a6fa26b23536f957c5e5db1b 100644 (file)
@@ -20,6 +20,7 @@ package altosui;
 import java.io.*;
 import java.util.*;
 import java.text.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosReader {
        public AltosRecord read() throws IOException, ParseException { return null; }
index eed56cfffc58d4aeff26c113700405ebdd559349..f92c0328eb5ee3bfe807a7348440dd8d92de9acd 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
+import org.altusmetrum.AltosLib.*;
 
 /*
  * Open an existing telemetry file and replay it in realtime
index 55056b5e521cff94803addea48d17d7e6f9c9277..0a283e510ef7567051d803bffeef75effde155c8 100644 (file)
@@ -17,6 +17,7 @@
 
 package altosui;
 import java.io.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosRomconfig {
        public boolean  valid;
index e4e38c9c07015d9a648bdef62dfc05ed9530a028..306b8623d4cc7e6079d85b43aede1d34317e2950 100644 (file)
@@ -27,6 +27,7 @@ import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosRomconfigUI
        extends AltosDialog
index 2b9137d80c4f2c1d47301cf4631556f64560e758..1be8aa26063219bbfd54d19bf2e522124ccdcfba 100644 (file)
@@ -28,6 +28,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 class AltosScanResult {
        String          callsign;
index afb9f21a2c3d189a00a2586c262b739df168ca26..74e945f3eff7d31d29ca6ff6af57b7615745ec5c 100644 (file)
@@ -31,6 +31,7 @@ import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.table.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index 93c54d0236ed231cd5b315c236fb3cbe00464609..b57edcabd68e472b8ee19c1d4ec41b6bf6a55944 100644 (file)
@@ -32,6 +32,7 @@ import java.lang.Math;
 import java.awt.geom.Point2D;
 import java.awt.geom.Line2D;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
        // preferred vertical step in a tile in naut. miles
index 2e62cc454f71fcfa27ef782bd926395e64a5dddf..f729a2984951c080c3b899436f35357bf37b0060 100644 (file)
@@ -29,6 +29,7 @@ import java.text.*;
 import java.util.prefs.*;
 import java.net.URL;
 import java.net.URLConnection;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosSiteMapCache extends JLabel {
        public static boolean fetchMap(File file, String url) {
index 5de7a05edee77fde6c30cf7033117f76cae66dba..676b079054c569012110edd6fbfc57ab6a3da41a 100644 (file)
@@ -33,6 +33,7 @@ import java.awt.geom.Point2D;
 import java.awt.geom.Line2D;
 import java.net.URL;
 import java.net.URLConnection;
+import org.altusmetrum.AltosLib.*;
 
 class AltosMapPos extends Box {
        AltosUI         owner;
index 9e62bb47c751fdfa967ae358af80467cbd443409..345502199d94bb834091e3b190cfa9945e970b79 100644 (file)
@@ -30,6 +30,7 @@ import java.util.prefs.*;
 import java.lang.Math;
 import java.awt.geom.Point2D;
 import java.awt.geom.Line2D;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosSiteMapTile extends JLayeredPane {
        JLabel mapLabel;
index 9c6f85ebb4361cb900f3122ed04bd2b7b0c78492..403c74be16a70eccbdbf3f9ef34d28da44e000f7 100644 (file)
@@ -21,6 +21,8 @@
 
 package altosui;
 
+import org.altusmetrum.AltosLib.*;
+
 public class AltosState {
        AltosRecord data;
 
diff --git a/altosui/AltosTelemetryReader.java b/altosui/AltosTelemetryReader.java
new file mode 100644 (file)
index 0000000..dc7e4a7
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * 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 altosui;
+
+import java.lang.*;
+import java.text.*;
+import java.io.*;
+import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
+
+class AltosTelemetryReader extends AltosFlightReader {
+       AltosDevice     device;
+       AltosSerial     serial;
+       AltosLog        log;
+       AltosRecord     previous;
+       double          frequency;
+       int             telemetry;
+
+       LinkedBlockingQueue<AltosLine> telem;
+
+       AltosRecord read() throws InterruptedException, ParseException, AltosCRCException, IOException {
+               AltosLine l = telem.take();
+               if (l.line == null)
+                       throw new IOException("IO error");
+               AltosRecord     next = AltosTelemetry.parse(l.line, previous);
+               previous = next;
+               return next;
+       }
+
+       void flush() {
+               telem.clear();
+       }
+
+       void close(boolean interrupted) {
+               serial.remove_monitor(telem);
+               log.close();
+               serial.close();
+       }
+
+       public void set_frequency(double in_frequency) throws InterruptedException, TimeoutException {
+               frequency = in_frequency;
+               serial.set_radio_frequency(frequency);
+       }
+
+       public boolean supports_telemetry(int telemetry) {
+
+               try {
+                       /* Version 1.0 or later firmware supports all telemetry formats */
+                       if (serial.config_data().compare_version("1.0") >= 0)
+                               return true;
+
+                       /* Version 0.9 firmware only supports 0.9 telemetry */
+                       if (serial.config_data().compare_version("0.9") >= 0) {
+                               if (telemetry == Altos.ao_telemetry_0_9)
+                                       return true;
+                               else
+                                       return false;
+                       }
+
+                       /* Version 0.8 firmware only supports 0.8 telemetry */
+                       if (telemetry == Altos.ao_telemetry_0_8)
+                               return true;
+                       else
+                               return false;
+               } catch (InterruptedException ie) {
+                       return true;
+               } catch (TimeoutException te) {
+                       return true;
+               }
+       }
+
+       void save_frequency() {
+               AltosPreferences.set_frequency(device.getSerial(), frequency);
+       }
+
+       void set_telemetry(int in_telemetry) {
+               telemetry = in_telemetry;
+               serial.set_telemetry(telemetry);
+       }
+
+       void save_telemetry() {
+               AltosPreferences.set_telemetry(device.getSerial(), telemetry);
+       }
+
+       File backing_file() {
+               return log.file();
+       }
+
+       public AltosTelemetryReader (AltosDevice in_device)
+               throws FileNotFoundException, AltosSerialInUseException, IOException, InterruptedException, TimeoutException {
+               device = in_device;
+               serial = new AltosSerial(device);
+               log = new AltosLog(serial);
+               name = device.toShortString();
+               previous = null;
+
+               telem = new LinkedBlockingQueue<AltosLine>();
+               frequency = AltosPreferences.frequency(device.getSerial());
+               set_frequency(frequency);
+               telemetry = AltosPreferences.telemetry(device.getSerial());
+               set_telemetry(telemetry);
+               serial.set_callsign(AltosUIPreferences.callsign());
+               serial.add_monitor(telem);
+       }
+}
index a2816a3a6dc4cf7158e28d6273b3a7a298613f73..25c6c36b7845c374c9da499a61517b6b6e00f863 100644 (file)
@@ -27,6 +27,7 @@ import java.util.*;
 import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
 
 import libaltosJNI.*;
 
index da6c39689614c9f8db4f9ae4e424fce1d7546031..38af734e696fbb321e660620605ec247beb21707 100644 (file)
@@ -25,10 +25,9 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.awt.Component;
 import javax.swing.*;
 import javax.swing.filechooser.FileSystemView;
+import org.altusmetrum.AltosLib.*;
 
-/* import org.altusmetrum.AltosLib.*; */
-
-class AltosUIPreferences extends AltosPreferences {
+public class AltosUIPreferences extends AltosPreferences {
 
        /* font size preferences name */
        final static String fontSizePreference = "FONT-SIZE";
@@ -47,6 +46,9 @@ class AltosUIPreferences extends AltosPreferences {
 
        static String look_and_feel = null;
 
+       /* Serial debug */
+       static boolean serial_debug;
+
        public static void init() {
                font_listeners = new LinkedList<AltosFontListener>();
 
@@ -55,6 +57,8 @@ class AltosUIPreferences extends AltosPreferences {
                look_and_feel = preferences.get(lookAndFeelPreference, UIManager.getSystemLookAndFeelClassName());
 
                ui_listeners = new LinkedList<AltosUIListener>();
+               serial_debug = preferences.getBoolean(serialDebugPreference, false);
+               AltosSerial.set_debug(serial_debug);
        }
 
        static { init(); }
@@ -156,4 +160,17 @@ class AltosUIPreferences extends AltosPreferences {
                        ui_listeners.remove(l);
                }
        }
+       public static void set_serial_debug(boolean new_serial_debug) {
+               serial_debug = new_serial_debug;
+               AltosSerial.set_debug(serial_debug);
+               synchronized (preferences) {
+                       preferences.putBoolean(serialDebugPreference, serial_debug);
+                       flush_preferences();
+               }
+       }
+
+       public static boolean serial_debug() {
+               return serial_debug;
+       }
+
 }
\ No newline at end of file
index a172dff0f9d7cfc1713add48160648074af8ae43..b7375204d0a41ffb7bca233441f78adf4ffada38 100644 (file)
@@ -21,6 +21,8 @@ import java.lang.*;
 import java.io.*;
 import java.text.*;
 import java.util.*;
+import org.altusmetrum.AltosLib.*;
+
 
 public interface AltosWriter {
 
index e6b87b5832e82bbdec9ce236c27d2c97822bbfeb..c350efec01e3f149a508d1d80370b54c17341ec8 100644 (file)
@@ -27,6 +27,7 @@ import javax.swing.table.*;
 import java.io.*;
 import java.util.*;
 import java.text.*;
+import org.altusmetrum.AltosLib.*;
 
 class GrabNDrag extends MouseInputAdapter {
        private JComponent scroll;
index c3fd6bb644061f89ade2704a907b3be99800d55b..cfe453022f5082b028497ab2d36e92e0dd62a5a1 100644 (file)
@@ -6,7 +6,7 @@ man_MANS=altosui.1
 
 altoslibdir=$(libdir)/altos
 
-CLASSPATH_ENV=mkdir -p $(JAVAROOT); CLASSPATH=".:classes:libaltos:$(FREETTS)/*:/usr/share/java/*"
+CLASSPATH_ENV=mkdir -p $(JAVAROOT); CLASSPATH=".:classes:altoslib/bin:libaltos:$(FREETTS)/*:/usr/share/java/*"
 
 bin_SCRIPTS=altosui
 
@@ -66,10 +66,7 @@ altosui_JAVA = \
        AltosFlightStatusUpdate.java \
        AltosFlightUI.java \
        AltosFontListener.java \
-       AltosFrequency.java \
        AltosFreqList.java \
-       AltosGPS.java \
-       AltosGPSSat.java \
        AltosGreatCircle.java \
        AltosHexfile.java \
        Altos.java \
@@ -83,27 +80,11 @@ altosui_JAVA = \
        AltosLanded.java \
        AltosLed.java \
        AltosLights.java \
-       AltosLine.java \
        AltosLog.java \
        AltosPad.java \
-       AltosParse.java \
-       AltosUIPreferences.java \
-       AltosPreferences.java \
        AltosUIPreferences.java \
        AltosReader.java \
-       AltosRecord.java \
-       AltosRecordCompanion.java \
-       AltosRecordIterable.java \
        AltosTelemetryReader.java \
-       AltosTelemetryRecord.java \
-       AltosTelemetryRecordRaw.java \
-       AltosTelemetryRecordSensor.java \
-       AltosTelemetryRecordConfiguration.java \
-       AltosTelemetryRecordLocation.java \
-       AltosTelemetryRecordSatellite.java \
-       AltosTelemetryRecordCompanion.java \
-       AltosTelemetryRecordLegacy.java \
-       AltosTelemetryMap.java \
        AltosReplayReader.java \
        AltosRomconfig.java \
        AltosRomconfigUI.java \
@@ -116,8 +97,7 @@ altosui_JAVA = \
        AltosSiteMapCache.java \
        AltosSiteMapTile.java \
        AltosState.java \
-       AltosTelemetry.java \
-       AltosTelemetryIterable.java \
+       AltosTelemetryReader.java \
        AltosUI.java \
        AltosUIListener.java \
        AltosFrame.java \
@@ -148,6 +128,9 @@ FREETTS_CLASS= \
        en_us.jar \
        freetts.jar
 
+ALTOSLIB_CLASS=\
+       AltosLib.jar
+
 LIBALTOS= \
        libaltos.so \
        libaltos.dylib \
@@ -200,7 +183,7 @@ LINUX_DIST=Altos-Linux-$(VERSION).tar.bz2
 MACOSX_DIST=Altos-Mac-$(VERSION).zip
 WINDOWS_DIST=Altos-Windows-$(VERSION_DASH).exe
 
-FAT_FILES=$(FATJAR) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS)
+FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS)
 
 LINUX_FILES=$(FAT_FILES) libaltos.so $(FIRMWARE) $(DOC)
 LINUX_EXTRA=altosui-fat
@@ -214,7 +197,7 @@ all-local: classes/altosui $(JAR) altosui altosui-test altosui-jdb
 
 clean-local:
        -rm -rf classes $(JAR) $(FATJAR) \
-               $(LINUX_DIST) $(MACOSX_DIST) windows $(WINDOWS_DIST) $(FREETTS_CLASS) \
+               $(LINUX_DIST) $(MACOSX_DIST) windows $(WINDOWS_DIST) $(ALTOSLIB_CLASS) $(FREETTS_CLASS) \
                $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt altos-windows.log \
                altosui altosui-test altosui-jdb macosx linux
 
@@ -256,13 +239,13 @@ install-altosuiJAVA: altosui.jar
 classes/altosui:
        mkdir -p classes/altosui
 
-$(JAR): classaltosui.stamp Manifest.txt $(JAVA_ICON)
+$(JAR): classaltosui.stamp Manifest.txt $(JAVA_ICON) $(ALTOSLIB_CLASS)
        jar cfm $@ Manifest.txt \
                $(ICONJAR) \
                -C classes altosui \
                -C libaltos libaltosJNI
 
-$(FATJAR): classaltosui.stamp Manifest-fat.txt $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) $(JAVA_ICON)
+$(FATJAR): classaltosui.stamp Manifest-fat.txt $(ALTOSLIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) $(JAVA_ICON)
        jar cfm $@ Manifest-fat.txt \
                $(ICONJAR) \
                -C classes altosui \
@@ -270,11 +253,11 @@ $(FATJAR): classaltosui.stamp Manifest-fat.txt $(FREETTS_CLASS) $(JFREECHART_CLA
 
 Manifest.txt: Makefile
        echo 'Main-Class: altosui.AltosUI' > $@
-       echo "Class-Path: $(FREETTS)/freetts.jar $(JFREECHART)/jfreechart.jar $(JCOMMON)/jcommon.jar" >> $@
+       echo "Class-Path: altoslib.jar $(FREETTS)/freetts.jar $(JFREECHART)/jfreechart.jar $(JCOMMON)/jcommon.jar" >> $@
 
 Manifest-fat.txt:
        echo 'Main-Class: altosui.AltosUI' > $@
-       echo "Class-Path: freetts.jar jfreechart.jar jcommon.jar" >> $@
+       echo "Class-Path: altoslib.jar freetts.jar jfreechart.jar jcommon.jar" >> $@
 
 altosui: Makefile
        echo "#!/bin/sh" > $@
@@ -283,7 +266,7 @@ altosui: Makefile
 
 altosui-test: Makefile
        echo "#!/bin/sh" > $@
-       echo 'exec java -cp "$(FREETTS)/*:$(JFREECHART)/*:$(JCOMMON)/*" -Djava.library.path="libaltos/.libs" -jar altosui.jar "$$@"' >> $@
+       echo 'exec java -cp ":altoslib/*:$(FREETTS)/*:$(JFREECHART)/*:$(JCOMMON)/*" -Djava.library.path="libaltos/.libs" -jar altosui.jar "$$@"' >> $@
        chmod +x $@
 
 altosui-jdb: Makefile
@@ -317,6 +300,10 @@ build-altos-dll:
 build-altos64-dll:
        +cd libaltos && make altos64.dll
 
+$(ALTOSLIB_CLASS):
+       -rm -f "$@"
+       $(LN_S) altoslib/"$@" .
+
 $(FREETTS_CLASS):
        -rm -f "$@"
        $(LN_S) "$(FREETTS)"/"$@" .
@@ -345,9 +332,11 @@ $(MACOSX_DIST): $(MACOSX_FILES) $(MACOSX_EXTRA)
        cp -a AltosUI.app macosx/
        mkdir -p macosx/AltOS macosx/AltosUI.app/Contents/Resources/Java
        cp -p $(FATJAR) macosx/AltosUI.app/Contents/Resources/Java/altosui.jar
-       cp -p $(FREETTS_CLASS) libaltos.dylib macosx/AltosUI.app/Contents/Resources/Java
-       cp -p $(JFREECHART_CLASS) libaltos.dylib macosx/AltosUI.app/Contents/Resources/Java
-       cp -p $(JCOMMON_CLASS) libaltos.dylib macosx/AltosUI.app/Contents/Resources/Java
+       cp -p libaltos.dylib macosx/AltosUI.app/Contents/Resources/Java
+       cp -p $(ALTOSLIB_CLASS) macosx/AltosUI.app/Contents/Resources/Java
+       cp -p $(FREETTS_CLASS) macosx/AltosUI.app/Contents/Resources/Java
+       cp -p $(JFREECHART_CLASS) macosx/AltosUI.app/Contents/Resources/Java
+       cp -p $(JCOMMON_CLASS) macosx/AltosUI.app/Contents/Resources/Java
        cp -p $(MACOSX_EXTRA) macosx/AltOS
        cd macosx && zip -r ../$@ AltosUI.app AltOS
 
index 9c6551310ae15cb2573e5d1e0d84f887cb610562..967c8d06ec9c602e789f87eac187c834de509e11 100644 (file)
@@ -18,11 +18,12 @@ AltosLib_JAVA = \
        $(SRC)/AltosGPSSat.java \
        $(SRC)/AltosLine.java \
        $(SRC)/AltosParse.java \
+       $(SRC)/AltosPreferences.java \
        $(SRC)/AltosRecordCompanion.java \
        $(SRC)/AltosRecordIterable.java \
        $(SRC)/AltosRecord.java \
-       $(SRC)/AltosTelemetryIterable.java \
        $(SRC)/AltosTelemetry.java \
+       $(SRC)/AltosTelemetryIterable.java \
        $(SRC)/AltosTelemetryMap.java \
        $(SRC)/AltosTelemetryRecordCompanion.java \
        $(SRC)/AltosTelemetryRecordConfiguration.java \
index 6773ab7e07dcce088c464d47f25f91e807529ff0..3527b575178a2291ceb62b5729c3987af756f618 100644 (file)
@@ -41,27 +41,27 @@ public class AltosConvert {
         *   in Joules/(kilogram-Kelvin).
         */
 
-       static final double GRAVITATIONAL_ACCELERATION = -9.80665;
-       static final double AIR_GAS_CONSTANT            = 287.053;
-       static final double NUMBER_OF_LAYERS            = 7;
-       static final double MAXIMUM_ALTITUDE            = 84852.0;
-       static final double MINIMUM_PRESSURE            = 0.3734;
-       static final double LAYER0_BASE_TEMPERATURE     = 288.15;
-       static final double LAYER0_BASE_PRESSURE        = 101325;
+       public static final double GRAVITATIONAL_ACCELERATION = -9.80665;
+       public static final double AIR_GAS_CONSTANT             = 287.053;
+       public static final double NUMBER_OF_LAYERS             = 7;
+       public static final double MAXIMUM_ALTITUDE             = 84852.0;
+       public static final double MINIMUM_PRESSURE             = 0.3734;
+       public static final double LAYER0_BASE_TEMPERATURE      = 288.15;
+       public static final double LAYER0_BASE_PRESSURE = 101325;
 
        /* lapse rate and base altitude for each layer in the atmosphere */
-       static final double[] lapse_rate = {
+       public static final double[] lapse_rate = {
                -0.0065, 0.0, 0.001, 0.0028, 0.0, -0.0028, -0.002
        };
 
-       static final int[] base_altitude = {
+       public static final int[] base_altitude = {
                0, 11000, 20000, 32000, 47000, 51000, 71000
        };
 
        /* outputs atmospheric pressure associated with the given altitude.
         * altitudes are measured with respect to the mean sea level
         */
-       static double
+       public static double
        altitude_to_pressure(double altitude)
        {
                double base_temperature = LAYER0_BASE_TEMPERATURE;
@@ -114,7 +114,7 @@ public class AltosConvert {
 
 /* outputs the altitude associated with the given pressure. the altitude
    returned is measured with respect to the mean sea level */
-       static double
+       public static double
        pressure_to_altitude(double pressure)
        {
 
@@ -178,19 +178,19 @@ public class AltosConvert {
                return altitude;
        }
 
-       static double
+       public static double
        cc_battery_to_voltage(double battery)
        {
                return battery / 32767.0 * 5.0;
        }
 
-       static double
+       public static double
        cc_ignitor_to_voltage(double ignite)
        {
                return ignite / 32767 * 15.0;
        }
 
-       static double radio_to_frequency(int freq, int setting, int cal, int channel) {
+       public static double radio_to_frequency(int freq, int setting, int cal, int channel) {
                double  f;
 
                if (freq > 0)
@@ -205,13 +205,13 @@ public class AltosConvert {
                return f + channel * 0.100;
        }
 
-       static int radio_frequency_to_setting(double frequency, int cal) {
+       public static int radio_frequency_to_setting(double frequency, int cal) {
                double  set = frequency / 434.550 * cal;
 
                return (int) Math.floor (set + 0.5);
        }
 
-       static int radio_frequency_to_channel(double frequency) {
+       public static int radio_frequency_to_channel(double frequency) {
                int     channel = (int) Math.floor ((frequency - 434.550) / 0.100 + 0.5);
 
                if (channel < 0)
@@ -221,11 +221,11 @@ public class AltosConvert {
                return channel;
        }
 
-       static double radio_channel_to_frequency(int channel) {
+       public static double radio_channel_to_frequency(int channel) {
                return 434.550 + channel * 0.100;
        }
 
-       static int[] ParseHex(String line) {
+       public static int[] ParseHex(String line) {
                String[] tokens = line.split("\\s+");
                int[] array = new int[tokens.length];
 
@@ -238,19 +238,19 @@ public class AltosConvert {
                return array;
        }
 
-       static double meters_to_feet(double meters) {
+       public static double meters_to_feet(double meters) {
                return meters * (100 / (2.54 * 12));
        }
 
-       static double meters_to_mach(double meters) {
+       public static double meters_to_mach(double meters) {
                return meters / 343;            /* something close to mach at usual rocket sites */
        }
 
-       static double meters_to_g(double meters) {
+       public static double meters_to_g(double meters) {
                return meters / 9.80665;
        }
 
-       static int checksum(int[] data, int start, int length) {
+       public static int checksum(int[] data, int start, int length) {
                int     csum = 0x5a;
                for (int i = 0; i < length; i++)
                        csum += data[i + start];
index 6fd26dfd6fbdba7002119c6d8eeacec7b5523b79..f08ff1168a1d509dca587de0574b56ba8a19f05f 100644 (file)
@@ -22,8 +22,8 @@ import java.util.*;
 import java.text.*;
 
 public class AltosFrequency {
-       double  frequency;
-       String  description;
+       public double   frequency;
+       public String   description;
 
        public String toString() {
                return String.format("%7.3f MHz %-20s",
index 8cc7aa6948111c307eb1af000f5cdf8db6731a69..f078a469a344ce850be94834e67ba7f20d9a47b1 100644 (file)
@@ -22,32 +22,32 @@ import java.text.*;
 
 public class AltosGPS {
 
-       final static int MISSING = AltosRecord.MISSING;
-
-       int     nsat;
-       boolean locked;
-       boolean connected;
-       double  lat;            /* degrees (+N -S) */
-       double  lon;            /* degrees (+E -W) */
-       int     alt;            /* m */
-       int     year;
-       int     month;
-       int     day;
-       int     hour;
-       int     minute;
-       int     second;
-
-       double  ground_speed;   /* m/s */
-       int     course;         /* degrees */
-       double  climb_rate;     /* m/s */
-       double  hdop;           /* unitless */
-       double  vdop;           /* unitless */
-       int     h_error;        /* m */
-       int     v_error;        /* m */
-
-       AltosGPSSat[] cc_gps_sat;       /* tracking data */
-
-       void ParseGPSDate(String date) throws ParseException {
+       public final static int MISSING = AltosRecord.MISSING;
+
+       public int      nsat;
+       public boolean  locked;
+       public boolean  connected;
+       public double   lat;            /* degrees (+N -S) */
+       public double   lon;            /* degrees (+E -W) */
+       public int      alt;            /* m */
+       public int      year;
+       public int      month;
+       public int      day;
+       public int      hour;
+       public int      minute;
+       public int      second;
+
+       public double   ground_speed;   /* m/s */
+       public int      course;         /* degrees */
+       public double   climb_rate;     /* m/s */
+       public double   hdop;           /* unitless */
+       public double   vdop;           /* unitless */
+       public int      h_error;        /* m */
+       public int      v_error;        /* m */
+
+       public AltosGPSSat[] cc_gps_sat;        /* tracking data */
+
+       public void ParseGPSDate(String date) throws ParseException {
                String[] ymd = date.split("-");
                if (ymd.length != 3)
                        throw new ParseException("error parsing GPS date " + date + " got " + ymd.length, 0);
@@ -56,7 +56,7 @@ public class AltosGPS {
                day = AltosParse.parse_int(ymd[2]);
        }
 
-       void ParseGPSTime(String time) throws ParseException {
+       public void ParseGPSTime(String time) throws ParseException {
                String[] hms = time.split(":");
                if (hms.length != 3)
                        throw new ParseException("Error parsing GPS time " + time + " got " + hms.length, 0);
@@ -65,7 +65,7 @@ public class AltosGPS {
                second = AltosParse.parse_int(hms[2]);
        }
 
-       void ClearGPSTime() {
+       public void ClearGPSTime() {
                year = month = day = 0;
                hour = minute = second = 0;
        }
index 5fa8f987806136d232085b998f5b6c6473a5bdaa..faa1ec8dd7b1512a8a2e3d346d186c70122c3d37 100644 (file)
@@ -18,8 +18,8 @@
 package org.altusmetrum.AltosLib;
 
 public class AltosGPSSat {
-       int     svid;
-       int     c_n0;
+       public int      svid;
+       public int      c_n0;
 
        public AltosGPSSat(int s, int c) {
                svid = s;
index 4c0a59cb57570d1e84efe63ebdeb90b3e4b8be5b..7d832f1ab2e6ce15bdfa8d079b10c1c348490fb9 100644 (file)
@@ -21,11 +21,11 @@ import java.text.*;
 import java.lang.*;
 
 public class AltosParse {
-       static boolean isdigit(char c) {
+       public static boolean isdigit(char c) {
                return '0' <= c && c <= '9';
        }
 
-       static int parse_int(String v) throws ParseException {
+       public static int parse_int(String v) throws ParseException {
                try {
                        return AltosLib.fromdec(v);
                } catch (NumberFormatException e) {
@@ -33,7 +33,7 @@ public class AltosParse {
                }
        }
 
-       static int parse_hex(String v) throws ParseException {
+       public static int parse_hex(String v) throws ParseException {
                try {
                        return AltosLib.fromhex(v);
                } catch (NumberFormatException e) {
@@ -41,7 +41,7 @@ public class AltosParse {
                }
        }
 
-       static double parse_double(String v) throws ParseException {
+       public static double parse_double(String v) throws ParseException {
                try {
                        return Double.parseDouble(v);
                } catch (NumberFormatException e) {
@@ -49,7 +49,7 @@ public class AltosParse {
                }
        }
 
-       static double parse_coord(String coord) throws ParseException {
+       public static double parse_coord(String coord) throws ParseException {
                String[]        dsf = coord.split("\\D+");
 
                if (dsf.length != 3) {
@@ -65,13 +65,13 @@ public class AltosParse {
                return r;
        }
 
-       static String strip_suffix(String v, String suffix) {
+       public static String strip_suffix(String v, String suffix) {
                if (v.endsWith(suffix))
                        return v.substring(0, v.length() - suffix.length());
                return v;
        }
 
-       static void word(String v, String m) throws ParseException {
+       public static void word(String v, String m) throws ParseException {
                if (!v.equals(m)) {
                        throw new ParseException("error matching '" + v + "' '" + m + "'", 0);
                }
diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosPreferences.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosPreferences.java
new file mode 100644 (file)
index 0000000..43c7088
--- /dev/null
@@ -0,0 +1,365 @@
+/*
+ * 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;
+
+import java.io.*;
+import java.util.*;
+import java.text.*;
+import java.util.prefs.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.awt.Component;
+import javax.swing.*;
+import javax.swing.filechooser.FileSystemView;
+
+public class AltosPreferences {
+       public static Preferences preferences;
+
+       /* logdir preference name */
+       public final static String logdirPreference = "LOGDIR";
+
+       /* channel preference name */
+       public final static String channelPreferenceFormat = "CHANNEL-%d";
+
+       /* frequency preference name */
+       public final static String frequencyPreferenceFormat = "FREQUENCY-%d";
+
+       /* telemetry format preference name */
+       public final static String telemetryPreferenceFormat = "TELEMETRY-%d";
+
+       /* voice preference name */
+       public final static String voicePreference = "VOICE";
+
+       /* callsign preference name */
+       public final static String callsignPreference = "CALLSIGN";
+
+       /* firmware directory preference name */
+       public final static String firmwaredirPreference = "FIRMWARE";
+
+       /* serial debug preference name */
+       public final static String serialDebugPreference = "SERIAL-DEBUG";
+
+       /* scanning telemetry preferences name */
+       public final static String scanningTelemetryPreference = "SCANNING-TELEMETRY";
+
+       /* Launcher serial preference name */
+       public final static String launcherSerialPreference = "LAUNCHER-SERIAL";
+
+       /* Launcher channel preference name */
+       public final static String launcherChannelPreference = "LAUNCHER-CHANNEL";
+       
+       /* Default logdir is ~/TeleMetrum */
+       public final static String logdirName = "TeleMetrum";
+
+       /* Log directory */
+       public static File logdir;
+
+       /* Map directory -- hangs of logdir */
+       public static File mapdir;
+
+       /* Frequency (map serial to frequency) */
+       public static Hashtable<Integer, Double> frequencies;
+
+       /* Telemetry (map serial to telemetry format) */
+       public static Hashtable<Integer, Integer> telemetries;
+
+       /* Voice preference */
+       public static boolean voice;
+
+       /* Callsign preference */
+       public static String callsign;
+
+       /* Firmware directory */
+       public static File firmwaredir;
+
+       /* Scanning telemetry */
+       public static int scanning_telemetry;
+
+       /* List of frequencies */
+       public final static String common_frequencies_node_name = "COMMON-FREQUENCIES";
+       public static AltosFrequency[] common_frequencies;
+
+       public final static String      frequency_count = "COUNT";
+       public final static String      frequency_format = "FREQUENCY-%d";
+       public final static String      description_format = "DESCRIPTION-%d";
+
+       public static AltosFrequency[] load_common_frequencies() {
+               AltosFrequency[] frequencies = null;
+               boolean existing = false;
+               try {
+                       existing = preferences.nodeExists(common_frequencies_node_name);
+               } catch (BackingStoreException be) {
+                       existing = false;
+               }
+               if (existing) {
+                       Preferences     node = preferences.node(common_frequencies_node_name);
+                       int             count = node.getInt(frequency_count, 0);
+
+                       frequencies = new AltosFrequency[count];
+                       for (int i = 0; i < count; i++) {
+                               double  frequency;
+                               String  description;
+
+                               frequency = node.getDouble(String.format(frequency_format, i), 0.0);
+                               description = node.get(String.format(description_format, i), null);
+                               frequencies[i] = new AltosFrequency(frequency, description);
+                       }
+               } else {
+                       frequencies = new AltosFrequency[10];
+                       for (int i = 0; i < 10; i++) {
+                               frequencies[i] = new AltosFrequency(434.550 + i * .1,
+                                                                          String.format("Channel %d", i));
+                       }
+               }
+               return frequencies;
+       }
+
+       public static void save_common_frequencies(AltosFrequency[] frequencies) {
+               Preferences     node = preferences.node(common_frequencies_node_name);
+
+               node.putInt(frequency_count, frequencies.length);
+               for (int i = 0; i < frequencies.length; i++) {
+                       node.putDouble(String.format(frequency_format, i), frequencies[i].frequency);
+                       node.put(String.format(description_format, i), frequencies[i].description);
+               }
+       }
+       public static int launcher_serial;
+
+       public static int launcher_channel;
+
+       public static void init() {
+               preferences = Preferences.userRoot().node("/org/altusmetrum/altosui");
+
+               /* Initialize logdir from preferences */
+               String logdir_string = preferences.get(logdirPreference, null);
+               if (logdir_string != null)
+                       logdir = new File(logdir_string);
+               else {
+                       /* Use the file system view default directory */
+                       logdir = new File(FileSystemView.getFileSystemView().getDefaultDirectory(), logdirName);
+                       if (!logdir.exists())
+                               logdir.mkdirs();
+               }
+               mapdir = new File(logdir, "maps");
+               if (!mapdir.exists())
+                       mapdir.mkdirs();
+
+               frequencies = new Hashtable<Integer, Double>();
+
+               telemetries = new Hashtable<Integer,Integer>();
+
+               voice = preferences.getBoolean(voicePreference, true);
+
+               callsign = preferences.get(callsignPreference,"N0CALL");
+
+               scanning_telemetry = preferences.getInt(scanningTelemetryPreference,(1 << AltosLib.ao_telemetry_standard));
+
+               launcher_serial = preferences.getInt(launcherSerialPreference, 0);
+
+               launcher_channel = preferences.getInt(launcherChannelPreference, 0);
+
+               String firmwaredir_string = preferences.get(firmwaredirPreference, null);
+               if (firmwaredir_string != null)
+                       firmwaredir = new File(firmwaredir_string);
+               else
+                       firmwaredir = null;
+
+               common_frequencies = load_common_frequencies();
+
+       }
+
+       static { init(); }
+
+       public static void flush_preferences() {
+               try {
+                       preferences.flush();
+               } catch (BackingStoreException ee) {
+/*
+                       if (component != null)
+                               JOptionPane.showMessageDialog(component,
+                                                             preferences.absolutePath(),
+                                                             "Cannot save prefernces",
+                                                             JOptionPane.ERROR_MESSAGE);
+                       else
+*/
+                               System.err.printf("Cannot save preferences\n");
+               }
+       }
+
+       public static void set_logdir(File new_logdir) {
+               logdir = new_logdir;
+               mapdir = new File(logdir, "maps");
+               if (!mapdir.exists())
+                       mapdir.mkdirs();
+               synchronized (preferences) {
+                       preferences.put(logdirPreference, logdir.getPath());
+                       flush_preferences();
+               }
+       }
+
+       public static File logdir() {
+               return logdir;
+       }
+
+       public static File mapdir() {
+               return mapdir;
+       }
+
+       public static void set_frequency(int serial, double new_frequency) {
+               frequencies.put(serial, new_frequency);
+               synchronized (preferences) {
+                       preferences.putDouble(String.format(frequencyPreferenceFormat, serial), new_frequency);
+                       flush_preferences();
+               }
+       }
+
+       public static double frequency(int serial) {
+               if (frequencies.containsKey(serial))
+                       return frequencies.get(serial);
+               double frequency = preferences.getDouble(String.format(frequencyPreferenceFormat, serial), 0);
+               if (frequency == 0.0) {
+                       int channel = preferences.getInt(String.format(channelPreferenceFormat, serial), 0);
+                       frequency = AltosConvert.radio_channel_to_frequency(channel);
+               }
+               frequencies.put(serial, frequency);
+               return frequency;
+       }
+
+       public static void set_telemetry(int serial, int new_telemetry) {
+               telemetries.put(serial, new_telemetry);
+               synchronized (preferences) {
+                       preferences.putInt(String.format(telemetryPreferenceFormat, serial), new_telemetry);
+                       flush_preferences();
+               }
+       }
+
+       public static int telemetry(int serial) {
+               if (telemetries.containsKey(serial))
+                       return telemetries.get(serial);
+               int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial),
+                                                  AltosLib.ao_telemetry_standard);
+               telemetries.put(serial, telemetry);
+               return telemetry;
+       }
+
+       public static void set_scanning_telemetry(int new_scanning_telemetry) {
+               scanning_telemetry = new_scanning_telemetry;
+               synchronized (preferences) {
+                       preferences.putInt(scanningTelemetryPreference, scanning_telemetry);
+                       flush_preferences();
+               }
+       }
+
+       public static int scanning_telemetry() {
+               return scanning_telemetry;
+       }
+
+       public static void set_voice(boolean new_voice) {
+               voice = new_voice;
+               synchronized (preferences) {
+                       preferences.putBoolean(voicePreference, voice);
+                       flush_preferences();
+               }
+       }
+
+       public static boolean voice() {
+               return voice;
+       }
+
+       public static void set_callsign(String new_callsign) {
+               callsign = new_callsign;
+               synchronized(preferences) {
+                       preferences.put(callsignPreference, callsign);
+                       flush_preferences();
+               }
+       }
+
+       public static String callsign() {
+               return callsign;
+       }
+
+       public static void set_firmwaredir(File new_firmwaredir) {
+               firmwaredir = new_firmwaredir;
+               synchronized (preferences) {
+                       preferences.put(firmwaredirPreference, firmwaredir.getPath());
+                       flush_preferences();
+               }
+       }
+
+       public static File firmwaredir() {
+               return firmwaredir;
+       }
+
+       public static void set_launcher_serial(int new_launcher_serial) {
+               launcher_serial = new_launcher_serial;
+               System.out.printf("set launcher serial to %d\n", new_launcher_serial);
+               synchronized (preferences) {
+                       preferences.putInt(launcherSerialPreference, launcher_serial);
+                       flush_preferences();
+               }
+       }
+
+       public static int launcher_serial() {
+               return launcher_serial;
+       }
+
+       public static void set_launcher_channel(int new_launcher_channel) {
+               launcher_channel = new_launcher_channel;
+               System.out.printf("set launcher channel to %d\n", new_launcher_channel);
+               synchronized (preferences) {
+                       preferences.putInt(launcherChannelPreference, launcher_channel);
+                       flush_preferences();
+               }
+       }
+
+       public static int launcher_channel() {
+               return launcher_channel;
+       }
+       
+       public static Preferences bt_devices() {
+               return preferences.node("bt_devices");
+       }
+
+       public static AltosFrequency[] common_frequencies() {
+               return common_frequencies;
+       }
+
+       public static void set_common_frequencies(AltosFrequency[] frequencies) {
+               common_frequencies = frequencies;
+               synchronized(preferences) {
+                       save_common_frequencies(frequencies);
+                       flush_preferences();
+               }
+       }
+
+       public static void add_common_frequency(AltosFrequency frequency) {
+               AltosFrequency[]        new_frequencies = new AltosFrequency[common_frequencies.length + 1];
+               int                     i;
+
+               for (i = 0; i < common_frequencies.length; i++) {
+                       if (frequency.frequency == common_frequencies[i].frequency)
+                               return;
+                       if (frequency.frequency < common_frequencies[i].frequency)
+                               break;
+                       new_frequencies[i] = common_frequencies[i];
+               }
+               new_frequencies[i] = frequency;
+               for (; i < common_frequencies.length; i++)
+                       new_frequencies[i+1] = common_frequencies[i];
+               set_common_frequencies(new_frequencies);
+       }
+}
index 120004a7a0a5c9a2bdec85bceb07d9886dcff796..e4915af0039818e8eaf7ed005a0ff7f7fa102e8d 100644 (file)
@@ -23,64 +23,66 @@ import java.util.HashMap;
 import java.io.*;
 
 public class AltosRecord implements Comparable <AltosRecord> {
-       final static int        MISSING = 0x7fffffff;
-
-       static final int        seen_flight = 1;
-       static final int        seen_sensor = 2;
-       static final int        seen_temp_volt = 4;
-       static final int        seen_deploy = 8;
-       static final int        seen_gps_time = 16;
-       static final int        seen_gps_lat = 32;
-       static final int        seen_gps_lon = 64;
-       static final int        seen_companion = 128;
-       int                     seen;
-
-       int     version;
-       String  callsign;
-       int     serial;
-       int     flight;
-       int     rssi;
-       int     status;
-       int     state;
-       int     tick;
-
-       int     accel;
-       int     pres;
-       int     temp;
-       int     batt;
-       int     drogue;
-       int     main;
-
-       int     ground_accel;
-       int     ground_pres;
-       int     accel_plus_g;
-       int     accel_minus_g;
-
-       double  acceleration;
-       double  speed;
-       double  height;
-
-       int     flight_accel;
-       int     flight_vel;
-       int     flight_pres;
-
-       AltosGPS        gps;
-       boolean         new_gps;
-
-       AltosIMU        imu;
-       AltosMag        mag;
-
-       double  time;   /* seconds since boost */
-
-       int     device_type;
-       int     config_major;
-       int     config_minor;
-       int     apogee_delay;
-       int     main_deploy;
-       int     flight_log_max;
-       String  firmware_version;
-
-       AltosRecordCompanion companion;
+       public final static int MISSING = 0x7fffffff;
+
+       public static final int seen_flight = 1;
+       public static final int seen_sensor = 2;
+       public static final int seen_temp_volt = 4;
+       public static final int seen_deploy = 8;
+       public static final int seen_gps_time = 16;
+       public static final int seen_gps_lat = 32;
+       public static final int seen_gps_lon = 64;
+       public static final int seen_companion = 128;
+       public int                      seen;
+
+       public int      version;
+       public String   callsign;
+       public int      serial;
+       public int      flight;
+       public int      rssi;
+       public int      status;
+       public int      state;
+       public int      tick;
+
+       public int      accel;
+       public int      pres;
+       public int      temp;
+       public int      batt;
+       public int      drogue;
+       public int      main;
+
+       public int      ground_accel;
+       public int      ground_pres;
+       public int      accel_plus_g;
+       public int      accel_minus_g;
+
+       public double   acceleration;
+       public double   speed;
+       public double   height;
+
+       public int      flight_accel;
+       public int      flight_vel;
+       public int      flight_pres;
+
+       public AltosGPS gps;
+       public boolean          new_gps;
+
+       public AltosIMU imu;
+       public AltosMag mag;
+
+       public double   time;   /* seconds since boost */
+
+       public int      device_type;
+       public int      config_major;
+       public int      config_minor;
+       public int      apogee_delay;
+       public int      main_deploy;
+       public int      flight_log_max;
+       public String   firmware_version;
+
+       public AltosRecordCompanion companion;
+
+>>>>>>> 5a249bc... altosui: Complete split out of separate java library
        /*
         * Values for our MP3H6115A pressure sensor
         *
@@ -95,10 +97,10 @@ public class AltosRecord implements Comparable <AltosRecord> {
         * 2.82V * 2047 / 3.3 counts/V = 1749 counts/115 kPa
         */
 
-       static final double counts_per_kPa = 27 * 2047 / 3300;
-       static final double counts_at_101_3kPa = 1674.0;
+       public static final double counts_per_kPa = 27 * 2047 / 3300;
+       public static final double counts_at_101_3kPa = 1674.0;
 
-       static double
+       public static double
        barometer_to_pressure(double count)
        {
                return ((count / 16.0) / 2047.0 + 0.095) / 0.009 * 1000.0;
@@ -193,7 +195,7 @@ public class AltosRecord implements Comparable <AltosRecord> {
         *      = (value - 19791.268) / 32768 * 1.25 / 0.00247
         */
 
-       static double
+       public static double
        thermometer_to_temperature(double thermo)
        {
                return (thermo - 19791.268) / 32728.0 * 1.25 / 0.00247;
@@ -205,7 +207,7 @@ public class AltosRecord implements Comparable <AltosRecord> {
                return thermometer_to_temperature(temp);
        }
 
-       double accel_counts_per_mss() {
+       public double accel_counts_per_mss() {
                double  counts_per_g = Math.abs(accel_minus_g - accel_plus_g) / 2;
 
                return counts_per_g / 9.80665;
index 4f8e80dc5bc23f1cbda4404460e07ecf4bcfdfe9..c8cc6cac1a8b0ed198982d503c825fa2ef85d766 100644 (file)
 package org.altusmetrum.AltosLib;
 
 public class AltosRecordCompanion {
-       final static int        board_id_telescience = 0x0a;
-       final static int        MAX_CHANNELS = 12;
+       public final static int board_id_telescience = 0x0a;
+       public final static int MAX_CHANNELS = 12;
 
-       int     tick;
-       int     board_id;
-       int     update_period;
-       int     channels;
-       int[]   companion_data;
+       public int      tick;
+       public int      board_id;
+       public int      update_period;
+       public int      channels;
+       public int[]    companion_data;
 
        public AltosRecordCompanion(int in_channels) {
                channels = in_channels;
diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosTelemetryReader.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosTelemetryReader.java
deleted file mode 100644 (file)
index bd94ee3..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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;
-
-import java.lang.*;
-import java.text.*;
-import java.io.*;
-import java.util.concurrent.*;
-
-class AltosTelemetryReader extends AltosFlightReader {
-       AltosDevice     device;
-       AltosSerial     serial;
-       AltosLog        log;
-       AltosRecord     previous;
-       double          frequency;
-       int             telemetry;
-
-       LinkedBlockingQueue<AltosLine> telem;
-
-       AltosRecord read() throws InterruptedException, ParseException, AltosCRCException, IOException {
-               AltosLine l = telem.take();
-               if (l.line == null)
-                       throw new IOException("IO error");
-               AltosRecord     next = AltosTelemetry.parse(l.line, previous);
-               previous = next;
-               return next;
-       }
-
-       void flush() {
-               telem.clear();
-       }
-
-       void close(boolean interrupted) {
-               serial.remove_monitor(telem);
-               log.close();
-               serial.close();
-       }
-
-       public void set_frequency(double in_frequency) throws InterruptedException, TimeoutException {
-               frequency = in_frequency;
-               serial.set_radio_frequency(frequency);
-       }
-
-       public boolean supports_telemetry(int telemetry) {
-
-               try {
-                       /* Version 1.0 or later firmware supports all telemetry formats */
-                       if (serial.config_data().compare_version("1.0") >= 0)
-                               return true;
-
-                       /* Version 0.9 firmware only supports 0.9 telemetry */
-                       if (serial.config_data().compare_version("0.9") >= 0) {
-                               if (telemetry == Altos.ao_telemetry_0_9)
-                                       return true;
-                               else
-                                       return false;
-                       }
-
-                       /* Version 0.8 firmware only supports 0.8 telemetry */
-                       if (telemetry == Altos.ao_telemetry_0_8)
-                               return true;
-                       else
-                               return false;
-               } catch (InterruptedException ie) {
-                       return true;
-               } catch (TimeoutException te) {
-                       return true;
-               }
-       }
-
-       void save_frequency() {
-               AltosUIPreferences.set_frequency(device.getSerial(), frequency);
-       }
-
-       void set_telemetry(int in_telemetry) {
-               telemetry = in_telemetry;
-               serial.set_telemetry(telemetry);
-       }
-
-       void save_telemetry() {
-               AltosUIPreferences.set_telemetry(device.getSerial(), telemetry);
-       }
-
-       File backing_file() {
-               return log.file();
-       }
-
-       public AltosTelemetryReader (AltosDevice in_device)
-               throws FileNotFoundException, AltosSerialInUseException, IOException, InterruptedException, TimeoutException {
-               device = in_device;
-               serial = new AltosSerial(device);
-               log = new AltosLog(serial);
-               name = device.toShortString();
-               previous = null;
-
-               telem = new LinkedBlockingQueue<AltosLine>();
-               frequency = AltosUIPreferences.frequency(device.getSerial());
-               set_frequency(frequency);
-               telemetry = AltosUIPreferences.telemetry(device.getSerial());
-               set_telemetry(telemetry);
-               serial.set_callsign(AltosUIPreferences.callsign());
-               serial.add_monitor(telem);
-       }
-}