From fee75c61a18d8c8d6a32406575ed5ede79d01446 Mon Sep 17 00:00:00 2001 From: bharathr Date: Wed, 30 Nov 2016 18:00:27 -0800 Subject: [PATCH] Added PX4 sanity test script for Snapdragon Flight --- Tools/px4_snapflight_sanitytest.sh | 273 +++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 Tools/px4_snapflight_sanitytest.sh diff --git a/Tools/px4_snapflight_sanitytest.sh b/Tools/px4_snapflight_sanitytest.sh new file mode 100644 index 0000000000..2d4fdc7c30 --- /dev/null +++ b/Tools/px4_snapflight_sanitytest.sh @@ -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 ]" + 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 +