Merge branch 'master' into branch-1.9
authorBdale Garbee <bdale@gag.com>
Fri, 3 Jul 2020 02:20:59 +0000 (20:20 -0600)
committerBdale Garbee <bdale@gag.com>
Fri, 3 Jul 2020 02:20:59 +0000 (20:20 -0600)
Makefile.am
ao-bringup/test-easytimer [new file with mode: 0755]
ao-bringup/turnon_easytimer [new file with mode: 0755]
configure.ac
doc/Makefile.am
doc/easymini-release-notes.inc
doc/release-notes-1.9.4.inc [new file with mode: 0644]
doc/release-notes.inc
doc/telegps-release-notes.inc
src/kernel/ao_storage.c

index fcf2652c131f4d70213382c6643d5ba831f3424c..3793d71741d44588a2f8f8c5785ee189b58b23e5 100644 (file)
@@ -63,7 +63,8 @@ fat_altos = \
        src/telemega-v2.0/telemega-v2.0-$(VERSION).ihx \
        src/telemega-v3.0/telemega-v3.0-$(VERSION).ihx \
        src/telemega-v4.0/telemega-v4.0-$(VERSION).ihx \
-       src/telemetrum-v2.0/telemetrum-v2.0-$(VERSION).ihx
+       src/telemetrum-v2.0/telemetrum-v2.0-$(VERSION).ihx \
+       src/telemetrum-v3.0/telemetrum-v3.0-$(VERSION).ihx
 
 keithp-fat: fat
        ssh keithp.com mkdir -p public_html/altos-$(VERSION)
diff --git a/ao-bringup/test-easytimer b/ao-bringup/test-easytimer
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/turnon_easytimer b/ao-bringup/turnon_easytimer
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 ca5262b53b84c48ace9f50c3f426a3f0050bb688..8a0377676d15bbad868f47f853c37f2e12f7a8c2 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.3)
+AC_INIT([altos], 1.9.4)
 ANDROID_VERSION=27
 AC_CONFIG_SRCDIR([src/kernel/ao.h])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 
-RELEASE_DATE=2020-06-15
+RELEASE_DATE=2020-07-02
 AC_SUBST(RELEASE_DATE)
 
 DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'`
index acb223ca2b88e9d2e65514990fc53badd6965686..e56e2a55bcfbb9a1a4626517549323cc1347b397 100644 (file)
@@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0'
 endif
 
 RELNOTES_INC=\
+       release-notes-1.9.4.inc \
        release-notes-1.9.3.inc \
        release-notes-1.9.2.inc \
        release-notes-1.9.1.inc \
index 53af859713d62b25b75c223c8a8a4fc72180e6dc..990ee69f52fb0d2baf67580541ad67b5dbae5ddd 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.4.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.3.adoc[]
 
diff --git a/doc/release-notes-1.9.4.inc b/doc/release-notes-1.9.4.inc
new file mode 100644 (file)
index 0000000..5067314
--- /dev/null
@@ -0,0 +1,20 @@
+= Release Notes for Version 1.9.4
+include::release-head.adoc[]
+:doctype: article
+
+       Version 1.9.4
+
+       == AltOS
+
+       * Fixed firmware for TeleDongle v3.0 and TeleBT v4.0. Version 1.9.3 bricked those
+         devices requiring them to be opened up to get them working again.
+
+       * Fixed firmware for EasyMini v1.0. Changes in the storage
+         code caused it to use significantly more RAM which made the
+         interrupt stack smash into other data structures and cause
+         the device to panic at startup time.
+
+       == AltosUI
+
+       * Add TeleMetrum v3.0 firmware to the Linux and Mac OSX
+          AltosUI packages.
index 042059bc6f163a8784b1a259e654ba0fd6eb6e05..160128b2f0df1822f96d80748bc79366cd33a5db 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.4.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.3.adoc[]
 
index c0a258f154b2b126770dff2ee6ec12f0e39d07f5..8b315ccb6156d8780188922b62f6a3128af49f56 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.4.adoc[]
+
+       <<<<
 
        :leveloffset: 2
        include::release-notes-1.9.3.adoc[]
index 73b31c6420005cc7ee75d65a19c5e1b0e6302842..ca5fcb464d9129508098394870b2568bdb724be9 100644 (file)
@@ -19,7 +19,7 @@
 #include <ao.h>
 #include <ao_storage.h>
 
-#define AO_STORAGE_DATA_SIZE   256
+#define AO_STORAGE_DATA_SIZE   128
 
 static uint8_t storage_data[AO_STORAGE_DATA_SIZE];
 
@@ -214,6 +214,9 @@ ao_storage_zapall(void)
 
 #if AO_STORAGE_TEST
 
+#define AO_STORAGE_TEST_SIZE   256
+static uint8_t storage_test[AO_STORAGE_TEST_SIZE];
+
 static void
 ao_storage_failure(uint32_t pos, char *format, ...)
 {
@@ -230,16 +233,16 @@ ao_storage_check_block(uint32_t pos, uint8_t value)
        uint32_t        offset;
        uint32_t        byte;
 
-       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) {
-               if (!ao_storage_read(pos + offset, storage_data, sizeof (storage_data))) {
+       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) {
+               if (!ao_storage_read(pos + offset, storage_test, sizeof (storage_test))) {
                        ao_storage_failure(pos + offset, "read failed\n");
                        return 0;
                }
-               for (byte = 0; byte < sizeof (storage_data); byte++)
-                       if (storage_data[byte] != value) {
+               for (byte = 0; byte < sizeof (storage_test); byte++)
+                       if (storage_test[byte] != value) {
                                ao_storage_failure(pos + offset + byte,
                                                   "want %02x got %02x\n",
-                                                  value, storage_data[byte]);
+                                                  value, storage_test[byte]);
                                return 0;
                        }
        }
@@ -252,10 +255,10 @@ ao_storage_fill_block(uint32_t pos, uint8_t value)
        uint32_t        offset;
        uint32_t        byte;
 
-       for (byte = 0; byte < sizeof (storage_data); byte++)
-               storage_data[byte] = value;
-       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) {
-               if (!ao_storage_write(pos + offset, storage_data, sizeof (storage_data))) {
+       for (byte = 0; byte < sizeof (storage_test); byte++)
+               storage_test[byte] = value;
+       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) {
+               if (!ao_storage_write(pos + offset, storage_test, sizeof (storage_test))) {
                        ao_storage_failure(pos + offset, "write failed\n");
                        return 0;
                }
@@ -269,17 +272,17 @@ ao_storage_check_incr_block(uint32_t pos)
        uint32_t        offset;
        uint32_t        byte;
 
-       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) {
-               if (!ao_storage_read(pos + offset, storage_data, sizeof (storage_data))) {
+       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) {
+               if (!ao_storage_read(pos + offset, storage_test, sizeof (storage_test))) {
                        ao_storage_failure(pos + offset, "read failed\n");
                        return 0;
                }
-               for (byte = 0; byte < sizeof (storage_data); byte++) {
+               for (byte = 0; byte < sizeof (storage_test); byte++) {
                        uint8_t value = offset + byte;
-                       if (storage_data[byte] != value) {
+                       if (storage_test[byte] != value) {
                                ao_storage_failure(pos + offset + byte,
                                                   "want %02x got %02x\n",
-                                                  value, storage_data[byte]);
+                                                  value, storage_test[byte]);
                                return 0;
                        }
                }
@@ -293,10 +296,10 @@ ao_storage_fill_incr_block(uint32_t pos)
        uint32_t        offset;
        uint32_t        byte;
 
-       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_data)) {
-               for (byte = 0; byte < sizeof (storage_data); byte++)
-                       storage_data[byte] = offset + byte;
-               if (!ao_storage_write(pos + offset, storage_data, sizeof (storage_data))) {
+       for (offset = 0; offset < ao_storage_block; offset += sizeof (storage_test)) {
+               for (byte = 0; byte < sizeof (storage_test); byte++)
+                       storage_test[byte] = offset + byte;
+               if (!ao_storage_write(pos + offset, storage_test, sizeof (storage_test))) {
                        ao_storage_failure(pos + offset, "write failed\n");
                        return 0;
                }
@@ -369,13 +372,13 @@ ao_storage_fill(void)
                return;
        printf("erase "); flush();
        ao_storage_erase(0, ao_storage_log_max);
-       for (pos = 0; pos < sizeof (storage_data); pos++)
-               storage_data[pos] = (uint8_t) pos;
-       for (pos = 0; pos < ao_storage_log_max; pos += sizeof (storage_data)) {
+       for (pos = 0; pos < sizeof (storage_test); pos++)
+               storage_test[pos] = (uint8_t) pos;
+       for (pos = 0; pos < ao_storage_log_max; pos += sizeof (storage_test)) {
                if ((pos & 0xffff) == 0) {
                        printf("Fill 0x%x\n", pos); flush();
                }
-               ao_storage_write(pos, storage_data, sizeof (storage_data));
+               ao_storage_write(pos, storage_test, sizeof (storage_test));
        }
        printf("Fill complete\n");
 }