summaryrefslogtreecommitdiff
path: root/altoslib
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-11-25 00:02:06 -0800
committerKeith Packard <keithp@keithp.com>2013-11-25 00:02:06 -0800
commit82b42935d047d2f7c2f7a63a3efb72a3f1d5594e (patch)
tree6290de009ca976bed1a1cd40f1fc5dc00213e5c1 /altoslib
parent8da565bbafa2925aa889cf9249497a709a814b7f (diff)
altosui: Handle units in pyro config.
This lets you edit the pyro configuration using imperial units if desired. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r--altoslib/AltosAccel.java20
-rw-r--r--altoslib/AltosConvert.java12
-rw-r--r--altoslib/AltosDistance.java26
-rw-r--r--altoslib/AltosHeight.java21
-rw-r--r--altoslib/AltosPyro.java68
-rw-r--r--altoslib/AltosSpeed.java20
-rw-r--r--altoslib/AltosTemperature.java20
-rw-r--r--altoslib/AltosUnits.java77
8 files changed, 182 insertions, 82 deletions
diff --git a/altoslib/AltosAccel.java b/altoslib/AltosAccel.java
index 08eba359..b838d30b 100644
--- a/altoslib/AltosAccel.java
+++ b/altoslib/AltosAccel.java
@@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;
public class AltosAccel extends AltosUnits {
- public double value(double v) {
- if (AltosConvert.imperial_units)
+ public double value(double v, boolean imperial_units) {
+ if (imperial_units)
return AltosConvert.meters_to_feet(v);
return v;
}
- public String show_units() {
- if (AltosConvert.imperial_units)
+ public double inverse(double v, boolean imperial_units) {
+ if (imperial_units)
+ return AltosConvert.feet_to_meters(v);
+ return v;
+ }
+
+ public String show_units(boolean imperial_units) {
+ if (imperial_units)
return "ft/s²";
return "m/s²";
}
- public String say_units() {
- if (AltosConvert.imperial_units)
+ public String say_units(boolean imperial_units) {
+ if (imperial_units)
return "feet per second squared";
return "meters per second squared";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return width / 9;
}
} \ No newline at end of file
diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java
index 760d9eb9..8d0b74dd 100644
--- a/altoslib/AltosConvert.java
+++ b/altoslib/AltosConvert.java
@@ -290,10 +290,18 @@ public class AltosConvert {
return meters_to_feet(meters) / 5280;
}
+ public static double miles_to_meters(double miles) {
+ return feet_to_meters(miles * 5280);
+ }
+
public static double meters_to_mph(double mps) {
return meters_to_miles(mps) * 3600;
}
+ public static double mph_to_meters(double mps) {
+ return miles_to_meters(mps) / 3600;
+ }
+
public static double meters_to_mach(double meters) {
return meters / 343; /* something close to mach at usual rocket sites */
}
@@ -306,6 +314,10 @@ public class AltosConvert {
return c * 9/5 + 32;
}
+ public static double f_to_c(double c) {
+ return (c - 32) * 5/9;
+ }
+
public static boolean imperial_units = false;
public static AltosDistance distance = new AltosDistance();
diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java
index 56257165..8d359feb 100644
--- a/altoslib/AltosDistance.java
+++ b/altoslib/AltosDistance.java
@@ -19,32 +19,38 @@ package org.altusmetrum.altoslib_2;
public class AltosDistance extends AltosUnits {
- public double value(double v) {
- if (AltosConvert.imperial_units)
+ public double value(double v, boolean imperial_units) {
+ if (imperial_units)
return AltosConvert.meters_to_miles(v);
return v;
}
- public String show_units() {
- if (AltosConvert.imperial_units)
+ public double inverse(double v, boolean imperial_units) {
+ if (imperial_units)
+ return AltosConvert.miles_to_meters(v);
+ return v;
+ }
+
+ public String show_units(boolean imperial_units) {
+ if (imperial_units)
return "miles";
return "m";
}
- public String say_units() {
- if (AltosConvert.imperial_units)
+ public String say_units(boolean imperial_units) {
+ if (imperial_units)
return "miles";
return "meters";
}
- public int show_fraction(int width) {
- if (AltosConvert.imperial_units)
+ public int show_fraction(int width, boolean imperial_units) {
+ if (imperial_units)
return width / 3;
return width / 9;
}
- public int say_fraction() {
- if (AltosConvert.imperial_units)
+ public int say_fraction(boolean imperial_units) {
+ if (imperial_units)
return 1;
return 0;
}
diff --git a/altoslib/AltosHeight.java b/altoslib/AltosHeight.java
index 1d2e4dbc..84bd42d9 100644
--- a/altoslib/AltosHeight.java
+++ b/altoslib/AltosHeight.java
@@ -19,32 +19,31 @@ package org.altusmetrum.altoslib_2;
public class AltosHeight extends AltosUnits {
- public double value(double v) {
- if (AltosConvert.imperial_units)
+ public double value(double v, boolean imperial_units) {
+ if (imperial_units)
return AltosConvert.meters_to_feet(v);
return v;
}
- public double parse(String s) throws NumberFormatException {
- double v = Double.parseDouble(s);
- if (AltosConvert.imperial_units)
- v = AltosConvert.feet_to_meters(v);
+ public double inverse(double v, boolean imperial_units) {
+ if (imperial_units)
+ return AltosConvert.feet_to_meters(v);
return v;
}
- public String show_units() {
- if (AltosConvert.imperial_units)
+ public String show_units(boolean imperial_units) {
+ if (imperial_units)
return "ft";
return "m";
}
- public String say_units() {
- if (AltosConvert.imperial_units)
+ public String say_units(boolean imperial_units) {
+ if (imperial_units)
return "feet";
return "meters";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return width / 9;
}
} \ No newline at end of file
diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java
index 0142eac8..a219468c 100644
--- a/altoslib/AltosPyro.java
+++ b/altoslib/AltosPyro.java
@@ -28,24 +28,24 @@ public class AltosPyro {
public static final int pyro_accel_greater = 0x00000002;
public static final String pyro_accel_less_string = "a<";
public static final String pyro_accel_greater_string = "a>";
- public static final String pyro_accel_less_name = "Acceleration less than (m/s²)";
- public static final String pyro_accel_greater_name = "Acceleration greater than (m/s²)";
+ public static final String pyro_accel_less_name = "Acceleration less than";
+ public static final String pyro_accel_greater_name = "Acceleration greater than";
public static final double pyro_accel_scale = 16.0;
public static final int pyro_speed_less = 0x00000004;
public static final int pyro_speed_greater = 0x00000008;
public static final String pyro_speed_less_string = "s<";
public static final String pyro_speed_greater_string = "s>";
- public static final String pyro_speed_less_name = "Speed less than (m/s)";
- public static final String pyro_speed_greater_name = "Speed greater than (m/s)";
+ public static final String pyro_speed_less_name = "Speed less than";
+ public static final String pyro_speed_greater_name = "Speed greater than";
public static final double pyro_speed_scale = 16.0;
public static final int pyro_height_less = 0x00000010;
public static final int pyro_height_greater = 0x00000020;
public static final String pyro_height_less_string = "h<";
public static final String pyro_height_greater_string = "h>";
- public static final String pyro_height_less_name = "Height less than (m)";
- public static final String pyro_height_greater_name = "Height greater than (m)";
+ public static final String pyro_height_less_name = "Height less than";
+ public static final String pyro_height_greater_name = "Height greater than";
public static final double pyro_height_scale = 1.0;
public static final int pyro_orient_less = 0x00000040;
@@ -102,12 +102,16 @@ public class AltosPyro {
private static HashMap<Integer,String> pyro_to_name = new HashMap<Integer,String>();
+ private static HashMap<Integer,AltosUnits> pyro_to_units = new HashMap<Integer,AltosUnits>();
+
private static HashMap<Integer,Double> pyro_to_scale = new HashMap<Integer,Double>();
- private static void insert_map(int flag, String string, String name, double scale) {
+ private static void insert_map(int flag, String string, String name, AltosUnits units, double scale) {
string_to_pyro.put(string, flag);
pyro_to_string.put(flag, string);
pyro_to_name.put(flag, name);
+ if (units != null)
+ pyro_to_units.put(flag, units);
pyro_to_scale.put(flag, scale);
}
@@ -124,8 +128,22 @@ public class AltosPyro {
}
public static String pyro_to_name(int flag) {
- if (pyro_to_name.containsKey(flag))
- return pyro_to_name.get(flag);
+ String name;
+ AltosUnits units = null;
+ if (!pyro_to_name.containsKey(flag))
+ return null;
+
+ name = pyro_to_name.get(flag);
+ if (pyro_to_units.containsKey(flag))
+ units = pyro_to_units.get(flag);
+ if (units == null)
+ return name;
+ return String.format ("%s (%s)", name, units.show_units());
+ }
+
+ public static AltosUnits pyro_to_units(int flag) {
+ if (pyro_to_units.containsKey(flag))
+ return pyro_to_units.get(flag);
return null;
}
@@ -136,29 +154,29 @@ public class AltosPyro {
}
private static void initialize_maps() {
- insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, pyro_accel_scale);
- insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, pyro_accel_scale);
+ insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, AltosConvert.accel, pyro_accel_scale);
+ insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, AltosConvert.accel, pyro_accel_scale);
- insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, pyro_speed_scale);
- insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, pyro_speed_scale);
+ insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, AltosConvert.speed, pyro_speed_scale);
+ insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, AltosConvert.speed, pyro_speed_scale);
- insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, pyro_height_scale);
- insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, pyro_height_scale);
+ insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, AltosConvert.height, pyro_height_scale);
+ insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, AltosConvert.height, pyro_height_scale);
- insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, pyro_orient_scale);
- insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, pyro_orient_scale);
+ insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, null, pyro_orient_scale);
+ insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, null, pyro_orient_scale);
- insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, pyro_time_scale);
- insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, pyro_time_scale);
+ insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, null, pyro_time_scale);
+ insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, null, pyro_time_scale);
- insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, 1.0);
- insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, 1.0);
+ insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, null, 1.0);
+ insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, null, 1.0);
- insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, 1.0);
- insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, pyro_delay_scale);
+ insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, null, 1.0);
+ insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, null, pyro_delay_scale);
- insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, 1.0);
- insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, 1.0);
+ insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, null, 1.0);
+ insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, null, 1.0);
}
{
diff --git a/altoslib/AltosSpeed.java b/altoslib/AltosSpeed.java
index 9b9f7240..6618c539 100644
--- a/altoslib/AltosSpeed.java
+++ b/altoslib/AltosSpeed.java
@@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;
public class AltosSpeed extends AltosUnits {
- public double value(double v) {
- if (AltosConvert.imperial_units)
+ public double value(double v, boolean imperial_units) {
+ if (imperial_units)
return AltosConvert.meters_to_mph(v);
return v;
}
- public String show_units() {
- if (AltosConvert.imperial_units)
+ public double inverse(double v, boolean imperial_units) {
+ if (imperial_units)
+ return AltosConvert.mph_to_meters(v);
+ return v;
+ }
+
+ public String show_units(boolean imperial_units) {
+ if (imperial_units)
return "mph";
return "m/s";
}
- public String say_units() {
- if (AltosConvert.imperial_units)
+ public String say_units(boolean imperial_units) {
+ if (imperial_units)
return "miles per hour";
return "meters per second";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return width / 9;
}
} \ No newline at end of file
diff --git a/altoslib/AltosTemperature.java b/altoslib/AltosTemperature.java
index 0105fe53..a636533f 100644
--- a/altoslib/AltosTemperature.java
+++ b/altoslib/AltosTemperature.java
@@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;
public class AltosTemperature extends AltosUnits {
- public double value(double v) {
- if (AltosConvert.imperial_units)
+ public double value(double v, boolean imperial_units) {
+ if (imperial_units)
return AltosConvert.c_to_f(v);
return v;
}
- public String show_units() {
- if (AltosConvert.imperial_units)
+ public double inverse(double v, boolean imperial_units) {
+ if (imperial_units)
+ return AltosConvert.f_to_c(v);
+ return v;
+ }
+
+ public String show_units(boolean imperial_units) {
+ if (imperial_units)
return "°F";
return "°C";
}
- public String say_units() {
- if (AltosConvert.imperial_units)
+ public String say_units(boolean imperial_units) {
+ if (imperial_units)
return "degrees farenheit";
return "degrees celsius";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return width / 3;
}
}
diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java
index ee74f916..8f9ccded 100644
--- a/altoslib/AltosUnits.java
+++ b/altoslib/AltosUnits.java
@@ -19,43 +19,90 @@ package org.altusmetrum.altoslib_2;
public abstract class AltosUnits {
- public abstract double value(double v);
+ public abstract double value(double v, boolean imperial_units);
- public abstract String show_units();
+ public abstract double inverse(double v, boolean imperial_units);
- public abstract String say_units();
+ public abstract String show_units(boolean imperial_units);
- public abstract int show_fraction(int width);
+ public abstract String say_units(boolean imperial_units);
- int say_fraction() {
+ public abstract int show_fraction(int width, boolean imperial_units);
+
+ public double parse(String s, boolean imperial_units) throws NumberFormatException {
+ double v = Double.parseDouble(s);
+ return inverse(v, imperial_units);
+ }
+
+ public double parse(String s) throws NumberFormatException {
+ return parse(s, AltosConvert.imperial_units);
+ }
+
+ public double value(double v) {
+ return value(v, AltosConvert.imperial_units);
+ }
+
+ public double inverse(double v) {
+ return inverse(v, AltosConvert.imperial_units);
+ }
+
+ public String show_units() {
+ return show_units(AltosConvert.imperial_units);
+ }
+
+ public String say_units() {
+ return say_units(AltosConvert.imperial_units);
+ }
+
+ public int show_fraction(int width) {
+ return show_fraction(width, AltosConvert.imperial_units);
+ }
+
+ int say_fraction(boolean imperial_units) {
return 0;
}
- private String show_format(int width) {
- return String.format("%%%d.%df %s", width, show_fraction(width), show_units());
+ private String show_format(int width, boolean imperial_units) {
+ return String.format("%%%d.%df %s", width, show_fraction(width, imperial_units), show_units(imperial_units));
+ }
+
+ private String say_format(boolean imperial_units) {
+ return String.format("%%1.%df", say_fraction(imperial_units));
}
- private String say_format() {
- return String.format("%%1.%df", say_fraction());
+ private String say_units_format(boolean imperial_units) {
+ return String.format("%%1.%df %s", say_fraction(imperial_units), say_units(imperial_units));
}
- private String say_units_format() {
- return String.format("%%1.%df %s", say_fraction(), say_units());
+ public String graph_format(int width, boolean imperial_units) {
+ return String.format(String.format("%%%d.%df", width, show_fraction(width, imperial_units)), 0.0);
}
public String graph_format(int width) {
- return String.format(String.format("%%%d.%df", width, show_fraction(width)), 0.0);
+ return graph_format(width, AltosConvert.imperial_units);
+ }
+
+ public String show(int width, double v, boolean imperial_units) {
+ return String.format(show_format(width, imperial_units), value(v, imperial_units));
}
public String show(int width, double v) {
- return String.format(show_format(width), value(v));
+ return show(width, v, AltosConvert.imperial_units);
+ }
+
+ public String say(double v, boolean imperial_units) {
+ return String.format(say_format(imperial_units), value(v, imperial_units));
}
public String say(double v) {
- return String.format(say_format(), value(v));
+ return say(v, AltosConvert.imperial_units);
+ }
+
+ public String say_units(double v, boolean imperial_units) {
+ return String.format(say_units_format(imperial_units), value(v, imperial_units));
}
public String say_units(double v) {
- return String.format(say_units_format(), value(v));
+ return say_units(v, AltosConvert.imperial_units);
}
} \ No newline at end of file