bharathr
8 years ago
committed by
Lorenz Meier
1 changed files with 273 additions and 0 deletions
@ -0,0 +1,273 @@
@@ -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