# This shell script used to control GPIO port on IGKBoard
|
|
direction=out
|
sysdir=/sys/class/gpio/
|
pinbase=0
|
groupin=32
|
|
pinnum=
|
pindir=
|
action=
|
|
set -u
|
|
# RedLed: GPIO01_IO11 GreenLed: GPIO01_IO10 BlueLed: GPIO05_IO09
|
function usage()
|
{
|
echo "Show pinmap Usage: $0 [-v]"
|
echo "Output set Usage: $0 GPIO01_IO11 [1/0]"
|
echo "Input read Usage: $0 [-i] GPIO01_IO11"
|
echo "Unexport Usage: $0 [-u] GPIO01_IO11"
|
exit;
|
}
|
|
function show_pinmap()
|
{
|
echo "
|
+-------------+-------------+---IGKBoard---+-------------+-------------+
|
| GPIO | Name | Physical | Name | GPIO |
|
+-------------+-------------+-----++------+-------------+-------------+
|
| 3.3v | 3.3v | 1 || 2 | 5v | 5v |
|
| GPIO1_IO03 | I2C1_SDA | 3 || 4 | 5v | 5v |
|
| GPIO1_IO02 | I2C1_SCL | 5 || 6 | GND | GND |
|
| GPIO1_IO18 | GPIO | 7 || 8 | UART2_TX | GPIO1_IO20 |
|
| GND | GND | 9 || 10 | UART2_RX | GPIO1_IO21 |
|
| GPIO1_IO24 | UART3_TX | 11 || 12 | UART3_RX | GPIO1_IO25 |
|
| GPIO1_IO28 | UART4_TX | 13 || 14 | GND | GND |
|
| GPIO1_IO29 | UART4_RX | 15 || 16 | UART7_TX | GPIO3_IO21 |
|
| 3.3v | 3.3v | 17 || 18 | UART7_RX | GPIO3_IO22 |
|
| GPIO3_IO27 | SPI1_MOSI | 19 || 20 | GND | GND |
|
| GPIO3_IO28 | SPI1_MISO | 21 || 22 | GPIO | GPIO3_IO23 |
|
| GPIO3_IO25 | SPI1_SCLK | 23 || 24 | SPI1_SS0 | GPIO3_IO26 |
|
| GND | GND | 25 || 26 | GPIO | GPIO3_IO24 |
|
| GPIO1_IO26 | CAN1_TX | 27 || 28 | PWM8 | GPIO1_IO15 |
|
| GPIO1_IO27 | CAN1_RX | 29 || 30 | GND | GND |
|
| GPIO1_IO22 | CAN2_TX | 31 || 32 | PWM7 | GPIO1_IO14 |
|
| GPIO1_IO23 | CAN2_RX | 33 || 34 | GND | GND |
|
| GPIO5_IO01 | GPIO | 35 || 36 | GPIO | GPIO1_IO11 |
|
| GPIO5_IO08 | GPIO | 37 || 38 | GPIO | GPIO1_IO10 |
|
| GND | GND | 39 || 40 | GPIO | GPIO5_IO09 |
|
+-------------+-------------+---IGKBoard--+-------------+-------------+
|
| GPIO | Name | Physical | Name | GPIO |
|
+-------------+-------------+-----++------+-------------+-------------+
|
"
|
exit 0;
|
}
|
|
function calc_pinum()
|
{
|
pinstr=$1
|
|
group=`echo $pinstr | cut -d_ -f1 | tr -cd "[0-9]"`
|
pin=`echo $pinstr | cut -d_ -f2 | tr -cd "[0-9]"`
|
|
|
group=`expr $group \- 1`
|
pinum=`expr $group \* $groupin + $pin + $pinbase`
|
pindir=$sysdir/gpio$pinum
|
|
#echo "INFO: GPIO $pinstr map to pinum[$pinum]"
|
}
|
|
function export_gpio()
|
{
|
if [ -e $pindir ] ; then
|
return ;
|
fi
|
|
echo $pinum > $sysdir/export
|
}
|
|
function unexport_gpio()
|
{
|
if [ ! -e $pindir ] ; then
|
return ;
|
fi
|
|
echo $pinum > $sysdir/unexport
|
}
|
|
function set_gpio()
|
{
|
echo out > $pindir/direction
|
echo $1 > $pindir/value
|
}
|
|
function read_gpio()
|
{
|
echo in > $pindir/direction
|
cat $pindir/value
|
}
|
|
if [[ $# -lt 1 ]] ; then
|
usage;
|
fi
|
|
while getopts "iuvh" OPTNAME
|
do
|
case "${OPTNAME}" in
|
"i")
|
direction=in
|
shift
|
;;
|
|
"u")
|
action=unexport;
|
shift
|
;;
|
|
"v")
|
show_pinmap;
|
shift
|
;;
|
|
"h")
|
usage;
|
;;
|
esac
|
done
|
|
calc_pinum $1
|
|
if [[ $action == unexport ]] ; then
|
unexport_gpio
|
exit;
|
fi
|
|
export_gpio
|
|
if [[ $direction == in ]] ; then
|
read_gpio
|
else
|
set_gpio $2
|
fi
|