Add EasyTimer configuration support
authorKeith Packard <keithp@keithp.com>
Sat, 6 Jun 2020 00:15:10 +0000 (17:15 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 9 Jun 2020 04:29:08 +0000 (21:29 -0700)
Needed six-axis pad orientation support

Signed-off-by: Keith Packard <keithp@keithp.com>
altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosUsb.java
altoslib/AltosConfigData.java
altoslib/AltosLib.java
altoslib/AltosMma655x.java
altoslib/AltosRotation.java
altosui/AltosConfigFCUI.java
altosuilib/AltosFlashUI.java
altosuilib/AltosUSBDevice.java

index c2ef8a700ce026fddbf37a68dd498ba01cc059f4..35514483f026af968a6a31c13bc55f734b4a250b 100644 (file)
@@ -134,7 +134,6 @@ public class AltosUsb extends AltosDroidLink {
 
                if (want_product == AltosLib.product_basestation)
                        return have_product == AltosLib.product_teledongle ||
-                               have_product == AltosLib.product_teleterra ||
                                have_product == AltosLib.product_telebt ||
                                have_product == AltosLib.product_megadongle;
 
@@ -144,7 +143,8 @@ public class AltosUsb extends AltosDroidLink {
                                have_product == AltosLib.product_easymega ||
                                have_product == AltosLib.product_telegps ||
                                have_product == AltosLib.product_easymini ||
-                               have_product == AltosLib.product_telemini;
+                               have_product == AltosLib.product_telemini ||
+                               have_product == AltosLib.product_easytimer;
 
                if (have_product == AltosLib.product_altusmetrum)       /* old devices match any request */
                        return true;
index 2d22e7b677dfba0b4ebd1e9efbb2bea9c9ac27ca..5d58566ecb3dc0b9836e1bd676a5857f04a1cde1 100644 (file)
@@ -320,8 +320,12 @@ public class AltosConfigData {
                adjust_accel_cal();
                switch (pad_orientation) {
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                        return accel_cal_plus_cooked;
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                        return invert_accel_value(accel_cal_minus_cooked);
                default:
                        return AltosLib.MISSING;
@@ -333,8 +337,12 @@ public class AltosConfigData {
                adjust_accel_cal();
                switch (pad_orientation) {
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                        return accel_cal_minus_cooked;
                case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+               case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+               case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                        return invert_accel_value(accel_cal_plus_cooked);
                default:
                        return AltosLib.MISSING;
@@ -353,11 +361,15 @@ public class AltosConfigData {
                {
                        switch (pad_orientation) {
                        case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
+                       case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
+                       case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_UP:
                                accel_cal_plus_cooked = accel_cal_plus;
                                accel_cal_minus_cooked = accel_cal_minus;
                                accel_cal_adjusted = true;
                                break;
                        case AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN:
+                       case AltosLib.AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN:
+                       case AltosLib.AO_PAD_ORIENTATION_BIG_PARTS_DOWN:
                                accel_cal_plus_cooked = invert_accel_value(accel_cal_minus);
                                accel_cal_minus_cooked = invert_accel_value(accel_cal_plus);
                                accel_cal_adjusted = true;
index 14cec543eb5f9d9dc374250b4a034be338ea2aa1..a7f27830cd053a99484a70b793084f5cc6b39507 100644 (file)
@@ -117,7 +117,7 @@ public class AltosLib {
        public final static int product_altusmetrum = 0x000a;
        public final static int product_telemetrum = 0x000b;
        public final static int product_teledongle = 0x000c;
-       public final static int product_teleterra = 0x000d;
+       public final static int product_easytimer = 0x000d;
        public final static int product_telebt = 0x000e;
        public final static int product_telelaunch = 0x000f;
        public final static int product_telelco = 0x0010;
@@ -153,7 +153,7 @@ public class AltosLib {
                new Product("telemetrum", product_telemetrum),
                new Product("teleballoon", product_telemetrum),
                new Product("teledongle", product_teledongle),
-               new Product("teleterra", product_teledongle),
+               new Product("easytimer", product_easytimer),
                new Product("telebt", product_telebt),
                new Product("telelaunch", product_telelaunch),
                new Product("telelco", product_telelco),
@@ -357,6 +357,10 @@ public class AltosLib {
 
        public static final int AO_PAD_ORIENTATION_ANTENNA_UP = 0;
        public static final int AO_PAD_ORIENTATION_ANTENNA_DOWN = 1;
+       public static final int AO_PAD_ORIENTATION_WORDS_UPRIGHT = 2;
+       public static final int AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN = 3;
+       public static final int AO_PAD_ORIENTATION_BIG_PARTS_UP = 4;
+       public static final int AO_PAD_ORIENTATION_BIG_PARTS_DOWN = 5;
 
        public static final int AO_LOG_FORMAT_UNKNOWN = 0;
        public static final int AO_LOG_FORMAT_FULL = 1;
@@ -586,7 +590,7 @@ public class AltosLib {
                case product_altusmetrum: return "AltusMetrum";
                case product_telemetrum: return "TeleMetrum";
                case product_teledongle: return "TeleDongle";
-               case product_teleterra: return "TeleTerra";
+               case product_easytimer: return "EasyTimer";
                case product_telebt: return "TeleBT";
                case product_telelaunch: return "TeleLaunch";
                case product_telelco: return "TeleLco";
index c009b8209b97e82dcda1430d0e98f789f915b621..1a730c11780bd0de5533c6de8d5619f87f949977 100644 (file)
@@ -55,7 +55,7 @@ public class AltosMma655x implements Cloneable {
                                int accel = mma655x.accel;
                                if (cal_data.mma655x_inverted)
                                        accel = 4095 - accel;
-                               if (cal_data.pad_orientation == 1)
+                               if (cal_data.pad_orientation == AltosLib.AO_PAD_ORIENTATION_ANTENNA_DOWN)
                                        accel = 4095 - accel;
                                listener.set_acceleration(cal_data.acceleration(accel));
                        }
index 7bcea4874095e4d8c83610ffc23c71b07e4dfc5e..85e213b25f5a0ef0700c3151b6723ee8ff34b925 100644 (file)
@@ -97,7 +97,7 @@ public class AltosRotation extends AltosQuaternion {
                             double z,
                             int pad_orientation) {
                AltosQuaternion orient = AltosQuaternion.vector(x, y, z).normalize();
-               double sky = pad_orientation == 0 ? 1 : -1;
+               double sky = (pad_orientation & 1) == 0 ? 1 : -1;
                AltosQuaternion up = new AltosQuaternion(0, 0, 0, sky);
                rotation = up.vectors_to_rotation(orient);
        }
index b7dc70bf4cb9d1aa6d0fbca9456b63e08e885932..5ff37366c4d2bd105389134baae253f895dab283 100644 (file)
@@ -142,11 +142,27 @@ public class AltosConfigFCUI
                "4250",
        };
 
-       static String[]         pad_orientation_values = {
+       static String[]         pad_orientation_values_radio = {
                "Antenna Up",
                "Antenna Down",
        };
 
+       static String[]         pad_orientation_values_no_radio = {
+               "Beeper Up",
+               "Beeper Down",
+       };
+
+       static String[]         pad_orientation_values_six_axis = {
+               "Beeper Up",
+               "Beeper Down",
+               "Words Upright",
+               "Words Upsidedown",
+               "Big Parts Up",
+               "Big Parts Down",
+       };
+
+       String[] pad_orientation_values;
+
        static String[]         tracker_motion_values_m = {
                "2",
                "5",
@@ -203,6 +219,25 @@ public class AltosConfigFCUI
                return product != null && product.startsWith("TeleMetrum");
        }
 
+       boolean is_telemega() {
+               String  product = product_value.getText();
+               return product != null && product.startsWith("TeleMega");
+       }
+
+       boolean is_easymega() {
+               String  product = product_value.getText();
+               return product != null && product.startsWith("EasyMega");
+       }
+
+       boolean is_easytimer() {
+               String  product = product_value.getText();
+               return product != null && product.startsWith("EasyTimer");
+       }
+
+       boolean has_radio() {
+               return is_telemega() || is_telemetrum() || is_telemini();
+       }
+
        void set_radio_enable_tool_tip() {
                if (radio_enable_value.isVisible())
                        radio_enable_value.setToolTipText("Enable/Disable telemetry and RDF transmissions");
@@ -277,6 +312,8 @@ public class AltosConfigFCUI
                                pad_orientation_value.setToolTipText("Older TeleMetrum firmware must fly antenna forward");
                        else if (is_telemini() || is_easymini())
                                pad_orientation_value.setToolTipText("TeleMini and EasyMini don't care how they are mounted");
+                       else if (is_easytimer())
+                               pad_orientation_value.setToolTipText("EasyTimer can be mounted in any of six orientations");
                        else
                                pad_orientation_value.setToolTipText("Can't select orientation");
                }
@@ -759,6 +796,13 @@ public class AltosConfigFCUI
                c.anchor = GridBagConstraints.LINE_START;
                c.insets = ir;
                c.ipady = 5;
+               if (has_radio())
+                       pad_orientation_values = pad_orientation_values_radio;
+               else if (is_easytimer())
+                       pad_orientation_values = pad_orientation_values_six_axis;
+               else
+                       pad_orientation_values = pad_orientation_values_no_radio;
+
                pad_orientation_value = new JComboBox<String>(pad_orientation_values);
                pad_orientation_value.setEditable(false);
                pad_orientation_value.addItemListener(this);
index e61b397337c8b35828e7397746496fabe2764109..fd84f921c5d75a5fb0249133321ad0ffd98af247 100644 (file)
@@ -64,8 +64,7 @@ public class AltosFlashUI
                "telemetrum-v1",
                "telemini-v1",
                "telenano",
-               "teleshield",
-               "teleterra"
+               "teleshield"
        };
 
        private static final String[] pair_programmed_devices = {
@@ -78,8 +77,7 @@ public class AltosFlashUI
                "TeleMetrum-v1",
                "TeleMini-v1",
                "TeleNano",
-               "TeleShield",
-               "TeleTerra"
+               "TeleShield"
        };
 
        private boolean is_pair_programmed() {
index 349cd3ce2f1a51b16833144817e162153061f8e9..50ec4c03bc843399d380df97b6645926d9c6fd83 100644 (file)
@@ -74,13 +74,13 @@ public class AltosUSBDevice  extends altos_device implements AltosDevice {
 
                if (want_product == AltosUILib.product_basestation)
                        return have_product == AltosUILib.product_teledongle ||
-                               have_product == AltosUILib.product_teleterra ||
                                have_product == AltosUILib.product_telebt ||
                                have_product == AltosUILib.product_megadongle;
 
                if (want_product == AltosUILib.product_altimeter)
                        return have_product == AltosUILib.product_telemetrum ||
                                have_product == AltosUILib.product_telemega ||
+                               have_product == AltosUILib.product_easytimer ||
                                have_product == AltosUILib.product_easymega ||
                                have_product == AltosUILib.product_telegps ||
                                have_product == AltosUILib.product_easymini ||