From 0c6579914c3ce99b15481b1dc05e820a2a15f763 Mon Sep 17 00:00:00 2001 From: Robert Wolterman Date: Tue, 5 Jul 2016 20:50:49 -0500 Subject: [PATCH] Implementing alternate names per issue #7, still need to pull the pin names/alt-names/keys into the readme --- source/common.c | 180 ++++++++++++++++++++++-------------------- source/common.h | 2 + test/gptest.py | 205 ++++++++++++++++++++++++++++-------------------- 3 files changed, 219 insertions(+), 168 deletions(-) diff --git a/source/common.c b/source/common.c index a5254a4..6441f7b 100644 --- a/source/common.c +++ b/source/common.c @@ -50,90 +50,88 @@ SOFTWARE. int setup_error = 0; int module_setup = 0; - -// I have no idea if this table is correct, we shall see - Robert Wolterman pins_t pins_info[] = { - { "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1}, - { "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1}, - { "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1}, - { "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1}, - { "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1}, - { "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1}, - { "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1}, - { "TWI1-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1}, - { "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1}, - { "TWI1-SCK", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1}, - { "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1}, - { "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1}, - { "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1}, - { "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1}, - { "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1}, - { "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1}, - { "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1}, - { "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1}, - { "UART1-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1}, - { "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1}, - { "UART1-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1}, - { "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1}, - { "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1}, - { "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1}, - { "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1}, - { "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1}, - { "LRADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0}, - { "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1}, - { "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1}, - { "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1}, - { "XIO-P2", "U14_15", 2, BASE_METHOD_XIO, -1, -1}, - { "XIO-P3", "U14_16", 3, BASE_METHOD_XIO, -1, -1}, - { "XIO-P4", "U14_17", 4, BASE_METHOD_XIO, -1, -1}, - { "XIO-P5", "U14_18", 5, BASE_METHOD_XIO, -1, -1}, - { "XIO-P6", "U14_19", 6, BASE_METHOD_XIO, -1, -1}, - { "XIO-P7", "U14_20", 7, BASE_METHOD_XIO, -1, -1}, - { "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1}, - { "AP-EINT1", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1}, - { "AP-EINT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1}, - { "TWI2-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1}, - { "TWI2-SCK", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1}, - { "CSIPCK", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1}, - { "CSICK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1}, - { "CSIHSYNC", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1}, - { "CSIVSYNC", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1}, - { "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1}, - { "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1}, - { "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1}, - { "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1}, - { "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1}, - { "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1}, - { "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1}, - { "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1}, - { "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1}, - { NULL, NULL, -1, 0, -1, -1} + { "GND", "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1}, + { "CHG-IN", "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1}, + { "VCC-5V", "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1}, + { "VCC-3V3", "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1}, + { "TS", "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1}, + { "VCC-1V8", "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1}, + { "BAT", "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1}, + { "TWI1-SDA", "KPD-I2C-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1}, + { "PWRON", "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1}, + { "TWI1-SCK", "KPD-I2C-SCL", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1}, + { "X1", "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1}, + { "X2", "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1}, + { "Y1", "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1}, + { "Y2", "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D2", "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1}, + { "PWM0", "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1}, + { "LCD-D4", "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D3", "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D6", "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D5", "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D10", "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D7", "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D12", "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D11", "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D14", "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D13", "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D18", "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D15", "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D20", "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D19", "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D22", "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D21", "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-CLK", "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-D23", "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-VSYNC", "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-HSYNC", "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1}, + { "LCD-DE", "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1}, + { "VCC-5V", "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1}, + { "UART1-TX", "UART-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1}, + { "HPL", "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1}, + { "UART1-RX", "UART-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1}, + { "HPCOM", "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1}, + { "FEL", "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1}, + { "HPR", "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1}, + { "VCC-3V3", "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1}, + { "MICM", "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1}, + { "LRADC", "ADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0}, + { "MICIN1", "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1}, + { "XIO-P0", "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1}, + { "XIO-P1", "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1}, + { "XIO-P2", "GPIO1", "U14_15", 2, BASE_METHOD_XIO, -1, -1}, + { "XIO-P3", "GPIO2", "U14_16", 3, BASE_METHOD_XIO, -1, -1}, + { "XIO-P4", "GPIO3", "U14_17", 4, BASE_METHOD_XIO, -1, -1}, + { "XIO-P5", "GPIO4", "U14_18", 5, BASE_METHOD_XIO, -1, -1}, + { "XIO-P6", "GPIO5", "U14_19", 6, BASE_METHOD_XIO, -1, -1}, + { "XIO-P7", "GPIO6", "U14_20", 7, BASE_METHOD_XIO, -1, -1}, + { "GND", "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1}, + { "AP-EINT1", "KPD-INT", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1}, + { "AP-EINT3", "AP-INT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1}, + { "TWI2-SDA", "I2C-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1}, + { "TWI2-SCK", "I2C-SCL", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1}, + { "CSIPCK", "SPI-SEL", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1}, + { "CSICK", "SPI-CLK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1}, + { "CSIHSYNC", "SPI-MOSI", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1}, + { "CSIVSYNC", "SPI-MISO", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1}, + { "CSID0", "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1}, + { "CSID1", "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1}, + { "CSID2", "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1}, + { "CSID3", "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1}, + { "CSID4", "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1}, + { "CSID5", "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1}, + { "CSID6", "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1}, + { "CSID7", "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1}, + { "GND", "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1}, + { NULL, NULL, NULL, -1, 0, -1, -1} }; @@ -265,6 +263,17 @@ int lookup_gpio_by_name(const char *name) return -1; } +int lookup_gpio_by_altname(const char *altname) +{ + pins_t *p; + for (p = pins_info; p->altname != NULL; ++p) { + if (strcmp(p->altname, altname) == 0) { + return gpio_number(p); + } + } + return -1; +} + int lookup_ain_by_key(const char *key) { pins_t *p; @@ -363,7 +372,10 @@ int get_gpio_number(const char *key, int *gpio) if (*gpio <= 0) { *gpio = lookup_gpio_by_name(key); if (*gpio <= 0) { - status = -1; /* error */ + *gpio = lookup_gpio_by_altname(key); + if (*gpio <=0) { + status = -1; /* error */ + } } } return status; diff --git a/source/common.h b/source/common.h index 63cf77b..f27777f 100644 --- a/source/common.h +++ b/source/common.h @@ -62,6 +62,7 @@ SOFTWARE. typedef struct pins_t { const char *name; + const char *altname; /* alternate name as referenced on pocketchip pin header */ const char *key; int gpio; /* port number to use under /sys/class/gpio */ int base_method; /* modifier for port number; see BASE_METHOD_... */ @@ -86,6 +87,7 @@ int get_xio_base(void); int gpio_number(pins_t *pin); int lookup_gpio_by_key(const char *key); int lookup_gpio_by_name(const char *name); +int lookup_gpio_by_altname(const char *altname); int lookup_ain_by_key(const char *key); int lookup_ain_by_name(const char *name); int copy_key_by_key(const char *input_key, char *key); diff --git a/test/gptest.py b/test/gptest.py index fcc8fce..d6bdca1 100755 --- a/test/gptest.py +++ b/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) +