From 08f0b7419e8e1ebf8a99fd9cd344f04f1c72c836 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 24 Mar 2025 11:17:05 -0700 Subject: [PATCH 01/16] doc: Add doc updates for version 1.9.20 Signed-off-by: Keith Packard --- doc/Makefile.am | 1 + doc/altusmetrum-theme.yml | 2 +- doc/altusmetrum.txt | 2 +- doc/easymini-release-notes.inc | 4 ++++ doc/header.inc | 2 +- doc/release-notes-1.9.20.inc | 15 +++++++++++++++ doc/release-notes.inc | 4 ++++ doc/specs.inc | 2 +- doc/telegps-release-notes.inc | 4 ++++ 9 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 doc/release-notes-1.9.20.inc diff --git a/doc/Makefile.am b/doc/Makefile.am index 65fce5d4..86e05192 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0' endif RELNOTES_INC=\ + release-notes-1.9.20.inc \ release-notes-1.9.19.inc \ release-notes-1.9.18.inc \ release-notes-1.9.17.inc \ diff --git a/doc/altusmetrum-theme.yml b/doc/altusmetrum-theme.yml index c838a524..031a3237 100644 --- a/doc/altusmetrum-theme.yml +++ b/doc/altusmetrum-theme.yml @@ -54,7 +54,7 @@ footer: left: content: '{page-number}' right: - content: '© 2024 Bdale Garbee and Keith Packard. Creative Commons ShareAlike 3.0 License' + content: '© 2025 Bdale Garbee and Keith Packard. Creative Commons ShareAlike 3.0 License' verso: left: content: $footer_recto_right_content diff --git a/doc/altusmetrum.txt b/doc/altusmetrum.txt index 5a33d754..60612523 100644 --- a/doc/altusmetrum.txt +++ b/doc/altusmetrum.txt @@ -5,7 +5,7 @@ Keith Packard ; Bdale Garbee ; Bob Finch; Anth :revdate: 1 Jan 1970 :icons: :icontype: svg -:copyright: Bdale Garbee and Keith Packard 2024 +:copyright: Bdale Garbee and Keith Packard 2025 :doctype: book :numbered: :stylesheet: am.css diff --git a/doc/easymini-release-notes.inc b/doc/easymini-release-notes.inc index 14eba9dc..424fe5f8 100644 --- a/doc/easymini-release-notes.inc +++ b/doc/easymini-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.20.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.19.adoc[] diff --git a/doc/header.inc b/doc/header.inc index a91f5908..029b827b 100644 --- a/doc/header.inc +++ b/doc/header.inc @@ -7,7 +7,7 @@ endif::[] [license] == License -Copyright © 2024 Bdale Garbee and Keith Packard +Copyright © 2025 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.20.inc b/doc/release-notes-1.9.20.inc new file mode 100644 index 00000000..7a72d3a0 --- /dev/null +++ b/doc/release-notes-1.9.20.inc @@ -0,0 +1,15 @@ += Release Notes for Version 1.9.19 +include::release-head.adoc[] +:doctype: article + + Version 1.9.20 + + == AltOS + + * Add support for TeleGPS v4.0 and TeleMega v7.0 + + == AltosUI & TeleGPS application + + * Add support for TeleGPS v4.0 and TeleMega v7.0 + + * Add support for 30V pyro voltage range diff --git a/doc/release-notes.inc b/doc/release-notes.inc index dba3f708..f43b68e5 100644 --- a/doc/release-notes.inc +++ b/doc/release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.20.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.19.adoc[] diff --git a/doc/specs.inc b/doc/specs.inc index 52711d99..b6acbed8 100644 --- a/doc/specs.inc +++ b/doc/specs.inc @@ -154,7 +154,7 @@ |TeleMega v7.0 |MS5607 30km (100k') |ADXL375 200g - |uBlox Max-10Q + |uBlox Max-10S |BMI088 MMC5983 |8MB |40mW diff --git a/doc/telegps-release-notes.inc b/doc/telegps-release-notes.inc index 0448dd95..9a090013 100644 --- a/doc/telegps-release-notes.inc +++ b/doc/telegps-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.20.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.19.adoc[] -- 2.47.2 From cafdfee8d60e5cda5a7bc4b9819e9153fc20dfdc Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 24 Mar 2025 11:17:27 -0700 Subject: [PATCH 02/16] Version 1.9.20 Signed-off-by: Keith Packard --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 5d25136c..ffacca69 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,13 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.9.19) +AC_INIT([altos], 1.9.20) ANDROID_VERSION=37 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -RELEASE_DATE=2024-08-02 +RELEASE_DATE=2025-03-24 AC_SUBST(RELEASE_DATE) DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'` -- 2.47.2 From bcfc96cff97fa0dbcf530a4e86e6bd29446c95f4 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Mon, 24 Mar 2025 13:40:43 -0600 Subject: [PATCH 03/16] update Releasing with learnings from 1.9.20 release --- Releasing | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Releasing b/Releasing index b9217b76..85a6ca57 100644 --- a/Releasing +++ b/Releasing @@ -92,6 +92,9 @@ These are Bdale's notes on how to do a release. git commit -n debian/changelog -m "update changelog for Debian build" + - review debian/patches, all should be obsoleted by a new release, so + take care of any that are there and commit the changes + - if this is a -1 release, then gbp buildpackage --git-no-pristine-tar \ --git-upstream-branch=branch- \ # eg 1.3 -- 2.47.2 From 029c4ad372c9872c0fce514f52f487a9a837066d Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Tue, 25 Mar 2025 10:35:48 -0600 Subject: [PATCH 04/16] fix confusing typo in 1.9.20 release notes --- doc/release-notes-1.9.20.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-notes-1.9.20.inc b/doc/release-notes-1.9.20.inc index 7a72d3a0..fd356aac 100644 --- a/doc/release-notes-1.9.20.inc +++ b/doc/release-notes-1.9.20.inc @@ -1,4 +1,4 @@ -= Release Notes for Version 1.9.19 += Release Notes for Version 1.9.20 include::release-head.adoc[] :doctype: article -- 2.47.2 From 8756a1215a69f7fef40de0e10fcd61980ec3a018 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 23 Apr 2025 09:23:00 -0700 Subject: [PATCH 05/16] altoslib: Handle pressure values which are too low (including negative) The atmospheric model didn't deal with pressures below the minimum value correctly and crashed with accesses outside of the base_altitude array. Instead of returning errors, clamp pressure within the model and return a fixed maximum altitude value of 100km. Signed-off-by: Keith Packard --- altoslib/AltosConvert.java | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 9ffb37c7..a478881e 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -49,21 +49,21 @@ public class AltosConvert { private static final double GRAVITATIONAL_ACCELERATION = -gravity; private static final double AIR_GAS_CONSTANT = 287.053; - private static final double NUMBER_OF_LAYERS = 7; - private static final double MAXIMUM_ALTITUDE = 84852.0; - private static final double MINIMUM_PRESSURE = 0.3734; + private static final double MAXIMUM_ALTITUDE = 100000.0; + private static final double MINIMUM_PRESSURE = 0.023439; private static final double LAYER0_BASE_TEMPERATURE = 288.15; private static final double LAYER0_BASE_PRESSURE = 101325; /* lapse rate and base altitude for each layer in the atmosphere */ private static final double[] lapse_rate = { - -0.0065, 0.0, 0.001, 0.0028, 0.0, -0.0028, -0.002 + -0.0065, 0.0, 0.001, 0.0028, 0.0, -0.0028, -0.002, 0, }; - private static final int[] base_altitude = { - 0, 11000, 20000, 32000, 47000, 51000, 71000 + private static final double[] base_altitude = { + 0, 11000, 20000, 32000, 47000, 51000, 71000, 84852, }; + private static final int NUMBER_OF_LAYERS = base_altitude.length; /* outputs atmospheric pressure associated with the given altitude. * altitudes are measured with respect to the mean sea level */ @@ -128,25 +128,21 @@ public class AltosConvert { double next_base_pressure = LAYER0_BASE_PRESSURE; double altitude; - double base_pressure; - double base_temperature; + double base_pressure = 0; + double base_temperature = 0; double base; /* base for function to determine base pressure of next layer */ double exponent; /* exponent for function to determine base pressure of next layer */ double coefficient; int layer_number; /* identifies layer in the atmosphere */ - int delta_z; /* difference between two altitudes */ + double delta_z; /* difference between two altitudes */ - if (pressure < 0) /* illegal pressure */ - return -1; if (pressure < MINIMUM_PRESSURE) /* FIX ME: use sensor data to improve model */ - return MAXIMUM_ALTITUDE; + pressure = MINIMUM_PRESSURE; /* calculate the base temperature and pressure for the atmospheric layer associated with the inputted pressure. */ - layer_number = -1; - do { - layer_number++; + for (layer_number = 0; layer_number < NUMBER_OF_LAYERS - 1; layer_number++) { base_pressure = next_base_pressure; base_temperature = next_base_temperature; delta_z = base_altitude[layer_number + 1] - base_altitude[layer_number]; @@ -162,8 +158,9 @@ public class AltosConvert { next_base_pressure *= Math.pow(base, exponent); } next_base_temperature += delta_z * lapse_rate[layer_number]; + if (pressure >= next_base_pressure) + break; } - while(layer_number < NUMBER_OF_LAYERS - 1 && pressure < next_base_pressure); /* calculate the altitude associated with the inputted pressure */ if (lapse_rate[layer_number] == 0.0) { @@ -181,6 +178,9 @@ public class AltosConvert { + coefficient * (Math.pow(base, exponent) - 1); } + if (altitude > MAXIMUM_ALTITUDE) + altitude = MAXIMUM_ALTITUDE; + return altitude; } -- 2.47.2 From 84c6ceba62911c5bcb70e6cf530e4d7627546a81 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 23 Apr 2025 11:26:48 -0700 Subject: [PATCH 06/16] altos: Adapt to picolibc 1.8.10 changes Signed-off-by: Keith Packard --- src/kernel/ao_stdio.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/kernel/ao_stdio.c b/src/kernel/ao_stdio.c index 7f74f811..a7c5e252 100644 --- a/src/kernel/ao_stdio.c +++ b/src/kernel/ao_stdio.c @@ -188,8 +188,6 @@ ao_flushc(FILE *ignore) static FILE __stdio = FDEV_SETUP_STREAM(ao_putc, ao_getc, ao_flushc, _FDEV_SETUP_RW); -#ifdef PICOLIBC_STDIO_GLOBALS - #ifdef __strong_reference #define STDIO_ALIAS(x) __strong_reference(stdin, x); #else @@ -199,9 +197,3 @@ static FILE __stdio = FDEV_SETUP_STREAM(ao_putc, ao_getc, ao_flushc, _FDEV_SETUP FILE *const stdin = &__stdio; STDIO_ALIAS(stdout); STDIO_ALIAS(stderr); - -#else - -FILE *const __iob[3] = { &__stdio, &__stdio, &__stdio }; - -#endif -- 2.47.2 From 3d5fa063df2691ecc94b1fbf43098e18db482cbc Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 23 Apr 2025 11:36:24 -0700 Subject: [PATCH 07/16] Version 1.9.20.1 Patch build for baro range and picolibc 1.8.10 Signed-off-by: Keith Packard --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index ffacca69..14bac467 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,13 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.9.20) +AC_INIT([altos], 1.9.20.1) ANDROID_VERSION=37 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -RELEASE_DATE=2025-03-24 +RELEASE_DATE=2025-04-23 AC_SUBST(RELEASE_DATE) DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'` -- 2.47.2 From c0bfcea94160319016ec18d45ebe1e7ac05aafb2 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Mon, 28 Apr 2025 10:26:59 -0600 Subject: [PATCH 08/16] tweaking up the TeleBT turnon scripts for v4.0d --- ao-bringup/turnon_telebt | 97 +----------------------------------- ao-bringup/turnon_telebt_v4 | 96 +++++++++++++++++++++++++++++++++++ ao-bringup/turnon_telebt_v4d | 87 ++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 96 deletions(-) mode change 100755 => 120000 ao-bringup/turnon_telebt create mode 100755 ao-bringup/turnon_telebt_v4 create mode 100755 ao-bringup/turnon_telebt_v4d diff --git a/ao-bringup/turnon_telebt b/ao-bringup/turnon_telebt deleted file mode 100755 index af72bab8..00000000 --- a/ao-bringup/turnon_telebt +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh - -if [ -x /usr/bin/dfu-util ]; then - DFU_UTIL=/usr/bin/dfu-util -else - echo "Can't find dfu-util! 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=4.0 -REPO=~/altusmetrumllc/Binaries -PRODUCT=TeleBT - -echo "$PRODUCT v$VERSION Turn-On and Calibration Program" -echo "Copyright 2017 by Bdale Garbee. Released under GPL v3+" -echo -echo "Expectations:" -echo "\t$PRODUCT v$VERSION attached by USB" -echo "\t\twith coax from UHF to frequency counter" -echo - -case $# in - 1) - SERIAL="$1" - echo "$PRODUCT-$VERSION serial number: $SERIAL" - ;; - 0) - echo -n "$PRODUCT-$VERSION serial number: " - read SERIAL - ;; - *) - echo "Usage: $0 " 1>&2 - exit 1; - ;; -esac - -FLASH_FILE=$REPO/loaders/telebt-v$VERSION-altos-flash-*.bin -ALTOS_FILE=$REPO/telebt-v$VERSION-*.elf - -$DFU_UTIL -a 0 -s 0x08000000:leave -D $FLASH_FILE - -sleep 2 - -$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1 - -sleep 3 - -dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'` - -case "$dev" in -/dev/tty*) - echo "$PRODUCT found on $dev" - ;; -*) - echo 'No '"$PRODUCT"'-v'"$VERSION"' found' - exit 1 - ;; -esac - -CALFILE=cal-$SERIAL.txt - -../ao-tools/ao-cal-freq/ao-cal-freq --nosave --output=$CALFILE --tty=$dev - -CAL_VALUE=`cat $CALFILE` -echo $SERIAL","$CAL_VALUE >> cal_values -echo "Reflashing with calibration: $CAL_VALUE" -$USBLOAD --cal=$CAL_VALUE --tty=$dev $ALTOS_FILE || exit 1 - -echo -n "checking BlueTooth functionality... " -btdev=`hcitool scan | awk -F \- '/TeleBT/ { print $2 }'` -if [ "$btdev" = "$SERIAL" ]; then - echo "working!" -else - echo "device not found" - exit 1 -fi - -echo -n "checking BTLE functionality... " -btdev=`sudo timeout -s SIGINT 5s hcitool lescan | awk -F \- '/TeleBT/ { print $2 }' | head -n 1` -if [ "$btdev" = "$SERIAL" ]; then - echo "working!" -else - echo "device not found" - exit 1 -fi - -echo "$PRODUCT-v$VERSION $SERIAL is ready to ship" - -exit $? diff --git a/ao-bringup/turnon_telebt b/ao-bringup/turnon_telebt new file mode 120000 index 00000000..b5409df9 --- /dev/null +++ b/ao-bringup/turnon_telebt @@ -0,0 +1 @@ +turnon_telebt_v4d \ No newline at end of file diff --git a/ao-bringup/turnon_telebt_v4 b/ao-bringup/turnon_telebt_v4 new file mode 100755 index 00000000..af72bab8 --- /dev/null +++ b/ao-bringup/turnon_telebt_v4 @@ -0,0 +1,96 @@ +#!/bin/sh + +if [ -x /usr/bin/dfu-util ]; then + DFU_UTIL=/usr/bin/dfu-util +else + echo "Can't find dfu-util! 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=4.0 +REPO=~/altusmetrumllc/Binaries +PRODUCT=TeleBT + +echo "$PRODUCT v$VERSION Turn-On and Calibration Program" +echo "Copyright 2017 by Bdale Garbee. Released under GPL v3+" +echo +echo "Expectations:" +echo "\t$PRODUCT v$VERSION attached by USB" +echo "\t\twith coax from UHF to frequency counter" +echo + +case $# in + 1) + SERIAL="$1" + echo "$PRODUCT-$VERSION serial number: $SERIAL" + ;; + 0) + echo -n "$PRODUCT-$VERSION serial number: " + read SERIAL + ;; + *) + echo "Usage: $0 " 1>&2 + exit 1; + ;; +esac + +FLASH_FILE=$REPO/loaders/telebt-v$VERSION-altos-flash-*.bin +ALTOS_FILE=$REPO/telebt-v$VERSION-*.elf + +$DFU_UTIL -a 0 -s 0x08000000:leave -D $FLASH_FILE + +sleep 2 + +$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1 + +sleep 3 + +dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'` + +case "$dev" in +/dev/tty*) + echo "$PRODUCT found on $dev" + ;; +*) + echo 'No '"$PRODUCT"'-v'"$VERSION"' found' + exit 1 + ;; +esac + +CALFILE=cal-$SERIAL.txt + +../ao-tools/ao-cal-freq/ao-cal-freq --nosave --output=$CALFILE --tty=$dev + +CAL_VALUE=`cat $CALFILE` +echo $SERIAL","$CAL_VALUE >> cal_values +echo "Reflashing with calibration: $CAL_VALUE" +$USBLOAD --cal=$CAL_VALUE --tty=$dev $ALTOS_FILE || exit 1 + +echo -n "checking BlueTooth functionality... " +btdev=`hcitool scan | awk -F \- '/TeleBT/ { print $2 }'` +if [ "$btdev" = "$SERIAL" ]; then + echo "working!" +else + echo "device not found" + exit 1 +fi + +echo -n "checking BTLE functionality... " +btdev=`sudo timeout -s SIGINT 5s hcitool lescan | awk -F \- '/TeleBT/ { print $2 }' | head -n 1` +if [ "$btdev" = "$SERIAL" ]; then + echo "working!" +else + echo "device not found" + exit 1 +fi + +echo "$PRODUCT-v$VERSION $SERIAL is ready to ship" + +exit $? diff --git a/ao-bringup/turnon_telebt_v4d b/ao-bringup/turnon_telebt_v4d new file mode 100755 index 00000000..7f09b57b --- /dev/null +++ b/ao-bringup/turnon_telebt_v4d @@ -0,0 +1,87 @@ +#!/bin/sh +# +# the difference with v4.0d is that the bootloader should already +# have been flashed at Seeed, so don't try to re-flash that part + +if [ -x /usr/bin/ao-usbload ]; then + USBLOAD=/usr/bin/ao-usbload +else + echo "Can't find ao-usbload! Aborting." + exit 1 +fi + +VERSION=4.0 +REPO=~/altusmetrumllc/Binaries +PRODUCT=TeleBT + +echo "$PRODUCT v$VERSION Turn-On and Calibration Program" +echo "Copyright 2025 by Bdale Garbee. Released under GPL v3" +echo +echo "Expectations:" +echo "\t$PRODUCT v$VERSION attached by USB" +echo "\t\twith coax from UHF to frequency counter" +echo + +case $# in + 1) + SERIAL="$1" + echo "$PRODUCT-$VERSION serial number: $SERIAL" + ;; + 0) + echo -n "$PRODUCT-$VERSION serial number: " + read SERIAL + ;; + *) + echo "Usage: $0 " 1>&2 + exit 1; + ;; +esac + +ALTOS_FILE=$REPO/telebt-v$VERSION-*.elf + +$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1 + +sleep 3 + +dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'` + +case "$dev" in +/dev/tty*) + echo "$PRODUCT found on $dev" + ;; +*) + echo 'No '"$PRODUCT"'-v'"$VERSION"' found' + exit 1 + ;; +esac + +CALFILE=cal-$SERIAL.txt + +../ao-tools/ao-cal-freq/ao-cal-freq --nosave --output=$CALFILE --tty=$dev + +CAL_VALUE=`cat $CALFILE` +echo $SERIAL","$CAL_VALUE >> cal_values +echo "Reflashing with calibration: $CAL_VALUE" +$USBLOAD --cal=$CAL_VALUE --tty=$dev $ALTOS_FILE || exit 1 + +echo -n "checking BlueTooth functionality... " +btdev=`hcitool scan | awk -F \- '/TeleBT/ { print $2 }'` +if [ "$btdev" = "$SERIAL" ]; then + echo "working!" +else + echo "device not found" + exit 1 +fi + +echo -n "checking BTLE functionality... " +btdev=`sudo timeout -s SIGINT 5s hcitool lescan | awk -F \- '/TeleBT/ { print $2 }' | head -n 1` +if [ "$btdev" = "$SERIAL" ]; then + echo "working!" +else + echo "device not found" + exit 1 +fi + +echo "$PRODUCT-v$VERSION $SERIAL is ready to ship" + +exit $? -- 2.47.2 From 277b6bea4e73aedb1ef052b3b131e93021f547e7 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 28 Apr 2025 12:38:16 -0700 Subject: [PATCH 09/16] altos: Check full name in rn4678 driver Factory test code uses serial number 0, leaving the BT module name set wrong. Signed-off-by: Keith Packard --- src/drivers/ao_rn4678.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/drivers/ao_rn4678.c b/src/drivers/ao_rn4678.c index a7fb07d3..f3c05e82 100644 --- a/src/drivers/ao_rn4678.c +++ b/src/drivers/ao_rn4678.c @@ -308,19 +308,10 @@ ao_rn_wait_status(void) } static int -ao_rn_set_name(void) +ao_rn_set_name(char *name) { - char sn[8]; - char *s = sn + 8; - int n; - // ao_rn_dbg("set name...\n"); - *--s = '\0'; - n = ao_serial_number; - do { - *--s = (uint8_t) ('0' + n % 10); - } while (n /= 10); - ao_rn_send_cmd(AO_RN_SET_NAME_CMD "TeleBT-", s); + ao_rn_send_cmd(AO_RN_SET_NAME_CMD, name); return ao_rn_wait_status(); } @@ -379,7 +370,7 @@ static void ao_rn(void) { int status = AO_RN_ERROR; - char name[17]; + char have_name[17], want_name[17]; int i; ao_rn_dbg("ao_rn top\n"); @@ -418,15 +409,16 @@ ao_rn(void) /* Check to see if the name is already set and assume * that the device is ready to go */ - status = ao_rn_get_name(name, sizeof (name)); + status = ao_rn_get_name(have_name, sizeof (have_name)); if (status != AO_RN_OK) { ao_rn_dbg("get name failed\n"); - status = ao_rn_get_name(name, sizeof (name)); + status = ao_rn_get_name(have_name, sizeof (have_name)); if (status != AO_RN_OK) continue; } + snprintf(want_name, sizeof(want_name), "TeleBT-%u", ao_serial_number); - if (strncmp(name, "TeleBT-", 7) == 0) { + if (strcmp(have_name, want_name) == 0) { ao_rn_dbg("name is set\n"); status = AO_RN_OK; break; @@ -455,7 +447,7 @@ ao_rn(void) /* Finally, set the name. Doing this last makes it possible to check * if the whole sequence has been done */ - if (ao_rn_set_name() != AO_RN_OK) { + if (ao_rn_set_name(want_name) != AO_RN_OK) { ao_rn_dbg("set name failed\n"); continue; } -- 2.47.2 From 079e7c2e5c4830c168a88457a33d81f2151ad733 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 28 Apr 2025 12:49:21 -0700 Subject: [PATCH 10/16] doc: Add 1.9.21 release notes Signed-off-by: Keith Packard --- doc/Makefile.am | 1 + doc/easymini-release-notes.inc | 4 ++++ doc/release-notes-1.9.21.inc | 15 +++++++++++++++ doc/release-notes.inc | 4 ++++ doc/telegps-release-notes.inc | 4 ++++ 5 files changed, 28 insertions(+) create mode 100644 doc/release-notes-1.9.21.inc diff --git a/doc/Makefile.am b/doc/Makefile.am index 86e05192..398bfb78 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0' endif RELNOTES_INC=\ + release-notes-1.9.21.inc \ release-notes-1.9.20.inc \ release-notes-1.9.19.inc \ release-notes-1.9.18.inc \ diff --git a/doc/easymini-release-notes.inc b/doc/easymini-release-notes.inc index 424fe5f8..56e92c8e 100644 --- a/doc/easymini-release-notes.inc +++ b/doc/easymini-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.21.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.20.adoc[] diff --git a/doc/release-notes-1.9.21.inc b/doc/release-notes-1.9.21.inc new file mode 100644 index 00000000..f2d45e7c --- /dev/null +++ b/doc/release-notes-1.9.21.inc @@ -0,0 +1,15 @@ += Release Notes for Version 1.9.21 +include::release-head.adoc[] +:doctype: article + + Version 1.9.21 + + == AltOS + + * Add support for TeleBT v4.0 factory test. + + * Support Picolibc 1.8.10 + + == AltosUI & TeleGPS application + + * Support pressure values below sensor range. diff --git a/doc/release-notes.inc b/doc/release-notes.inc index f43b68e5..f5d833ac 100644 --- a/doc/release-notes.inc +++ b/doc/release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.21.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.20.adoc[] diff --git a/doc/telegps-release-notes.inc b/doc/telegps-release-notes.inc index 9a090013..92ccec82 100644 --- a/doc/telegps-release-notes.inc +++ b/doc/telegps-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.21.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.20.adoc[] -- 2.47.2 From 005d1ee0b7cbc2c46615a942e34aa1d385426f58 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 28 Apr 2025 12:52:01 -0700 Subject: [PATCH 11/16] Version 1.9.21 Signed-off-by: Keith Packard --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 14bac467..f86cbfdc 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,13 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.9.20.1) +AC_INIT([altos], 1.9.21) ANDROID_VERSION=37 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -RELEASE_DATE=2025-04-23 +RELEASE_DATE=2025-04-28 AC_SUBST(RELEASE_DATE) DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'` -- 2.47.2 From 62a911bfed5343c0fe73aeef629cd23b95d3f0db Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 25 May 2025 17:32:30 -0700 Subject: [PATCH 12/16] altos: Add telemetrum v4.0 seeed test firmware Signed-off-by: Keith Packard --- src/telemetrum-v4.0-seeed/.gitignore | 2 + src/telemetrum-v4.0-seeed/Makefile | 132 ++++++++ src/telemetrum-v4.0-seeed/ao_pins.h | 283 ++++++++++++++++++ .../ao_telemetrum_seeed.c | 174 +++++++++++ .../flash-loader/Makefile | 8 + .../flash-loader/ao_pins.h | 40 +++ 6 files changed, 639 insertions(+) create mode 100644 src/telemetrum-v4.0-seeed/.gitignore create mode 100644 src/telemetrum-v4.0-seeed/Makefile create mode 100644 src/telemetrum-v4.0-seeed/ao_pins.h create mode 100644 src/telemetrum-v4.0-seeed/ao_telemetrum_seeed.c create mode 100644 src/telemetrum-v4.0-seeed/flash-loader/Makefile create mode 100644 src/telemetrum-v4.0-seeed/flash-loader/ao_pins.h diff --git a/src/telemetrum-v4.0-seeed/.gitignore b/src/telemetrum-v4.0-seeed/.gitignore new file mode 100644 index 00000000..35ce24d4 --- /dev/null +++ b/src/telemetrum-v4.0-seeed/.gitignore @@ -0,0 +1,2 @@ +ao_product.h +telemetrum-*.elf diff --git a/src/telemetrum-v4.0-seeed/Makefile b/src/telemetrum-v4.0-seeed/Makefile new file mode 100644 index 00000000..939c61ea --- /dev/null +++ b/src/telemetrum-v4.0-seeed/Makefile @@ -0,0 +1,132 @@ +# +# AltOS build +# +# + +include ../samd21/Makefile.defs + +INC = \ + ao.h \ + ao_arch.h \ + ao_arch_funcs.h \ + ao_boot.h \ + ao_companion.h \ + ao_data.h \ + ao_sample.h \ + ao_pins.h \ + altitude-pa.h \ + ao_kalman.h \ + ao_product.h \ + ao_ms5607.h \ + ao_adxl375.h \ + ao_cc1200_CC1200.h \ + ao_task.h \ + ao_whiten.h \ + samd21.h \ + Makefile + +# SAMD21G17D + +SAMD21_ROM=128 +SAMD21_RAM=16 + +#PROFILE=ao_profile.c +#PROFILE_DEF=-DAO_PROFILE=1 + +#SAMPLE_PROFILE=ao_sample_profile.c \ +# ao_sample_profile_timer.c +#SAMPLE_PROFILE_DEF=-DHAS_SAMPLE_PROFILE=1 + +#STACK_GUARD=ao_mpu_stm.c +#STACK_GUARD_DEF=-DHAS_STACK_GUARD=1 + +ALTOS_SRC = \ + ao_boot_chain.c \ + ao_interrupt.c \ + ao_product.c \ + ao_romconfig.c \ + ao_cmd.c \ + ao_config.c \ + ao_task.c \ + ao_led.c \ + ao_stdio.c \ + ao_panic.c \ + ao_timer.c \ + ao_mutex.c \ + ao_serial_samd21.c \ + ao_gps_ublox.c \ + ao_gps_show.c \ + ao_gps_report_metrum.c \ + ao_ignite.c \ + ao_freq.c \ + ao_dma_samd21.c \ + ao_spi_samd21.c \ + ao_cc1200.c \ + ao_data.c \ + ao_ms5607.c \ + ao_adxl375.c \ + ao_adc_samd21.c \ + ao_beep_samd21.c \ + ao_storage.c \ + ao_m25.c \ + ao_usb_samd21.c \ + ao_exti_samd21.c \ + ao_report.c \ + ao_convert_pa.c \ + ao_convert_volt.c \ + ao_log.c \ + ao_log_metrum.c \ + ao_sample.c \ + ao_kalman.c \ + ao_flight.c \ + ao_telemetry.c \ + ao_packet_slave.c \ + ao_packet.c \ + ao_companion.c \ + ao_aprs.c \ + $(PROFILE) \ + $(SAMPLE_PROFILE) \ + $(STACK_GUARD) + +PRODUCT=TeleMetrum-v4.0 +PRODUCT_DEF=-DTELEMETRUM_V_4_0 +IDPRODUCT=0x000b + +CFLAGS = $(PRODUCT_DEF) $(SAMD21_CFLAGS) $(PROFILE_DEF) $(SAMPLE_PROFILE_DEF) $(STACK_GUARD_DEF) + +PROGNAME=telemetrum-v4.0 +PROG=$(PROGNAME)-$(VERSION).elf +HEX=$(PROGNAME)-$(VERSION).ihx +FLASH_PROG=flash-loader/$(PROGNAME)-altos-flash-$(VERSION).elf +BOTH_HEX=$(PROGNAME)-combined-$(VERSION).ihx + +SRC=$(ALTOS_SRC) ao_telemetrum_seeed.c +OBJ=$(SRC:.c=.o) + +all: $(PROG) $(HEX) $(BOTH_HEX) + +$(PROG): Makefile $(OBJ) + $(call quiet,CC) $(LDFLAGS) -o $(PROG) $(OBJ) $(LIBS) + +$(BOTH_HEX): $(PROG) $(FLASH_PROG) + ../../ao-tools/ao-elftohex/ao-elftohex -n --output=$@ $(FLASH_PROG) $(PROG) + +$(FLASH_PROG): FRC + +cd flash-loader && make + +FRC: + +$(OBJ): $(INC) + +load: $(PROG) + stm-load $(PROG) + +distclean: clean + +clean: + rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx $(PROGNAME)-*.map + rm -f ao_product.h + +install: + +uninstall: diff --git a/src/telemetrum-v4.0-seeed/ao_pins.h b/src/telemetrum-v4.0-seeed/ao_pins.h new file mode 100644 index 00000000..164b1e59 --- /dev/null +++ b/src/telemetrum-v4.0-seeed/ao_pins.h @@ -0,0 +1,283 @@ +/* + * Copyright © 2022 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef _AO_PINS_H_ +#define _AO_PINS_H_ + +#define AO_XOSC 1 +#define AO_XOSC_FREQ 16000000 +#define AO_XOSC_DIV 256 +#define AO_XOSC_MUL 768 + +#define AO_AHB_PRESCALER 1 +#define AO_APBA_PRESCALER 1 + +#define HAS_SERIAL_1 1 +#define USE_SERIAL_1_STDIN 0 + +#define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX (512 * 1024) +#define AO_CONFIG_DEFAULT_ACCEL_PLUS_G -20 +#define AO_CONFIG_DEFAULT_ACCEL_MINUS_G 20 +#define AO_CONFIG_MAX_SIZE 1024 +#define LOG_ERASE_MARK 0x55 +#define LOG_MAX_ERASE 128 +#define AO_LOG_FORMAT AO_LOG_FORMAT_TELEMETRUM + +#define HAS_EEPROM 1 +#define USE_INTERNAL_FLASH 0 +#define USE_EEPROM_CONFIG 0 +#define USE_STORAGE_CONFIG 1 +#define HAS_USB 1 +#define USE_USB_STDIO 1 +#define HAS_BATTERY_REPORT 1 +#define BEEPER_CHANNEL 4 +#define BEEPER_TIMER 3 +#define BEEPER_PORT (&samd21_port_a) +#define BEEPER_PIN 16 +#define HAS_RADIO 1 +#define HAS_RADIO_10MW 1 +#define HAS_TELEMETRY 1 +#define HAS_APRS 1 +#define HAS_COMPANION 1 + +#define HAS_SPI_0 1 +#define HAS_SPI_3 1 +#define HAS_SPI_5 1 + +#define PACKET_HAS_SLAVE 1 +#define PACKET_HAS_MASTER 0 + +#define LOW_LEVEL_DEBUG 0 + +#define HAS_LED 1 +#define LED_0_PORT (&samd21_port_b) +#define LED_0_PIN 10 +#define LED_1_PORT (&samd21_port_b) +#define LED_1_PIN 11 +#define AO_LED_RED (1 << 0) +#define AO_LED_GREEN (1 << 1) + +#define HAS_GPS 1 +#define HAS_FLIGHT 1 +#define HAS_ADC 1 +#define HAS_ADC_TEMP 1 +#define HAS_LOG 1 + +/* + * Beeper + */ + +#define HAS_BEEP 1 +/* Beep on PA16 function E TCC2.0 */ + +#define AO_BEEP_TCC (&samd21_tcc2) +#define AO_BEEP_TCC_APBC_MASK SAMD21_PM_APBCMASK_TCC2 +#define AO_BEEP_PORT (&samd21_port_a) +#define AO_BEEP_PIN (16) +#define AO_BEEP_FUNC SAMD21_PORT_PMUX_FUNC_E + +/* + * Igniter + */ + +#define HAS_IGNITE 1 +#define HAS_IGNITE_REPORT 1 + +#define AO_SENSE_DROGUE(p) ((p)->adc.sense_a) +#define AO_SENSE_MAIN(p) ((p)->adc.sense_m) +#define AO_IGNITER_CLOSED 400 +#define AO_IGNITER_OPEN 60 + +/* Drogue */ +#define AO_IGNITER_DROGUE_PORT (&samd21_port_a) +#define AO_IGNITER_DROGUE_PIN 19 + +/* Main */ +#define AO_IGNITER_MAIN_PORT (&samd21_port_a) +#define AO_IGNITER_MAIN_PIN 18 + +/* + * ADC + */ +#define AO_DATA_RING 32 +#define AO_ADC_NUM_SENSE 2 + +struct ao_adc { + int16_t sense_a; + int16_t sense_m; + int16_t v_batt; + int16_t temp; +}; + +#define AO_ADC_DUMP(p) \ + printf("tick: %5lu drogue: %5d main: %5d batt: %5d\n", \ + (p)->tick, \ + (p)->adc.sense_a, (p)->adc.sense_m, \ + (p)->adc.v_batt); + +#define AO_ADC_SENSE_DROGUE 18 +#define AO_ADC_SENSE_DROGUE_PORT (&samd21_port_a) +#define AO_ADC_SENSE_DROGUE_PIN 10 + +#define AO_ADC_SENSE_MAIN 19 +#define AO_ADC_SENSE_MAIN_PORT (&samd21_port_a) +#define AO_ADC_SENSE_MAIN_PIN 11 + +#define AO_ADC_V_BATT 17 +#define AO_ADC_V_BATT_PORT (&samd21_port_a) +#define AO_ADC_V_BATT_PIN 9 + +#define AO_ADC_TEMP SAMD21_ADC_INPUTCTRL_MUXPOS_TEMP + +#define AO_NUM_ADC_PIN 3 + +#define AO_ADC_PIN0_PORT AO_ADC_SENSE_DROGUE_PORT +#define AO_ADC_PIN0_PIN AO_ADC_SENSE_DROGUE_PIN +#define AO_ADC_PIN1_PORT AO_ADC_SENSE_MAIN_PORT +#define AO_ADC_PIN1_PIN AO_ADC_SENSE_MAIN_PIN +#define AO_ADC_PIN2_PORT AO_ADC_V_BATT_PORT +#define AO_ADC_PIN2_PIN AO_ADC_V_BATT_PIN + +#define AO_NUM_ADC (AO_NUM_ADC_PIN + 1) + +#define AO_ADC_SQ0 AO_ADC_SENSE_DROGUE +#define AO_ADC_SQ1 AO_ADC_SENSE_MAIN +#define AO_ADC_SQ2 AO_ADC_V_BATT +#define AO_ADC_SQ3 AO_ADC_TEMP + +/* + * Voltage divider on ADC battery sampler + */ +#define AO_BATTERY_DIV_PLUS 56 /* 5.6k */ +#define AO_BATTERY_DIV_MINUS 100 /* 10k */ + +/* + * Voltage divider on ADC igniter samplers + */ +#define AO_IGNITE_DIV_PLUS 100 /* 100k */ +#define AO_IGNITE_DIV_MINUS 27 /* 27k */ + +/* + * ADC reference in decivolts + */ +#define AO_ADC_REFERENCE_DV 33 + +/* + * GPS + */ + +#define AO_SERIAL_SPEED_UBLOX AO_SERIAL_SPEED_9600 +#define AO_UBLOX_VERSION 10 + +#define HAS_SERIAL_1 1 +#define USE_SERIAL_1_STDIN 0 +#define SERIAL_1_PA00_PA01 1 + +#define ao_gps_getchar ao_serial1_getchar +#define ao_gps_putchar ao_serial1_putchar +#define ao_gps_set_speed ao_serial1_set_speed +#define ao_gps_fifo (ao_samd21_usart1.rx_fifo) + +/* + * Pressure sensor settings + */ +#define HAS_MS5607 1 +#define HAS_MS5611 0 +#define AO_MS5607_PRIVATE_PINS 0 +#define AO_MS5607_CS_PORT (&samd21_port_a) +#define AO_MS5607_CS_PIN 21 +#define AO_MS5607_MISO_PORT (&samd21_port_a) +#define AO_MS5607_MISO_PIN 20 +#define AO_MS5607_SPI_INDEX AO_SPI_3_PA22_PA23_PA20 + +/* + * SPI Flash memory + */ + +#define M25_MAX_CHIPS 1 +#define AO_M25_SPI_CS_PORT (&samd21_port_a) +#define AO_M25_SPI_CS_MASK (1 << 27) +#define AO_M25_SPI_BUS AO_SPI_5_PB22_PB23_PB03 + + +/* + * Radio (cc1200) + */ + +/* gets pretty close to 434.550 */ + +#define AO_RADIO_CAL_DEFAULT 5695733 + +#define AO_CC1200_SPI_CS_PORT (&samd21_port_a) +#define AO_CC1200_SPI_CS_PIN 7 +#define AO_CC1200_SPI_BUS AO_SPI_5_PB22_PB23_PB03 + +#define AO_CC1200_INT_PORT (&samd21_port_b) +#define AO_CC1200_INT_PIN (8) +#define AO_CC1200_MCU_WAKEUP_PORT (&samd21_port_b) +#define AO_CC1200_MCU_WAKEUP_PIN (9) + +#define AO_CC1200_INT_GPIO 2 +#define AO_CC1200_INT_GPIO_IOCFG CC1200_IOCFG2 + +#define AO_CC1200_MARC_GPIO 3 +#define AO_CC1200_MARC_GPIO_IOCFG CC1200_IOCFG3 + +#define HAS_BOOT_RADIO 0 + +#define HAS_HIGHG_ACCEL 1 + +/* ADXL375 */ + +#define HAS_ADXL375 1 +#define AO_ADXL375_CS_PORT (&samd21_port_a) +#define AO_ADXL375_CS_PIN 8 +#define AO_ADXL375_SPI_INDEX (AO_SPI_0_PA04_PA05_PA06 | AO_SPI_MODE_3) + +#define AO_ADXL375_AXIS x +#define AO_ADXL375_INVERT 1 + +#define NUM_CMDS 16 + +/* + * Companion + */ + +#define AO_COMPANION_CS_PORT (&samd21_port_a) +#define AO_COMPANION_CS_PIN (13) +#define AO_COMPANION_SPI_BUS AO_SPI_5_PB22_PB23_PB03 + +/* + * Monitor + */ + +#define HAS_MONITOR 0 +#define LEGACY_MONITOR 0 +#define HAS_MONITOR_PUT 1 +#define AO_MONITOR_LED 0 +#define HAS_RSSI 0 + +/* + * Profiling Viterbi decoding + */ + +#ifndef AO_PROFILE +#define AO_PROFILE 0 +#endif + +#endif /* _AO_PINS_H_ */ diff --git a/src/telemetrum-v4.0-seeed/ao_telemetrum_seeed.c b/src/telemetrum-v4.0-seeed/ao_telemetrum_seeed.c new file mode 100644 index 00000000..b448edab --- /dev/null +++ b/src/telemetrum-v4.0-seeed/ao_telemetrum_seeed.c @@ -0,0 +1,174 @@ +/* + * Copyright © 2016 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#if HAS_SAMPLE_PROFILE +#include +#include +#endif +#if HAS_STACK_GUARD +#include +#endif +#include + +#define AO_FAIL_FLASH 1 +#define AO_FAIL_ADC 2 +#define AO_FAIL_GPS 3 +#define AO_FAIL_RADIO 4 +#define AO_FAIL_ACCEL 5 +#define AO_FAIL_BARO 6 +#define AO_FAIL_RANGE 7 + +static void +ao_validate(void) +{ + static struct ao_telemetry_location gps_data; + static struct ao_telemetry_satellite gps_tracking_data; + uint8_t new; + uint8_t data; + int16_t decivolt; + AO_TICK_TYPE gps_start; + + ao_config_get(); + /* Check the flash part */ + ao_storage_setup(); + if (ao_storage_total != 8 * 1024 * 1024) + ao_panic(AO_FAIL_FLASH); + + /* Check the battery voltage */ + data = ao_data_head; + do { + ao_sleep((void *) &ao_data_head); + } while (ao_data_head == data); + decivolt = ao_battery_decivolt(ao_data_ring[data].adc.v_batt); + if (decivolt < 35 || 55 < decivolt) + ao_panic(AO_FAIL_ADC); + + /* Check to make sure GPS data is being received */ + gps_start = ao_time(); + for (;;) { + while ((new = ao_gps_new) == 0) + ao_sleep_for(&ao_gps_new, AO_SEC_TO_TICKS(1)); + ao_mutex_get(&ao_gps_mutex); + if (new & AO_GPS_NEW_DATA) + memcpy(&gps_data, &ao_gps_data, sizeof (ao_gps_data)); + if (new & AO_GPS_NEW_TRACKING) + memcpy(&gps_tracking_data, &ao_gps_tracking_data, sizeof (ao_gps_tracking_data)); + ao_gps_new = 0; + ao_mutex_put(&ao_gps_mutex); + + if (new & AO_GPS_NEW_DATA) { + if (gps_data.flags & AO_GPS_RUNNING) + break; + } + if ((AO_TICK_SIGNED) (ao_time() - gps_start) > (AO_TICK_SIGNED) AO_SEC_TO_TICKS(10)) + ao_panic(AO_FAIL_GPS); + } + + if (!ao_radio_post()) + ao_panic(AO_FAIL_RADIO); + + ao_sample_init(); + ao_flight_state = ao_flight_startup; + for (;;) { + + /* + * Process ADC samples, just looping + * until the sensors are calibrated. + */ + if (ao_sample()) + break; + } + + if (ao_sensor_errors & AO_DATA_MS5607) + ao_panic(AO_FAIL_BARO); + if (ao_sensor_errors & AO_DATA_ADXL375) + ao_panic(AO_FAIL_ACCEL); + if (ao_sensor_errors) + ao_panic(AO_FAIL_RANGE); + + /* Check ground accel value to make sure it's somewhat valid */ + if (ao_ground_accel < (accel_t) AO_CONFIG_DEFAULT_ACCEL_PLUS_G - ACCEL_NOSE_UP || + ao_ground_accel > (accel_t) AO_CONFIG_DEFAULT_ACCEL_MINUS_G + ACCEL_NOSE_UP) { + ao_panic(AO_FAIL_ACCEL); + } + if (ao_ground_height < -1000 || ao_ground_height > 7000) + ao_panic(AO_FAIL_BARO); + + ao_led_on(AO_LED_GREEN); + ao_beep_for(AO_BEEP_MID_DEFAULT, AO_MS_TO_TICKS(100)); + + ao_exit(); +} + +struct ao_task ao_validate_task; + +int +main(void) +{ + ao_clock_init(); + +#if HAS_STACK_GUARD + ao_mpu_init(); +#endif + + ao_task_init(); + ao_serial_init(); + ao_led_init(); + ao_led_off(LEDS_AVAILABLE); + ao_timer_init(); + + ao_spi_init(); + ao_dma_init(); + ao_exti_init(); + + ao_adc_init(); + ao_beep_init(); + ao_cmd_init(); + + ao_ms5607_init(); + ao_adxl375_init(); + + ao_storage_init(); + + ao_usb_init(); + ao_gps_init(); + + ao_radio_init(); + ao_igniter_init(); + + ao_config_init(); +#if AO_PROFILE + ao_profile_init(); +#endif +#if HAS_SAMPLE_PROFILE + ao_sample_profile_init(); +#endif + + ao_add_task(&ao_validate_task, ao_validate, "validate"); + + ao_start_scheduler(); + return 0; +} diff --git a/src/telemetrum-v4.0-seeed/flash-loader/Makefile b/src/telemetrum-v4.0-seeed/flash-loader/Makefile new file mode 100644 index 00000000..5fabbc08 --- /dev/null +++ b/src/telemetrum-v4.0-seeed/flash-loader/Makefile @@ -0,0 +1,8 @@ +# +# AltOS flash loader build +# +# + +TOPDIR=../.. +HARDWARE=telemetrum-v4.0 +include $(TOPDIR)/samd21/Makefile-flash.defs diff --git a/src/telemetrum-v4.0-seeed/flash-loader/ao_pins.h b/src/telemetrum-v4.0-seeed/flash-loader/ao_pins.h new file mode 100644 index 00000000..5653c24c --- /dev/null +++ b/src/telemetrum-v4.0-seeed/flash-loader/ao_pins.h @@ -0,0 +1,40 @@ +/* + * Copyright © 2022 Bdale Garbee + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef _AO_PINS_H_ +#define _AO_PINS_H_ + +#include + +/* cs_comp_0 (companion port pin 6) to gnd for boot loader mode */ + +#define AO_BOOT_PIN 1 +#define AO_BOOT_APPLICATION_GPIO (samd21_port_a) +#define AO_BOOT_APPLICATION_PIN 13 +#define AO_BOOT_APPLICATION_VALUE 1 +#define AO_BOOT_APPLICATION_MODE AO_MODE_PULL_UP + +/* USB */ +#define HAS_USB 1 + +#define AO_XOSC 1 +#define AO_XOSC_FREQ 16000000 +#define AO_XOSC_DIV 256 +#define AO_XOSC_MUL 768 + +#endif /* _AO_PINS_H_ */ -- 2.47.2 From 4c7eebbd7f64c9c466a229aff4fbecb42c192f57 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 31 May 2025 16:20:05 -0700 Subject: [PATCH 13/16] altos: fix telemetrum seeed test payload names Signed-off-by: Keith Packard --- src/telemetrum-v4.0-seeed/Makefile | 2 +- src/telemetrum-v4.0-seeed/flash-loader/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/telemetrum-v4.0-seeed/Makefile b/src/telemetrum-v4.0-seeed/Makefile index 939c61ea..540d023e 100644 --- a/src/telemetrum-v4.0-seeed/Makefile +++ b/src/telemetrum-v4.0-seeed/Makefile @@ -94,7 +94,7 @@ IDPRODUCT=0x000b CFLAGS = $(PRODUCT_DEF) $(SAMD21_CFLAGS) $(PROFILE_DEF) $(SAMPLE_PROFILE_DEF) $(STACK_GUARD_DEF) -PROGNAME=telemetrum-v4.0 +PROGNAME=telemetrum-v4.0-seeed PROG=$(PROGNAME)-$(VERSION).elf HEX=$(PROGNAME)-$(VERSION).ihx FLASH_PROG=flash-loader/$(PROGNAME)-altos-flash-$(VERSION).elf diff --git a/src/telemetrum-v4.0-seeed/flash-loader/Makefile b/src/telemetrum-v4.0-seeed/flash-loader/Makefile index 5fabbc08..46ca8cf9 100644 --- a/src/telemetrum-v4.0-seeed/flash-loader/Makefile +++ b/src/telemetrum-v4.0-seeed/flash-loader/Makefile @@ -4,5 +4,5 @@ # TOPDIR=../.. -HARDWARE=telemetrum-v4.0 +HARDWARE=telemetrum-v4.0-seeed include $(TOPDIR)/samd21/Makefile-flash.defs -- 2.47.2 From 78944aad76a7ff52b0be691c0e47cc691f86df11 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 27 Jun 2025 09:48:34 -0700 Subject: [PATCH 14/16] altoslib: Add TeleMega v7 .eeprom parsing support Need to be more careful about following the process when adding a new product Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 5 +++++ altoslib/AltosEepromRecordMega.java | 6 ++++++ altoslib/AltosEepromRecordSet.java | 1 + altoslib/AltosLib.java | 2 ++ 4 files changed, 14 insertions(+) diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index b076357d..90730ce3 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -222,6 +222,7 @@ public class AltosConfigData { case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: case AltosLib.AO_LOG_FORMAT_EASYMEGA_2: case AltosLib.AO_LOG_FORMAT_EASYMEGA_3: case AltosLib.AO_LOG_FORMAT_EASYMOTOR: @@ -692,6 +693,8 @@ public class AltosConfigData { return true; if (product.startsWith("TeleMega-v6")) return true; + if (product.startsWith("TeleMega-v7")) + return true; if (product.startsWith("EasyMotor-v2")) return true; if (product.startsWith("EasyMotor-v3")) @@ -714,6 +717,8 @@ public class AltosConfigData { return AltosAdxl375.X_AXIS; if (product.startsWith("TeleMega-v6")) return AltosAdxl375.X_AXIS; + if (product.startsWith("TeleMega-v7")) + return AltosAdxl375.X_AXIS; if (product.startsWith("EasyMotor-v2")) return AltosAdxl375.X_AXIS; if (product.startsWith("EasyMotor-v3")) diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java index fab17b49..b9dcea58 100644 --- a/altoslib/AltosEepromRecordMega.java +++ b/altoslib/AltosEepromRecordMega.java @@ -36,6 +36,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(16); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(14); @@ -51,6 +52,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(20); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(16); @@ -66,6 +68,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_4: case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return data32(24); case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: return data16(18); @@ -123,6 +126,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: return AltosLib.model_mpu6000; case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return AltosLib.model_bmi088; } return AltosLib.MISSING; @@ -132,6 +136,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return true; } return false; @@ -141,6 +146,7 @@ public class AltosEepromRecordMega extends AltosEepromRecord { switch (log_format) { case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: return AltosLib.model_mmc5983; } return AltosLib.MISSING; diff --git a/altoslib/AltosEepromRecordSet.java b/altoslib/AltosEepromRecordSet.java index f0819a81..842675c9 100644 --- a/altoslib/AltosEepromRecordSet.java +++ b/altoslib/AltosEepromRecordSet.java @@ -89,6 +89,7 @@ public class AltosEepromRecordSet implements AltosRecordSet { case AltosLib.AO_LOG_FORMAT_TELEMEGA_5: case AltosLib.AO_LOG_FORMAT_TELEMEGA_6: case AltosLib.AO_LOG_FORMAT_EASYMEGA_3: + case AltosLib.AO_LOG_FORMAT_TELEMEGA_7: record = new AltosEepromRecordMega(eeprom); break; case AltosLib.AO_LOG_FORMAT_TELEMETRUM: diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index af945165..48fa9b04 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -703,6 +703,8 @@ public class AltosLib { return product_telemega; case AO_LOG_FORMAT_TELEMEGA_6: return product_telemega; + case AO_LOG_FORMAT_TELEMEGA_7: + return product_telemega; case AO_LOG_FORMAT_NONE: return product_altusmetrum; default: -- 2.47.2 From 09ea1e0e9e51fdca21cceb598ae66b0fae598d0e Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 27 Jun 2025 09:52:50 -0700 Subject: [PATCH 15/16] Version 1.9.21.1 Contains TeleMega v7 eeprom log file parsing fixes Signed-off-by: Keith Packard --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index f86cbfdc..55424fe9 100644 --- a/configure.ac +++ b/configure.ac @@ -18,13 +18,13 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.9.21) +AC_INIT([altos], 1.9.21.1) ANDROID_VERSION=37 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -RELEASE_DATE=2025-04-28 +RELEASE_DATE=2025-06-27 AC_SUBST(RELEASE_DATE) DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'` -- 2.47.2 From ed99d5026c39c76264d8edafd76923d448c6298c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 27 Jun 2025 13:22:18 -0700 Subject: [PATCH 16/16] doc: Add 1.9.22 release notes Signed-off-by: Keith Packard --- doc/Makefile.am | 1 + doc/easymini-release-notes.inc | 4 ++++ doc/release-notes-1.9.22.inc | 9 +++++++++ doc/release-notes.inc | 4 ++++ doc/telegps-release-notes.inc | 4 ++++ 5 files changed, 22 insertions(+) create mode 100644 doc/release-notes-1.9.22.inc diff --git a/doc/Makefile.am b/doc/Makefile.am index 398bfb78..b1fd4cef 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0' endif RELNOTES_INC=\ + release-notes-1.9.22.inc \ release-notes-1.9.21.inc \ release-notes-1.9.20.inc \ release-notes-1.9.19.inc \ diff --git a/doc/easymini-release-notes.inc b/doc/easymini-release-notes.inc index 56e92c8e..1aadccb5 100644 --- a/doc/easymini-release-notes.inc +++ b/doc/easymini-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.22.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.21.adoc[] diff --git a/doc/release-notes-1.9.22.inc b/doc/release-notes-1.9.22.inc new file mode 100644 index 00000000..9010ea5f --- /dev/null +++ b/doc/release-notes-1.9.22.inc @@ -0,0 +1,9 @@ += Release Notes for Version 1.9.22 +include::release-head.adoc[] +:doctype: article + + Version 1.9.22 + + == AltosUI & TeleGPS application + + * Support TeleMega v7 .eeprom files diff --git a/doc/release-notes.inc b/doc/release-notes.inc index f5d833ac..4344879a 100644 --- a/doc/release-notes.inc +++ b/doc/release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.22.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.21.adoc[] diff --git a/doc/telegps-release-notes.inc b/doc/telegps-release-notes.inc index 92ccec82..e10f62ad 100644 --- a/doc/telegps-release-notes.inc +++ b/doc/telegps-release-notes.inc @@ -1,5 +1,9 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.9.22.adoc[] + + <<<< :leveloffset: 2 include::release-notes-1.9.21.adoc[] -- 2.47.2