wiringPi: Add readall option '--all' and refactor readall.c

Signed-off-by: Yang Deokgyu <secugyu@gmail.com>
This commit is contained in:
Yang Deokgyu
2019-09-20 12:27:57 +09:00
parent 57890f889f
commit 5106f2a102
2 changed files with 133 additions and 86 deletions

View File

@@ -44,7 +44,7 @@ extern int wiringPiDebug ;
// External functions I can't be bothered creating a separate .h file for: // External functions I can't be bothered creating a separate .h file for:
extern void doReadall (void) ; extern void doReadall (int argc, char *argv []);
extern void doAllReadall (void) ; extern void doAllReadall (void) ;
extern void doPins (void) ; extern void doPins (void) ;
extern void doUnexport (int argc, char *agrv []); extern void doUnexport (int argc, char *agrv []);
@@ -1208,8 +1208,8 @@ int main (int argc, char *argv [])
else if (strcasecmp (argv [1], "pwmc" ) == 0) doNothing (argc, argv) ; else if (strcasecmp (argv [1], "pwmc" ) == 0) doNothing (argc, argv) ;
else if (strcasecmp (argv [1], "pwmTone" ) == 0) doNothing (argc, argv) ; else if (strcasecmp (argv [1], "pwmTone" ) == 0) doNothing (argc, argv) ;
else if (strcasecmp (argv [1], "drive" ) == 0) doPadDrive (argc, argv) ; else if (strcasecmp (argv [1], "drive" ) == 0) doPadDrive (argc, argv) ;
else if (strcasecmp (argv [1], "readall" ) == 0) doReadall () ; else if (strcasecmp (argv [1], "readall" ) == 0) doReadall (argc, argv) ;
else if (strcasecmp (argv [1], "nreadall" ) == 0) doReadall () ; else if (strcasecmp (argv [1], "nreadall" ) == 0) doReadall (argc, argv) ;
else if (strcasecmp (argv [1], "pins" ) == 0) doPins () ; else if (strcasecmp (argv [1], "pins" ) == 0) doPins () ;
else if (strcasecmp (argv [1], "i2cdetect") == 0) doI2Cdetect (argc, argv) ; else if (strcasecmp (argv [1], "i2cdetect") == 0) doI2Cdetect (argc, argv) ;
else if (strcasecmp (argv [1], "i2cd" ) == 0) doI2Cdetect (argc, argv) ; else if (strcasecmp (argv [1], "i2cd" ) == 0) doI2Cdetect (argc, argv) ;

View File

@@ -296,8 +296,7 @@ static const char *physNamesOdroidN2 [64] =
} ; } ;
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *physNames[]) static void readallPhys(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
{
int pin ; int pin ;
// GPIO, wPi pin number // GPIO, wPi pin number
@@ -311,10 +310,12 @@ static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *
// GPIO pin name // GPIO pin name
printf (" | %s", physNames [physPin]) ; printf (" | %s", physNames [physPin]) ;
// GPIO pin mode, value, drive strength, pupd // GPIO pin mode, value
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
printf (" | | | | ") ; printf(" | | ");
else { if (isAll == TRUE)
printf(" | | ");
} else {
if (wpMode == MODE_GPIO) if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin); pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS) else if (wpMode == MODE_PHYS)
@@ -324,20 +325,24 @@ static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *
printf (" | %4s", alts [getAlt (pin)]) ; printf (" | %4s", alts [getAlt (pin)]) ;
printf (" | %d", digitalRead (pin)) ; printf (" | %d", digitalRead (pin)) ;
switch (model) {
case MODEL_ODROID_N1: // GPIO pin drive strength, pu/pd
printf (" | | "); if (isAll == TRUE) {
break; switch (model) {
case MODEL_ODROID_C1: case MODEL_ODROID_N1:
case MODEL_ODROID_C2: printf (" | | ");
printf (" | | %5s", pupd[getPUPD(pin)]); break;
break; case MODEL_ODROID_C1:
case MODEL_ODROID_XU3: case MODEL_ODROID_C2:
case MODEL_ODROID_N2: printf (" | | %5s", pupd[getPUPD(pin)]);
printf (" | %2d | %5s", getPadDrive(pin), pupd[getPUPD(pin)]); break;
break; case MODEL_ODROID_XU3:
default: case MODEL_ODROID_N2:
break; printf (" | %2d | %5s", getPadDrive(pin), pupd[getPUPD(pin)]);
break;
default:
break;
}
} }
} }
@@ -346,10 +351,13 @@ static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *
++physPin ; ++physPin ;
printf (" || %-2d", physPin) ; printf (" || %-2d", physPin) ;
// GPIO pin mode, value, drive strength, pupd // GPIO pin mode, value
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
printf (" | | | | ") ; printf(" |");
else { if (isAll == TRUE)
printf(" | |");
printf (" | ");
} else {
if (wpMode == MODE_GPIO) if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin); pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS) else if (wpMode == MODE_PHYS)
@@ -357,20 +365,24 @@ static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *
else else
pin = physToWpi [physPin]; pin = physToWpi [physPin];
switch (model) {
case MODEL_ODROID_N1: // GPIO pin drive strength, pu/pd
printf (" | | "); if (isAll == TRUE) {
break; switch (model) {
case MODEL_ODROID_C1: case MODEL_ODROID_N1:
case MODEL_ODROID_C2: printf (" | | ");
printf (" | %-5s | ", pupd[getPUPD(pin)]); break;
break; case MODEL_ODROID_C1:
case MODEL_ODROID_XU3: case MODEL_ODROID_C2:
case MODEL_ODROID_N2: printf (" | %-5s | ", pupd[getPUPD(pin)]);
printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getPadDrive(pin)); break;
break; case MODEL_ODROID_XU3:
default: case MODEL_ODROID_N2:
break; printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getPadDrive(pin));
break;
default:
break;
}
} }
printf (" | %d", digitalRead (pin)); printf (" | %d", digitalRead (pin));
printf (" | %-4s", alts [getAlt (pin)]); printf (" | %-4s", alts [getAlt (pin)]);
@@ -391,15 +403,35 @@ static void readallPhysOdroid (int model, int UNU rev, int physPin, const char *
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void ReadallOdroid (int model, int rev, const char *physNames[]) static void printHeader(const char *headerName, int isAll) {
{ const char *headerLeft = " +------+-----+----------+------+---+";
int pin ; const char *headerRight = "+---+------+----------+-----+------+\n";
const char *headerLeftAll = " +------+-----+----------+------+---+----+";
const char *headerRightAll = "+----+---+------+----------+-----+------+\n";
printf (" | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n") ; (isAll == FALSE) ? printf("%s", headerLeft) : printf("%s", headerLeftAll);
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ; printf("%s", headerName);
for (pin = 1 ; pin <= 40 ; pin += 2) (isAll == FALSE) ? printf("%s", headerRight) : printf("%s", headerRightAll);
readallPhysOdroid (model, rev, pin, physNames) ; }
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ;
/*----------------------------------------------------------------------------*/
static void printBody(int model, int rev, const char *physNames[], int isAll) {
(isAll == FALSE)
? printf(
" | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO |\n"
" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n")
: printf(
" | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n"
" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n");
for (int pin = 1; pin <= 40; pin += 2)
readallPhys(model, rev, pin, physNames, isAll);
(isAll == FALSE)
? printf(
" +------+-----+----------+------+---+----++----+---+------+----------+-----+------+\n"
" | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO |\n")
: printf(
" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n"
" | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n");
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@@ -412,48 +444,62 @@ void ReadallOdroid (int model, int rev, const char *physNames[])
* one external device at a time, we'll use that to our advantage... * one external device at a time, we'll use that to our advantage...
*/ */
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void doReadall (void) void doReadall(int argc, char *argv[]) {
{ int model, rev, mem, maker, overVolted, isAll;
int model, rev, mem, maker, overVolted; char *headerName, *physNames;
char *physNames;
// External readall // External readall
if (wiringPiNodes != NULL) { if (wiringPiNodes != NULL) {
doReadallExternal (); doReadallExternal();
return ; return;
} }
piBoardId (&model, &rev, &mem, &maker, &overVolted) ; if (argc <= 2) {
isAll = FALSE;
} else if (argc == 3 && (strcasecmp(argv[2], "-a") == 0 || strcasecmp(argv[2], "--all") == 0)) {
isAll = TRUE;
} else {
printf("Oops - unknown readall option:\n");
for (int i = 3; i < argc + 1; i++)
printf("\targv[%d]: %s\n", i, argv[i - 1]);
return;
}
piBoardId (&model, &rev, &mem, &maker, &overVolted);
switch (model) { switch (model) {
case MODEL_ODROID_C1: case MODEL_ODROID_C1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C1 ----+----+---+------+----------+-----+------+\n") ; headerName = (isAll == FALSE) ? "--- C1 ---" : "---- Model ODROID-C1 ----";
physNames = (char *) physNamesOdroidC1; physNames = (char *) physNamesOdroidC1;
break; break;
case MODEL_ODROID_C2: case MODEL_ODROID_C2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C2 ----+----+---+------+----------+-----+------+\n") ; headerName = (isAll == FALSE) ? "--- C2 ---" : "---- Model ODROID-C2 ----";
if (rev == 1) if (rev == 1)
physNames = (char *) physNamesOdroidC2_Rev1; physNames = (char *) physNamesOdroidC2_Rev1;
else else
physNames = (char *) physNamesOdroidC2_Rev2; physNames = (char *) physNamesOdroidC2_Rev2;
break; break;
case MODEL_ODROID_XU3: case MODEL_ODROID_XU3:
printf (" +------+-----+----------+------+---+----+--- Model ODROID-XU3/4 ---+----+---+------+----------+-----+------+\n") ; headerName = (isAll == FALSE) ? "- XU3, 4 -" : "--- Model ODROID-XU3/4 ---";
physNames = (char *) physNamesOdroidXU3; physNames = (char *) physNamesOdroidXU3;
break; break;
case MODEL_ODROID_N1: case MODEL_ODROID_N1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N1 ----+----+---+------+----------+-----+------+\n") ; headerName = (isAll == FALSE) ? "--- N1 ---" : "---- Model ODROID-N1 ----";
physNames = (char *) physNamesOdroidN1; physNames = (char *) physNamesOdroidN1;
break; break;
case MODEL_ODROID_N2: case MODEL_ODROID_N2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N2 ----+----+---+------+----------+-----+------+\n") ; headerName = (isAll == FALSE) ? "--- N2 ---" : "---- Model ODROID-N2 ----";
physNames = (char *) physNamesOdroidN2; physNames = (char *) physNamesOdroidN2;
break; break;
default: default:
printf ("Oops - unable to determine board type... model: %d\n", model) ; printf("Oops - unknown model: %d\n", model);
return; return;
} }
ReadallOdroid(model, rev, (const char **) physNames);
printHeader((const char *) headerName, isAll);
printBody(model, rev, (const char **) physNames, isAll);
printHeader((const char *) headerName, isAll);
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@@ -462,9 +508,10 @@ void doReadall (void)
* Force reading of all pins regardless of Pi model * Force reading of all pins regardless of Pi model
*/ */
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void doAllReadall (void) void doAllReadall(void) {
{ char *fakeArgv[3] = { "", "", "--all" };
doReadall();
doReadall(3, fakeArgv);
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/