#!/bin/bash

# Utility to control the GPIO pins of the Raspberry Pi
# Can be called as a script or sourced so that the gpio
# function can be called directly

function gpio()
{
    local verb=$1
    local pin=$2
    local value=$3

    local pins=($GPIO_PINS)
    if [[ "$pin" -lt ${#pins[@]} ]]; then
        local pin=${pins[$pin]}
    fi

    local gpio_path=/sys/class/gpio
    local pin_path=$gpio_path/gpio$pin

    case $verb in
        read)
            cat $pin_path/value
        ;;

        write)
            sudo sh -c "echo $value > $pin_path/value"
        ;;

        mode)
            if [ ! -e $pin_path ]; then
               sudo sh -c "echo $pin > $gpio_path/export"
            fi
            sudo sh -c "echo $value > $pin_path/direction"
        ;;

        state)
            if [ -e $pin_path ]; then
                local dir=$(cat $pin_path/direction)
                local val=$(cat $pin_path/value)
                echo "$dir $val"
            fi
        ;;
        clean)
            sudo sh -c "echo 0 > $pin_path/value"
            sudo sh -c "echo $pin > $gpio_path/unexport"
        ;;

    esac
}

# Just invoke our function if the script is called directly
if [ "$BASH_SOURCE" == "$0" ]; then
    gpio $@
fi
