blob: 5ed13e2a01c9e19857ac77c7d1fd0862775e35f0 [file] [log] [blame]
#!/usr/bin/env python
import sys
import os
import getopt
import obmc_system_config as System
import obmc.system
def printUsage():
print '\nUsage:'
print 'gpioutil -n GPIO_NAME [-v value]'
print 'gpioutil -i GPIO_NUM -d <DIRECTION = in,out,falling,rising,both> [-v value]'
print 'gpioutil -p PIN_NAME -d <DIRECTION = in,out,falling,rising,both> [-v value]'
print 'gpioutil -l PIN_NAME (lookup pin name only)'
exit(1)
if (len(sys.argv) < 2):
printUsage()
# Pop the command name and point to the args
sys.argv.pop(0)
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)
current_direction = self.read(self.getPath('direction'))
if current_direction != self.direction:
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 = obmc.system.convertGpio(arg)
elif opt in ("-l"):
gpio_name = obmc.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']
if (gpio_info.has_key('gpio_num')):
gpio_name = str(gpio_info['gpio_num'])
else:
gpio_name = str(obmc.system.convertGpio(gpio_info['gpio_pin']))
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