package altosui;
-import java.awt.event.*;
-import javax.swing.*;
import java.io.*;
import java.util.*;
import java.text.*;
public class AltosEepromDownload implements Runnable {
- JFrame frame;
AltosSerial serial_line;
boolean remote;
Thread eeprom_thread;
LinkedList<String> eeprom_pending;
AltosEepromList flights;
- ActionListener listener;
boolean success;
ParseException parse_exception;
AltosState state;
eeprom_file = new FileWriter(eeprom_name);
if (eeprom_file != null) {
- monitor.set_file(eeprom_name.getName());
+ monitor.set_filename(eeprom_name.getName());
FlushPending();
eeprom_pending = null;
}
}
}
- void CaptureEeprom(AltosEepromChunk eechunk, int log_format) throws IOException {
+ void CaptureEeprom(AltosEepromChunk eechunk, int log_format) throws IOException, ParseException {
boolean any_valid = false;
+ boolean got_flight = false;
int record_length = 8;
state.set_serial(flights.config_data.serial);
+ monitor.set_serial(flights.config_data.serial);
for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += record_length) {
AltosEeprom r = eechunk.eeprom(i, log_format, state);
r.update_state(state);
+ if (!got_flight && state.flight != AltosLib.MISSING)
+ monitor.set_flight(state.flight);
+
/* Monitor state transitions to update display */
if (state.state != AltosLib.ao_flight_invalid &&
state.state <= AltosLib.ao_flight_landed)
CheckFile(false);
}
- void CaptureLog(AltosEepromLog log) throws IOException, InterruptedException, TimeoutException {
+ void CaptureLog(AltosEepromLog log) throws IOException, InterruptedException, TimeoutException, ParseException {
int block, state_block = 0;
int log_format = flights.config_data.log_format;
}
}
- private void show_message_internal(String message, String title, int message_type) {
- JOptionPane.showMessageDialog(frame,
- message,
- title,
- message_type);
- }
-
- private void show_message(String in_message, String in_title, int in_message_type) {
- final String message = in_message;
- final String title = in_title;
- final int message_type = in_message_type;
- Runnable r = new Runnable() {
- public void run() {
- try {
- show_message_internal(message, title, message_type);
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
-
public void run () {
try {
boolean failed = false;
parse_exception = null;
if (log.selected) {
monitor.reset();
- CaptureLog(log);
+ try {
+ CaptureLog(log);
+ } catch (ParseException e) {
+ parse_exception = e;
+ }
}
if (parse_exception != null) {
failed = true;
- show_message(String.format("Flight %d download error\n%s\nValid log data saved",
- log.flight,
- parse_exception.getMessage()),
- serial_line.device.toShortString(),
- JOptionPane.WARNING_MESSAGE);
+ monitor.show_message(String.format("Flight %d download error\n%s\nValid log data saved",
+ log.flight,
+ parse_exception.getMessage()),
+ serial_line.device.toShortString(),
+ AltosEepromMonitor.WARNING_MESSAGE);
}
}
success = !failed;
} catch (IOException ee) {
- show_message(ee.getLocalizedMessage(),
- serial_line.device.toShortString(),
- JOptionPane.ERROR_MESSAGE);
+ monitor.show_message(ee.getLocalizedMessage(),
+ serial_line.device.toShortString(),
+ AltosEepromMonitor.ERROR_MESSAGE);
} catch (InterruptedException ie) {
- System.out.printf("download interrupted\n");
+ monitor.show_message(String.format("Connection to \"%s\" interrupted",
+ serial_line.device.toShortString()),
+ "Connection Interrupted",
+ AltosEepromMonitor.ERROR_MESSAGE);
} catch (TimeoutException te) {
- show_message(String.format("Connection to \"%s\" failed",
- serial_line.device.toShortString()),
- "Connection Failed",
- JOptionPane.ERROR_MESSAGE);
+ monitor.show_message(String.format("Connection to \"%s\" failed",
+ serial_line.device.toShortString()),
+ "Connection Failed",
+ AltosEepromMonitor.ERROR_MESSAGE);
} finally {
if (remote) {
try {
}
serial_line.flush_output();
}
- monitor.done();
- if (listener != null) {
- Runnable r = new Runnable() {
- public void run() {
- try {
- listener.actionPerformed(new ActionEvent(this,
- success ? 1 : 0,
- "download"));
- } catch (Exception ex) {
- }
- }
- };
- SwingUtilities.invokeLater(r);
- }
+ monitor.done(success);
}
public void start() {
eeprom_thread.start();
}
- public void addActionListener(ActionListener l) {
- listener = l;
- }
-
- public AltosEepromDownload(JFrame given_frame,
+ public AltosEepromDownload(AltosEepromMonitor given_monitor,
AltosSerial given_serial_line,
boolean given_remote,
AltosEepromList given_flights) {
- frame = given_frame;
+ monitor = given_monitor;
serial_line = given_serial_line;
- serial_line.set_frame(frame);
remote = given_remote;
flights = given_flights;
success = false;
- monitor = new AltosEepromMonitor(frame, Altos.ao_flight_boost, Altos.ao_flight_landed);
- monitor.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (eeprom_thread != null)
- eeprom_thread.interrupt();
- }
- });
+ monitor.set_states(Altos.ao_flight_boost, Altos.ao_flight_landed);
+
+ monitor.set_thread(eeprom_thread);
+ monitor.start();
}
}