diff options
Diffstat (limited to 'ao-bringup')
| -rwxr-xr-x | ao-bringup/cal-freq | 2 | ||||
| -rwxr-xr-x | ao-bringup/test-baro | 99 | ||||
| -rwxr-xr-x | ao-bringup/test-easymini | 63 | ||||
| -rwxr-xr-x | ao-bringup/test-flash | 101 | ||||
| -rwxr-xr-x | ao-bringup/test-gps | 102 | ||||
| -rwxr-xr-x | ao-bringup/test-igniter | 136 | ||||
| -rwxr-xr-x | ao-bringup/test-telegps | 52 | ||||
| -rwxr-xr-x | ao-bringup/turnon_easymini | 72 | ||||
| -rwxr-xr-x | ao-bringup/turnon_telebt | 3 | ||||
| -rwxr-xr-x | ao-bringup/turnon_teledongle | 1 | ||||
| -rwxr-xr-x | ao-bringup/turnon_telegps | 81 | ||||
| -rwxr-xr-x | ao-bringup/turnon_telemega | 21 | ||||
| -rwxr-xr-x | ao-bringup/turnon_telemetrum | 2 |
13 files changed, 720 insertions, 15 deletions
diff --git a/ao-bringup/cal-freq b/ao-bringup/cal-freq index dc2f2212..68a8ebf2 100755 --- a/ao-bringup/cal-freq +++ b/ao-bringup/cal-freq @@ -21,6 +21,7 @@ while true; do case "$FREQ" in "") + echo $SERIAL","$CAL_VALUE >> cal_values exit 0 ;; *) @@ -44,3 +45,4 @@ EOF ;; esac done + diff --git a/ao-bringup/test-baro b/ao-bringup/test-baro new file mode 100755 index 00000000..ce5b7f80 --- /dev/null +++ b/ao-bringup/test-baro @@ -0,0 +1,99 @@ +#!/usr/bin/nickle + +import File; + +string timed_read(file f, int timeout) { + thread reader = fork func() { + try { + return fgets(f); + } catch Thread::signal(int i) { + return ""; + } + }(); + + thread killer = fork func() { + try { + sleep (timeout); + Thread::send_signal(reader, 1); + } catch Thread::signal(int i) { + return; + } + }(); + + poly v = Thread::join(reader); + Thread::send_signal(killer, 1); + Thread::join(killer); + if (is_string(v)) + return v; + return ""; +} + +void flush_input(file f) { + for (;;) { + string s = timed_read(f, 200); + if (s == "") + break; + } +} + +string[*] baro(file f) { + string[...] x = {}; + + flush_input(f); + fprintf (f, "B\n"); + flush(f); + for (;;) { + string l = timed_read(f, 1000); + if (l == "") { + File::fprintf(stderr, "read timedout\n"); + exit(1); + } + x[dim(x)] = l; + if (String::index(l, "Altitude:") == 0) + break; + } + return x; +} + +string[*] find_baro(string[*] s, string match) { + for (int i = 0; i < dim(s); i++) + if (String::index(s[i], match) >= 0) + return String::wordsplit(s[i], " "); + return (string[*]) {}; +} + +bool +do_baro(file f) { + string[*] i = baro(f); + string[*] temp = find_baro(i, "Temperature"); + string[*] alt = find_baro(i, "Altitude"); + + real temperature = string_to_integer(temp[2]) / 100.0; + real altitude = string_to_integer(alt[1]); + + if (altitude < -50 || 3000 < altitude) { + printf ("weird altitude %f\n", altitude); + return false; + } + + if (temperature < 20 || 30 < temperature) { + printf ("weird temperature %f\n", temperature); + return false; + } + + printf ("altitude %f temperature %f\n", altitude, temperature); + + return true; +} + +void main () { + string name = argv[1]; + file f = open(name, "r+"); + bool ret = true; + + if (!do_baro(f)) + ret = false; + exit (ret? 0 : 1); +} + +main(); diff --git a/ao-bringup/test-easymini b/ao-bringup/test-easymini new file mode 100755 index 00000000..29139385 --- /dev/null +++ b/ao-bringup/test-easymini @@ -0,0 +1,63 @@ +#!/bin/sh + +VERSION=1.0 +PRODUCT=EasyMini +BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'` + +echo "$PRODUCT-v$VERSION Test Program" +echo "Copyright 2014 by Keith Packard. Released under GPL v2" +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" + + echo "Testing igniters. Both should flash" + ./test-igniter "$dev" drogue main + + case $? in + 0) + ;; + *) + echo "failed" + exit 1 + esac + + echo "Testing baro sensor" + ./test-baro "$dev" + + case $? in + 0) + ;; + *) + echo "failed" + exit 1 + esac + + FLASHSIZE=1048576 + + echo "Testing flash" + ./test-flash "$dev" "$FLASHSIZE" + + case $? in + 0) + ;; + *) + echo "failed" + exit 1 + esac + + echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship + ret=0 + ;; + *) + echo "Skipping $product $serial $dev" + ;; + esac +done diff --git a/ao-bringup/test-flash b/ao-bringup/test-flash new file mode 100755 index 00000000..d79de320 --- /dev/null +++ b/ao-bringup/test-flash @@ -0,0 +1,101 @@ +#!/usr/bin/nickle + +import File; + +string timed_read(file f, int timeout) { + thread reader = fork func() { + try { + return fgets(f); + } catch Thread::signal(int i) { + return ""; + } + }(); + + thread killer = fork func() { + try { + sleep (timeout); + Thread::send_signal(reader, 1); + } catch Thread::signal(int i) { + return; + } + }(); + + poly v = Thread::join(reader); + Thread::send_signal(killer, 1); + Thread::join(killer); + if (is_string(v)) + return v; + return ""; +} + +void flush_input(file f) { + for (;;) { + string s = timed_read(f, 200); + if (s == "") + break; + } +} + +string[*] flash(file f) { + string[...] x = {}; + + flush_input(f); + fprintf (f, "f\nv\n"); + flush(f); + for (;;) { + string l = timed_read(f, 1000); + if (l == "") { + File::fprintf(stderr, "Read timedout\n"); + exit(1); + } + x[dim(x)] = l; + if (String::index(l, "software-version") == 0) + break; + } + return x; +} + +string[*] find_flash(string[*] s, string match) { + for (int i = 0; i < dim(s); i++) + if (String::index(s[i], match) >= 0) + return String::wordsplit(s[i], " "); + return (string[*]) {}; +} + +bool +do_flash(file f, int expected_size) { + string[*] i = flash(f); + string[*] size = find_flash(i, "Storage size:"); + string[*] erase = find_flash(i, "Storage erase unit:"); + + int actual_size = string_to_integer(size[2]); + + if (actual_size != expected_size) { + printf ("weird flash size %d != %d\n", actual_size, expected_size); + return false; + } + + int actual_erase = string_to_integer(erase[3]); + + if (actual_erase != 65536) { + printf ("weird erase size %d\n", actual_erase); + return false; + } + + printf ("flash size %d erase block %d\n", actual_size, actual_erase); + + return true; +} + +void main () { + string name = argv[1]; + string size = argv[2]; + file f = open(name, "r+"); + bool ret = true; + + if (!do_flash(f, string_to_integer(size))) + ret = false; + exit (ret? 0 : 1); +} + +main(); diff --git a/ao-bringup/test-gps b/ao-bringup/test-gps new file mode 100755 index 00000000..a1e21626 --- /dev/null +++ b/ao-bringup/test-gps @@ -0,0 +1,102 @@ +#!/usr/bin/nickle + +import File; + +string timed_read(file f, int timeout) { + thread reader = fork func() { + try { + return fgets(f); + } catch Thread::signal(int i) { + return ""; + } + }(); + + thread killer = fork func() { + try { + sleep (timeout); + Thread::send_signal(reader, 1); + } catch Thread::signal(int i) { + return; + } + }(); + + poly v = Thread::join(reader); + Thread::send_signal(killer, 1); + Thread::join(killer); + if (is_string(v)) + return v; + return ""; +} + +void flush_input(file f) { + for (;;) { + string s = timed_read(f, 200); + if (s == "") + break; + } +} + +string[*] gps(file f) { + string[...] x = {}; + + flush_input(f); + fprintf (f, "g\nv\n"); + flush(f); + for (;;) { + string l = timed_read(f, 1000); + if (l == "") { + File::fprintf(stderr, "Read timedout\n"); + exit(1); + } + x[dim(x)] = l; + if (String::index(l, "software-version") == 0) + break; + } + return x; +} + +string[*] find_gps(string[*] s, string match) { + for (int i = 0; i < dim(s); i++) + if (String::index(s[i], match) >= 0) + return String::wordsplit(s[i], " "); + return (string[*]) {}; +} + +bool +do_gps(file f) { + + string[*] i = gps(f); + string[*] flags = find_gps(i, "Flags:"); + string[*] sats = find_gps(i, "Sats:"); + + int actual_flags = string_to_integer(flags[1]); + + while ((actual_flags & (1 << 4)) == 0) { + printf("Flags: %s\n", flags[1]); + printf("Sats: %s\n", sats[1]); + + sleep(1000); + i = gps(f); + flags = find_gps(i, "Flags:"); + sats = find_gps(i, "Sats:"); + + actual_flags = string_to_integer(flags[1]); + } + + printf("Flags: %s\n", flags[1]); + printf("Sats: %s\n", sats[1]); + printf("GPS locked\n"); + return true; +} + +void main () { + string name = argv[1]; + file f = open(name, "r+"); + bool ret = true; + + if (!do_gps(f)) + ret = false; + exit (ret? 0 : 1); +} + +main(); diff --git a/ao-bringup/test-igniter b/ao-bringup/test-igniter new file mode 100755 index 00000000..454f6328 --- /dev/null +++ b/ao-bringup/test-igniter @@ -0,0 +1,136 @@ +#!/usr/bin/nickle + +import File; + +string timed_read(file f, int timeout) { + thread reader = fork func() { + try { + return fgets(f); + } catch Thread::signal(int i) { + return ""; + } + }(); + + thread killer = fork func() { + try { + sleep (timeout); + Thread::send_signal(reader, 1); + } catch Thread::signal(int i) { + return; + } + }(); + + poly v = Thread::join(reader); + Thread::send_signal(killer, 1); + Thread::join(killer); + if (is_string(v)) + return v; + return ""; +} + +void flush_input(file f) { + for (;;) { + string s = timed_read(f, 200); + if (s == "") + break; + } +} + +string[*] settings(file f) { + string[...] x = {}; + + flush_input(f); + fprintf (f, "c s\nv\n"); + flush(f); + for (;;) { + string l = File::fgets(f); + x[dim(x)] = l; + if (String::index(l, "software-version") == 0) + break; + } + return x; +} + +string[*] find_setting(string[*] s, string match) { + for (int i = 0; i < dim(s); i++) + if (String::index(s[i], match) == 0) + return String::wordsplit(s[i], " "); + return (string[*]) {}; +} + +string[*] igniters(file f) { + string[...] x = {}; + + flush_input(f); + fprintf (f, "t\nv\n"); + flush(f); + for (;;) { + string l = File::fgets(f); + x[dim(x)] = l; + if (String::index(l, "software-version") == 0) + break; + } + return x; +} + +string[*] find_igniter(string[*] s, string match) { + for (int i = 0; i < dim(s); i++) + if (String::index(s[i], match) >= 0) + return String::wordsplit(s[i], " "); + return (string[*]) {}; +} + +bool +do_igniter(file f, string igniter) { + string[*] i = igniters(f); + string[*] status = find_igniter(i, igniter); + if (dim(status) < 4) { + printf ("no igniter %s found in %v\n", igniter, i); + return false; + } + if (String::index(status[3], "ready") < 0) { + printf("igniter %s status is \"%s\"\n", igniter, status[3]); + return false; + } + fprintf(f, "i DoIt %s\n", igniter); + flush(f); + flush_input(f); + return true; +} + +file +open_tty(string name) +{ + int i = 0; + for (;;) { + try { + return open (name, "r+"); + } catch open_error(string error, File::error_type error, string name) { + if (error == File::error_type.BUSY) { + if (i < 30) { + printf ("waiting for %s to be usable\n", name); + sleep(2000); + continue; + } + } else { + printf ("%s: %s\n", name, error); + exit(1); + } + } + } +} + +void main () { + string name = argv[1]; + string[dim(argv)-2] igniters = { [i] = argv[i+2] }; + file f = open_tty(name); + bool ret = true; + + for (int i = 0; i < dim(igniters); i++) { + if (!do_igniter(f, igniters[i])) + ret = false; + } + exit (ret? 0 : 1); +} + +main(); diff --git a/ao-bringup/test-telegps b/ao-bringup/test-telegps new file mode 100755 index 00000000..f3174485 --- /dev/null +++ b/ao-bringup/test-telegps @@ -0,0 +1,52 @@ +#!/bin/sh + +VERSION=1.0 +PRODUCT=TeleGPS +BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'` + +echo "$PRODUCT-v$VERSION Test Program" +echo "Copyright 2014 by Bdale Garbee. Released under GPL v2" +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" + + FLASHSIZE=2097152 + + echo "Testing flash" + ./test-flash "$dev" "$FLASHSIZE" + + case $? in + 0) + ;; + *) + echo "failed" + exit 1 + esac + + echo "Testing GPS" + ./test-gps "$dev" + + case $? in + 0) + ;; + *) + echo "failed" + exit 1 + esac + + echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship + ret=0 + ;; + *) + echo "Skipping $product $serial $dev" + ;; + esac +done diff --git a/ao-bringup/turnon_easymini b/ao-bringup/turnon_easymini new file mode 100755 index 00000000..0b915c5e --- /dev/null +++ b/ao-bringup/turnon_easymini @@ -0,0 +1,72 @@ +#!/bin/sh + +if [ -x ../ao-tools/ao-flash/ao-flash-lpc ]; then + FLASH_LPC=../ao-tools/ao-flash/ao-flash-lpc +elif [ -x /usr/bin/ao-flash-lpc ]; then + FLASH_LPC=/usr/bin/ao-flash-lpc +else + echo "Can't find ao-flash-lpc! Aborting." + exit 1 +fi + +if [ -x ../ao-tools/ao-usbload/ao-usbload ]; then + USBLOAD=../ao-tools/ao-usbload/ao-usbload +elif [ -x /usr/bin/ao-usbload ]; then + USBLOAD=/usr/bin/ao-usbload +else + echo "Can't find ao-usbload! Aborting." + exit 1 +fi + +VERSION=1.0 +PRODUCT=EasyMini +BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'` +echo $FILE + +echo "$PRODUCT v$VERSION Turn-On and Calibration Program" +echo "Copyright 2010 by Bdale Garbee. Released under GPL v2" +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 + +# +# Use released versions of everything +# +FLASH_FILE=~/altusmetrumllc/Binaries/loaders/easymini-v1.0-altos-flash-*.elf +ALTOS_FILE=~/altusmetrumllc/Binaries/easymini-v1.0-*.elf + +#FLASH_FILE=../src/$BASE-v$VERSION/flash-loader/$BASE-v$VERSION-altos-flash-*.elf +#ALTOS_FILE=../src/$BASE-v$VERSION/*.ihx + +echo $FLASH_LPC $FLASH_FILE + +$FLASH_LPC $FLASH_FILE || exit 1 + +sleep 1 + +echo $USBLOAD $ALTOS_FILE + +$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1 + +sleep 2 + +./test-easymini + +exit $? diff --git a/ao-bringup/turnon_telebt b/ao-bringup/turnon_telebt index ef20e915..c4902f31 100755 --- a/ao-bringup/turnon_telebt +++ b/ao-bringup/turnon_telebt @@ -45,7 +45,8 @@ read FREQ CAL_VALUE=`nickle -e "floor(434.55 / $FREQ * 1186611 + 0.5)"` echo "Programming flash with cal value " $CAL_VALUE -$AOLOAD -D $DONGLE --cal $CAL_VALUE /usr/share/altos/stable/telebt-v1.0*.ihx $SERIAL +$AOLOAD -D $DONGLE --cal $CAL_VALUE /usr/share/altos/telebt-v1.0*.ihx $SERIAL echo "Serial number "$SERIAL" programmed with RF cal value "$CAL_VALUE +echo $SERIAL","$CAL_VALUE >> cal_values echo "Unplug debug cable, power cycle, cu to the board, confirm freq and record power" diff --git a/ao-bringup/turnon_teledongle b/ao-bringup/turnon_teledongle index a11683db..ddee5ee8 100755 --- a/ao-bringup/turnon_teledongle +++ b/ao-bringup/turnon_teledongle @@ -45,4 +45,5 @@ echo "Programming flash with cal value " $CAL_VALUE $AOLOAD -D 100 --cal $CAL_VALUE /usr/share/altos/teledongle-v0.2*.ihx $SERIAL echo "Serial number "$SERIAL" programmed with RF cal value "$CAL_VALUE +echo $SERIAL","$CAL_VALUE >> cal_values echo "Unplug and replug USB, cu to the board, confirm freq and record power" diff --git a/ao-bringup/turnon_telegps b/ao-bringup/turnon_telegps new file mode 100755 index 00000000..123f0b54 --- /dev/null +++ b/ao-bringup/turnon_telegps @@ -0,0 +1,81 @@ +#!/bin/sh + +if [ -x /usr/bin/ao-flash-lpc ]; then + FLASH_LPC=/usr/bin/ao-flash-lpc +else + echo "Can't find ao-flash-lpc! 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.0 +PRODUCT=TeleGPS +BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'` +echo $FILE + +echo "$PRODUCT v$VERSION Turn-On and Calibration Program" +echo "Copyright 2014 by Bdale Garbee. Released under GPL v2" +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 + +# +# Use released versions of everything +# +FLASH_FILE=~/altusmetrumllc/Binaries/loaders/telegps-v1.0-altos-flash-*.elf +ALTOS_FILE=~/altusmetrumllc/Binaries/telegps-v1.0-*.elf + +echo $FLASH_LPC $FLASH_FILE + +$FLASH_LPC $FLASH_FILE || exit 1 + +sleep 2 + +echo $USBLOAD $ALTOS_FILE + +$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1 + +sleep 2 + +dev=`ao-list | awk '/TeleGPS-v'"$VERSION"'/ { print $3; exit(0); }'` + +case "$dev" in +/dev/tty*) + echo "TeleGPS found on $dev" + ;; +*) + echo 'No TeleGPS-v'"$VERSION"' found' + exit 1 + ;; +esac + +echo 'E 0' > $dev + +./test-telegps + +SERIAL=$SERIAL ./cal-freq $dev + +exit $? diff --git a/ao-bringup/turnon_telemega b/ao-bringup/turnon_telemega index 3880b197..39a63642 100755 --- a/ao-bringup/turnon_telemega +++ b/ao-bringup/turnon_telemega @@ -1,17 +1,13 @@ #!/bin/sh -if [ -x ../ao-tools/ao-stmload/ao-stmload ]; then - STMLOAD=../ao-tools/ao-stmload/ao-stmload -elif [ -x /usr/bin/ao-stmload ]; then - STMLOAD=/usr/bin/ao-stmload +if [ -x /usr/bin/ao-flash-stm ]; then + STMLOAD=/usr/bin/ao-flash-stm else - echo "Can't find ao-stmload! Aborting." + echo "Can't find ao-flash-stm! Aborting." exit 1 fi -if [ -x ../ao-tools/ao-usbload/ao-usbload ]; then - USBLOAD=../ao-tools/ao-usbload/ao-usbload -elif [ -x /usr/bin/ao-usbload ]; then +if [ -x /usr/bin/ao-usbload ]; then USBLOAD=/usr/bin/ao-usbload else echo "Can't find ao-usbload! Aborting." @@ -19,10 +15,10 @@ else fi VERSION=1.0 -#VERSION=0.1 +REPO=~/altusmetrumllc/Binaries echo "TeleMega v$VERSION Turn-On and Calibration Program" -echo "Copyright 2010 by Bdale Garbee. Released under GPL v2" +echo "Copyright 2014 by Bdale Garbee. Released under GPL v2" echo echo "Expectations:" echo "\tTeleMega v$VERSIOn powered from USB" @@ -34,12 +30,11 @@ read SERIAL echo $STMLOAD -$STMLOAD --raw ../src/telemega-v$VERSION/flash-loader/*.elf || exit 1 +$STMLOAD $REPO/loaders/telemega-v$VERSION*.elf || exit 1 sleep 2 -#$USBLOAD --serial=$SERIAL ../src/telemega-v$VERSION/*.ihx || exit 1 -$USBLOAD --serial=$SERIAL /usr/share/altos/telemega-v$VERSION*.ihx || exit 1 +$USBLOAD --serial=$SERIAL $REPO/telemega-v$VERSION*.elf || exit 1 sleep 2 diff --git a/ao-bringup/turnon_telemetrum b/ao-bringup/turnon_telemetrum index bcf6239f..80193c4c 100755 --- a/ao-bringup/turnon_telemetrum +++ b/ao-bringup/turnon_telemetrum @@ -39,7 +39,7 @@ sleep 2 $USBLOAD --serial=$SERIAL /usr/share/altos/telemetrum-v$VERSION*.ihx || exit 1 -sleep 2 +sleep 5 dev=`ao-list | awk '/TeleMetrum-v'"$VERSION"'/ { print $3; exit(0); }'` |
