+
+ void save_data() {
+ try {
+ double frequency = frequency();
+ boolean has_setting = radio_setting.get() > 0;
+ start_serial();
+ serial_line.printf("c m %d\n", main_deploy.get());
+ serial_line.printf("c d %d\n", apogee_delay.get());
+ if (!remote)
+ serial_line.printf("c f %d\n", radio_calibration.get());
+ serial_line.set_radio_frequency(frequency,
+ has_setting,
+ radio_calibration.get());
+ if (remote) {
+ serial_line.stop_remote();
+ serial_line.set_radio_frequency(frequency,
+ has_setting,
+ radio_calibration.get());
+ AltosPreferences.set_frequency(device.getSerial(), frequency);
+ serial_line.start_remote();
+ }
+ serial_line.printf("c c %s\n", callsign.get());
+ if (flight_log_max.get() != 0)
+ serial_line.printf("c l %d\n", flight_log_max.get());
+ if (ignite_mode.get() >= 0)
+ serial_line.printf("c i %d\n", ignite_mode.get());
+ if (pad_orientation.get() >= 0)
+ serial_line.printf("c o %d\n", pad_orientation.get());
+ serial_line.printf("c w\n");
+ } catch (InterruptedException ie) {
+ } catch (TimeoutException te) {
+ } finally {
+ try {
+ stop_serial();
+ } catch (InterruptedException ie) {
+ }
+ }
+ }
+
+ void reboot() {
+ try {
+ start_serial();
+ serial_line.printf("r eboot\n");
+ serial_line.flush_output();
+ } catch (InterruptedException ie) {
+ } catch (TimeoutException te) {
+ } finally {
+ try {
+ stop_serial();
+ } catch (InterruptedException ie) {
+ }
+ serial_line.close();
+ }
+ }
+
+ public void run () {
+ switch (serial_mode) {
+ case serial_mode_save:
+ save_data();
+ /* fall through ... */
+ case serial_mode_read:
+ get_data();
+ break;
+ case serial_mode_reboot:
+ reboot();
+ break;
+ }
+ }
+
+ public SerialData(AltosConfig in_config, int in_serial_mode) {
+ config = in_config;
+ serial_mode = in_serial_mode;
+ }
+ }
+
+ void run_serial_thread(int serial_mode) {
+ SerialData sd = new SerialData(this, serial_mode);
+ Thread st = new Thread(sd);
+ st.start();