123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- #!/bin/sh
- ## Check if tests must be run
- RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
- if [ "x${RUN_ENV_VAR}" != "x1" ]; then
- exit 0
- fi
- rw
- ## Lock file
- LOCK_FILE=/var/lock/assembly_tests.lock
- if [ -f ${LOCK_FILE} ]; then
- echo "${LOCK_FILE} already exists"
- exit 1
- fi
- touch ${LOCK_FILE}
- ## Register ourself as the running FunKey task for receiving USR1
- ## signal for shutting down
- pid record $$
- ## Binaries
- PROD_SCREEN_BIN="/usr/local/sbin/funkey_prod_screens"
- GET_PROC_UID="/usr/local/sbin/get_sid"
- ## Global Vars
- test_failed=false
- stop_loop=false
- ## Get proc unique id
- proc_uid=$($GET_PROC_UID)
- ## Defines
- VERSION="1.01"
- LOG_FILE="/root/logs/assembly_tests/assy_tests_${proc_uid}.log"
- [ -d $(dirname $LOG_FILE) ] || mkdir -p $(dirname $LOG_FILE)
- MAGNET_DETECTED_FILE="/root/.assembly_tests_magnet_detected"
- QR_CODE_IMG="/root/logs/assembly_tests/qrcode.png"
- [ -d $(dirname $QR_CODE_IMG) ] || mkdir -p $(dirname $QR_CODE_IMG)
- ## Function called when SIGURS1 is caught while waiting for it
- function function_magnet_detected_ok {
- ## Kill scheduled shutdown
- pkill -f "powerdown schedule"
- ## Write magnet_detected file
- if $test_failed; then
- echo "1" > $MAGNET_DETECTED_FILE
- else
- echo "0" > $MAGNET_DETECTED_FILE
- fi
- ro
- ## Clean shutdown
- echo " Caught SIGUSR1 signal: magnet detected"
- echo " Rebooting now..."
- powerdown now
- exit 0
- }
- ## Function called when SIGUSR1 is caught while NOT waiting for it
- function function_magnet_detected_ko {
- echo "ERROR: Caught SIGUSR1 signal (magnet detected!)"
- ## Kill the funkey_prod_screen binary
- killall -s USR1 "${PROD_SCREEN_BIN}" > /dev/null 2>&1
- sync
- }
- ## Function that launches all tests before magnet
- function launch_tests_up_until_magnet {
- ## Force not to process SIGUSR1 events
- trap function_magnet_detected_ko SIGUSR1
- ## Clear graphical framebuffers
- termfix_all > /dev/null
- ## Clear all notifs
- notif clear
- ## Test if log file aleady exists
- if [[ -f $LOG_FILE ]]; then
- echo -e "\n\n ----------------------- RESTART ---------------------- \n\n"
- fi
- echo "FunKey S prod tests - v${VERSION}"
- echo "UID: $proc_uid"
- ## Set date from raspberry and test USB at the same time
- # Here we can launch an ssh command such as :
- # date -s '@$(ssh root@rapsberry date +%s)'
- # This allows also to test the USB connection
- echo "DATE: "$(date) - $(date +%s)
- echo "USB:"
- echo " ifconfig usb0:"
- ifconfig usb0 2>&1
- echo " OK"
- sync
- ## Battery tests
- echo "TEST BATTERY:"
- sync
- $PROD_SCREEN_BIN WAIT_BATTERY 2>&1
- res="$?"
- echo " $res"
- if [[ "$res" == "0" ]]; then
- echo " OK"
- else
- echo " FAIL"
- test_failed=true
- fi
- sync
- ## Dump power info from AXP209
- echo "AXP209 DUMP BATTERY:"
- cat /sys/class/power_supply/axp20x-battery/uevent
- echo "AXP209 DUMP USB:"
- cat /sys/class/power_supply/axp20x-usb//uevent
- sync
- ## Launch prod screen test display
- echo "TEST DISPLAY:"
- sync
- $PROD_SCREEN_BIN DISPLAY 2>&1
- res="$?"
- echo " $res"
- if [[ "$res" == "0" ]]; then
- echo " OK"
- else
- echo " FAILED"
- test_failed=true
- return
- fi
- sync
- ## Launch prod screen test buttons
- echo "TEST BUTTONS:"
- sync
- $PROD_SCREEN_BIN BUTTONS 2>&1
- res="$?"
- echo " $res"
- if [[ "$res" == "0" ]]; then
- echo " OK"
- else
- echo " FAILED"
- test_failed=true
- return
- fi
- sync
- ## Speaker test: set volume to 80%
- echo "TEST SPEAKER:"
- volume_level=90
- echo " Set volume to ${volume_level}%"
- volume_set $volume_level 2>&1
- ## Play 1kHz sine wave
- echo " Play 2kHz sine wave"
- notif set 0 "^^^ PLAYING SINE WAVE...^^^ ...... ^ ... ...^ .. ..^.. .^. . .^ . ..^ .. ..^ ... ...^ .......^^"
- speaker-test -t sine -s 1 -f 2000 >/dev/null 2>&1
- if [ $? -ne 0 ]; then
- echo " ERROR: SPEAKER SINE"
- test_failed=true
- return
- fi
- sync
- notif clear
- ## Launch prod screen test speaker
- $PROD_SCREEN_BIN SPEAKER 2>&1
- res="$?"
- echo " $res"
- if [[ "$res" == "0" ]]; then
- echo " OK"
- else
- echo " FAILED"
- test_failed=true
- return
- fi
- sync
- ## LED test: turn on LED
- echo "TEST LED:"
- echo " Turning LED on"
- test-led 1 2>&1
- if [ $? -ne 0 ]; then
- echo " ERROR LED I2C"
- test_failed=true
- return
- fi
- sync
- ## Launch prod screen test LED
- $PROD_SCREEN_BIN LED 2>&1
- res="$?"
- echo " $res"
- echo " Turning LED off"
- test-led 0 2>&1
- if [ $? -ne 0 ]; then
- echo " ERROR LED I2C"
- test_failed=true
- return
- fi
- if [[ "$res" == "0" ]]; then
- echo " OK"
- else
- echo " FAILED"
- test_failed=true
- return
- fi
- sync
- # Catch SIGUSR1 events
- #trap function_magnet_detected_ok SIGUSR1
- ## Launch prod screen test magnet
- echo "TEST MAGNET:"
- sync
- $PROD_SCREEN_BIN MAGNET 2>&1
- res="$?"
- echo " $res"
- ## Register ourself back as the running FunKey task for receiving USR1
- ## signal for shutting down
- pid record $$
- # check magnet test result
- if [[ "$res" == "0" ]]; then
- echo " OK"
- function_magnet_detected_ok
- else
- echo " FAILED"
- test_failed=true
- return
- fi
- sync
- }
- ## Function that launches all tests after reboot from magnet
- function launch_tests_after_magnet {
- ## Force not to process SIGUSR1 events
- trap function_magnet_detected_ko SIGUSR1
- ## Clear graphical framebuffers
- #termfix_all > /dev/null
- ## Clear all notifs
- #notif clear
- # Log from magnet file
- echo " Found file: " $MAGNET_DETECTED_FILE
- magnet_file_data=$(cat $MAGNET_DETECTED_FILE)
- echo " $magnet_file_data"
- sync
-
- # Read file and set test_failed accordingly
- if [[ "$magnet_file_data" == "1" ]]; then
- test_failed=true
- fi
- # Remove magnet detected file & Tell that magnet test was successful
- rm $MAGNET_DETECTED_FILE
- echo " OK"
- sync
- ## Print validation message
- if $test_failed; then
- echo "TESTS FINISHED BUT SOME FAILED"
- return
- else
- echo "ALL TESTS PASSED SUCCESSFULLY"
- fi
- sync
- ## Launch prod test validate screen
- echo "MANUAL VALIDATION SCREEN:"
- sync
- $PROD_SCREEN_BIN VALIDATE 2>&1
- res="$?"
- if [[ "$res" == "0" ]]; then
- echo " $res"
- echo " OK"
- else
- echo " $res"
- echo " FAIL"
- test_failed=true
- return
- fi
- sync
- ## Bypassing QRcode screen
- perform_QRcode_test=false
- if $perform_QRcode_test; then
- ## Show datamatrix
- test -f $QR_CODE_IMG && rm $QR_CODE_IMG
- echo "Writing QR code img to $QR_CODE_IMG"
- #echo -n $proc_uid | dmtxwrite > $QR_CODE_IMG
- qrencode -m 1 -o $QR_CODE_IMG "$proc_uid"
- echo "QRCODE STEP:"
- sync
- $PROD_SCREEN_BIN SHOW_IMAGE $QR_CODE_IMG 2>&1
- res="$?"
- if [[ "$res" == "0" ]]; then
- echo " $res"
- echo " OK"
- else
- echo " $res"
- echo " FAIL"
- test_failed=true
- return
- fi
- sync
- fi
- }
- ## Function that displays the fail screen
- function launch_fail_screen {
-
- ## Launch prod test fail screen
- echo "TEST FAILED:"
- $PROD_SCREEN_BIN FAIL 2>&1
- res="$?"
- if [[ "$res" == "0" ]]; then
- echo " $res"
- echo " RESTARTING"
- else
- echo " $res"
- echo " STOP"
- stop_loop=true
- fi
- }
- ## Main loop for tests
- while ! $stop_loop; do
- # Reset test_failed
- test_failed=false
-
- # Check if first start or instant action
- if [[ ! -f $MAGNET_DETECTED_FILE ]]; then
- launch_tests_up_until_magnet 2>&1 >> $LOG_FILE
- else
- launch_tests_after_magnet 2>&1 >> $LOG_FILE
- ## Exit loop condition
- if ! $test_failed; then
- stop_loop=true
- fi
- fi
- # Show fail screen if some tests failed
- if $test_failed; then
- launch_fail_screen >> $LOG_FILE
- fi
- done
- ## Remove lock file
- rm $LOCK_FILE
- ro
- ## Exit processes
- if ! $test_failed; then
- ## Remove run file => no assembly tests on next run
- fw_setenv assembly_tests 0
- sync
- exit 0
- else
- ## Shutdown
- powerdown now &
- exit 1
- fi
|