import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.AltosLib.*;
import java.text.*;
+import org.altusmetrum.altoslib_2.*;
+import org.altusmetrum.altosuilib_1.*;
public class AltosConfig implements ActionListener {
serial_line.stop_remote();
}
- int log_limit() {
- if (data.storage_size > 0 && data.storage_erase_unit > 0) {
- int log_limit = data.storage_size - data.storage_erase_unit;
- if (log_limit > 0)
- return log_limit / 1024;
- }
- return 1024;
- }
-
void update_ui() {
- config_ui.set_serial(data.serial);
- config_ui.set_product(data.product);
- config_ui.set_version(data.version);
- config_ui.set_main_deploy(data.main_deploy);
- config_ui.set_apogee_delay(data.apogee_delay);
- config_ui.set_apogee_lockout(data.apogee_lockout);
- config_ui.set_radio_calibration(data.radio_calibration);
- config_ui.set_radio_frequency(frequency());
- boolean max_enabled = true;
- switch (data.log_format) {
- case Altos.AO_LOG_FORMAT_TINY:
- max_enabled = false;
- break;
- default:
- if (data.stored_flight >= 0)
- max_enabled = false;
- break;
- }
- config_ui.set_flight_log_max_enabled(max_enabled);
- config_ui.set_radio_enable(data.radio_enable);
- config_ui.set_flight_log_max_limit(log_limit());
- config_ui.set_flight_log_max(data.flight_log_max);
- config_ui.set_ignite_mode(data.ignite_mode);
- config_ui.set_pad_orientation(data.pad_orientation);
- config_ui.set_callsign(data.callsign);
- config_ui.set_pyros(data.pyros);
- config_ui.set_has_pyro(data.npyro > 0);
+ data.set_values(config_ui);
config_ui.set_clean();
if (!made_visible) {
made_visible = true;
void save_data() {
try {
- double frequency = frequency();
- boolean has_frequency = data.radio_frequency > 0;
- boolean has_setting = data.radio_setting > 0;
start_serial();
- serial_line.printf("c m %d\n", data.main_deploy);
- serial_line.printf("c d %d\n", data.apogee_delay);
- serial_line.printf("c L %d\n", data.apogee_lockout);
- if (!remote)
- serial_line.printf("c f %d\n", data.radio_calibration);
- serial_line.set_radio_frequency(frequency,
- has_frequency,
- has_setting,
- data.radio_calibration);
- if (remote) {
- serial_line.stop_remote();
- serial_line.set_radio_frequency(frequency);
- AltosUIPreferences.set_frequency(device.getSerial(), frequency);
- serial_line.start_remote();
- }
- serial_line.printf("c c %s\n", data.callsign);
- if (data.flight_log_max != 0)
- serial_line.printf("c l %d\n", data.flight_log_max);
- if (data.radio_enable >= 0)
- serial_line.printf("c e %d\n", data.radio_enable);
- if (data.ignite_mode >= 0)
- serial_line.printf("c i %d\n", data.ignite_mode);
- if (data.pad_orientation >= 0)
- serial_line.printf("c o %d\n", data.pad_orientation);
- if (data.pyros.length > 0) {
- for (int p = 0; p < data.pyros.length; p++) {
- serial_line.printf("c P %s\n",
- data.pyros[p].toString());
- }
- }
- serial_line.printf("c w\n");
+ data.save(serial_line, remote);
+ if (remote)
+ AltosUIPreferences.set_frequency(device.getSerial(),
+ data.frequency());
} catch (InterruptedException ie) {
} catch (TimeoutException te) {
} finally {
} finally {
try {
stop_serial();
+ serial_line.close();
} catch (InterruptedException ie) {
}
- serial_line.close();
}
}
data.radio_channel);
}
- void set_frequency(double freq) {
- int frequency = data.radio_frequency;
- int setting = data.radio_setting;
-
- if (frequency > 0) {
- data.radio_frequency = (int) Math.floor (freq * 1000 + 0.5);
- data.radio_channel = 0;
- } else if (setting > 0) {
- data.radio_setting =AltosConvert.radio_frequency_to_setting(freq,
- data.radio_calibration);
- data.radio_channel = 0;
- } else {
- data.radio_channel = AltosConvert.radio_frequency_to_channel(freq);
- }
- }
-
void save_data() {
/* bounds check stuff */
- if (config_ui.flight_log_max() > log_limit()) {
+ if (config_ui.flight_log_max() > data.log_limit()) {
JOptionPane.showMessageDialog(owner,
String.format("Requested flight log, %dk, is larger than the available space, %dk.\n",
config_ui.flight_log_max(),
- log_limit()),
+ data.log_limit()),
"Maximum Flight Log Too Large",
JOptionPane.ERROR_MESSAGE);
return;
}
- data.main_deploy = config_ui.main_deploy();
- data.apogee_delay = config_ui.apogee_delay();
- data.apogee_lockout = config_ui.apogee_lockout();
- data.radio_calibration = config_ui.radio_calibration();
- set_frequency(config_ui.radio_frequency());
- data.flight_log_max = config_ui.flight_log_max();
- if (data.radio_enable >= 0)
- data.radio_enable = config_ui.radio_enable();
- if (data.ignite_mode >= 0)
- data.ignite_mode = config_ui.ignite_mode();
- if (data.pad_orientation >= 0)
- data.pad_orientation = config_ui.pad_orientation();
- data.callsign = config_ui.callsign();
- if (data.npyro > 0) {
- data.pyros = config_ui.pyros();
- }
+ /* Pull data out of the UI and stuff back into our local data record */
+
+ data.get_values(config_ui);
+
run_serial_thread(serial_mode_save);
}
public AltosConfig(JFrame given_owner) {
owner = given_owner;
- device = AltosDeviceDialog.show(owner, Altos.product_any);
+ device = AltosDeviceUIDialog.show(owner, Altos.product_any);
if (device != null) {
try {
serial_line = new AltosSerial(device);