X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosIgnite.java;h=767c00fbaf1689d4f8c5399518656c6594496995;hp=42169989b00eb797b307df5d7ebca671ed160933;hb=cfc09e8f1f263595972cbb6af23f22e2d749c744;hpb=5b976a6651f4eb05d30afc08b9e1f27c7e52ae00 diff --git a/altoslib/AltosIgnite.java b/altoslib/AltosIgnite.java index 42169989..767c00fb 100644 --- a/altoslib/AltosIgnite.java +++ b/altoslib/AltosIgnite.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,19 +16,24 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_2; +package org.altusmetrum.altoslib_12; +import java.util.*; import java.io.*; import java.util.concurrent.*; public class AltosIgnite { AltosLink link; boolean remote; + boolean close_on_exit; boolean link_started; + boolean have_npyro = false; + int npyro; + AltosConfigData config_data; - public final static int None = 0; - public final static int Apogee = 1; - public final static int Main = 2; + public final static String None = null; + public final static String Apogee = "drogue"; + public final static String Main = "main"; public final static int Unknown = 0; public final static int Ready = 1; @@ -81,7 +87,7 @@ public class AltosIgnite { } */ - private int status(String status_name) { + private int map_status(String status_name) { if (status_name.equals("unknown")) return Unknown; if (status_name.equals("ready")) @@ -93,13 +99,38 @@ public class AltosIgnite { return Unknown; } - public int status(int igniter) throws InterruptedException, TimeoutException { - int status = Unknown; + private void get_npyro() throws InterruptedException, TimeoutException { + if (config_data == null) + config_data = new AltosConfigData(link); + if (config_data != null && config_data.npyro != AltosLib.MISSING) + npyro = config_data.npyro; + else + npyro = 0; + have_npyro = true; + } + + public int npyro() throws InterruptedException, TimeoutException { + if (!have_npyro) { + start_link(); + get_npyro(); + stop_link(); + } + return npyro; + } + + public HashMap status() throws InterruptedException, TimeoutException { + HashMap status = new HashMap(); + if (link == null) return status; - //string_ref status_name = new string_ref(); try { start_link(); + get_npyro(); + + String last_igniter = Main; + if (npyro > 0) + last_igniter = String.format("%d", npyro - 1); + link.printf("t\n"); for (;;) { String line = link.get_reply(5000); @@ -116,14 +147,10 @@ public class AltosIgnite { 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]); + status.put(items[1], map_status(items[3])); + + if (items[1].equals(last_igniter)) break; - } } } finally { stop_link(); @@ -141,42 +168,33 @@ public class AltosIgnite { } } - public void fire(int igniter) { + public void fire(String igniter) throws InterruptedException { 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) { + link.printf("i DoIt %s\n", igniter); + link.flush_output(); } catch (TimeoutException te) { } finally { - try { - stop_link(); - } catch (InterruptedException ie) { - } + stop_link(); } } - public void close() { - try { - stop_link(); - } catch (InterruptedException ie) { - } - link.close(); + public void close() throws InterruptedException { + stop_link(); + if (close_on_exit) + link.close(); link = null; } - public AltosIgnite(AltosLink in_link, boolean in_remote) - throws FileNotFoundException, TimeoutException, InterruptedException { - + public AltosIgnite(AltosLink in_link, boolean in_remote, boolean in_close_on_exit) { link = in_link; remote = in_remote; + close_on_exit = in_close_on_exit; + } + + public AltosIgnite(AltosLink in_link, boolean in_remote) { + this(in_link, in_remote, true); } -} \ No newline at end of file +}