+
+ void save_data() {
+ try {
+ int channel;
+ start_serial();
+ serial_line.printf("c m %d\n", main_deploy.get());
+ serial_line.printf("c d %d\n", apogee_delay.get());
+ channel = radio_channel.get();
+ serial_line.printf("c r %d\n", channel);
+ if (remote) {
+ serial_line.stop_remote();
+ serial_line.set_channel(channel);
+ AltosPreferences.set_channel(device.getSerial(), channel);
+ serial_line.start_remote();
+ }
+ if (!remote)
+ serial_line.printf("c f %d\n", radio_calibration.get());
+ 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());
+ serial_line.printf("c w\n");
+ } catch (InterruptedException ie) {
+ } 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) {
+ } 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();