summaryrefslogtreecommitdiff
path: root/ao-bringup
diff options
context:
space:
mode:
Diffstat (limited to 'ao-bringup')
-rwxr-xr-xao-bringup/cal-freq2
-rwxr-xr-xao-bringup/test-baro99
-rwxr-xr-xao-bringup/test-easymini63
-rwxr-xr-xao-bringup/test-flash101
-rwxr-xr-xao-bringup/test-gps102
-rwxr-xr-xao-bringup/test-igniter136
-rwxr-xr-xao-bringup/test-telegps52
-rwxr-xr-xao-bringup/turnon_easymini72
-rwxr-xr-xao-bringup/turnon_telebt3
-rwxr-xr-xao-bringup/turnon_teledongle1
-rwxr-xr-xao-bringup/turnon_telegps81
-rwxr-xr-xao-bringup/turnon_telemega21
-rwxr-xr-xao-bringup/turnon_telemetrum2
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); }'`