mirror of https://github.com/OpenIPC/firmware.git
106 lines
2.3 KiB
Bash
Executable File
106 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
help() {
|
|
echo -e "\n=== GPIO usage ===\n"
|
|
|
|
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() {
|
|
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
|
|
[ ! -f /sys/class/gpio/gpio$1/direction ] && echo "Error: No direction file!" && exit
|
|
echo out > /sys/class/gpio/gpio$1/direction
|
|
fi
|
|
}
|
|
|
|
write(){
|
|
echo $1 > /sys/class/gpio/gpio$2/value
|
|
}
|
|
|
|
read() {
|
|
[ ! -f /sys/class/gpio/gpio$1/value ] && echo "Error: GPIO-$1 is not set" && exit
|
|
echo $(cat /sys/class/gpio/gpio$1/value)
|
|
}
|
|
|
|
unexport() {
|
|
if [ -d /sys/class/gpio/gpio$1 ]; then
|
|
echo $1 > /sys/class/gpio/unexport
|
|
else
|
|
echo "GPIO-${1} is not exported."
|
|
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
|
|
case $1 in
|
|
set)
|
|
exp $2
|
|
echo "Setting GPIO-$2 to HI"
|
|
write 1 $2
|
|
;;
|
|
|
|
clear)
|
|
exp $2
|
|
echo "Setting GPIO-$2 to LOW"
|
|
write 0 $2
|
|
;;
|
|
|
|
toggle)
|
|
exp $2
|
|
if [ $(read $2) -eq 0 ]; then
|
|
echo "Setting GPIO-$2 to HI"
|
|
write 1 $2
|
|
else
|
|
echo "Setting GPIO-$2 to LOW"
|
|
write 0 $2
|
|
fi
|
|
;;
|
|
|
|
unexport)
|
|
unexport $2
|
|
;;
|
|
|
|
read)
|
|
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
|
|
;;
|
|
esac
|
|
else
|
|
help
|
|
fi
|