chiark / gitweb /
Fixed a bug in the gpio readall command on model B's (caused by a side-effect
[wiringPi.git] / gpio / readall.c
index a92e58c5a9500bffdb4a486ae974febdc2a664fe..76b5cfc979ea04034160c95d858b6e18d3045ee8 100644 (file)
@@ -75,34 +75,11 @@ static void doReadallExternal (void)
  *********************************************************************************
  */
 
-static char *pinNames [] =
-{
-  "GPIO 0", "GPIO 1", "GPIO 2", "GPIO 3", "GPIO 4", "GPIO 5", "GPIO 6", "GPIO 7",
-  "SDA   ", "SCL   ",
-  "CE0   ", "CE1   ", "MOSI  ", "MISO  ", "SCLK  ",
-  "TxD   ", "RxD   ",
-  "GPIO 8", "GPIO 9", "GPIO10", "GPIO11",
-} ;
-
 static char *alts [] =
 {
   "IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3"
 } ;
 
-static int wpiToPhys [64] =
-{
-  11, 12, 13, 15, 16, 18, 22,  7,      //  0...7
-   3,  5,                              //  8...9
-  24, 26, 19, 21, 23,                  // 10..14
-   8, 10,                              // 15..16
-  53, 54, 55, 56,                      // 17..20
-             0,0,0,0,0,0,0,0,0,0,0,    // 20..31
-   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,    // 32..47
-   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,    // 47..63
-} ;
-
-// The other mappings needed are in wiringPi.c
-
 static int physToWpi [64] = 
 {
   -1,           // 0
@@ -126,10 +103,14 @@ static int physToWpi [64] =
   24, 27,
   25, 28,
   -1, 29,
-                                      -1, -1, -1, -1, -1, -1, -1,       // ... 47
-  -1, -1, -1, -1, -1,                                                  // ... 52
-  17, 18, 19, 20,                                                      // ... 53, 54, 55, 56 - P5
-  -1, -1, -1, -1, -1, -1, -1,                                          // ... 63
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  -1, -1,
+  17, 18,
+  19, 20,
+  -1, -1, -1, -1, -1, -1, -1, -1, -1
 } ;
 
 static char *physNames [64] = 
@@ -149,7 +130,7 @@ static char *physNames [64] =
   "   MISO", "GPIO. 6",
   "   SCLK", "CE0    ",
   "     0v", "CE1    ",
-  "  SDA.0", "SCL  ",
+  "  SDA.0", "SCL.0  ",
   "GPIO.21", "0v     ",
   "GPIO.22", "GPIO.26",
   "GPIO.23", "0v     ",
@@ -166,29 +147,27 @@ static char *physNames [64] =
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
 } ;
 
+
+/*
+ * readallPhys:
+ *     Given a physical pin output the data on it and the next pin:
+ *| BCM | wPi |   Name  | Mode | Val| Physical |Val | Mode | Name    | wPi | BCM |
+ *********************************************************************************
+ */
+
 static void readallPhys (int physPin)
 {
   int pin ;
 
-  /**/ if (wpMode == WPI_MODE_GPIO)
-  {
-    if (physPinToGpio (physPin) == -1)
-      printf (" |    ") ;
-    else
-      printf (" | %3d", physPinToGpio (physPin)) ;
-  }
-  else if (wpMode != WPI_MODE_PHYS)
-  {
-    if (physToWpi     [physPin] == -1)
-      printf (" |    ") ;
-    else
-      printf (" | %3d", physToWpi     [physPin]) ;
-  }
+  if (physPinToGpio (physPin) == -1)
+    printf (" |     |    ") ;
+  else
+    printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]) ;
 
   printf (" | %s", physNames [physPin]) ;
 
   if (physToWpi [physPin] == -1)
-    printf (" |      |   ") ;
+    printf (" |      |  ") ;
   else
   {
     /**/ if (wpMode == WPI_MODE_GPIO)
@@ -199,7 +178,7 @@ static void readallPhys (int physPin)
       pin = physToWpi [physPin] ;
 
     printf (" | %4s", alts [getAlt (pin)]) ;
-    printf (" | %s", (digitalRead (pin) == LOW) ? "Lo" : "Hi") ;
+    printf (" | %d", digitalRead (pin)) ;
   }
 
 // Pin numbers:
@@ -211,7 +190,7 @@ static void readallPhys (int physPin)
 // Same, reversed
 
   if (physToWpi [physPin] == -1)
-    printf (" |    |     ") ;
+    printf (" |   |     ") ;
   else
   {
     /**/ if (wpMode == WPI_MODE_GPIO)
@@ -221,40 +200,24 @@ static void readallPhys (int physPin)
     else
       pin = physToWpi [physPin] ;
 
-    printf (" | %s", (digitalRead (pin) == LOW) ? "Lo" : "Hi") ;
+    printf (" | %d", digitalRead (pin)) ;
     printf (" | %-4s", alts [getAlt (pin)]) ;
   }
 
   printf (" | %-5s", physNames [physPin]) ;
 
-  /**/ if (wpMode == WPI_MODE_GPIO)
-  {
-    if (physPinToGpio (physPin) == -1)
-      printf (" |    ") ;
-    else
-      printf (" | %-3d", physPinToGpio (physPin)) ;
-  }
-  else if (wpMode != WPI_MODE_PHYS)
-  {
-    if (physToWpi     [physPin] == -1)
-      printf (" |    ") ;
-    else
-      printf (" | %-3d", physToWpi     [physPin]) ;
-  }
+  if (physToWpi     [physPin] == -1)
+    printf (" |     |    ") ;
+  else
+    printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin)) ;
 
   printf (" |\n") ;
 }
 
 
-int cmReadall (void)
+void cmReadall (void)
 {
-  int model, rev, mem ;
   int pin ;
-  char *maker ;
-
-  piBoardId (&model, &rev, &mem, &maker) ;
-  if (model != PI_MODEL_CM)
-    return FALSE ;
 
   printf ("+-----+------+-------+      +-----+------+-------+\n") ;
   printf ("| Pin | Mode | Value |      | Pin | Mode | Value |\n") ;
@@ -273,93 +236,71 @@ int cmReadall (void)
   }
 
   printf ("+-----+------+-------+      +-----+------+-------+\n") ;
-
-  return TRUE ;
 }
 
 
 /*
- * bPlusReadall:
- *     Read all the pins on the model B+
+ * abReadall:
+ *     Read all the pins on the model A or B.
  *********************************************************************************
  */
 
-int bPlusReadall (void)
+void abReadall (int model, int rev)
 {
-  int model, rev, mem ;
   int pin ;
-  char *maker ;
-  char *name ;
-
-  piBoardId (&model, &rev, &mem, &maker) ;
-  if (model != PI_MODEL_BPLUS)
-    return FALSE ;
+  char *type ;
 
-  /**/ if (wpMode == WPI_MODE_GPIO)
-    name = "BCM" ;
+  if (model == PI_MODEL_A)
+    type = " A" ;
   else
-    name = "wPi" ;
+    if (rev == PI_VERSION_2)
+      type = "B2" ;
+    else
+      type = "B1" ;
 
-  printf (" +-----+---------+------+----+--B Plus--+----+------+---------+-----+\n") ;
-  printf (" | %s |   Name  | Mode | Val| Physical |Val | Mode | Name    | %s |\n", name, name) ;
-  printf (" +-----+---------+------+----+----++----+----+------+---------+-----+\n") ;
-  for (pin = 1 ; pin <= 40 ; pin += 2)
+  printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  for (pin = 1 ; pin <= 26 ; pin += 2)
     readallPhys (pin) ;
-  printf (" +-----+---------+------+----+----++----+----+------+---------+-----+\n") ;
 
-  return TRUE ;
+  if (rev == PI_VERSION_2) // B version 2
+  {
+    printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+    for (pin = 51 ; pin <= 54 ; pin += 2)
+      readallPhys (pin) ;
+  }
+
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
 }
 
 
-void doReadall (void)
+/*
+ * bPlusReadall:
+ *     Read all the pins on the model B+
+ *********************************************************************************
+ */
+
+void bPlusReadall (void)
 {
   int pin ;
 
-  if (wiringPiNodes != NULL)   // External readall
-  {
-    doReadallExternal () ;
-    return ;
-  }
-
-  if (cmReadall ())
-    return ;
-
-  if (bPlusReadall ())
-    return ;
-
-  /**/ if (wpMode == WPI_MODE_GPIO)
-  {
-    printf (" +-----+-------+------+----+-Rev%d-----+----+------+-------+-----+\n", piBoardRev ()) ;
-    printf (" | BCM |  Name | Mode | Val| Physical |Val | Mode | Name  | BCM |\n") ;
-    printf (" +-----+-------+------+----+----++----+----+------+-------+-----+\n") ;
-    for (pin = 1 ; pin <= 26 ; pin += 2)
-      readallPhys (pin) ;
-    printf (" +-----+-------+------+----+----++----+----+------+-------+-----+\n") ;
-  }
-  else if (wpMode == WPI_MODE_PHYS)
-  {
-    printf (" +-------+------+----+-Rev%d-----+----+------+-------+\n", piBoardRev ()) ;
-    printf (" |  Name | Mode | Val| Physical |Val | Mode | Name  |\n") ;
-    printf (" +-------+------+----+----++----+----+------+-------+\n") ;
-    for (pin = 1 ; pin <= 26 ; pin += 2)
-      readallPhys (pin) ;
-    printf (" +-------+------+----+----++----+----+------+-------+\n") ;
-  }
-  else // wiringPi
-  {
-    printf (" +-----+-------+------+----+-Rev%d-----+----+------+-------+-----+\n", piBoardRev ()) ;
-    printf (" | wPi |  Name | Mode | Val| Physical |Val | Mode | Name  | wPi |\n") ;
-    printf (" +-----+-------+------+----+----++----+----+------+-------+-----+\n") ;
-    for (pin = 1 ; pin <= 26 ; pin += 2)
-      readallPhys (pin) ;
-    printf (" +-----+-------+------+----+----++----+----+------+-------+-----+\n") ;
-  }
+  printf (" +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+\n") ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  for (pin = 1 ; pin <= 40 ; pin += 2)
+    readallPhys (pin) ;
+  printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
+  printf (" | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |\n") ;
+  printf (" +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+\n") ;
 }
 
 
-void doReadallOld (void)
+void doReadall (void)
 {
-  int pin ;
+  int model, rev, mem, maker, overVolted ;
 
   if (wiringPiNodes != NULL)   // External readall
   {
@@ -367,27 +308,14 @@ void doReadallOld (void)
     return ;
   }
 
-  if (cmReadall ())
-    return ;
-
-  if (bPlusReadall ())
-    return ;
-
-  printf ("+----------+-Rev%d-+------+--------+------+-------+\n", piBoardRev ()) ;
-  printf ("| wiringPi | GPIO | Phys | Name   | Mode | Value |\n") ;
-  printf ("+----------+------+------+--------+------+-------+\n") ;
+  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
 
-  for (pin = 0 ; pin < 64 ; ++pin)     // Crude, but effective
-  {
-    if (wpiPinToGpio (pin) == -1)
-      continue ;
-
-    printf ("| %6d   | %3d  | %3d  | %s | %-4s | %-4s  |\n",
-       pin, wpiPinToGpio (pin), wpiToPhys [pin],
-       pinNames [pin], 
-       alts [getAlt (pin)], 
-       digitalRead (pin) == HIGH ? "High" : "Low ") ;
-  }
-
-  printf ("+----------+------+------+--------+------+-------+\n") ;
+  /**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
+    abReadall (model, rev) ;
+  else if (model == PI_MODEL_BP)
+    bPlusReadall () ;
+  else if (model == PI_MODEL_CM)
+    cmReadall () ;
+  else
+    printf ("Oops - unable to determine board type... model: %d\n", model) ;
 }