bharathr
8 years ago
committed by
Lorenz Meier
1 changed files with 273 additions and 0 deletions
@ -0,0 +1,273 @@ |
|||||||
|
#!/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 |
||||||
|
readonly MODE_MAX=$MODE_LEGACY |
||||||
|
|
||||||
|
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=( |
||||||
|
"EKF alignment complete" |
||||||
|
"AdspCoreSvc: Started successfully" |
||||||
|
"loading BLSP configuration" |
||||||
|
) |
||||||
|
|
||||||
|
# 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() { |
||||||
|
|
||||||
|
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 |
||||||
|
|
||||||
|
# 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..." |
||||||
|
adb shell reboot |
||||||
|
sleep 45 |
||||||
|
|
||||||
|
echo -e "Now installing PX4 binaries..." |
||||||
|
# Copy binaries to the target |
||||||
|
if [ $mode == 0 ]; then |
||||||
|
# copy default binaries |
||||||
|
adb push $workspace/build_qurt_eagle_legacy_driver_default/src/firmware/qurt/libpx4.so /usr/share/data/adsp |
||||||
|
adb push $workspace/build_qurt_eagle_legacy_driver_default/src/firmware/qurt/libpx4muorb_skel.so /usr/share/data/adsp |
||||||
|
adb push $workspace/build_posix_eagle_legacy_driver_default/src/firmware/posix/px4 /home/linaro |
||||||
|
adb push $workspace/posix-configs/eagle/flight/px4.config /usr/share/data/adsp |
||||||
|
adb push $workspace/posix-configs/eagle/flight/mainapp.config /home/linaro |
||||||
|
else |
||||||
|
# copy legacy binaries |
||||||
|
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_legacy_driver_default/src/firmware/posix/px4 /home/linaro |
||||||
|
adb push $workspace/posix-configs/eagle/200qx/px4.config /usr/share/data/adsp |
||||||
|
adb push $workspace/posix-configs/eagle/200qx/mainapp.config /home/linaro |
||||||
|
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 |
||||||
|
${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 |
||||||
|
adb shell "/home/linaro/px4 /home/linaro/mainapp.config" > px4.log 2>&1 & |
||||||
|
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 |
||||||
|
|
Loading…
Reference in new issue