From b3c3c6eabd6837f0e72acee3906c8f71c6f0030e Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 11 Sep 2012 23:37:20 -0700 Subject: altosui: Don't say a decimal point for distances in meters Useful for distances in miles, but not meters. Signed-off-by: Keith Packard --- altoslib/AltosDistance.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'altoslib') diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index a5e7331c..a6026d4a 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -44,6 +44,8 @@ public class AltosDistance extends AltosUnits { } int say_fraction() { - return 1; + if (AltosConvert.imperial_units) + return 1; + return 0; } } \ No newline at end of file -- cgit v1.2.3 From 42bbe15512533f2d958b8219a02fbd256593092a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 12 Sep 2012 02:26:32 -0700 Subject: altosui: Initialize flight velocity to zero when reading eeprom files Otherwise, the integration of velocity will start at MISSING and get stranger. Fortunately, we know the initial velocity of the rocket when sitting on the pad. Signed-off-by: Keith Packard --- altoslib/AltosEepromIterable.java | 1 + 1 file changed, 1 insertion(+) (limited to 'altoslib') diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 1aa816e1..2ac10e85 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -200,6 +200,7 @@ public class AltosEepromIterable extends AltosRecordIterable { state.state = AltosLib.ao_flight_pad; state.accel_plus_g = 15758; state.accel_minus_g = 16294; + state.flight_vel = 0; /* Pull in static data from the flight and gps_date records */ if (flight_record != null) -- cgit v1.2.3 From 19e35de47157923670b1864ce7b04f8d82f3bdea Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 12 Sep 2012 16:06:59 -0700 Subject: altosui: Lock access to preferences data These are accessed by several different threads, so keep things sane by just holding locks across all access. Signed-off-by: Keith Packard --- altoslib/AltosPreferences.java | 119 ++++++++++++++++++++++++---------------- altosui/AltosUIPreferences.java | 22 +++++--- 2 files changed, 87 insertions(+), 54 deletions(-) (limited to 'altoslib') diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 065b6e99..0e7b2bd3 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -202,173 +202,200 @@ public class AltosPreferences { } public static void set_logdir(File new_logdir) { - logdir = new_logdir; - mapdir = new File(logdir, "maps"); - if (!mapdir.exists()) - mapdir.mkdirs(); synchronized (preferences) { + logdir = new_logdir; + mapdir = new File(logdir, "maps"); + if (!mapdir.exists()) + mapdir.mkdirs(); preferences.put(logdirPreference, logdir.getPath()); flush_preferences(); } } public static File logdir() { - return logdir; + synchronized (preferences) { + return logdir; + } } public static File mapdir() { - return mapdir; + synchronized (preferences) { + return mapdir; + } } public static void set_frequency(int serial, double new_frequency) { - frequencies.put(serial, new_frequency); synchronized (preferences) { + frequencies.put(serial, new_frequency); preferences.putDouble(String.format(frequencyPreferenceFormat, serial), new_frequency); flush_preferences(); } } public static double frequency(int serial) { - if (frequencies.containsKey(serial)) - return frequencies.get(serial); - double frequency = preferences.getDouble(String.format(frequencyPreferenceFormat, serial), 0); - if (frequency == 0.0) { - int channel = preferences.getInt(String.format(channelPreferenceFormat, serial), 0); - frequency = AltosConvert.radio_channel_to_frequency(channel); + synchronized (preferences) { + if (frequencies.containsKey(serial)) + return frequencies.get(serial); + double frequency = preferences.getDouble(String.format(frequencyPreferenceFormat, serial), 0); + if (frequency == 0.0) { + int channel = preferences.getInt(String.format(channelPreferenceFormat, serial), 0); + frequency = AltosConvert.radio_channel_to_frequency(channel); + } + frequencies.put(serial, frequency); + return frequency; } - frequencies.put(serial, frequency); - return frequency; } public static void set_telemetry(int serial, int new_telemetry) { - telemetries.put(serial, new_telemetry); synchronized (preferences) { + telemetries.put(serial, new_telemetry); preferences.putInt(String.format(telemetryPreferenceFormat, serial), new_telemetry); flush_preferences(); } } public static int telemetry(int serial) { - if (telemetries.containsKey(serial)) - return telemetries.get(serial); - int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial), - AltosLib.ao_telemetry_standard); - telemetries.put(serial, telemetry); - return telemetry; + synchronized (preferences) { + if (telemetries.containsKey(serial)) + return telemetries.get(serial); + int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial), + AltosLib.ao_telemetry_standard); + telemetries.put(serial, telemetry); + return telemetry; + } } public static void set_scanning_telemetry(int new_scanning_telemetry) { - scanning_telemetry = new_scanning_telemetry; synchronized (preferences) { + scanning_telemetry = new_scanning_telemetry; preferences.putInt(scanningTelemetryPreference, scanning_telemetry); flush_preferences(); } } public static int scanning_telemetry() { - return scanning_telemetry; + synchronized (preferences) { + return scanning_telemetry; + } } public static void set_voice(boolean new_voice) { - voice = new_voice; synchronized (preferences) { + voice = new_voice; preferences.putBoolean(voicePreference, voice); flush_preferences(); } } public static boolean voice() { - return voice; + synchronized (preferences) { + return voice; + } } public static void set_callsign(String new_callsign) { - callsign = new_callsign; synchronized(preferences) { + callsign = new_callsign; preferences.put(callsignPreference, callsign); flush_preferences(); } } public static String callsign() { - return callsign; + synchronized(preferences) { + return callsign; + } } public static void set_firmwaredir(File new_firmwaredir) { - firmwaredir = new_firmwaredir; synchronized (preferences) { + firmwaredir = new_firmwaredir; preferences.put(firmwaredirPreference, firmwaredir.getPath()); flush_preferences(); } } public static File firmwaredir() { - return firmwaredir; + synchronized (preferences) { + return firmwaredir; + } } public static void set_launcher_serial(int new_launcher_serial) { - launcher_serial = new_launcher_serial; synchronized (preferences) { + launcher_serial = new_launcher_serial; preferences.putInt(launcherSerialPreference, launcher_serial); flush_preferences(); } } public static int launcher_serial() { - return launcher_serial; + synchronized (preferences) { + return launcher_serial; + } } public static void set_launcher_channel(int new_launcher_channel) { - launcher_channel = new_launcher_channel; synchronized (preferences) { + launcher_channel = new_launcher_channel; preferences.putInt(launcherChannelPreference, launcher_channel); flush_preferences(); } } public static int launcher_channel() { - return launcher_channel; + synchronized (preferences) { + return launcher_channel; + } } public static Preferences bt_devices() { - return preferences.node("bt_devices"); + synchronized (preferences) { + return preferences.node("bt_devices"); + } } public static AltosFrequency[] common_frequencies() { - return common_frequencies; + synchronized (preferences) { + return common_frequencies; + } } public static void set_common_frequencies(AltosFrequency[] frequencies) { - common_frequencies = frequencies; synchronized(preferences) { + common_frequencies = frequencies; save_common_frequencies(frequencies); flush_preferences(); } } public static void add_common_frequency(AltosFrequency frequency) { - AltosFrequency[] new_frequencies = new AltosFrequency[common_frequencies.length + 1]; + AltosFrequency[] old_frequencies = common_frequencies(); + AltosFrequency[] new_frequencies = new AltosFrequency[old_frequencies.length + 1]; int i; - for (i = 0; i < common_frequencies.length; i++) { - if (frequency.frequency == common_frequencies[i].frequency) + for (i = 0; i < old_frequencies.length; i++) { + if (frequency.frequency == old_frequencies[i].frequency) return; - if (frequency.frequency < common_frequencies[i].frequency) + if (frequency.frequency < old_frequencies[i].frequency) break; - new_frequencies[i] = common_frequencies[i]; + new_frequencies[i] = old_frequencies[i]; } new_frequencies[i] = frequency; - for (; i < common_frequencies.length; i++) - new_frequencies[i+1] = common_frequencies[i]; + for (; i < old_frequencies.length; i++) + new_frequencies[i+1] = old_frequencies[i]; set_common_frequencies(new_frequencies); } public static boolean imperial_units() { - return AltosConvert.imperial_units; + synchronized(preferences) { + return AltosConvert.imperial_units; + } } public static void set_imperial_units(boolean imperial_units) { - AltosConvert.imperial_units = imperial_units; synchronized (preferences) { + AltosConvert.imperial_units = imperial_units; preferences.putBoolean(unitsPreference, imperial_units); flush_preferences(); } diff --git a/altosui/AltosUIPreferences.java b/altosui/AltosUIPreferences.java index 10ab26c3..8f1e45d9 100644 --- a/altosui/AltosUIPreferences.java +++ b/altosui/AltosUIPreferences.java @@ -102,15 +102,17 @@ public class AltosUIPreferences extends AltosPreferences { } } public static int font_size() { - return font_size; + synchronized (preferences) { + return font_size; + } } static void set_fonts() { } public static void set_font_size(int new_font_size) { - font_size = new_font_size; synchronized (preferences) { + font_size = new_font_size; preferences.putInt(fontSizePreference, font_size); flush_preferences(); Altos.set_fonts(font_size); @@ -132,12 +134,12 @@ public class AltosUIPreferences extends AltosPreferences { } public static void set_look_and_feel(String new_look_and_feel) { - look_and_feel = new_look_and_feel; try { - UIManager.setLookAndFeel(look_and_feel); + UIManager.setLookAndFeel(new_look_and_feel); } catch (Exception e) { } synchronized(preferences) { + look_and_feel = new_look_and_feel; preferences.put(lookAndFeelPreference, look_and_feel); flush_preferences(); for (AltosUIListener l : ui_listeners) @@ -146,7 +148,9 @@ public class AltosUIPreferences extends AltosPreferences { } public static String look_and_feel() { - return look_and_feel; + synchronized (preferences) { + return look_and_feel; + } } public static void register_ui_listener(AltosUIListener l) { @@ -161,16 +165,18 @@ public class AltosUIPreferences extends AltosPreferences { } } public static void set_serial_debug(boolean new_serial_debug) { - serial_debug = new_serial_debug; - AltosLink.set_debug(serial_debug); + AltosLink.set_debug(new_serial_debug); synchronized (preferences) { + serial_debug = new_serial_debug; preferences.putBoolean(serialDebugPreference, serial_debug); flush_preferences(); } } public static boolean serial_debug() { - return serial_debug; + synchronized (preferences) { + return serial_debug; + } } } \ No newline at end of file -- cgit v1.2.3