2016-11-30 22:00:27 -04:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
#################################################################################################
|
|
|
|
#
|
|
|
|
# This script loads PX4 binaries to the Snapdragon Flight target and does a quick on-target sanity test.
|
|
|
|
#
|
|
|
|
# Pre-requisites:
|
|
|
|
# - Snapdragon Flight board connected to the host computer via USB cable
|
|
|
|
# - Snapdragon Flight board must have the latest platform BSP and flight controller addon installed"
|
|
|
|
# - mini-dm installed on host computer (see https://github.com/ATLFlight/ATLFlightDocs/blob/master/UserGuide.md#adsp)
|
|
|
|
# - PX4 software was built and binaries are in their usual locations in the Firmware tree.
|
|
|
|
#
|
|
|
|
# This script supports two modes:
|
|
|
|
# - Default mode (supported by PX4 community)
|
|
|
|
# - Legacy mode (uses proprietary drivers for ESC and RC Receiver, supported by Qualcomm)
|
|
|
|
#
|
|
|
|
# For help and cmd line options, run the script with the -h option
|
|
|
|
#
|
|
|
|
#################################################################################################
|
|
|
|
|
|
|
|
# Halt on error
|
|
|
|
set -e
|
|
|
|
|
|
|
|
# Verbose mode
|
|
|
|
## set -x
|
|
|
|
|
|
|
|
# Mode of operation
|
|
|
|
readonly MODE_DEFAULT=0
|
|
|
|
readonly MODE_LEGACY=1
|
2017-02-10 19:33:40 -04:00
|
|
|
readonly MODE_8x96=2
|
|
|
|
readonly MODE_MAX=$MODE_8x96
|
2016-11-30 22:00:27 -04:00
|
|
|
|
|
|
|
readonly RESULT_PASS=0
|
|
|
|
readonly RESULT_FAIL=3
|
|
|
|
readonly EXIT_ERROR=3
|
|
|
|
|
|
|
|
|
|
|
|
# List of expected strings from the apps proc
|
|
|
|
declare -a appsproc_strings_present=(
|
|
|
|
"on udp port 14556 remote port 14550"
|
|
|
|
)
|
|
|
|
|
|
|
|
# List of unexpected strings from the apps proc
|
|
|
|
declare -a appsproc_strings_absent=(
|
|
|
|
"ERROR"
|
|
|
|
"Getting Bulk data from fastRPC link"
|
|
|
|
"Segmentation fault"
|
|
|
|
)
|
|
|
|
|
|
|
|
# List of expected strings from the DSP
|
|
|
|
declare -a dsp_strings_present=(
|
2017-04-19 22:54:28 -03:00
|
|
|
"EKF aligned"
|
2016-11-30 22:00:27 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
# List of unexpected strings from the DSP
|
|
|
|
declare -a dsp_strings_absent=(
|
|
|
|
"Segmentation fault"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
install=0
|
|
|
|
test=0
|
|
|
|
mode=0
|
|
|
|
result=$RESULT_PASS
|
|
|
|
|
|
|
|
# Default mini-dm path (needs to be installed in this location or overriden through cmd line
|
|
|
|
minidmPath=~/Qualcomm/Hexagon_SDK/3.0/tools/debug/mini-dm/Linux_Debug
|
|
|
|
# Default workspace path (parent directory of the script location)
|
|
|
|
workspace=`pwd`/..
|
|
|
|
|
|
|
|
|
|
|
|
verifypx4test() {
|
|
|
|
|
2017-02-10 19:33:40 -04:00
|
|
|
#TODO: This needs to be fixed. For now, skip string checks for 8x96 platform.
|
|
|
|
if [ $mode == 2 ]; then
|
|
|
|
echo -e "[WARNING] Skipping string checks for 8x96 platform"
|
|
|
|
return
|
|
|
|
fi
|
2017-04-10 04:06:21 -03:00
|
|
|
|
2016-11-30 22:00:27 -04:00
|
|
|
echo -e "Verifying test results..."
|
|
|
|
|
|
|
|
# verify the presence of expected stings in the apps proc console log
|
|
|
|
for lineString in "${appsproc_strings_present[@]}"
|
|
|
|
do
|
|
|
|
if ! grep -Fq "$lineString" px4.log
|
|
|
|
then
|
|
|
|
# code if not found
|
|
|
|
echo -e "[ERROR] Missing expected string in apps proc log: $lineString"
|
|
|
|
result=$RESULT_FAIL
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# verify the absence of unexpected stings in the apps proc console log
|
|
|
|
for lineString in "${appsproc_strings_absent[@]}"
|
|
|
|
do
|
|
|
|
if grep -Fq "$lineString" px4.log
|
|
|
|
then
|
|
|
|
# code if not found
|
|
|
|
echo -e "[ERROR] Found unexpected string in apps proc log: $lineString"
|
|
|
|
result=$RESULT_FAIL
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Displaying the content of the minidm.log"
|
|
|
|
cat minidm.log
|
|
|
|
echo -e "Analyzing the log for success and failure indications."
|
|
|
|
|
2016-11-30 22:00:27 -04:00
|
|
|
# verify the presence of expected stings in the DSP console log
|
|
|
|
for lineString in "${dsp_strings_present[@]}"
|
|
|
|
do
|
|
|
|
if ! grep -Fq "$lineString" minidm.log
|
|
|
|
then
|
|
|
|
# code if not found
|
|
|
|
echo -e "[ERROR] Missing expected string in DSP log: $lineString"
|
|
|
|
result=$RESULT_FAIL
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# verify the absence of unexpected stings in the DSP console log
|
|
|
|
for lineString in "${dsp_strings_absent[@]}"
|
|
|
|
do
|
|
|
|
if grep -Fq "$lineString" minidm.log
|
|
|
|
then
|
|
|
|
# code if not found
|
|
|
|
echo -e "[ERROR] Found unexpected string in DSP log: $lineString"
|
|
|
|
result=$RESULT_FAIL
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo -e "Verification complete."
|
|
|
|
|
|
|
|
if [ $result -eq $RESULT_FAIL ]; then
|
|
|
|
echo -e "PX4 test result: FAIL"
|
|
|
|
else
|
|
|
|
echo -e "PX4 test result: PASS"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
installpx4() {
|
|
|
|
|
|
|
|
if [ $install -eq 0 ]; then
|
|
|
|
echo -e "SKIPPING install"
|
|
|
|
return 0;
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Reboot the target before beginning the installation
|
|
|
|
echo -e "Rebooting the target..."
|
2017-02-10 19:33:40 -04:00
|
|
|
adb reboot
|
2017-04-19 22:54:28 -03:00
|
|
|
adb wait-for-devices
|
|
|
|
# Wait a bit longer after bootup, before copying binaries to the target.
|
|
|
|
sleep 30
|
|
|
|
adb devices
|
2016-11-30 22:00:27 -04:00
|
|
|
|
|
|
|
echo -e "Now installing PX4 binaries..."
|
|
|
|
# Copy binaries to the target
|
|
|
|
if [ $mode == 0 ]; then
|
|
|
|
# copy default binaries
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Copying the PX4 binaries from the eagle_default build tree..."
|
2017-08-29 18:22:05 -03:00
|
|
|
adb push $workspace/build/qurt_eagle_default/src/firmware/qurt/libpx4.so /usr/share/data/adsp
|
|
|
|
adb push $workspace/build/qurt_eagle_default/src/firmware/qurt/libpx4muorb_skel.so /usr/share/data/adsp
|
|
|
|
adb push $workspace/build/posix_eagle_default/src/firmware/posix/px4 /home/linaro
|
2016-11-30 22:00:27 -04:00
|
|
|
adb push $workspace/posix-configs/eagle/flight/px4.config /usr/share/data/adsp
|
|
|
|
adb push $workspace/posix-configs/eagle/flight/mainapp.config /home/linaro
|
2017-02-10 19:33:40 -04:00
|
|
|
elif [ $mode == 1 ]; then
|
2016-11-30 22:00:27 -04:00
|
|
|
# copy legacy binaries
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Copying the PX4 binaries from the eagle_legacy build tree..."
|
2017-08-29 18:22:05 -03:00
|
|
|
adb push $workspace/build/qurt_eagle_legacy/src/firmware/qurt/libpx4.so /usr/share/data/adsp
|
|
|
|
adb push $workspace/build/qurt_eagle_legacy/src/firmware/qurt/libpx4muorb_skel.so /usr/share/data/adsp
|
|
|
|
adb push $workspace/build/posix_eagle_legacy/src/firmware/posix/px4 /home/linaro
|
2016-11-30 22:00:27 -04:00
|
|
|
adb push $workspace/posix-configs/eagle/200qx/px4.config /usr/share/data/adsp
|
|
|
|
adb push $workspace/posix-configs/eagle/200qx/mainapp.config /home/linaro
|
2017-02-10 19:33:40 -04:00
|
|
|
else
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Copying the PX4 binaries from the excelsior_legacy build tree..."
|
2017-08-29 18:22:05 -03:00
|
|
|
adb push $workspace/build/qurt_excelsior_legacy/src/firmware/qurt/libpx4.so /usr/lib/rfsa/adsp
|
|
|
|
adb push $workspace/build/qurt_excelsior_legacy/src/firmware/qurt/libpx4muorb_skel.so /usr/lib/rfsa/adsp
|
|
|
|
adb push $workspace/build/posix_excelsior_legacy/src/firmware/posix/px4 /home/root
|
2017-02-10 19:33:40 -04:00
|
|
|
adb push $workspace/posix-configs/excelsior/px4.config /usr/lib/rfsa/adsp
|
|
|
|
adb push $workspace/posix-configs/excelsior/mainapp.config /home/root
|
2016-11-30 22:00:27 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo -e "Installation complete."
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
testpx4() {
|
|
|
|
|
|
|
|
if [ $test -eq 0 ]; then
|
|
|
|
echo -e "SKIPPING test"
|
|
|
|
return 0;
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo -e "Starting PX4 test..."
|
|
|
|
|
|
|
|
# Remove previous instances of the file
|
|
|
|
rm px4.log | true
|
|
|
|
rm minidm.log | true
|
|
|
|
|
|
|
|
# Start mini-dm
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Starting mini-dm..."
|
2016-11-30 22:00:27 -04:00
|
|
|
${minidmPath}/mini-dm > minidm.log &
|
|
|
|
sleep 5
|
|
|
|
# Verify that mini-dm is running
|
|
|
|
checkProc=$(ps -aef | grep mini-dm | grep -v grep)
|
|
|
|
|
|
|
|
if [ -z "${checkProc}" ]; then
|
|
|
|
echo "[ERROR] Unable to start mini-dm from path: ${minidmPath}"
|
|
|
|
exit $EXIT_ERROR
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Start PX4
|
2017-04-19 22:54:28 -03:00
|
|
|
echo -e "Starting PX4..."
|
2017-02-10 19:33:40 -04:00
|
|
|
if [ $mode == 2 ]; then
|
|
|
|
# 8x96 platform
|
|
|
|
adb shell "/home/root/px4 /home/root/mainapp.config" > px4.log 2>&1 &
|
|
|
|
else
|
|
|
|
# 8x74 platform
|
|
|
|
adb shell "/home/linaro/px4 /home/linaro/mainapp.config" > px4.log 2>&1 &
|
|
|
|
fi
|
2016-11-30 22:00:27 -04:00
|
|
|
sleep 20
|
|
|
|
# Verify that PX4 is still running
|
|
|
|
checkProc=$(adb shell "ps -aef | grep px4 | grep -v grep")
|
|
|
|
if [ -z "${checkProc}" ]; then
|
|
|
|
echo "[ERROR] PX4 is not running on target!"
|
|
|
|
exit $EXIT_ERROR
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Stop the PX4 process on target
|
|
|
|
adb shell "ps -eaf | grep px4 | grep -v grep | awk '{print $2}' | tr -s ' ' | cut -d' ' -f2 | xargs kill"
|
|
|
|
sleep 5
|
|
|
|
|
|
|
|
# Stop the mini-dm
|
|
|
|
killall mini-dm
|
|
|
|
|
|
|
|
echo -e "PX4 test complete."
|
|
|
|
|
|
|
|
# Verify the results
|
|
|
|
verifypx4test
|
|
|
|
|
|
|
|
echo -e "For more information, see px4.log and minidm.log."
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
echo -e "\nThis script can copy PX4 binaries to the Snapdragon Flight target and do a quick on-target sanity test.\n"
|
|
|
|
echo -e "Pre-requisites:"
|
|
|
|
echo -e "- Snapdragon Flight board must be connected to host computer via USB"
|
|
|
|
echo -e "- Snapdragon Flight board must have the latest platform BSP and flight controller addon installed"
|
|
|
|
echo -e "- mini-dm must be installed on host computer (see https://github.com/ATLFlight/ATLFlightDocs/blob/master/UserGuide.md#adsp)"
|
|
|
|
echo -e "- PX4 software was built and binaries are in their usual locations in the tree\n"
|
|
|
|
echo -e "USAGE:\n ${0} [-m mode] [-i] [-t] [-l <minidm-path>]"
|
|
|
|
echo -e " -m --> Build mode (0 = default mode, 1 = legacy mode)"
|
|
|
|
echo -e " -i --> Install the PX4 binaries"
|
|
|
|
echo -e " -t --> Test PX4 on target"
|
|
|
|
echo -e " -l --> location of the mini-dm executable (Default: ${minidmPath})"
|
|
|
|
echo -e " -h --> Display this help information"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Parse the command line options
|
|
|
|
while getopts "m:l:ith" opt;
|
|
|
|
do
|
|
|
|
case $opt in
|
|
|
|
m)
|
|
|
|
if [ $OPTARG -gt $MODE_MAX ]; then
|
|
|
|
echo "Invalid mode: $OPTARG (max allowed is $MODE_MAX)"
|
|
|
|
exit $EXIT_ERROR
|
|
|
|
fi
|
|
|
|
mode=$OPTARG
|
|
|
|
echo "Will run the script in mode $mode."
|
|
|
|
;;
|
|
|
|
i)
|
|
|
|
install=1
|
|
|
|
;;
|
|
|
|
t)
|
|
|
|
test=1
|
|
|
|
;;
|
|
|
|
l)
|
|
|
|
minidmPath=$OPTARG
|
|
|
|
;;
|
|
|
|
h)
|
|
|
|
usage
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
:)
|
|
|
|
echo "Option -$OPTARG requires an argument" >&2
|
|
|
|
exit 1;;
|
|
|
|
?)
|
|
|
|
echo "Unknown arg $opt"
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
# Install the PX4 binaries
|
|
|
|
installpx4
|
|
|
|
|
|
|
|
# Run the sanity test
|
|
|
|
testpx4
|
|
|
|
|
|
|
|
exit $result
|
|
|
|
|