new gpio utility
diff --git a/bin/gpioutil b/bin/gpioutil
new file mode 100755
index 0000000..c39c4cf
--- /dev/null
+++ b/bin/gpioutil
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+
+import sys
+import os
+import getopt
+
+
+def printUsage():
+ print '\nUsage:'
+ print 'gpioutil SYSTEM_NAME -n GPIO_NAME [-v value]'
+ print 'gpioutil SYSTEM_NAME -i GPIO_NUM -d <DIRECTION = in,out,falling,rising,both> [-v value]'
+ print 'gpioutil SYSTEM_NAME -p PIN_NAME -d <DIRECTION = in,out,falling,rising,both> [-v value]'
+ print 'gpioutil SYSTEM_NAME -l PIN_NAME (lookup pin name only)'
+ exit(1)
+
+
+
+if (len(sys.argv) < 3):
+ printUsage()
+
+sys.argv.pop(0)
+libr = sys.argv.pop(0)
+System = __import__(libr)
+
+GPIO_SYSFS = '/sys/class/gpio/'
+
+class Gpio:
+ def __init__(self,gpio_num):
+ self.gpio_num = str(gpio_num)
+ self.direction = ''
+ self.interrupt = ''
+ self.exported = False
+
+ def getPath(self,name):
+ return GPIO_SYSFS+'gpio'+self.gpio_num+'/'+name
+
+ def export(self):
+ if (os.path.exists(GPIO_SYSFS+'export') == False):
+ raise Exception("ERROR - GPIO_SYSFS path does not exist. Does this platform support GPIOS?")
+ if (os.path.exists(GPIO_SYSFS+'gpio'+self.gpio_num) == False):
+ self.write(GPIO_SYSFS+'export',self.gpio_num)
+
+ self.exported = True
+
+ def setDirection(self,dir):
+ if (self.exported == False):
+ raise Exception("ERROR - Not exported: "+self.getPath())
+
+ self.direction = ''
+ self.interrupt = ''
+ if (dir == 'in' or dir == 'out'):
+ self.direction = dir
+ elif (dir == 'rising' or
+ dir == 'falling' or
+ dir == 'both'):
+ self.direction = 'in'
+ self.interrupt = dir
+ self.write(self.getPath('edge'),self.interrupt)
+ else:
+ raise Exception("ERROR - Invalid Direction: "+dir)
+
+
+ self.write(self.getPath('direction'),self.direction)
+
+ def setValue(self,value):
+ if (value == '0'):
+ self.write(self.getPath('value'),'0')
+ elif (value == '1'):
+ self.write(self.getPath('value'),'1')
+ else:
+ raise Exception("ERROR - Invalid value: "+value)
+
+ def getValue(self):
+ return self.read(self.getPath('value'))
+
+ def write(self,path,data):
+ f = open(path,'w')
+ f.write(data)
+ f.close()
+
+
+ def read(self,path):
+ f = open(path,'r')
+ data = f.readline()
+ f.close()
+ return data
+
+
+
+if __name__ == '__main__':
+
+ try:
+ opts, args = getopt.getopt(sys.argv,"hn:i:d:v:p:l:")
+ except getopt.GetoptError:
+ printUsage()
+
+
+
+ lookup = False
+ gpio_name = ""
+ value = ""
+ direction = ""
+ for opt, arg in opts:
+ if opt == '-h':
+ printUsage()
+
+ elif opt in ("-n"):
+ gpio_name = arg
+ lookup = True
+ elif opt in ("-i"):
+ gpio_name = arg
+ elif opt in ("-d"):
+ direction = arg
+ elif opt in ("-v"):
+ value = arg
+ elif opt in ("-p"):
+ gpio_name = System.convertGpio(arg)
+ elif opt in ("-l"):
+ gpio_name = System.convertGpio(arg)
+ print gpio_name
+ exit(0)
+
+ gpio_info = {}
+ if (lookup == True):
+ if (System.GPIO_CONFIG.has_key(gpio_name) == False):
+ print "ERROR - GPIO Name doesn't exist"
+ print "Valid names: "
+ for n in System.GPIO_CONFIG:
+ print "\t"+n
+ exit(0)
+ gpio_info = System.GPIO_CONFIG[gpio_name]
+ direction = gpio_info['direction']
+ gpio_name = str(gpio_info['gpio_num'])
+ print "GPIO ID: "+gpio_name+"; DIRECTION: "+direction
+
+
+ ## Rules
+ if (gpio_name == ""):
+ print "ERROR - Gpio not specified"
+ printUsage()
+
+ if (direction == "in" and value != ""):
+ print "ERROR - Value cannot be specified when direction = in"
+ printUsage()
+
+ gpio = Gpio(gpio_name)
+ try:
+ gpio.export()
+ if (direction != ""):
+ gpio.setDirection(direction)
+
+ if (value == ""):
+ print gpio.getValue()
+ else:
+ gpio.setValue(value)
+
+ except Exception as e:
+ print e
+