ao-bringup: Add turnon_teledonglev3
authorKeith Packard <keithp@keithp.com>
Thu, 5 Feb 2015 06:55:24 +0000 (22:55 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 5 Feb 2015 06:55:24 +0000 (22:55 -0800)
TeleDongle v3 uses the LPC11U14 processor which has no on-chip eeprom,
so we must reflash the device to set the default radio calibration value.

Signed-off-by: Keith Packard <keithp@keithp.com>
ao-bringup/cal-freq-file [new file with mode: 0755]
ao-bringup/turnon_teledonglev3 [new file with mode: 0755]

diff --git a/ao-bringup/cal-freq-file b/ao-bringup/cal-freq-file
new file mode 100755 (executable)
index 0000000..fb48907
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+case $# in
+2)
+    dev="$1"
+    serial="$2"
+       ;;
+*)
+       echo "Usage: $0 <device> <serial>"
+       exit 1;
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+while true; do
+
+        dd if=$dev iflag=nonblock of=/dev/null > /dev/null 2>&1
+
+       echo 'C 1' > $dev
+
+       echo -n "Generating RF carrier. Please enter measured frequency [enter for done]: "
+
+       read FREQ
+
+       echo 'C 0' > $dev
+
+       calline=`./get-radio-cal $dev`
+       CURRENT_CAL=`echo $calline | awk '{print $2}'`
+       CURRENT_FREQ=`echo $calline | awk '{print $4}'`
+       CAL_VALUE=$CURRENT_CAL
+
+       case "$FREQ" in
+       "")
+               echo $serial","$CAL_VALUE >> cal_values
+               exit 0
+               ;;
+       *)
+               echo "Current radio calibration "$CURRENT_CAL
+               echo "Current radio frequency "$CURRENT_FREQ
+
+               CAL_VALUE=`nickle -e "floor($CURRENT_FREQ / $FREQ * $CURRENT_CAL + 0.5)"`
+
+               echo "Setting cal value" $CAL_VALUE
+
+               dd if=$dev iflag=nonblock of=/dev/null > /dev/null 2>&1
+
+               cat << EOF > $dev
+c f $CAL_VALUE
+EOF
+               ;;
+       esac
+done
+
diff --git a/ao-bringup/turnon_teledonglev3 b/ao-bringup/turnon_teledonglev3
new file mode 100755 (executable)
index 0000000..e6750c4
--- /dev/null
@@ -0,0 +1,89 @@
+#!/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 /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+PRODUCT=teledongle
+PRODUCT_NAME=TeleDongle
+VERSION=3.0
+
+echo "$PRODUCT_NAME v$VERSION Turn-On and Calibration Program"
+echo "Copyright © 2015 by Bdale Garbee.  Released under GPL v2"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT_NAME v$VERSION powered from USB"
+echo "\t\twith ST-Link-V2 cabled to debug header"
+echo "\t\twith coax from UHF to frequency counter"
+echo
+echo -n "$PRODUCT_NAME-$VERSION serial number: "
+read SERIAL
+
+BINARIES=$HOME/altusmetrumllc/Binaries
+
+LOADER="$BINARIES/loaders/$PRODUCT-v$VERSION-"*.elf
+ALTOS="$BINARIES/$PRODUCT-v$VERSION"*.elf
+
+$FLASH_LPC $LOADER || exit 1
+
+sleep 2
+
+$USBLOAD --serial=$SERIAL $ALTOS || exit 1
+
+sleep 5
+
+dev=`ao-list | awk '/TeleDongle-v'"$VERSION"'/ { print $3; exit(0); }'`
+
+case "$dev" in
+/dev/tty*)
+       echo "TeleDongle found on $dev"
+       ;;
+*)
+       echo 'No TeleDongle-v'"$VERSION"' found'
+       exit 1
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+./cal-freq-file $dev $SERIAL
+
+case $? in
+    0)
+       ;;
+    *)
+       echo "Frequency calibration failed"
+       exit 1
+       ;;
+esac
+
+CAL_VALUE=`grep "^$SERIAL," cal_values | tail -1 | sed 's/^[^,]*,//'`
+
+case "$CAL_VALUE" in
+    [1-9]*)
+    ;;
+    *)
+       echo "Invalid calibration value: $CAL_VALUE"
+       exit 1
+       ;;
+esac
+
+echo "Reflashing with calibration: $CAL_VALUE"
+
+$USBLOAD --cal=$CAL_VALUE --tty=$dev $ALTOS || exit 1
+
+echo "$PRODUCT_NAME-v$VERSION $SERIAL is ready to ship"
+
+exit $?