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:
180
source/common.c
180
source/common.c
@ -50,90 +50,88 @@ SOFTWARE.
|
|||||||
int setup_error = 0;
|
int setup_error = 0;
|
||||||
int module_setup = 0;
|
int module_setup = 0;
|
||||||
|
|
||||||
|
|
||||||
// I have no idea if this table is correct, we shall see - Robert Wolterman
|
|
||||||
pins_t pins_info[] = {
|
pins_t pins_info[] = {
|
||||||
{ "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U13_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "CHG-IN", "CHG-IN", "U13_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "VCC-5V", "VCC-5V", "U13_3", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U13_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "VCC-3V3", "VCC-3V3", "U13_5", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "TS", "TS", "U13_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "VCC-1V8", "VCC-1V8", "U13_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "BAT", "BAT", "U13_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "TWI1-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1},
|
{ "TWI1-SDA", "KPD-I2C-SDA", "U13_9", 48, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "PWRON", "PWRON", "U13_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "TWI1-SCK", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1},
|
{ "TWI1-SCK", "KPD-I2C-SCL", "U13_11", 47, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U13_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "X1", "X1", "U13_13", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "X2", "X2", "U13_14", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "Y1", "Y1", "U13_15", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "Y2", "Y2", "U13_16", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D2", "LCD-D2", "U13_17", 98, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1},
|
{ "PWM0", "PWM0", "U13_18", 34, BASE_METHOD_AS_IS, 0, -1},
|
||||||
{ "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D4", "LCD-D4", "U13_19", 100, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D3", "LCD-D3", "U13_20", 99, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D6", "LCD-D6", "U13_21", 102, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D5", "LCD-D5", "U13_22", 101, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D10", "LCD-D10", "U13_23", 106, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D7", "LCD-D7", "U13_24", 103, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D12", "LCD-D12", "U13_25", 108, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D11", "LCD-D11", "U13_26", 107, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D14", "LCD-D14", "U13_27", 110, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D13", "LCD-D13", "U13_28", 109, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D18", "LCD-D18", "U13_29", 114, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D15", "LCD-D15", "U13_30", 111, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D20", "LCD-D20", "U13_31", 116, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D19", "LCD-D19", "U13_32", 115, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D22", "LCD-D22", "U13_33", 118, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D21", "LCD-D21", "U13_34", 117, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-CLK", "LCD-CLK", "U13_35", 120, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-D23", "LCD-D23", "U13_36", 119, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-VSYNC", "LCD-VSYNC", "U13_37", 123, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-HSYNC", "LCD-HSYNC", "U13_38", 122, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U13_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1},
|
{ "LCD-DE", "LCD-DE", "U13_40", 121, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U14_1", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "VCC-5V", "VCC-5V", "U14_2", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "UART1-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1},
|
{ "UART1-TX", "UART-TX", "U14_3", 195, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "HPL", "HPL", "U14_4", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "UART1-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1},
|
{ "UART1-RX", "UART-RX", "U14_5", 196, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "HPCOM", "HPCOM", "U14_6", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "FEL", "FEL", "U14_7", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "HPR", "HPR", "U14_8", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "VCC-3V3", "VCC-3V3", "U14_9", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "MICM", "MICM", "U14_10", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "LRADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0},
|
{ "LRADC", "ADC", "U14_11", -1, BASE_METHOD_AS_IS, -1, 0},
|
||||||
{ "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "MICIN1", "MICIN1", "U14_12", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P0", "XIO-P0", "U14_13", 0, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P1", "XIO-P1", "U14_14", 1, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P2", "U14_15", 2, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P2", "GPIO1", "U14_15", 2, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P3", "U14_16", 3, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P3", "GPIO2", "U14_16", 3, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P4", "U14_17", 4, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P4", "GPIO3", "U14_17", 4, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P5", "U14_18", 5, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P5", "GPIO4", "U14_18", 5, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P6", "U14_19", 6, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P6", "GPIO5", "U14_19", 6, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "XIO-P7", "U14_20", 7, BASE_METHOD_XIO, -1, -1},
|
{ "XIO-P7", "GPIO6", "U14_20", 7, BASE_METHOD_XIO, -1, -1},
|
||||||
{ "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U14_21", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U14_22", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "AP-EINT1", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1},
|
{ "AP-EINT1", "KPD-INT", "U14_23", 193, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "AP-EINT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1},
|
{ "AP-EINT3", "AP-INT3", "U14_24", 35, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "TWI2-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1},
|
{ "TWI2-SDA", "I2C-SDA", "U14_25", 50, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "TWI2-SCK", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1},
|
{ "TWI2-SCK", "I2C-SCL", "U14_26", 49, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSIPCK", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSIPCK", "SPI-SEL", "U14_27", 128, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSICK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSICK", "SPI-CLK", "U14_28", 129, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSIHSYNC", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1},
|
{ "CSIHSYNC", "SPI-MOSI", "U14_29", 130, BASE_METHOD_AS_IS, 1, -1},
|
||||||
{ "CSIVSYNC", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSIVSYNC", "SPI-MISO", "U14_30", 131, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1},
|
{ "CSID0", "CSID0", "U14_31", 132, BASE_METHOD_AS_IS, 1, -1},
|
||||||
{ "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID1", "CSID1", "U14_32", 133, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID2", "CSID2", "U14_33", 134, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID3", "CSID3", "U14_34", 135, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID4", "CSID4", "U14_35", 136, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID5", "CSID5", "U14_36", 137, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID6", "CSID6", "U14_37", 138, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1},
|
{ "CSID7", "CSID7", "U14_38", 139, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U14_39", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1},
|
{ "GND", "GND", "U14_40", -1, BASE_METHOD_AS_IS, -1, -1},
|
||||||
{ NULL, NULL, -1, 0, -1, -1}
|
{ NULL, NULL, NULL, -1, 0, -1, -1}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +263,17 @@ int lookup_gpio_by_name(const char *name)
|
|||||||
return -1;
|
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)
|
int lookup_ain_by_key(const char *key)
|
||||||
{
|
{
|
||||||
pins_t *p;
|
pins_t *p;
|
||||||
@ -363,7 +372,10 @@ int get_gpio_number(const char *key, int *gpio)
|
|||||||
if (*gpio <= 0) {
|
if (*gpio <= 0) {
|
||||||
*gpio = lookup_gpio_by_name(key);
|
*gpio = lookup_gpio_by_name(key);
|
||||||
if (*gpio <= 0) {
|
if (*gpio <= 0) {
|
||||||
status = -1; /* error */
|
*gpio = lookup_gpio_by_altname(key);
|
||||||
|
if (*gpio <=0) {
|
||||||
|
status = -1; /* error */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
|
@ -62,6 +62,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
typedef struct pins_t {
|
typedef struct pins_t {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
const char *altname; /* alternate name as referenced on pocketchip pin header */
|
||||||
const char *key;
|
const char *key;
|
||||||
int gpio; /* port number to use under /sys/class/gpio */
|
int gpio; /* port number to use under /sys/class/gpio */
|
||||||
int base_method; /* modifier for port number; see BASE_METHOD_... */
|
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 gpio_number(pins_t *pin);
|
||||||
int lookup_gpio_by_key(const char *key);
|
int lookup_gpio_by_key(const char *key);
|
||||||
int lookup_gpio_by_name(const char *name);
|
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_key(const char *key);
|
||||||
int lookup_ain_by_name(const char *name);
|
int lookup_ain_by_name(const char *name);
|
||||||
int copy_key_by_key(const char *input_key, char *key);
|
int copy_key_by_key(const char *input_key, char *key);
|
||||||
|
205
test/gptest.py
205
test/gptest.py
@ -4,202 +4,239 @@ import CHIP_IO.GPIO as GPIO
|
|||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
DO_APEINT1_TEST = False
|
||||||
|
DO_APEINT3_TEST = False
|
||||||
|
DO_XIOP2_TEST = True
|
||||||
|
|
||||||
num_callbacks = 0
|
num_callbacks = 0
|
||||||
|
|
||||||
|
|
||||||
def myfuncallback(channel):
|
def myfuncallback(channel):
|
||||||
global num_callbacks
|
global num_callbacks
|
||||||
num_callbacks += 1
|
num_callbacks += 1
|
||||||
print "CALLBACK LIKE DRAKE IN HOTLINE BLING"
|
print("CALLBACK LIKE DRAKE IN HOTLINE BLING")
|
||||||
|
|
||||||
|
|
||||||
loopfunction_exit = False
|
loopfunction_exit = False
|
||||||
|
|
||||||
|
|
||||||
def loopfunction():
|
def loopfunction():
|
||||||
print "LOOP FUNCTION"
|
print("LOOP FUNCTION")
|
||||||
for i in xrange(4):
|
for i in xrange(4):
|
||||||
if loopfunction_exit:
|
if loopfunction_exit:
|
||||||
break
|
break
|
||||||
if i % 2:
|
if i % 2:
|
||||||
print "SETTING CSID0 LOW (i=", i, ")"
|
mystr = "SETTING CSID0 LOW (i=%d)" % i
|
||||||
|
print(mystr)
|
||||||
GPIO.output("CSID0", GPIO.LOW)
|
GPIO.output("CSID0", GPIO.LOW)
|
||||||
else:
|
else:
|
||||||
print "SETTING CSID0 HIGH (i=", i, ")"
|
mystr = "SETTING CSID0 HIGH (i=%d)" % i
|
||||||
|
print(mystr)
|
||||||
GPIO.output("CSID0", GPIO.HIGH)
|
GPIO.output("CSID0", GPIO.HIGH)
|
||||||
print "SLEEPING"
|
print("SLEEPING")
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
num_errs = 0
|
num_errs = 0
|
||||||
|
|
||||||
|
print("RUNNING GPIO SELF TEST")
|
||||||
GPIO.selftest(0)
|
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)
|
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.HIGH)
|
||||||
if (GPIO.input("XIO-P0") != GPIO.HIGH):
|
if (GPIO.input("GPIO1") != GPIO.HIGH):
|
||||||
print "A high output on CSI0 does not lead to a high input on XIO-P0."
|
print(" A high output on CSI0 does not lead to a high input on XIO-P2.")
|
||||||
print "Perhaps you forgot to connect them?"
|
print(" Perhaps you forgot to connect them?")
|
||||||
num_errs += 1
|
num_errs += 1
|
||||||
|
else:
|
||||||
|
print(" Able to use alternate names for GPIO")
|
||||||
GPIO.cleanup()
|
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)
|
GPIO.setup("CSID0", GPIO.OUT, initial=GPIO.LOW)
|
||||||
if (GPIO.input("XIO-P0") != GPIO.LOW):
|
if (GPIO.input("XIO-P2") != GPIO.LOW):
|
||||||
print "A low output on CSI0 does not lead to a low input on XIO-P0."
|
print(" A low output on CSI0 does not lead to a low input on XIO-P2.")
|
||||||
print "Perhaps you forgot to connect them?"
|
print(" Perhaps you forgot to connect them?")
|
||||||
num_errs += 1
|
num_errs += 1
|
||||||
|
else:
|
||||||
|
print(" Able to use Pin Header+Number for GPIO")
|
||||||
GPIO.cleanup()
|
GPIO.cleanup()
|
||||||
|
|
||||||
GPIO.setup("XIO-P0", GPIO.IN)
|
GPIO.setup("XIO-P2", GPIO.IN)
|
||||||
GPIO.setup("U14_31", GPIO.OUT) # CSID0
|
GPIO.setup("U14_31", GPIO.OUT) # CSID0
|
||||||
|
|
||||||
# VERIFY SIMPLE FUNCTIONALITY
|
print("READING XIO-P2")
|
||||||
print "VERIFY SIMPLE FUNCTIONALITY"
|
|
||||||
|
|
||||||
print "READING XIO-PI"
|
|
||||||
GPIO.output("CSID0", GPIO.HIGH)
|
GPIO.output("CSID0", GPIO.HIGH)
|
||||||
assert(GPIO.input("XIO-P0") == GPIO.HIGH)
|
assert(GPIO.input("XIO-P2") == GPIO.HIGH)
|
||||||
|
|
||||||
GPIO.output("CSID0", GPIO.LOW)
|
GPIO.output("CSID0", GPIO.LOW)
|
||||||
print "LOW", GPIO.input("XIO-P0")
|
print "LOW", GPIO.input("GPIO1")
|
||||||
assert(GPIO.input("XIO-P0") == GPIO.LOW)
|
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
|
# EDGE DETECTION - AP-EINT1
|
||||||
print "SETTING UP RISING EDGE DETECTION ON AP-EINT1"
|
if DO_APEINT1_TEST:
|
||||||
GPIO.setup("AP-EINT1", GPIO.IN)
|
print("\nSETTING UP RISING EDGE DETECTION ON AP-EINT1")
|
||||||
print "adding event detect"
|
GPIO.setup("AP-EINT1", GPIO.IN)
|
||||||
GPIO.add_event_detect("AP-EINT1", GPIO.RISING)
|
GPIO.add_event_detect("AP-EINT1", GPIO.RISING)
|
||||||
|
|
||||||
print "VERIFYING EDGE DETECT"
|
print("VERIFYING EDGE DETECT")
|
||||||
f = open("/sys/class/gpio/gpio193/edge", "r")
|
f = open("/sys/class/gpio/gpio193/edge", "r")
|
||||||
edge = f.read()
|
edge = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
assert(edge == "rising\n")
|
assert(edge == "rising\n")
|
||||||
GPIO.remove_event_detect("AP-EINT1")
|
GPIO.remove_event_detect("AP-EINT1")
|
||||||
|
|
||||||
# ==============================================
|
# ==============================================
|
||||||
# EDGE DETECTION - AP-EINT3
|
# EDGE DETECTION - AP-EINT3
|
||||||
print "SETTING UP BOTH EDGE DETECTION ON AP-EINT3"
|
if DO_APEINT3_TEST:
|
||||||
GPIO.setup("AP-EINT3", GPIO.IN)
|
print("\nSETTING UP BOTH EDGE DETECTION ON AP-EINT3")
|
||||||
GPIO.add_event_detect("AP-EINT3", GPIO.BOTH)
|
GPIO.setup("AP-EINT3", GPIO.IN)
|
||||||
|
GPIO.add_event_detect("AP-EINT3", GPIO.BOTH)
|
||||||
|
|
||||||
print "VERIFYING EDGE DETECT"
|
print("VERIFYING EDGE DETECT")
|
||||||
f = open("/sys/class/gpio/gpio35/edge", "r")
|
f = open("/sys/class/gpio/gpio35/edge", "r")
|
||||||
edge = f.read()
|
edge = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
assert(edge == "both\n")
|
assert(edge == "both\n")
|
||||||
GPIO.remove_event_detect("AP-EINT3")
|
GPIO.remove_event_detect("AP-EINT3")
|
||||||
|
|
||||||
# ==============================================
|
# ==============================================
|
||||||
# EDGE DETECTION - EXPANDED GPIO
|
# EDGE DETECTION - EXPANDED GPIO
|
||||||
print "SETTING UP FALLING EDGE DETECTION ON XIO-P0"
|
if DO_XIOP2_TEST:
|
||||||
GPIO.add_event_detect("XIO-P0", GPIO.FALLING, myfuncallback)
|
print("\nSETTING UP FALLING EDGE DETECTION ON XIO-P2")
|
||||||
|
GPIO.add_event_detect("XIO-P2", GPIO.FALLING, myfuncallback)
|
||||||
|
|
||||||
print "VERIFYING EDGE DETECT"
|
print("VERIFYING EDGE DETECT")
|
||||||
base = GPIO.get_gpio_base()
|
base = GPIO.get_gpio_base()
|
||||||
gfile = "/sys/class/gpio/gpio%d/edge" % base
|
gfile = "/sys/class/gpio/gpio%d/edge" % (base + 2)
|
||||||
f = open(gfile, "r")
|
f = open(gfile, "r")
|
||||||
edge = f.read()
|
edge = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
assert(edge == "falling\n")
|
assert(edge == "falling\n")
|
||||||
|
|
||||||
# LOOP WRITING ON CSID0 TO HOPEFULLY GET CALLBACK TO WORK
|
# LOOP WRITING ON CSID0 TO HOPEFULLY GET CALLBACK TO WORK
|
||||||
print "WAITING FOR CALLBACKS"
|
print("WAITING FOR CALLBACKS")
|
||||||
loopfunction()
|
loopfunction()
|
||||||
print "num_callbacks=", num_callbacks
|
mystr = " num_callbacks = %d" % num_callbacks
|
||||||
|
print(mystr)
|
||||||
|
|
||||||
print "PRESS CONTROL-C TO EXIT IF SCRIPT GETS STUCK"
|
print("PRESS CONTROL-C TO EXIT IF SCRIPT GETS STUCK")
|
||||||
GPIO.remove_event_detect("XIO-P0")
|
GPIO.remove_event_detect("XIO-P2")
|
||||||
try:
|
try:
|
||||||
# WAIT FOR EDGE
|
# WAIT FOR EDGE
|
||||||
t = threading.Thread(target=loopfunction)
|
t = threading.Thread(target=loopfunction)
|
||||||
t.start()
|
t.start()
|
||||||
print "WAITING FOR EDGE"
|
print("WAITING FOR EDGE")
|
||||||
GPIO.wait_for_edge("XIO-P0", GPIO.FALLING)
|
if DO_APEINT1_TEST:
|
||||||
print "WE'VE FALLEN LIKE COOLIO'S CAREER"
|
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:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
print "Exit thread"
|
print("Exit thread")
|
||||||
loopfunction_exit = True
|
loopfunction_exit = True
|
||||||
t.join() # Wait till the thread exits.
|
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)
|
GPIO.setup("CSID1", GPIO.IN)
|
||||||
try:
|
try:
|
||||||
GPIO.add_event_detect("CSID1", GPIO.FALLING, myfuncallback)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
print "TESTING ERRORS THROWN WHEN SETTING UP AN ALREADY EXPORTED GPIO"
|
print("TESTING ERRORS THROWN WHEN SETTING UP AN ALREADY EXPORTED GPIO")
|
||||||
try:
|
try:
|
||||||
GPIO.setup("CSID0", GPIO.LOW)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
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:
|
try:
|
||||||
GPIO.output("CSID2", GPIO.LOW)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
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:
|
try:
|
||||||
GPIO.output("CSID1", GPIO.LOW)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
print "TESTING ERRORS THROWN FOR ILLEGAL GPIO"
|
print("TESTING ERRORS THROWN FOR ILLEGAL GPIO")
|
||||||
try:
|
try:
|
||||||
GPIO.setup("NOTUSED", GPIO.IN)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
print "TESTING ERRORS THROWN FOR NON-GPIO"
|
print("TESTING ERRORS THROWN FOR NON-GPIO")
|
||||||
try:
|
try:
|
||||||
GPIO.setup("FEL", GPIO.IN)
|
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
|
num_errs += 1
|
||||||
except ValueError, ex:
|
except ValueError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
except RuntimeError, ex:
|
except RuntimeError, ex:
|
||||||
print "error msg=", ex.args[0]
|
mystr = " error msg = %s" % ex.args[0]
|
||||||
|
print(mystr)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
print "CLEANUP"
|
print("GPIO CLEANUP")
|
||||||
GPIO.cleanup()
|
GPIO.cleanup()
|
||||||
|
|
||||||
print "done,", num_errs, " errors"
|
mystr = "DONE: %d ERRORS" % num_errs
|
||||||
|
print(mystr)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user