diff options
author | Keith Packard <keithp@keithp.com> | 2012-07-22 11:53:44 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-07-22 11:54:17 -0700 |
commit | 233ab58df8ac8e1fdeab8d4c2f6c8c9d3f6e7be1 (patch) | |
tree | 97077b121ed77cb576424f7c0cf4b6936a735e64 /altoslib | |
parent | 38f66a31174dd367e39d717c527f555add60a9d4 (diff) |
altosui: Move AltosIgnite.java to altoslib
To be shared with altosdroid eventually
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r-- | altoslib/AltosIgnite.java | 180 | ||||
-rw-r--r-- | altoslib/Makefile.am | 1 |
2 files changed, 181 insertions, 0 deletions
diff --git a/altoslib/AltosIgnite.java b/altoslib/AltosIgnite.java new file mode 100644 index 00000000..cc814337 --- /dev/null +++ b/altoslib/AltosIgnite.java @@ -0,0 +1,180 @@ +/* + * 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.concurrent.*; + +public class AltosIgnite { + AltosLink link; + boolean remote; + boolean link_started; + + public final static int None = 0; + public final static int Apogee = 1; + public final static int Main = 2; + + public final static int Unknown = 0; + public final static int Ready = 1; + public final static int Active = 2; + public final static int Open = 3; + + private void start_link() throws InterruptedException, TimeoutException { + link_started = true; + if (remote) + link.start_remote(); + } + + private void stop_link() throws InterruptedException { + if (!link_started) + return; + link_started = false; + if (link == null) + return; + if (remote) + link.stop_remote(); + } + + class string_ref { + String value; + + public String get() { + return value; + } + public void set(String i) { + value = i; + } + public string_ref() { + value = null; + } + } + + private boolean get_string(String line, String label, string_ref s) { + if (line.startsWith(label)) { + String quoted = line.substring(label.length()).trim(); + + if (quoted.startsWith("\"")) + quoted = quoted.substring(1); + if (quoted.endsWith("\"")) + quoted = quoted.substring(0,quoted.length()-1); + s.set(quoted); + return true; + } else { + return false; + } + } + + private int status(String status_name) { + if (status_name.equals("unknown")) + return Unknown; + if (status_name.equals("ready")) + return Ready; + if (status_name.equals("active")) + return Active; + if (status_name.equals("open")) + return Open; + return Unknown; + } + + public int status(int igniter) throws InterruptedException, TimeoutException { + int status = Unknown; + if (link == null) + return status; + string_ref status_name = new string_ref(); + try { + start_link(); + link.printf("t\n"); + for (;;) { + String line = link.get_reply(5000); + if (line == null) + throw new TimeoutException(); + String[] items = line.split("\\s+"); + + if (items.length < 4) + continue; + + if (!items[0].equals("Igniter:")) + continue; + + if (!items[2].equals("Status:")) + continue; + + if (items[1].equals("drogue")) { + if (igniter == Apogee) + status = status(items[3]); + } else if (items[1].equals("main")) { + if (igniter == Main) + status = status(items[3]); + break; + } + } + } finally { + stop_link(); + } + return status; + } + + public static String status_string(int status) { + switch (status) { + case Unknown: return "Unknown"; + case Ready: return "Ready"; + case Active: return "Active"; + case Open: return "Open"; + default: return "Unknown"; + } + } + + public void fire(int igniter) { + if (link == null) + return; + try { + start_link(); + switch (igniter) { + case Main: + link.printf("i DoIt main\n"); + break; + case Apogee: + link.printf("i DoIt drogue\n"); + break; + } + } catch (InterruptedException ie) { + } catch (TimeoutException te) { + } finally { + try { + stop_link(); + } catch (InterruptedException ie) { + } + } + } + + public void close() { + try { + stop_link(); + } catch (InterruptedException ie) { + } + link.close(); + link = null; + } + + public AltosIgnite(AltosLink in_link, boolean in_remote) + throws FileNotFoundException, TimeoutException, InterruptedException { + + link = in_link; + remote = in_remote; + } +}
\ No newline at end of file diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index a39623ee..1f42140b 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -29,6 +29,7 @@ AltosLib_JAVA = \ $(SRC)/AltosGreatCircle.java \ $(SRC)/AltosIdleMonitor.java \ $(SRC)/AltosIdleMonitorListener.java \ + $(SRC)/AltosIgnite.java \ $(SRC)/AltosLine.java \ $(SRC)/AltosLink.java \ $(SRC)/AltosLog.java \ |