+
+ 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");
+ } 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();