Added search feature to GPIO command

pull/708/head
jayfan0 2023-04-02 15:02:26 +01:00
parent 7f7e251f96
commit b750f06f29
1 changed files with 46 additions and 9 deletions

View File

@ -1,18 +1,26 @@
#!/bin/sh #!/bin/sh
help() { help() {
echo "gpio <set|clear|toggle> <pin>" echo -e "\n=== GPIO usage ===\n"
echo "gpio <unexport|release> <pin>"
echo "gpio read <pin>" echo -e ">\t gpio <set|clear|toggle|unexport|read> <pin>\n"
echo -e "set\t\t = Output HI\nclear\t\t = Output LOW\ntoggle\t\t = Swap HI <> LOW\nunexport\t = Release GPIO pin back to the kernel space\nread\t\t = Read GPIO pin output state\n"
echo -e "---\n"
echo -e ">\t gpio search <from pin> <to pin>\n"
echo -e "Toggle a range of GPIO pins from HI to LOW"
echo -e "gpio search logs to syslog\n"
echo -e "==================\n"
} }
exp() { exp() {
if [ ! -d /sys/class/gpio/gpio$1 ]; then if [ ! -d /sys/class/gpio/gpio$1 ]; then
[ ! -f /sys/class/gpio/export ] && echo "Error: No export file!" && exit
echo $1 > /sys/class/gpio/export echo $1 > /sys/class/gpio/export
[ ! -f /sys/class/gpio/gpio$1/direction ] && echo "Error: No direction file!" && exit
echo out > /sys/class/gpio/gpio$1/direction echo out > /sys/class/gpio/gpio$1/direction
elif [ $(cat /sys/class/gpio/gpio$1/direction) = "in" ]; then
echo Pin $1 is currently configured as input. Be careful!
exit 0
fi fi
} }
@ -21,37 +29,57 @@ write(){
} }
read() { read() {
[ ! -f /sys/class/gpio/gpio$1/value ] && echo "Error: GPIO-$1 is not set" && exit
echo $(cat /sys/class/gpio/gpio$1/value) echo $(cat /sys/class/gpio/gpio$1/value)
} }
unexport() { unexport() {
if [ -d /sys/class/gpio/gpio$1 ]; then if [ -d /sys/class/gpio/gpio$1 ]; then
echo $1 > /sys/class/gpio/unexport echo $1 > /sys/class/gpio/unexport
else
echo "GPIO-${1} is not exported."
fi fi
} }
search() {
echo -e "Start blink (output) on GPIO range $1 to $2\n"
for pin in $(seq $1 $2); do
echo "================================="
exp ${pin} && echo " Exported GPIO-${pin} from kernel space" && echo " Set GPIO-${pin} to OUTPUT mode"
write 0 ${pin} && echo " Set GPIO-${pin} to LO level" ; sleep 1
write 1 ${pin} && echo " Set GPIO-${pin} to HI level" ; sleep 1
echo in > /sys/class/gpio/gpio${pin}/direction && echo " Set GPIO-${pin} to INPUT mode"
unexport ${pin} && echo " Unexported GPIO-${pin}"
logger HELLO - ${pin}
done
}
if [ -n $1 ] && [ -n $2 ] && [ $2 -eq $2 ]; then if [ -n $1 ] && [ -n $2 ] && [ $2 -eq $2 ]; then
case $1 in case $1 in
set) set)
exp $2 exp $2
echo "Setting GPIO-$2 to HI"
write 1 $2 write 1 $2
;; ;;
clear) clear)
exp $2 exp $2
echo "Setting GPIO-$2 to LOW"
write 0 $2 write 0 $2
;; ;;
toggle) toggle)
exp $2 exp $2
if [ read -eq 0 ]; then if [ $(read $2) -eq 0 ]; then
echo "Setting GPIO-$2 to HI"
write 1 $2 write 1 $2
else else
echo "Setting GPIO-$2 to LOW"
write 0 $2 write 0 $2
fi fi
;; ;;
unexport|release) unexport)
unexport $2 unexport $2
;; ;;
@ -59,10 +87,19 @@ if [ -n $1 ] && [ -n $2 ] && [ $2 -eq $2 ]; then
echo $(read $2) echo $(read $2)
;; ;;
search)
if [ ! -z $3 ] && [ $3 -eq $3 ]; then
search $2 $3
else
echo -e "\n Caution: Toggling single pin. Use <gpio search <from pin> <to pin> to search a range.\n"
search $2 $2
fi
;;
*) *)
help help
;; ;;
esac esac
else else
help help
fi fi