]> git.feebdaed.xyz Git - 0xmirror/WiringPi.git/commitdiff
#264 unit test for gpio wfis
authormstroh76 <m.stroh76@gmail.com>
Sat, 31 May 2025 17:06:30 +0000 (19:06 +0200)
committermstroh76 <m.stroh76@gmail.com>
Sat, 31 May 2025 17:06:30 +0000 (19:06 +0200)
gpio/test/gpio_test61_wfi.sh [new file with mode: 0755]

diff --git a/gpio/test/gpio_test61_wfi.sh b/gpio/test/gpio_test61_wfi.sh
new file mode 100755 (executable)
index 0000000..2576dec
--- /dev/null
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+NC='\033[0m' # Reset color 
+
+DEBOUNCE=100000
+
+UNITTEST_OK=true
+TIMEOUT=20
+iteration=0
+GPIOIN=26
+GPIOOUT=19
+
+wait_with_timeout() {
+    local pid=$1
+    local timeout=$2
+    iteration=0
+
+    local toggle=0
+    while kill -0 "$pid" 2>/dev/null; do
+        if [ $iteration -ge $timeout ]; then
+            kill -9 "$pid" 2>/dev/null
+            echo -e "${RED}ERROR: timeout ${timeout}s reached ${NC}"
+            return -1
+        fi
+        echo -n .
+        sleep 1
+        toggle=$((1 - toggle))
+        gpio -g write $GPIOOUT $toggle
+        echo -n ${toggle}
+        sleep 0.2
+        iteration=$((iteration + 1))
+    done
+
+    wait "$pid"
+    return $?
+}
+
+wfis_test() {
+    local edge=$1
+    local set_iter=$2
+    local set_iterOK=$3
+    local set_EXITCODE=$4
+
+    #wfi test
+    if [ $iteration -eq 0 ]; then
+        gpio -g wfis $GPIOIN "$edge" $DEBOUNCE &
+    else
+        gpio -g wfis $GPIOIN "$edge" $DEBOUNCE "$set_iter" &
+    fi
+    GPIO_PID=$!
+    wait_with_timeout "$GPIO_PID" "$TIMEOUT"
+    EXIT_CODE=$?
+    echo 
+    if [ $EXIT_CODE -lt 3 ]; then
+
+        if [ $EXIT_CODE -eq "$set_EXITCODE" ]; then
+
+            if [ "$set_iter" -gt 0 ]; then
+                if [ "$iteration" -eq "$set_iterOK" ]; then
+                    echo -e "${GREEN}wfis "$edge" $set_iter iteration passt (exit code $EXIT_CODE)${NC}"
+                else
+                    echo -e "${RED}wfis "$edge" failed, $iteration iterations of $set_iter is wrong${NC}"
+                    UNITTEST_OK=false
+                fi
+            else
+                echo -e "${GREEN}wfi "$edge" passt (exit code $EXIT_CODE)${NC}"
+            fi
+
+        else
+            echo -e "${RED}wfis "$edge" failed - wrong exit code $EXIT_CODE${NC}"
+            UNITTEST_OK=false
+        fi
+
+    else  # negativ
+        echo -e "${RED}wfidb "$edge" failed (exit code $EXIT_CODE)${NC}"
+        UNITTEST_OK=false
+    fi
+}
+
+echo 
+echo Unit test gpio GPIO${GPIOOUT} and GPIO${GPIOIN} - functions: mode, write, wfidb
+echo ------------------------------------------------------------------
+echo 
+
+#prepare trigger out
+gpio -g mode $GPIOOUT out
+
+gpio -g write $GPIOOUT 1
+wfis_test "rising" 0 0 2
+
+gpio -g write $GPIOOUT 0
+wfis_test "falling" 0 0 1
+
+gpio -g write $GPIOOUT 1
+wfis_test "both" 0 0 1
+
+gpio -g write $GPIOOUT 0
+wfis_test "both" 0 0 2
+
+
+#wfi iteration test
+
+gpio -g write $GPIOOUT 0
+wfis_test "rising" 4 7 2
+
+gpio -g write $GPIOOUT 1
+wfis_test "falling" 4 8 1
+
+gpio -g write $GPIOOUT 0
+wfis_test "both" 3 3 2
+
+gpio -g write $GPIOOUT 1
+wfis_test "both" 3 4 1
+
+gpio -g write $GPIOOUT 0
+gpio -g mode $GPIOOUT in
+
+### #wfi timeout test
+gpio -g wfis $GPIOIN rising $DEBOUNCE 2 4 &
+GPIO_PID=$!
+wait_with_timeout "$GPIO_PID" "$TIMEOUT"
+EXIT_CODE=$?
+echo 
+if [ $EXIT_CODE -eq 255 ]; then
+    echo -e "${GREEN}wfi timeout passed (exit code $EXIT_CODE)${NC}"
+else
+    echo -e "${RED}wfi timeout failed (code $EXIT_CODE)${NC}"
+    UNITTEST_OK=false
+fi
+
+
+if [ ${UNITTEST_OK} = true ]; then
+    echo -e "\n\n${GREEN}Unit test result OK.${NC}"
+    exit 0
+else
+    echo -e "\n\n${RED}Unit test result failed.${NC}"
+    exit 1
+fi