first cut at turnon scripts for EasyTimer v2 master
authorBdale Garbee <bdale@gag.com>
Mon, 29 Apr 2024 17:41:48 +0000 (11:41 -0600)
committerBdale Garbee <bdale@gag.com>
Mon, 29 Apr 2024 17:41:48 +0000 (11:41 -0600)
30 files changed:
Makefile.am
Releasing
altoslib/AltosConfigData.java
altoslib/AltosConfigValues.java
altoslib/AltosConvert.java
altoslib/AltosLib.java
altosui/AltosConfigFCUI.java
altosui/Makefile.am
altosui/altos-windows.nsi.in
ao-bringup/cal-freq [deleted file]
ao-bringup/test-easytimer [deleted file]
ao-bringup/test-easytimer-v1 [new file with mode: 0755]
ao-bringup/test-easytimer-v2 [new file with mode: 0755]
ao-bringup/turnon_easymotor
ao-bringup/turnon_easytimer
ao-bringup/turnon_easytimer_v1 [new file with mode: 0755]
configure.ac
doc/Makefile.am
doc/altusmetrum-theme.yml
doc/altusmetrum.txt
doc/easymini-release-notes.inc
doc/header.inc
doc/release-notes-1.9.18.inc [new file with mode: 0644]
doc/release-notes.inc
doc/specs.inc
doc/telegps-release-notes.inc
src/draw/Makefile
src/easymini-v2.0/Makefile
src/test/ao_fec_test.c
telegps/TeleGPSConfigUI.java

index 08765810d76c14d6fd0564f390140b42e07bd912..8bb1830a17b50c1ea9b661a7964efa549f714d32 100644 (file)
@@ -19,12 +19,9 @@ fat-install: fat
        cd micropeak && $(MAKE) fat-install
 endif
 
-fat:
-       cd src && $(MAKE) all
-       cd doc && $(MAKE) all
+fat: all-recursive
        cd libaltos && $(MAKE) fat
        cd altoslib && $(MAKE) all
-       cd altosuilib && $(MAKE) all
        cd icon && $(MAKE) fat
        cd altosui && $(MAKE) fat
        cd micropeak && $(MAKE) fat
@@ -57,6 +54,7 @@ fat_altos = \
        src/easymini-v3.0/easymini-v3.0-$(VERSION).ihx \
        src/easymotor-v3/easymotor-v3-$(VERSION).ihx \
        src/easytimer-v1/easytimer-v1-$(VERSION).ihx \
+       src/easytimer-v2/easytimer-v2-$(VERSION).ihx \
        src/telebt-v3.0/telebt-v3.0-$(VERSION).ihx \
        src/telebt-v4.0/telebt-v4.0-$(VERSION).ihx \
        src/teledongle-v3.0/teledongle-v3.0-$(VERSION).ihx \
index 9750a4eb3a32b9cc19ee6f23491169985ed2f756..081ece27c73f92894e08eff908cdc2e108f021e5 100644 (file)
--- a/Releasing
+++ b/Releasing
@@ -44,7 +44,7 @@ These are Bdale's notes on how to do a release.
          installers for Windows and Mac OS X
 
                sudo apt update
-               sudo apt install genisoimage nsis \
+               sudo apt install genisoimage nsis gcc-avr avr-libc \
                        gcc-i686-linux-gnu gcc-aarch64-linux-gnu \
                        gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf \
                        gcc-mingw-w64-i686-posix gcc-mingw-w64-x86-64-win32
@@ -117,7 +117,7 @@ These are Bdale's notes on how to do a release.
           src/easymega-v[1-2].0/{*.elf,*.ihx,*.map} \
           src/easymini-v[1-3].0/{*.elf,*.ihx,*.map} \
           src/easymotor-v3/{*.elf,*.ihx,*.map} \
-          src/easytimer-v1/{*.elf,*.ihx,*.map} \
+          src/easytimer-v[1-2]/{*.elf,*.ihx,*.map} \
           src/telebt-v[3-4].0/{*.elf,*.ihx,*.map} \
           src/teledongle-v3.0/{*.elf,*.ihx,*.map} \
           src/telegps-v[1-3].0/{*.elf,*.ihx,*.map} \
@@ -131,7 +131,7 @@ These are Bdale's notes on how to do a release.
           src/easymega-v[1-2].0/flash-loader/*.elf \
           src/easymini-v[1-3].0/flash-loader/*.elf \
           src/easymotor-v3/flash-loader/*.elf \
-          src/easytimer-v1/flash-loader/*.elf \
+          src/easytimer-v[1-2]/flash-loader/*.elf \
           src/telebt-v[3-4].0/flash-loader/{*.elf,*.bin,*.map} \
           src/teledongle-v3.0/flash-loader/*.elf \
           src/telegps-v[1-3].0/flash-loader/{*.elf,*.bin,*.map} \
index 005ef57156a4da31eb7187ce43df9167446a696b..6b980be6b641dd784e06c020d07a743eea036b0c 100644 (file)
@@ -88,6 +88,9 @@ public class AltosConfigData {
 
        public int              report_feet;
 
+       /* HAS_GPS_MOSAIC */
+       public int              gps_receiver;
+
        /* Storage info replies */
        public int      storage_size;
        public int      storage_erase_unit;
@@ -331,6 +334,8 @@ public class AltosConfigData {
 
                report_feet = AltosLib.MISSING;
 
+               gps_receiver = AltosLib.MISSING;
+
                tracker_motion = AltosLib.MISSING;
                tracker_interval = AltosLib.MISSING;
 
@@ -526,6 +531,8 @@ public class AltosConfigData {
 
                try { report_feet = get_int(line, "Report in feet:"); } catch (Exception e) {}
 
+               try { gps_receiver = get_int(line, "GPS receiver:"); } catch (Exception e) {}
+
                /* HAS_TRACKER */
                try {
                        int[] values = get_values(line, "Tracker setting:");
@@ -777,6 +784,9 @@ public class AltosConfigData {
                if (report_feet != AltosLib.MISSING)
                        report_feet = source.report_feet();
 
+               if (gps_receiver != AltosLib.MISSING)
+                       gps_receiver = source.gps_receiver();
+
                /* HAS_TRACKER */
                if (tracker_motion != AltosLib.MISSING)
                        tracker_motion = source.tracker_motion();
@@ -834,6 +844,7 @@ public class AltosConfigData {
                dest.set_beep(beep);
                dest.set_radio_10mw(radio_10mw);
                dest.set_report_feet(report_feet);
+               dest.set_gps_receiver(gps_receiver);
                dest.set_tracker_motion(tracker_motion);
                dest.set_tracker_interval(tracker_interval);
        }
@@ -957,10 +968,13 @@ public class AltosConfigData {
                if (radio_10mw != AltosLib.MISSING)
                        link.printf("c p %d\n", radio_10mw);
 
-               /* HAS_RADIO_10MW */
                if (report_feet != AltosLib.MISSING)
                        link.printf("c u %d\n", report_feet);
 
+               /* HAS_GPS_MOSAIC */
+               if (gps_receiver != AltosLib.MISSING)
+                       link.printf("c g %d\n", gps_receiver);
+
                /* HAS_TRACKER */
                if (tracker_motion != AltosLib.MISSING && tracker_interval != AltosLib.MISSING)
                        link.printf("c t %d %d\n", tracker_motion, tracker_interval);
index 6823e0f99c9b1dc24f122dacd695af99aa60a68e..1de180d30ae3485303e6f705ee4aeb68ea6a10bb 100644 (file)
@@ -128,5 +128,9 @@ public interface AltosConfigValues {
 
        public abstract int report_feet() throws AltosConfigDataException;
 
-       public abstract void set_report_feet(int radio_10mw);
+       public abstract void set_report_feet(int report_feet);
+
+       public abstract int gps_receiver() throws AltosConfigDataException;
+
+       public abstract void set_gps_receiver(int gps_receiver);
 }
index ded4b36527cbfc92e6ba7beefbadcc9a31a3cbb1..84f7e23d91a7f03ea44d3c3139fd7a61a78d7aa3 100644 (file)
@@ -559,7 +559,7 @@ public class AltosConvert {
 
        public static int beep_freq_to_value(double freq) {
                if (freq == 0)
-                       return 94;
+                       return 0;
                return (int) Math.floor (1.0/2.0 * (24.0e6/32.0) / freq + 0.5);
        }
 
index 82b5881ae49dc4389328460a859cada80acbfbe1..fbbfd63c3e7cc7f207ace6907b83ea0e73e4d16a 100644 (file)
@@ -140,6 +140,13 @@ public class AltosLib {
        public final static int product_basestation = 0x10000 + 1;
        public final static int product_altimeter = 0x10000 + 2;
 
+       public final static int gps_builtin = 0;
+       public final static int gps_mosaic = 1;
+
+       public final static String[] gps_receiver_names = {
+               "Builtin", "Mosaic-X5"
+       };
+
        private static class Product {
                final String    name;
                final int       product;
index bc082a4ee6fbda228ccf58de5fc124e3f5ba5f66..3e5bede5169718a291533600d878fe50589a86fc 100644 (file)
@@ -44,6 +44,7 @@ public class AltosConfigFCUI
        JLabel                  radio_enable_label;
        JLabel                  radio_10mw_label;
        JLabel                  report_feet_label;
+       JLabel                  gps_receiver_label;
        JLabel                  rate_label;
        JLabel                  aprs_interval_label;
        JLabel                  aprs_ssid_label;
@@ -73,6 +74,7 @@ public class AltosConfigFCUI
        JRadioButton            radio_enable_value;
        JRadioButton            radio_10mw_value;
        JComboBox<String>       report_feet_value;
+       JComboBox<String>       gps_receiver_value;
        AltosUIRateList         rate_value;
        JComboBox<String>       aprs_interval_value;
        JComboBox<Integer>      aprs_ssid_value;
@@ -353,7 +355,7 @@ public class AltosConfigFCUI
 
        void set_beep_tool_tip() {
                if (beep_value.isVisible())
-                       beep_value.setToolTipText("What frequency the beeper will sound at");
+                       beep_value.setToolTipText("What frequency the beeper will sound at (0 for off)");
                else
                        beep_value.setToolTipText("Older firmware could not select beeper frequency");
        }
@@ -372,6 +374,13 @@ public class AltosConfigFCUI
                        report_feet_value.setToolTipText("Older firmware always beeps max height in meters");
        }
 
+       void set_gps_receiver_tool_tip() {
+               if (gps_receiver_value.isVisible())
+                       gps_receiver_value.setToolTipText("GPS receiver selection");
+               else
+                       gps_receiver_value.setToolTipText("Only TeleMega with new firmware supports alternate GPS receivers");
+       }
+
        /* Build the UI using a grid bag */
        public AltosConfigFCUI(JFrame in_owner, boolean remote) {
                super (in_owner, title, false);
@@ -656,6 +665,32 @@ public class AltosConfigFCUI
                set_report_feet_tool_tip();
                row++;
 
+               /* GPS Receiver */
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = row;
+               c.gridwidth = 4;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               c.ipady = 5;
+               gps_receiver_label = new JLabel("GPS Receiver:");
+               pane.add(gps_receiver_label, c);
+
+               c = new GridBagConstraints();
+               c.gridx = 4; c.gridy = row;
+               c.gridwidth = 4;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               c.ipady = 5;
+               gps_receiver_value = new JComboBox<String>(AltosLib.gps_receiver_names);
+               gps_receiver_value.setEditable(false);
+               gps_receiver_value.addItemListener(this);
+               pane.add(gps_receiver_value, c);
+               set_gps_receiver_tool_tip();
+               row++;
+
                /* Telemetry Rate */
                c = new GridBagConstraints();
                c.gridx = 0; c.gridy = row;
@@ -1553,6 +1588,32 @@ public class AltosConfigFCUI
                        return AltosLib.MISSING;
        }
 
+       public void set_gps_receiver(int new_gps_receiver) {
+               System.out.printf("set_gps_receiver %d\n", new_gps_receiver);
+               if (new_gps_receiver != AltosLib.MISSING) {
+                       if (new_gps_receiver >= AltosLib.gps_receiver_names.length)
+                               new_gps_receiver = 0;
+                       if (new_gps_receiver < 0) {
+                               gps_receiver_value.setEnabled(false);
+                               new_gps_receiver = 0;
+                       } else {
+                               gps_receiver_value.setEnabled(true);
+                       }
+                       gps_receiver_value.setSelectedIndex(new_gps_receiver);
+               }
+               gps_receiver_value.setVisible(new_gps_receiver != AltosLib.MISSING);
+               gps_receiver_label.setVisible(new_gps_receiver != AltosLib.MISSING);
+
+               set_gps_receiver_tool_tip();
+       }
+
+       public int gps_receiver() {
+               if (gps_receiver_value.isVisible())
+                       return gps_receiver_value.getSelectedIndex();
+               else
+                       return AltosLib.MISSING;
+       }
+
        String[] tracker_motion_values() {
                if (AltosConvert.imperial_units)
                        return tracker_motion_values_ft;
index 1da6408c18fe0f1e6fb03fe91c4397cc0d1b58c6..bfea181074d28805b472e4d2cc493caec6505e81 100644 (file)
@@ -155,7 +155,8 @@ FIRMWARE_EMOTOR_3=$(top_srcdir)/src/easymotor-v3/easymotor-v3-$(VERSION).ihx
 FIRMWARE_EMOTOR=$(FIRMWARE_EMOTOR_3)
 
 FIRMWARE_ETIMER_1=$(top_srcdir)/src/easytimer-v1/easytimer-v1-$(VERSION).ihx
-FIRMWARE_ETIMER=$(FIRMWARE_ETIMER_1)
+FIRMWARE_ETIMER_2=$(top_srcdir)/src/easytimer-v2/easytimer-v2-$(VERSION).ihx
+FIRMWARE_ETIMER=$(FIRMWARE_ETIMER_1) $(FIRMWARE_ETIMER_2)
 
 FIRMWARE_TGPS_1_0=$(top_srcdir)/src/telegps-v1.0/telegps-v1.0-$(VERSION).ihx
 FIRMWARE_TGPS_2_0=$(top_srcdir)/src/telegps-v2.0/telegps-v2.0-$(VERSION).ihx
index ee8251bbe14f3c8404413460e86efef4179309db..fbed399e9adff74c937e2181a326cde886b20c10 100644 (file)
@@ -143,6 +143,7 @@ Section "Firmware"
        File "../src/easymega-v2.0/easymega-v2.0-${VERSION}.ihx"
        File "../src/easymotor-v3/easymotor-v3-${VERSION}.ihx"
        File "../src/easytimer-v1/easytimer-v1-${VERSION}.ihx"
+       File "../src/easytimer-v2/easytimer-v2-${VERSION}.ihx"
        File "../src/telelco-v2.0/telelco-v2.0-${VERSION}.ihx"
        File "../src/telefireeight-v1.0/telefireeight-v1.0-${VERSION}.ihx"
        File "../src/telefireeight-v2.0/telefireeight-v2.0-${VERSION}.ihx"
diff --git a/ao-bringup/cal-freq b/ao-bringup/cal-freq
deleted file mode 100755 (executable)
index 40c25ce..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-case $# in
-1)
-       dev="$1"
-       ;;
-*)
-       echo "Usage: $0 <device>"
-       exit 1;
-       ;;
-esac
-
-../ao-tools/ao-cal-freq/ao-cal-freq --tty=$dev
-case $? in
-    0)
-       calline=`./get-radio-cal $dev`
-       CAL_VALUE=`echo $calline | awk '{print $2}'`
-       CURRENT_FREQ=`echo $calline | awk '{print $4}'`
-       echo $SERIAL","$CAL_VALUE >> cal_values
-       exit 0
-       ;;
-    *)
-       exit 1
-       ;;
-esac
diff --git a/ao-bringup/test-easytimer b/ao-bringup/test-easytimer
deleted file mode 100755 (executable)
index f93164c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-VERSION=1
-PRODUCT=EasyTimer
-BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
-
-echo "$PRODUCT-v$VERSION Test Program"
-echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
-echo
-echo "Expectations:"
-echo "\t$PRODUCT v$VERSION powered from USB"
-echo
-
-ret=1
-ao-list | while read product serial dev; do
-    case "$product" in
-       "$PRODUCT-v$VERSION")
-
-           echo "Testing $product $serial $dev"
-
-           ./test-igniters $dev 0 1
-           echo""
-
-           case $? in
-               0)
-                   ;;
-               *)
-                   echo "failed"
-                   exit 1
-           esac
-           echo""
-
-           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
-           echo "\007"
-           ret=0
-           ;;
-    esac
-done
diff --git a/ao-bringup/test-easytimer-v1 b/ao-bringup/test-easytimer-v1
new file mode 100755 (executable)
index 0000000..f93164c
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+VERSION=1
+PRODUCT=EasyTimer
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+
+           ./test-igniters $dev 0 1
+           echo""
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           echo "\007"
+           ret=0
+           ;;
+    esac
+done
diff --git a/ao-bringup/test-easytimer-v2 b/ao-bringup/test-easytimer-v2
new file mode 100755 (executable)
index 0000000..023f27b
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+VERSION=2
+PRODUCT=EasyTimer
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+
+           ./test-igniters $dev 0 1
+           echo""
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+
+           FLASHSIZE=1048576
+
+           echo "Testing flash"
+           ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
+
+           if [ $? -ne 0 ]; then
+               echo -e '\e[31m'"$PRODUCT-$VERSION serial $serial failed"'\e[39m'
+               exit 1
+           fi
+           echo ""
+
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           echo "\007"
+           ret=0
+           ;;
+    esac
+done
index 4678430d1498fcdff9b22afd54b64b0c5dfdea02..8528a7e726096f894e796def7e795074874984d8 100755 (executable)
@@ -46,7 +46,6 @@ case $# in
        exit 1;
        ;;
 esac
-otootor
 #
 # Use released versions of everything
 #
index 8953f90045f02017b4063af8922b89f14385d92d..da78cbb6190e59cba34198b28110834eaccffddf 100755 (executable)
@@ -1,11 +1,7 @@
 #!/bin/sh
 
-if [ -x /usr/bin/ao-flash-stm ]; then
-       FLASH_STM=/usr/bin/ao-flash-stm
-else
-       echo "Can't find ao-flash-stm!  Aborting."
-       exit 1
-fi
+# EasyTimer v2 all arrive from the assembler with 
+# the bootloader already flashed. 
 
 if [ -x /usr/bin/ao-usbload ]; then
        USBLOAD=/usr/bin/ao-usbload
@@ -14,16 +10,15 @@ else
        exit 1
 fi
 
-VERSION=1
+VERSION=2
 REPO=~/altusmetrumllc/Binaries
 PRODUCT=EasyTimer
 
 echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
-echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
 echo
 echo "Expectations:"
 echo "\t$PRODUCT v$VERSION powered from USB"
-echo "\t\twith ST-Link-V2 cabled to debug header"
 echo
 
 case $# in
@@ -41,12 +36,6 @@ case $# in
        ;;
 esac
 
-echo $FLASH_STM
-
-$FLASH_STM $REPO/loaders/easytimer-v$VERSION*.elf 
-
-sleep 3
-
 $USBLOAD --serial=$SERIAL --force $REPO/easytimer-v$VERSION*.elf || exit 1
 
 sleep 5
@@ -73,6 +62,6 @@ done
 
 echo 'E 1' > $dev
 
-./test-easytimer
+./test-easytimer-v2
 
 exit $?
diff --git a/ao-bringup/turnon_easytimer_v1 b/ao-bringup/turnon_easytimer_v1
new file mode 100755 (executable)
index 0000000..8953f90
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+if [ -x /usr/bin/ao-flash-stm ]; then
+       FLASH_STM=/usr/bin/ao-flash-stm
+else
+       echo "Can't find ao-flash-stm!  Aborting."
+       exit 1
+fi
+
+if [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+VERSION=1
+REPO=~/altusmetrumllc/Binaries
+PRODUCT=EasyTimer
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo "\t\twith ST-Link-V2 cabled to debug header"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+echo $FLASH_STM
+
+$FLASH_STM $REPO/loaders/easytimer-v$VERSION*.elf 
+
+sleep 3
+
+$USBLOAD --serial=$SERIAL --force $REPO/easytimer-v$VERSION*.elf || exit 1
+
+sleep 5
+
+dev=`ao-list | awk '/EasyTimer-v'"$VERSION"'/ { print $3; exit(0); }'`
+
+case "$dev" in
+/dev/tty*)
+       echo "EasyTimer found on $dev"
+       ;;
+*)
+       echo 'No EasyTimer-v'"$VERSION"' found'
+       exit 1
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+failed=1
+while [ $failed = 1 ]; do
+    ../ao-tools/ao-cal-accel/ao-cal-accel $dev
+    failed=$?
+done
+
+echo 'E 1' > $dev
+
+./test-easytimer
+
+exit $?
index 9e3db4945f7ec483aab787b6db737864637048c7..998cda30a02c8de3eaf11e09634b7dcbf421b118 100644 (file)
@@ -18,13 +18,13 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([altos], 1.9.17)
+AC_INIT([altos], 1.9.18)
 ANDROID_VERSION=37
 AC_CONFIG_SRCDIR([src/kernel/ao.h])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 
-RELEASE_DATE=2023-08-30
+RELEASE_DATE=2024-04-28
 AC_SUBST(RELEASE_DATE)
 
 DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'`
index f0d8cfb629d7ede77222bb2aea02b1ed85e6ba1c..2ddfec488dd6b64e036df77710961f74fc3584ac 100644 (file)
@@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0'
 endif
 
 RELNOTES_INC=\
+       release-notes-1.9.18.inc \
        release-notes-1.9.17.inc \
        release-notes-1.9.16.inc \
        release-notes-1.9.15.inc \
index 14e5634bb95946ba141ade05d9f88613ea862677..c838a52431b033e86e7cc06d2127ff8be2b9a34f 100644 (file)
@@ -54,7 +54,7 @@ footer:
     left:
       content: '{page-number}'
     right:
-      content: '© 2023 Bdale Garbee and Keith Packard. Creative Commons ShareAlike 3.0 License'
+      content: '© 2024 Bdale Garbee and Keith Packard. Creative Commons ShareAlike 3.0 License'
   verso:
     left:
       content: $footer_recto_right_content
index cb9ef4e2f5f59aab6d248147e27f9b1bb32ef5c4..5a33d7541c34bc72adf8a327c3bc1c552ff4cd42 100644 (file)
@@ -5,7 +5,7 @@ Keith Packard <keithp@keithp.com>; Bdale Garbee <bdale@gag.com>; Bob Finch; Anth
 :revdate: 1 Jan 1970
 :icons:
 :icontype: svg
-:copyright: Bdale Garbee and Keith Packard 2023
+:copyright: Bdale Garbee and Keith Packard 2024
 :doctype: book
 :numbered:
 :stylesheet: am.css
index fca8e9a06da59ea0b9bf9036f01f6c260dcaa3c1..3871d338ea4c58b9035f6e70e57b830527dd1350 100644 (file)
@@ -1,5 +1,13 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.18.adoc[]
+
+       <<<<
+       :leveloffset: 2
+       include::release-notes-1.9.17.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.16.adoc[]
 
index 3cacba86e292d6387a2f8972014fe1b1f3244721..a91f5908ae221ad2826125af15ff67441877a538 100644 (file)
@@ -7,7 +7,7 @@ endif::[]
 [license]
 == License
 
-Copyright © 2023 Bdale Garbee and Keith Packard
+Copyright © 2024 Bdale Garbee and Keith Packard
 
 This document is released under the terms of the link:http://creativecommons.org/licenses/by-sa/3.0/[Creative Commons ShareAlike 3.0 License]
 
diff --git a/doc/release-notes-1.9.18.inc b/doc/release-notes-1.9.18.inc
new file mode 100644 (file)
index 0000000..3e1544d
--- /dev/null
@@ -0,0 +1,18 @@
+= Release Notes for Version 1.9.18
+include::release-head.adoc[]
+:doctype: article
+
+       Version 1.9.18
+
+       == AltOS
+       
+       * Add support for EasyTimer V2. The new version of this
+          product has on-board storage to log data during flight.
+
+       == AltosUI & TeleGPS application
+
+       * Add support for EasyTimer V2. This includes support for
+          analyizing flight data from the on-board logs.
+
+       * Allow on-board beepers to be disabled by setting the
+         frequency to 0.
index 786f29e3e3a229774482a6ddf63fc380f37f408d..7b98ceafb5f70545f9a9a8f21d029a37aa9a64c0 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.18.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.17.adoc[]
 
index c00e1b3a235455b71eca0d9ea690392a72c1576f..3e02e5e3580ce606915526f40230b6d8fe11e375 100644 (file)
        |-
        |-
        |3.7-12V
+
+       |EasyTimer v2.0
+       |-
+       |24g
+       |-
+       |BMI088
+       |1MB
+       |-
+       |3.7-12V
        endif::easytimer[]
        
        ifdef::easymotor[]
index 3ef5f9bf6a9231064f99631e3c4e5b288d86c64b..f6c75e240ed0bf33fa1135f7968d8561e12a9be8 100644 (file)
@@ -1,5 +1,13 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.18.adoc[]
+
+       <<<<
+       :leveloffset: 2
+       include::release-notes-1.9.17.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.16.adoc[]
 
index 6b986b4223e0631eb334d2651db3427da853a198..746178a044e82c133854536925d862636cf4f0f3 100644 (file)
@@ -151,3 +151,5 @@ $(LINE_TEST_OBJS): $(HEADERS)
 
 clean:
        rm -f $(LCO_TEST_OBJS) ao_font.h ao_logo.h $(FONT_SRCS)
+
+install:
index a045e126672d553b60ced4b0f4753803d0d83770..ac4f9c4bb7043eb908af3a64d70874d3a59e0466 100644 (file)
@@ -83,6 +83,7 @@ distclean:    clean
 
 clean:
        rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx $(PROGNAME)-*.map
+       rm -f $(PROGNAME)-*.dfu
        rm -f ao_product.h
 
 install:
index cbced6ae31435fb870ee8c599c02d88f9d564d5a..7c4e6f0e627283ed08f8d7214d20592ad8f42704 100644 (file)
@@ -303,8 +303,31 @@ ao_real_packet(void)
        return ok;
 }
 
+int
+ao_hello_packet(void)
+{
+       uint8_t message[5] = "hello";
+       uint8_t encode[ENCODE_LEN(sizeof(message))];
+       int encode_len;
+       uint8_t transmit[EXPAND_LEN(sizeof(message))];
+       uint8_t decode[DECODE_LEN(sizeof(message))];
+       int transmit_len;
+       int decode_ok;
+
+       printf("Hello packet test:\n");
+       ao_fec_dump_bytes(message, sizeof(message), "Message");
+       encode_len = ao_fec_encode(message, sizeof(message), encode);
+       ao_fec_dump_bytes(encode, encode_len, "Encode");
+       transmit_len = ao_expand(encode, encode_len, transmit);
+       ao_fec_dump_bytes(transmit, transmit_len, "Transmit");
+       decode_ok = ao_fec_decode(transmit, transmit_len, decode, sizeof(message) + 2, NULL);
+       ao_fec_dump_bytes(decode, sizeof(message) + 2, "Receive");
+       printf("Hello result: %s\n", decode_ok ? "success" : "fail");
+       return decode_ok;
+}
+
 #define EXPECT_DECODE_FAIL     0
-#define EXPECT_CRC_MISMATCH    6386
+#define EXPECT_CRC_MISMATCH    6304
 #define EXPECT_DATA_MISMATCH   0
 #define NOISE_AMOUNT           0x50
 
@@ -336,6 +359,9 @@ main(int argc, char **argv)
        if (!ao_real_packet())
                errors++;
 
+       if (!ao_hello_packet())
+               errors++;
+
        srandom(0);
        for (trial = 0; trial < 100000; trial++) {
 
index b348f702ca707ddee5de949b6bc812152715b008..a4a60b6f267670f07591d1d5f41d5ed56d748d77 100644 (file)
@@ -41,6 +41,7 @@ public class TeleGPSConfigUI
        JLabel                  radio_enable_label;
        JLabel                  radio_10mw_label;
        JLabel                  report_feet_label;
+       JLabel                  gps_receiver_label;
        JLabel                  rate_label;
        JLabel                  aprs_interval_label;
        JLabel                  aprs_ssid_label;
@@ -62,6 +63,7 @@ public class TeleGPSConfigUI
        JRadioButton            radio_enable_value;
        JRadioButton            radio_10mw_value;
        JComboBox<String>       report_feet_value;
+       JComboBox<String>       gps_receiver_value;
        AltosUIRateList         rate_value;
        JComboBox<String>       aprs_interval_value;
        JComboBox<Integer>      aprs_ssid_value;
@@ -200,6 +202,39 @@ public class TeleGPSConfigUI
                        return AltosLib.MISSING;
        }
 
+       void set_gps_receiver_tool_tip() {
+               if (gps_receiver_value.isVisible())
+                       gps_receiver_value.setToolTipText("GPS receiver selection");
+               else
+                       gps_receiver_value.setToolTipText("Only TeleMega with new firmware supports alternate GPS receivers");
+       }
+
+       public void set_gps_receiver(int new_gps_receiver) {
+               System.out.printf("set_gps_receiver %d\n", new_gps_receiver);
+               if (new_gps_receiver != AltosLib.MISSING) {
+                       if (new_gps_receiver >= AltosLib.gps_receiver_names.length)
+                               new_gps_receiver = 0;
+                       if (new_gps_receiver < 0) {
+                               gps_receiver_value.setEnabled(false);
+                               new_gps_receiver = 0;
+                       } else {
+                               gps_receiver_value.setEnabled(true);
+                       }
+                       gps_receiver_value.setSelectedIndex(new_gps_receiver);
+               }
+               gps_receiver_value.setVisible(new_gps_receiver != AltosLib.MISSING);
+               gps_receiver_label.setVisible(new_gps_receiver != AltosLib.MISSING);
+
+               set_gps_receiver_tool_tip();
+       }
+
+       public int gps_receiver() {
+               if (gps_receiver_value.isVisible())
+                       return gps_receiver_value.getSelectedIndex();
+               else
+                       return AltosLib.MISSING;
+       }
+
        void set_rate_tool_tip() {
                if (rate_value.isVisible())
                        rate_value.setToolTipText("Select telemetry baud rate");
@@ -430,6 +465,32 @@ public class TeleGPSConfigUI
                set_report_feet_tool_tip();
                row++;
 
+               /* GPS Receiver */
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = row;
+               c.gridwidth = 4;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               c.ipady = 5;
+               gps_receiver_label = new JLabel("GPS Receiver:");
+               pane.add(gps_receiver_label, c);
+
+               c = new GridBagConstraints();
+               c.gridx = 4; c.gridy = row;
+               c.gridwidth = 4;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               c.ipady = 5;
+               gps_receiver_value = new JComboBox<String>(AltosLib.gps_receiver_names);
+               gps_receiver_value.setEditable(false);
+               gps_receiver_value.addItemListener(this);
+               pane.add(gps_receiver_value, c);
+               set_gps_receiver_tool_tip();
+               row++;
+
                /* Radio 10mW limit */
                c = new GridBagConstraints();
                c.gridx = 0; c.gridy = row;