# 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 |      W1     |   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 
 |