+++ /dev/null
-/*
- * 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.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import javax.swing.table.*;
-import javax.swing.event.*;
-import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
-import java.util.concurrent.*;
-
-public class AltosIgniteUI
- extends JDialog
- implements ActionListener
-{
- AltosDevice device;
- AltosIgnite ignite;
- JFrame owner;
- JLabel label;
- JRadioButton apogee;
- JLabel apogee_status_label;
- JRadioButton main;
- JLabel main_status_label;
- JToggleButton arm;
- JButton fire;
- javax.swing.Timer timer;
-
- int apogee_status;
- int main_status;
-
- final static int timeout = 1 * 1000;
-
- int time_remaining;
- boolean timer_running;
-
- void set_arm_text() {
- if (arm.isSelected())
- arm.setText(String.format("%d", time_remaining));
- else
- arm.setText("Arm");
- }
-
- void start_timer() {
- time_remaining = 10;
- set_arm_text();
- timer_running = true;
- }
-
- void stop_timer() {
- time_remaining = 0;
- arm.setSelected(false);
- arm.setEnabled(false);
- fire.setEnabled(false);
- timer_running = false;
- set_arm_text();
- }
-
- void cancel () {
- apogee.setSelected(false);
- main.setSelected(false);
- fire.setEnabled(false);
- stop_timer();
- }
-
- void get_ignite_status() throws InterruptedException, TimeoutException {
- apogee_status = ignite.status(AltosIgnite.Apogee);
- main_status = ignite.status(AltosIgnite.Main);
- }
-
- void set_ignite_status() throws InterruptedException, TimeoutException {
- get_ignite_status();
- apogee_status_label.setText(String.format("\"%s\"", ignite.status_string(apogee_status)));
- main_status_label.setText(String.format("\"%s\"", ignite.status_string(main_status)));
- }
-
- void close() {
- timer.stop();
- setVisible(false);
- ignite.close();
- }
-
- void abort() {
- close();
- JOptionPane.showMessageDialog(owner,
- String.format("Connection to \"%s\" failed",
- device.toShortString()),
- "Connection Failed",
- JOptionPane.ERROR_MESSAGE);
- }
-
- void tick_timer() {
- if (timer_running) {
- --time_remaining;
- if (time_remaining <= 0)
- cancel();
- else
- set_arm_text();
- }
- try {
- set_ignite_status();
- } catch (InterruptedException ie) {
- abort();
- } catch (TimeoutException te) {
- abort();
- }
- }
-
- void fire() {
- if (arm.isEnabled() && arm.isSelected() && time_remaining > 0) {
- int igniter = AltosIgnite.None;
- if (apogee.isSelected() && !main.isSelected())
- igniter = AltosIgnite.Apogee;
- else if (main.isSelected() && !apogee.isSelected())
- igniter = AltosIgnite.Main;
- ignite.fire(igniter);
- cancel();
- }
- }
-
- public void actionPerformed(ActionEvent e) {
- String cmd = e.getActionCommand();
- if (cmd.equals("apogee") || cmd.equals("main")) {
- stop_timer();
- }
-
- if (cmd.equals("apogee") && apogee.isSelected()) {
- main.setSelected(false);
- arm.setEnabled(true);
- }
- if (cmd.equals("main") && main.isSelected()) {
- apogee.setSelected(false);
- arm.setEnabled(true);
- }
-
- if (cmd.equals("arm")) {
- if (arm.isSelected()) {
- fire.setEnabled(true);
- start_timer();
- } else
- cancel();
- }
- if (cmd.equals("fire"))
- fire();
- if (cmd.equals("tick"))
- tick_timer();
- if (cmd.equals("close")) {
- close();
- }
- }
-
- /* A window listener to catch closing events and tell the config code */
- class ConfigListener extends WindowAdapter {
- AltosIgniteUI ui;
-
- public ConfigListener(AltosIgniteUI this_ui) {
- ui = this_ui;
- }
-
- public void windowClosing(WindowEvent e) {
- ui.actionPerformed(new ActionEvent(e.getSource(),
- ActionEvent.ACTION_PERFORMED,
- "close"));
- }
- }
-
- private boolean open() {
- device = AltosDeviceDialog.show(owner, AltosDevice.product_any);
- if (device != null) {
- try {
- ignite = new AltosIgnite(device);
- return true;
- } catch (FileNotFoundException ee) {
- JOptionPane.showMessageDialog(owner,
- String.format("Cannot open device \"%s\"",
- device.toShortString()),
- "Cannot open target device",
- JOptionPane.ERROR_MESSAGE);
- } catch (AltosSerialInUseException si) {
- JOptionPane.showMessageDialog(owner,
- String.format("Device \"%s\" already in use",
- device.toShortString()),
- "Device in use",
- JOptionPane.ERROR_MESSAGE);
- } catch (IOException ee) {
- JOptionPane.showMessageDialog(owner,
- device.toShortString(),
- ee.getLocalizedMessage(),
- JOptionPane.ERROR_MESSAGE);
- }
- }
- return false;
- }
-
- public AltosIgniteUI(JFrame in_owner) {
-
- owner = in_owner;
- apogee_status = AltosIgnite.Unknown;
- main_status = AltosIgnite.Unknown;
-
- if (!open())
- return;
-
- Container pane = getContentPane();
- GridBagConstraints c = new GridBagConstraints();
- Insets i = new Insets(4,4,4,4);
-
- timer = new javax.swing.Timer(timeout, this);
- timer.setActionCommand("tick");
- timer_running = false;
- timer.restart();
-
- owner = in_owner;
-
- pane.setLayout(new GridBagLayout());
-
- c.fill = GridBagConstraints.NONE;
- c.anchor = GridBagConstraints.CENTER;
- c.insets = i;
- c.weightx = 1;
- c.weighty = 1;
-
- c.gridx = 0;
- c.gridy = 0;
- c.gridwidth = 2;
- c.anchor = GridBagConstraints.CENTER;
- label = new JLabel ("Fire Igniter");
- pane.add(label, c);
-
- c.gridx = 0;
- c.gridy = 1;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.WEST;
- apogee = new JRadioButton ("Apogee");
- pane.add(apogee, c);
- apogee.addActionListener(this);
- apogee.setActionCommand("apogee");
-
- c.gridx = 1;
- c.gridy = 1;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.WEST;
- apogee_status_label = new JLabel();
- pane.add(apogee_status_label, c);
-
- c.gridx = 0;
- c.gridy = 2;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.WEST;
- main = new JRadioButton ("Main");
- pane.add(main, c);
- main.addActionListener(this);
- main.setActionCommand("main");
-
- c.gridx = 1;
- c.gridy = 2;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.WEST;
- main_status_label = new JLabel();
- pane.add(main_status_label, c);
-
- try {
- set_ignite_status();
- } catch (InterruptedException ie) {
- abort();
- return;
- } catch (TimeoutException te) {
- abort();
- return;
- }
-
- c.gridx = 0;
- c.gridy = 3;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.CENTER;
- arm = new JToggleButton ("Arm");
- pane.add(arm, c);
- arm.addActionListener(this);
- arm.setActionCommand("arm");
- arm.setEnabled(false);
-
- c.gridx = 1;
- c.gridy = 3;
- c.gridwidth = 1;
- c.anchor = GridBagConstraints.CENTER;
- fire = new JButton ("Fire");
- fire.setEnabled(false);
- pane.add(fire, c);
- fire.addActionListener(this);
- fire.setActionCommand("fire");
-
- pack();
- setLocationRelativeTo(owner);
- setVisible(true);
-
- addWindowListener(new ConfigListener(this));
- }
-}
\ No newline at end of file