mirror of
https://github.com/xtacocorex/CHIP_IO
synced 2025-07-20 12:53:22 +00:00
Implementing alternate names per issue #7, still need to pull the pin names/alt-names/keys into the readme
This commit is contained in:
205
test/gptest.py
205
test/gptest.py
@ -4,202 +4,239 @@ import CHIP_IO.GPIO as GPIO
|
||||
import time
|
||||
import threading
|
||||
|
||||
DO_APEINT1_TEST = False
|
||||
DO_APEINT3_TEST = False
|
||||
DO_XIOP2_TEST = True
|
||||
|
||||
num_callbacks = 0
|
||||
|
||||
|
||||
def myfuncallback(channel):
|
||||
global num_callbacks
|
||||
num_callbacks += 1
|
||||
print "CALLBACK LIKE DRAKE IN HOTLINE BLING"
|
||||
print("CALLBACK LIKE DRAKE IN HOTLINE BLING")
|
||||
|
||||
|
||||
loopfunction_exit = False
|
||||
|
||||
|
||||
def loopfunction():
|
||||
print "LOOP FUNCTION"
|
||||
print("LOOP FUNCTION")
|
||||
for i in xrange(4):
|
||||
if loopfunction_exit:
|
||||
break
|
||||
if i % 2:
|
||||
print "SETTING CSID0 LOW (i=", i, ")"
|
||||
mystr = "SETTING CSID0 LOW (i=%d)" % i
|
||||
print(mystr)
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
else:
|
||||
print "SETTING CSID0 HIGH (i=", i, ")"
|
||||
mystr = "SETTING CSID0 HIGH (i=%d)" % i
|
||||
print(mystr)
|
||||
GPIO.output("CSID0", GPIO.HIGH)
|
||||
print "SLEEPING"
|
||||
print("SLEEPING")
|
||||
time.sleep(1)
|
||||
|
||||
num_errs = 0
|
||||
|
||||
print("RUNNING GPIO SELF TEST")
|
||||
GPIO.selftest(0)
|
||||
|
||||
GPIO.setup("XIO-P0", GPIO.IN)
|
||||
print("\nVERIFYING SIMPLE FUNCTIONALITY")
|
||||
GPIO.setup("GPIO1", GPIO.IN)
|
||||
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.HIGH)
|
||||
if (GPIO.input("XIO-P0") != GPIO.HIGH):
|
||||
print "A high output on CSI0 does not lead to a high input on XIO-P0."
|
||||
print "Perhaps you forgot to connect them?"
|
||||
if (GPIO.input("GPIO1") != GPIO.HIGH):
|
||||
print(" A high output on CSI0 does not lead to a high input on XIO-P2.")
|
||||
print(" Perhaps you forgot to connect them?")
|
||||
num_errs += 1
|
||||
else:
|
||||
print(" Able to use alternate names for GPIO")
|
||||
GPIO.cleanup()
|
||||
|
||||
GPIO.setup("U14_13", GPIO.IN) # XIO-P0
|
||||
GPIO.setup("U14_15", GPIO.IN) # XIO-P0
|
||||
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.LOW)
|
||||
if (GPIO.input("XIO-P0") != GPIO.LOW):
|
||||
print "A low output on CSI0 does not lead to a low input on XIO-P0."
|
||||
print "Perhaps you forgot to connect them?"
|
||||
if (GPIO.input("XIO-P2") != GPIO.LOW):
|
||||
print(" A low output on CSI0 does not lead to a low input on XIO-P2.")
|
||||
print(" Perhaps you forgot to connect them?")
|
||||
num_errs += 1
|
||||
else:
|
||||
print(" Able to use Pin Header+Number for GPIO")
|
||||
GPIO.cleanup()
|
||||
|
||||
GPIO.setup("XIO-P0", GPIO.IN)
|
||||
GPIO.setup("XIO-P2", GPIO.IN)
|
||||
GPIO.setup("U14_31", GPIO.OUT) # CSID0
|
||||
|
||||
# VERIFY SIMPLE FUNCTIONALITY
|
||||
print "VERIFY SIMPLE FUNCTIONALITY"
|
||||
|
||||
print "READING XIO-PI"
|
||||
print("READING XIO-P2")
|
||||
GPIO.output("CSID0", GPIO.HIGH)
|
||||
assert(GPIO.input("XIO-P0") == GPIO.HIGH)
|
||||
assert(GPIO.input("XIO-P2") == GPIO.HIGH)
|
||||
|
||||
GPIO.output("CSID0", GPIO.LOW)
|
||||
print "LOW", GPIO.input("XIO-P0")
|
||||
assert(GPIO.input("XIO-P0") == GPIO.LOW)
|
||||
print "LOW", GPIO.input("GPIO1")
|
||||
assert(GPIO.input("GPIO1") == GPIO.LOW)
|
||||
|
||||
print("SWAP GPIO WIRES FOR EDGE DETECTION TESTS AS NEEDED")
|
||||
raw_input("PRESS ENTER WHEN READY TO START EDGE DETECTION TESTS")
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - AP-EINT1
|
||||
print "SETTING UP RISING EDGE DETECTION ON AP-EINT1"
|
||||
GPIO.setup("AP-EINT1", GPIO.IN)
|
||||
print "adding event detect"
|
||||
GPIO.add_event_detect("AP-EINT1", GPIO.RISING)
|
||||
if DO_APEINT1_TEST:
|
||||
print("\nSETTING UP RISING EDGE DETECTION ON AP-EINT1")
|
||||
GPIO.setup("AP-EINT1", GPIO.IN)
|
||||
GPIO.add_event_detect("AP-EINT1", GPIO.RISING)
|
||||
|
||||
print "VERIFYING EDGE DETECT"
|
||||
f = open("/sys/class/gpio/gpio193/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "rising\n")
|
||||
GPIO.remove_event_detect("AP-EINT1")
|
||||
print("VERIFYING EDGE DETECT")
|
||||
f = open("/sys/class/gpio/gpio193/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "rising\n")
|
||||
GPIO.remove_event_detect("AP-EINT1")
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - AP-EINT3
|
||||
print "SETTING UP BOTH EDGE DETECTION ON AP-EINT3"
|
||||
GPIO.setup("AP-EINT3", GPIO.IN)
|
||||
GPIO.add_event_detect("AP-EINT3", GPIO.BOTH)
|
||||
if DO_APEINT3_TEST:
|
||||
print("\nSETTING UP BOTH EDGE DETECTION ON AP-EINT3")
|
||||
GPIO.setup("AP-EINT3", GPIO.IN)
|
||||
GPIO.add_event_detect("AP-EINT3", GPIO.BOTH)
|
||||
|
||||
print "VERIFYING EDGE DETECT"
|
||||
f = open("/sys/class/gpio/gpio35/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "both\n")
|
||||
GPIO.remove_event_detect("AP-EINT3")
|
||||
print("VERIFYING EDGE DETECT")
|
||||
f = open("/sys/class/gpio/gpio35/edge", "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "both\n")
|
||||
GPIO.remove_event_detect("AP-EINT3")
|
||||
|
||||
# ==============================================
|
||||
# EDGE DETECTION - EXPANDED GPIO
|
||||
print "SETTING UP FALLING EDGE DETECTION ON XIO-P0"
|
||||
GPIO.add_event_detect("XIO-P0", GPIO.FALLING, myfuncallback)
|
||||
if DO_XIOP2_TEST:
|
||||
print("\nSETTING UP FALLING EDGE DETECTION ON XIO-P2")
|
||||
GPIO.add_event_detect("XIO-P2", GPIO.FALLING, myfuncallback)
|
||||
|
||||
print "VERIFYING EDGE DETECT"
|
||||
base = GPIO.get_gpio_base()
|
||||
gfile = "/sys/class/gpio/gpio%d/edge" % base
|
||||
f = open(gfile, "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "falling\n")
|
||||
print("VERIFYING EDGE DETECT")
|
||||
base = GPIO.get_gpio_base()
|
||||
gfile = "/sys/class/gpio/gpio%d/edge" % (base + 2)
|
||||
f = open(gfile, "r")
|
||||
edge = f.read()
|
||||
f.close()
|
||||
assert(edge == "falling\n")
|
||||
|
||||
# LOOP WRITING ON CSID0 TO HOPEFULLY GET CALLBACK TO WORK
|
||||
print "WAITING FOR CALLBACKS"
|
||||
print("WAITING FOR CALLBACKS")
|
||||
loopfunction()
|
||||
print "num_callbacks=", num_callbacks
|
||||
mystr = " num_callbacks = %d" % num_callbacks
|
||||
print(mystr)
|
||||
|
||||
print "PRESS CONTROL-C TO EXIT IF SCRIPT GETS STUCK"
|
||||
GPIO.remove_event_detect("XIO-P0")
|
||||
print("PRESS CONTROL-C TO EXIT IF SCRIPT GETS STUCK")
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
try:
|
||||
# WAIT FOR EDGE
|
||||
t = threading.Thread(target=loopfunction)
|
||||
t.start()
|
||||
print "WAITING FOR EDGE"
|
||||
GPIO.wait_for_edge("XIO-P0", GPIO.FALLING)
|
||||
print "WE'VE FALLEN LIKE COOLIO'S CAREER"
|
||||
print("WAITING FOR EDGE")
|
||||
if DO_APEINT1_TEST:
|
||||
GPIO.wait_for_edge("AP-EINT1", GPIO.FALLING)
|
||||
if DO_APEINT3_TEST:
|
||||
GPIO.wait_for_edge("AP-EINT3", GPIO.FALLING)
|
||||
if DO_XIOP2_TEST:
|
||||
GPIO.wait_for_edge("XIO-P2", GPIO.FALLING)
|
||||
# THIS SHOULD ONLY PRINT IF WE'VE HIT THE EDGE DETECT
|
||||
print("WE'VE FALLEN LIKE COOLIO'S CAREER")
|
||||
except:
|
||||
pass
|
||||
|
||||
print "Exit thread"
|
||||
print("Exit thread")
|
||||
loopfunction_exit = True
|
||||
t.join() # Wait till the thread exits.
|
||||
GPIO.remove_event_detect("XIO-P0")
|
||||
GPIO.remove_event_detect("XIO-P2")
|
||||
|
||||
print "TESTING ERRORS THROWN WHEN SPECIFYING EDGE DETECTION ON UNAUTHORIZED GPIO"
|
||||
print("\n** BAD DAY SCENARIOS **")
|
||||
print(" ")
|
||||
print("TESTING ERRORS THROWN WHEN SPECIFYING EDGE DETECTION ON UNAUTHORIZED GPIO")
|
||||
GPIO.setup("CSID1", GPIO.IN)
|
||||
try:
|
||||
GPIO.add_event_detect("CSID1", GPIO.FALLING, myfuncallback)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "TESTING ERRORS THROWN WHEN SETTING UP AN ALREADY EXPORTED GPIO"
|
||||
print("TESTING ERRORS THROWN WHEN SETTING UP AN ALREADY EXPORTED GPIO")
|
||||
try:
|
||||
GPIO.setup("CSID0", GPIO.LOW)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "TESTING ERRORS THROWN WHEN WRITING TO A GPIO NOT SET UP"
|
||||
print("TESTING ERRORS THROWN WHEN WRITING TO A GPIO NOT SET UP")
|
||||
try:
|
||||
GPIO.output("CSID2", GPIO.LOW)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "TESTING ERRORS THROWN WHEN WRITING TO A SET UP GPIO WITH NO DIRECTION"
|
||||
print("TESTING ERRORS THROWN WHEN WRITING TO A SET UP GPIO WITH NO DIRECTION")
|
||||
try:
|
||||
GPIO.output("CSID1", GPIO.LOW)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "TESTING ERRORS THROWN FOR ILLEGAL GPIO"
|
||||
print("TESTING ERRORS THROWN FOR ILLEGAL GPIO")
|
||||
try:
|
||||
GPIO.setup("NOTUSED", GPIO.IN)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "TESTING ERRORS THROWN FOR NON-GPIO"
|
||||
print("TESTING ERRORS THROWN FOR NON-GPIO")
|
||||
try:
|
||||
GPIO.setup("FEL", GPIO.IN)
|
||||
print "Oops, it did not throw an exception! BUG!!!"
|
||||
print(" Oops, it did not throw an exception! BUG!!!")
|
||||
num_errs += 1
|
||||
except ValueError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
except RuntimeError, ex:
|
||||
print "error msg=", ex.args[0]
|
||||
mystr = " error msg = %s" % ex.args[0]
|
||||
print(mystr)
|
||||
pass
|
||||
|
||||
print "CLEANUP"
|
||||
print("GPIO CLEANUP")
|
||||
GPIO.cleanup()
|
||||
|
||||
print "done,", num_errs, " errors"
|
||||
mystr = "DONE: %d ERRORS" % num_errs
|
||||
print(mystr)
|
||||
|
||||
|
Reference in New Issue
Block a user