From b07ca2827a498e6dd3c6b62819f71679291f9acc Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 5 Jun 2020 17:15:10 -0700 Subject: [PATCH] Add EasyTimer configuration support Needed six-axis pad orientation support Signed-off-by: Keith Packard --- .../org/altusmetrum/AltosDroid/AltosUsb.java | 4 +- altoslib/AltosConfigData.java | 12 +++++ altoslib/AltosLib.java | 10 ++-- altoslib/AltosMma655x.java | 2 +- altoslib/AltosRotation.java | 2 +- altosui/AltosConfigFCUI.java | 46 ++++++++++++++++++- altosuilib/AltosFlashUI.java | 6 +-- altosuilib/AltosUSBDevice.java | 2 +- 8 files changed, 71 insertions(+), 13 deletions(-) diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosUsb.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosUsb.java index c2ef8a70..35514483 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosUsb.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosUsb.java @@ -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; diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 2d22e7b6..5d58566e 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -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; diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 14cec543..a7f27830 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -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"; diff --git a/altoslib/AltosMma655x.java b/altoslib/AltosMma655x.java index c009b820..1a730c11 100644 --- a/altoslib/AltosMma655x.java +++ b/altoslib/AltosMma655x.java @@ -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)); } diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index 7bcea487..85e213b2 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -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); } diff --git a/altosui/AltosConfigFCUI.java b/altosui/AltosConfigFCUI.java index b7dc70bf..5ff37366 100644 --- a/altosui/AltosConfigFCUI.java +++ b/altosui/AltosConfigFCUI.java @@ -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(pad_orientation_values); pad_orientation_value.setEditable(false); pad_orientation_value.addItemListener(this); diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java index e61b3973..fd84f921 100644 --- a/altosuilib/AltosFlashUI.java +++ b/altosuilib/AltosFlashUI.java @@ -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() { diff --git a/altosuilib/AltosUSBDevice.java b/altosuilib/AltosUSBDevice.java index 349cd3ce..50ec4c03 100644 --- a/altosuilib/AltosUSBDevice.java +++ b/altosuilib/AltosUSBDevice.java @@ -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 || -- 2.30.2