diff --git a/build b/build old mode 100644 new mode 100755 index a01f2ff..e648a68 --- a/build +++ b/build @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # check if sudo is required and save the result as ${PFX}: [[ ${EUID} -ne 0 ]] && PFX='sudo ' || PFX='' diff --git a/gpio/readall.c b/gpio/readall.c index 64ffb93..660aca9 100644 --- a/gpio/readall.c +++ b/gpio/readall.c @@ -80,40 +80,6 @@ static char *alts [] = "IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "OFF" } ; -/* guenter static int physToWpi [64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 8, -1, - 9, -1, - 7, 15, - -1, 16, - 0, 1, - 2, -1, - 3, 4, - -1, 5, - 12, -1, - 13, 6, - 14, 10, - -1, 11, // 25, 26 - 30, 31, // Actually I2C, but not used - 21, -1, - 22, 26, - 23, -1, - 24, 27, - 25, 28, - -1, 29, - -1, -1, - -1, -1, - -1, -1, - -1, -1, - -1, -1, - -1, -1, - -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1 -} ; -guenter ende */ - // guenter anfang static int physToWpi [64] = { @@ -130,89 +96,64 @@ static int physToWpi [64] = 12, -1, //19, 20 13, 6, //21, 22 14, 10, //23, 24 - -1, 11, //25, 26 - 30, 31, //27, 28 - 21, -1, //29, 30 - 22, 26, //31, 32 - 23, -1, //33, 34 - 24, 27, //35, 36 - 25, 28, //37, 38 - -1, 29, //39, 40 - -1, -1, 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55 - -1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63 + + -1, -1, //25, 26 + -1, -1, //27, 28 + -1, -1, //29, 30 + -1, -1, //31, 32 + -1, -1, //33, 34 + -1, -1, //35, 36 + + 17, 18, //37, 38 + + /* 39~63 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, } ; //guenter ende - -/* guenter static char *physNames [64] = -{ - NULL, - - " 3.3v", "5v ", - " SDA.1", "5V ", - " SCL.1", "0v ", - "GPIO. 7", "TxD ", - " 0v", "RxD ", - "GPIO. 0", "GPIO. 1", - "GPIO. 2", "0v ", - "GPIO. 3", "GPIO. 4", - " 3.3v", "GPIO. 5", - " MOSI", "0v ", - " MISO", "GPIO. 6", - " SCLK", "CE0 ", - " 0v", "CE1 ", - " SDA.0", "SCL.0 ", - "GPIO.21", "0v ", - "GPIO.22", "GPIO.26", - "GPIO.23", "0v ", - "GPIO.24", "GPIO.27", - "GPIO.25", "GPIO.28", - " 0v", "GPIO.29", - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - "GPIO.17", "GPIO.18", - "GPIO.19", "GPIO.20", - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, -} ; guenter ende */ - //guenter orange pi static char *physNames [64] = { NULL, +/* 24 Pin */ + " 3.3V", "5V ", + " GPIOA12", "5V ", + " GPIOA11", "0v ", + " GPIOG11", "GPIOG6 ", + " 0v", "GPIOG7 ", + " GPIOA0", "GPIOA6 ", + " GPIOA2", "0v ", + " GPIOA3", "GPIOG8 ", + " 3.3v", "GPIOG9 ", + " GPIOC0", "0v ", + " GPIOC1", "GPIOA1 ", + " GPIOC2", "GPIOC3 ", - " 3.3v", "5v ", - " SDA.0", "5V ", - " SCL.0", "0v ", - " GPIO.7", "TxD3 ", - " 0v", "RxD3 ", - " RxD2", "GPIO.1 ", - " TxD2", "0v ", - " CTS2", "GPIO.4 ", - " 3.3v", "GPIO.5 ", - " MOSI", "0v ", - " MISO", "RTS2 ", - " SCLK", "CE0 ", - " 0v", "GPIO.11 ", - " SDA.1", "SCL.1 ", - " GPIO.21", "0v ", - " GPIO.22", "RTS1 ", - " GPIO.23", "0v ", - " GPIO.24", "CTS1 ", - " GPIO.25", "TxD1 ", - " 0v", "RxD1 ", - - " 0v", " 5v", - " GPIO.4", " GPIO.5", - +/* 12 Pin */ NULL, NULL, NULL, NULL, NULL, NULL, - "GPIO.17", "GPIO.18", - "GPIO.19", "GPIO.20", - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + +/* UART0, tx, rx */ + " GPIOA4", " GPIOA5", + + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL, NULL, + NULL } ; // guenter ende @@ -239,15 +180,19 @@ static void readallPhys (int physPin, int pair) printf (" | | ") ; else { - /**/ if (wpMode == WPI_MODE_GPIO) - pin = physPinToGpio (physPin) ; - else if (wpMode == WPI_MODE_PHYS) - pin = physPin ; - else - pin = physToWpi [physPin] ; + if (wpMode == WPI_MODE_GPIO) { + // printf("#### WPI_MODE_GPIO\n"); + pin = physPinToGpio (physPin) ; + } else if (wpMode == WPI_MODE_PHYS) { + // printf("#### WPI_MODE_PHYS\n"); + pin = physPin ; + } else { + // printf("#### Unknow Mode, physPin=%d, physToWpi [physPin] =%d\n", physPin, physToWpi [physPin]); + pin = physToWpi [physPin] ; + } - printf (" | %4s", alts [getAlt (pin)]) ; - printf (" | %d", digitalRead (pin)) ; + printf (" | %4s", alts [getAlt (pin)]) ; + printf (" | %d", digitalRead (pin)) ; } // Pin numbers: @@ -257,21 +202,27 @@ static void readallPhys (int physPin, int pair) printf (" |\n") ; return; } + + ++physPin ; + printf (" || %-2d", physPin) ; // Same, reversed - if (physToWpi [physPin] == -1) printf (" | | ") ; else { - /**/ if (wpMode == WPI_MODE_GPIO) - pin = physPinToGpio (physPin) ; - else if (wpMode == WPI_MODE_PHYS) - pin = physPin ; - else - pin = physToWpi [physPin] ; + if (wpMode == WPI_MODE_GPIO) { + // printf("#### WPI_MODE_GPIO\n"); + pin = physPinToGpio (physPin) ; + } else if (wpMode == WPI_MODE_PHYS) { + // printf("#### WPI_MODE_PHYS\n"); + pin = physPin ; + } else { + // printf("#### Unknow Mode, physPin=%d, physToWpi [physPin] =%d\n", physPin, physToWpi [physPin]); + pin = physToWpi [physPin] ; + } printf (" | %d", digitalRead (pin)) ; printf (" | %-4s", alts [getAlt (pin)]) ; @@ -279,7 +230,7 @@ static void readallPhys (int physPin, int pair) printf (" | %-5s", physNames [physPin]) ; - if (physToWpi [physPin] == -1) + if (physToWpi[physPin] == -1) printf (" | | ") ; else printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin)) ; @@ -293,19 +244,20 @@ void NanoPiReadAll(void) { int pin ; - printf (" +-----+-----+----------+------+---+-NanoPI M1+---+------+----------+-----+-----+\n") ; + printf (" +-----+-----+----------+------+---+-NanoPi NEO/NEO2--+------+----------+-----+-----+\n") ; printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ; printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ; - for (pin = 1 ; pin <= 40 ; pin += 2) + for (pin = 1 ; pin <= 24 ; pin += 2) readallPhys (pin, 1) ; printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ; printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ; - printf (" +-----+-----+----------+------+---+-NanoPI M1+---+------+----------+-----+-----+\n") ; + printf (" +-----+-----+----------+------+---+-NanoPi NEO/NEO2--+------+----------+-----+-----+\n") ; printf ("\n"); - printf (" +-----+----NanoPI M1 Debug UART---+----+\n") ; + + printf (" +-----+----NanoPi NEO/NEO2 Debug UART-+----+\n") ; printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ; printf (" +-----+-----+----------+------+---+----+\n") ; - for (pin = 41 ; pin < 45 ; pin++) { + for (pin = 37 ; pin <= 38 ; pin++) { readallPhys (pin, 0) ; } printf (" +-----+-----+----------+------+---+----+\n") ; diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c index 22d95ae..e8e3d8c 100644 --- a/wiringPi/wiringPi.c +++ b/wiringPi/wiringPi.c @@ -330,33 +330,41 @@ static int upDnConvert[3] = {7, 7, 5}; static int pinToGpio [64] ={ - 0, 6, // 0, 1 - 2, 3, // 2, 3 - 200, 201, // 4 5 - 1, 203, // 6, 7 - 12, 11, // 8, 9 - 67, 17, //10,11 - 64, 65, //12,13 - 66, 198, //14,15 - 199, -1, //16,17 - -1, -1, //18,19 - -1, 20, //20,21 - 21, 8, //22,23 - 13, 9, //24,25 - 7, 16, //26,27 - 15, 14, //28,29 - 19, 18, //30,31 + 0, //0 + /* 24 Pin */ + 6, 2, //1, 2 + 3, 200, //3, 4 + 201, 1, //5, 6 + 203, 12, //7, 8 + 11, 67, //9, 10 + -1, 64, //11, 12 + 65, 66, //13, 14 + 198, 199, //15, 16 + 4, 5, //17, 18 + -1, -1, //19, 20 + -1, 1, //21, 22 + -1, -1, //23, 24 - 4, 5, // 32, 33 Debug UART pins - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 47 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 63 + /* 12 Pin */ + -1, -1, //25, 26 + -1, -1, //27, 28 + -1, -1, //29, 30 + -1, -1, //31, 32 + -1, -1, //33, 34 + -1, -1, //35, 36 + + /* UART0 Tx,Rx */ + -1, -1, //37, 38 + + /* 39~63 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; // guenter neu ende -// nanopi m1 done +/* static int pinTobcm [64] ={ - 19, 18, //map to BCM GPIO0,1 12, 11, //map to BCM GPIO2,3 203, 20, //map to BCM GPIO4,5 @@ -376,6 +384,7 @@ static int pinTobcm [64] ={ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //45... 60 -1, -1, -1, -1 // ...63 }; +*/ // physToGpio: // Take a physical pin (1 through 26) and re-map it to the BCM_GPIO pin @@ -383,31 +392,37 @@ static int pinTobcm [64] ={ // Also add in the P5 connector, so the P5 pins are 3,4,5,6, so 53,54,55,56 -// nanopi m1 done +// nanopi neo2 static int physToGpio [64] ={ - -1, // 0 - -1, -1, // 1, 2 - 12, -1, // 3, 4 - 11, -1, // 5, 6 - 203, 198, // 7, 8 - -1, 199, // 9, 10 - 0, 6, //11, 12 - 2, -1, //13, 14 - 3, 200, //15, 16 - -1, 201, //17, 18 - 64, -1, //19, 20 - 65, 1, //21, 22 - 66, 67, //23, 24 - -1, 17, //25, 26 - 19, 18, //27, 28 - 20, -1, //29, 30 - 21, 7, //31, 32 - 8, -1, //33, 34 - 16, 13, //35, 36 - 9, 15, //37, 38 - -1, 14, //39, 40 - -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //41-> 55 - -1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63 + -1, + /* 24 Pin */ + -1, -1, //1, 2 + 12, -1, //3, 4 + 11, -1, //5, 6 + 203, 198, //7, 8 + -1, 199, //9, 10 + 0, 6, //11, 12 + 2, -1, //13, 14 + 3, 200, //15, 16 + -1, 201, //17, 18 + 64, -1, //19, 20 + 65, 1, //21, 22 + 66, 67, //23, 24 + + /* 12 Pin */ + -1, -1, //25, 26 + -1, -1, //27, 28 + -1, -1, //29, 30 + -1, -1, //31, 32 + -1, -1, //33, 34 + -1, -1, //35, 36 + + /* UART0 Tx,Rx */ + 4, 5, //37, 38 + + /* 39~63 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; // @@ -431,32 +446,32 @@ static int syspin [64] ={ static int physToPin [64] = //return wiringPI pin { - -1, // 0 - -1, -1, // 1, 2 - 8, -1, //3, 4 - 9, -1, //5, 6 - 7, 15, //7, 8 - -1, 16, //9,10 - 0, 1, //11,12 - 2, -1, //13,14 - 3, 4, //15,16 - -1, 5, //17,18 - 12, -1, //19,20 - 13, 6, //21,22 - 14, 10, //23, 24 - -1, 11, // 25, 26 + -1, // 0 + -1, -1, // 1, 2 + 8, -1, // 3, 4 + 9, -1, // 5, 6 + 7, 15, // 7, 8 + -1, 16, // 9, 10 + 0, 1, //11, 12 + 2, -1, //13, 14 + 3, 4, //15, 16 + -1, 5, //17, 18 + 12, -1, //19, 20 + 13, 6, //21, 22 + 14, 10, //23, 24 - 30, 31, //27, 28 - 21, -1, //29, 30 - 22, 26, //31, 32 - 23, -1, //33, 34 - 24, 27, //35, 36 - 25, 28, //37, 38 - -1, 29, //39, 40 - // Padding: + -1, -1, //25, 26 + -1, -1, //27, 28 + -1, -1, //29, 30 + -1, -1, //31, 32 + -1, -1, //33, 34 + -1, -1, //35, 36 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 + 17, 18, //37, 38 + + /* 39~63 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; // pins available on pin out by banks @@ -661,7 +676,7 @@ int sunxi_get_gpio_mode(int pin) { printf("read reg val: 0x%x offset:%d return: %d\n", regval, offset, reval); return reval; } else { - printf("line:%dpin number error\n", __LINE__); + printf("line:%d pin(=%d) number error\n", pin, __LINE__); return reval; } } @@ -903,8 +918,8 @@ int isA20(void) { } /*end 2014.09.18*/ -/*add for H3 guenter*/ -int isH3(void) { +/*add for NEO/NEO2 */ +int isNEO(void) { FILE *cpuFd; char line [120]; char *d; @@ -924,7 +939,7 @@ int isH3(void) { if (wiringPiDebug) printf("piboardRev: Hardware string: %s\n", line); - if (strstr(line, "sun8i") != NULL) //guenter von sun7i auf sun8i + if (strstr(line, "sun50i") != NULL || strstr(line, "sun8i") != NULL) { if (wiringPiDebug) printf("Hardware:%s\n", line); @@ -945,14 +960,14 @@ int isH3(void) { int piBoardRev(void) { /*add for orange pi guenter */ - if (isH3()) //guenter if(isA20()) + if (isNEO()) { version = BPRVER; if (wiringPiDebug) printf("piboardRev: %d\n", version); return BPRVER; } else { - piBoardRevOops("Is not H3 based board"); + piBoardRevOops("Is not NanoPi NEO/NEO2 based board"); } return 0; } @@ -982,8 +997,13 @@ void piBoardId(int *model, int *rev, int *mem, int *maker, int *overVolted) { fclose(cpuFd); - if (strncmp(line, "Revision", 8) != 0) - piBoardRevOops("No \"Revision\" line"); + if (strncmp (line, "Revision", 8) != 0){ + if(isNEO()){ + strcpy(line,"0000") ; + }else{ + piBoardRevOops ("No \"Revision\" line") ; + } + } // Chomp trailing CR/NL @@ -1088,7 +1108,8 @@ int getAlt(int pin) { else if (wiringPiMode == WPI_MODE_PHYS) pin = physToGpio[pin]; else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm + //pin = pinTobcm[pin]; + pin = pin; else return 0; if (-1 == pin) { @@ -1261,16 +1282,36 @@ void pinMode(int pin, int mode) { struct wiringPiNodeStruct *node = wiringPiNodes; if (wiringPiDebug) - printf("%s,%d,pin:%d,mode:%d\n", __func__, __LINE__, pin, mode); + printf("Func: %s, Line: %d,pin:%d,mode:%d\n", __func__, __LINE__, pin, mode); if ((pin & PI_GPIO_MASK) == 0) // On-board pin { - if (wiringPiMode == WPI_MODE_PINS) - pin = pinToGpio [pin]; - else if (wiringPiMode == WPI_MODE_PHYS) + if (wiringPiDebug) { + printf(""); + } + if (wiringPiMode == WPI_MODE_PINS) { + pin = pinToGpio [pin]; + if (wiringPiDebug) { + printf(">>> pinToGpio[pin] ret %d\n", pin); + } + } else if (wiringPiMode == WPI_MODE_PHYS) { pin = physToGpio[pin]; - else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm - else return; + if (wiringPiDebug) { + printf(">>> physToGpio[pin] ret %d\n", pin); + } + } else if (wiringPiMode == WPI_MODE_GPIO) { + // pin = pinTobcm[pin]; + pin = pin; + + if (wiringPiDebug) { + printf(">>> pinTobcm[pin] ret %d\n", pin); + } + + } else { + if (wiringPiDebug) { + printf(">>> unknow wiringPiMode\n"); + } + return; + } if (-1 == pin) /*VCC or GND return directly*/ { //printf("[%s:L%d] the pin:%d is invaild,please check it over!\n", __func__, __LINE__, pin); @@ -1328,7 +1369,8 @@ void pullUpDnControl(int pin, int pud) { else if (wiringPiMode == WPI_MODE_PHYS) pin = physToGpio[pin]; else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm + // pin = pinTobcm[pin]; + pin = pin; else return; if (wiringPiDebug) printf("%s,%d,pin:%d\n", __func__, __LINE__, pin); @@ -1359,43 +1401,60 @@ void pullUpDnControl(int pin, int pud) { int digitalRead(int pin) { char c; struct wiringPiNodeStruct *node = wiringPiNodes; + int oldPin = pin; if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin { - if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode - { + if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode + { + if (wiringPiDebug) { + printf("in digitalRead, wiringPiMode == WPI_MODE_GPIO_SYS\n"); + } - if (pin == 0) { - //printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__); - return 0; - } - if (syspin[pin] == -1) { - //printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__); - return 0; - } - if (sysFds [pin] == -1) { - if (wiringPiDebug) - printf("pin %d sysFds -1.%s,%d\n", pin, __func__, __LINE__); - return LOW; - } - if (wiringPiDebug) - printf("pin %d :%d.%s,%d\n", pin, sysFds [pin], __func__, __LINE__); - lseek(sysFds [pin], 0L, SEEK_SET); - read(sysFds [pin], &c, 1); - return (c == '0') ? LOW : HIGH; - } else if (wiringPiMode == WPI_MODE_PINS) - pin = pinToGpio [pin]; - else if (wiringPiMode == WPI_MODE_PHYS) - pin = physToGpio[pin]; - else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm - else - return LOW; - if (-1 == pin) { - printf("[%s:L%d] the pin:%d is invaild,please check it over!\n", __func__, __LINE__, pin); - return LOW; - } - return sunxi_digitalRead(pin); + if (pin == 0) { + //printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__); + return 0; + } + if (syspin[pin] == -1) { + //printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__); + return 0; + } + if (sysFds [pin] == -1) { + if (wiringPiDebug) + printf("pin %d sysFds -1.%s,%d\n", pin, __func__, __LINE__); + return LOW; + } + if (wiringPiDebug) + printf("pin %d :%d.%s,%d\n", pin, sysFds [pin], __func__, __LINE__); + lseek(sysFds [pin], 0L, SEEK_SET); + read(sysFds [pin], &c, 1); + return (c == '0') ? LOW : HIGH; + } else if (wiringPiMode == WPI_MODE_PINS) { + pin = pinToGpio [pin]; + if (wiringPiDebug) { + printf(">>> pinToGpio[pin] ret %d\n", pin); + } + } else if (wiringPiMode == WPI_MODE_PHYS) { + pin = physToGpio[pin]; + if (wiringPiDebug) { + printf(">>> physToGpio[pin] ret %d\n", pin); + } + } else if (wiringPiMode == WPI_MODE_GPIO) { + // pin = pinTobcm[pin]; + pin = pin; + + if (wiringPiDebug) { + printf(">>> pinTobcm[pin] ret %d\n", pin); + } + + } else { + return LOW; + } + if (-1 == pin) { + printf("[%s:L%d] the pin:%d is invaild,please check it over!\n", __func__, __LINE__, oldPin); + return LOW; + } + return sunxi_digitalRead(pin); } else { if ((node = wiringPiFindNode(pin)) == NULL) return LOW; @@ -1449,7 +1508,8 @@ void digitalWrite(int pin, int value) { else if (wiringPiMode == WPI_MODE_PHYS) pin = physToGpio[pin]; else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm + // pin = pinTobcm[pin]; + pin = pin; else return; if (-1 == pin) { //printf("[%s:L%d] the pin:%d is invaild,please check it over!\n", __func__, __LINE__, pin); @@ -1487,7 +1547,8 @@ void pwmWrite(int pin, int value) { else if (wiringPiMode == WPI_MODE_PHYS) { pin = physToGpio[pin]; } else if (wiringPiMode == WPI_MODE_GPIO) - pin = pinTobcm[pin]; //need map A20 to bcm + // pin = pinTobcm[pin]; + pin = pin; else return; if (-1 == pin) {