diff --git a/build b/build
index bac483a..377bd16 100755
--- a/build
+++ b/build
@@ -1,5 +1,36 @@
#!/bin/sh
+# build
+# Simple wiringPi build and install script
+#
+# Copyright (c) 2012-2015 Gordon Henderson
+#################################################################################
+# This file is part of wiringPi:
+# Wiring Compatable library for the Raspberry Pi
+#
+# wiringPi is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# wiringPi is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with wiringPi. If not, see .
+#################################################################################
+#
+# wiringPi is designed to run on a Raspberry Pi only.
+# However if you're clever enough to actually look at this script to
+# see why it's not building for you, then good luck.
+#
+# To everyone else: Stop using cheap alternatives. Support the
+# Raspberry Pi Foundation as they're the only ones putting money
+# back into education!
+#################################################################################
+
check_make_ok() {
if [ $? != 0 ]; then
echo ""
@@ -47,6 +78,24 @@ fi
echo "====================="
echo
+ hardware=`fgrep Hardware /proc/cpuinfo | head -1 | awk '{ print $3 }'`
+
+ if [ x$hardware != "xBCM2708" ]; then
+ echo ""
+ echo " +------------------------------------------------------------+"
+ echo " | wiringPi is designed to run on the Raspberry Pi only. |"
+ echo " | This processor does not appear to be a Raspberry Pi. |"
+ echo " +------------------------------------------------------------+"
+ echo " | In the unlikely event that you think it is a Raspberry Pi, |"
+ echo " | then please accept my apologies and email the contents of |"
+ echo " | /proc/cpuinfo to projects@drogon.net. |"
+ echo " | - Thanks, Gordon |"
+ echo " +------------------------------------------------------------+"
+ echo ""
+ exit 1
+ fi
+
+
echo
echo "WiringPi Library"
cd wiringPi
diff --git a/gpio/Makefile b/gpio/Makefile
index 37b4887..9c8585f 100644
--- a/gpio/Makefile
+++ b/gpio/Makefile
@@ -4,7 +4,7 @@
# A swiss-army knige of GPIO shenanigans.
# https://projects.drogon.net/wiring-pi
#
-# Copyright (c) 2012-2013 Gordon Henderson
+# Copyright (c) 2012-2015 Gordon Henderson
#################################################################################
# This file is part of wiringPi:
# Wiring Compatable library for the Raspberry Pi
@@ -38,7 +38,7 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread -lm
# May not need to alter anything below this line
###############################################################################
-SRC = gpio.c extensions.c readall.c pins.c
+SRC = gpio.c readall.c pins.c
OBJ = $(SRC:.c=.o)
@@ -82,6 +82,3 @@ depend:
makedepend -Y $(SRC)
# DO NOT DELETE
-
-gpio.o: extensions.h
-extensions.o: extensions.h
diff --git a/gpio/gpio.1 b/gpio/gpio.1
index e7131c1..2d3b860 100644
--- a/gpio/gpio.1
+++ b/gpio/gpio.1
@@ -1,4 +1,4 @@
-.TH "GPIO" "March 2013" "Command-Line access to Raspberry Pi's GPIO"
+.TH "GPIO" "January 2015" "Command-Line access to Raspberry Pi's GPIO"
.SH NAME
gpio \- Command-line access to Raspberry Pi's GPIO
@@ -21,7 +21,7 @@ gpio \- Command-line access to Raspberry Pi's GPIO
.B ...
.PP
.B gpio
-.B readall/reset
+.B readall
.PP
.B gpio
.B unexportall/exports
@@ -156,16 +156,6 @@ The readall command is usable with an extension module (via the -x parameter),
but it's unable to determine pin modes or states, so will perform both a
digital and analog read on each pin in-turn.
-.TP
-.B reset
-Resets the GPIO - As much as it's possible to do. All pins are set to
-input mode and all the internal pull-up/down resistors are disconnected
-(tristate mode).
-
-The reset command is usable with an extension module (via the -x parameter),
-but it's limited to turning the pin into input mode (if applicable) and
-removing any pull up/down resistor.
-
.TP
.B pwm
Write a PWM value (0-1023) to the given pin. The pin needs to be put
@@ -182,6 +172,8 @@ Set a pin into \fIinput\fR, \fIoutput\fR or \fIpwm\fR mode. Can also
use the literals \fIup\fR, \fIdown\fR or \fItri\fR to set the internal
pull-up, pull-down or tristate (off) controls.
+The ALT modes can also be set using \fIalt0\fR, \fIalt1\fR, ... \fIalt5\fR.
+
.TP
.B unexportall
Un-Export all the GPIO pins in the /sys/class/gpio directory.
@@ -257,12 +249,30 @@ on the associated /dev/ entries so that the current user has access to
them. Optionally it will set the I2C baudrate to that supplied in Kb/sec
(or as close as the Pi can manage) The default speed is 100Kb/sec.
+Note that on a Pi with a recent 3.18 kernel with the device-tree structure
+enable, the load may fail until you add:
+
+.I dtparam=i2c=on
+
+into \fB/boot/config.txt\fR to allow user use of the I2C bus.
+
.TP
-.B load spi [buffer size in KB]
+.B load spi
This loads the spi drivers into the kernel and changes the permissions
on the associated /dev/ entries so that the current user has access to
-them. Optionally it will set the SPI buffer size to that supplied. The
-default is 4KB.
+them. It used to have the ability to change the buffer size from the
+default of 4096 bytes to an arbitary value, however for some time the
+Pi Foundation have compiled the SPI device driver into the kernel and
+this has fixed the buffer size. The way to change it now is to edit
+the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to
+e.g. 8192 bytes then reboot.
+
+Note that on a Pi with a recent 3.18 kernel with the device-tree structure
+enable, the load may fail until you add:
+
+.I dtparam=spi=on
+
+into \fB/boot/config.txt\fR to allow user use of the I2C bus.
.TP
.B gbr
@@ -280,41 +290,12 @@ SPI digital to analogue converter.
The board jumpers need to be in-place to do this operation.
-.SH "WiringPi vs. BCM_GPIO Pin numbering"
+.SH "WiringPi vs. BCM_GPIO Pin numbering vs. Physical pin numbering"
.PP
-.TS
-c c c c l.
-WiringPi GPIO-r1 GPIO-r2 P1-Phys Function
-_
- 0 17 17 11
- 1 18 18 12 (PWM)
- 2 21 27 13
- 3 22 22 15
- 4 23 23 16
- 5 24 24 18
- 6 25 25 22
- 7 4 4 7
- 8 0 2 3 I2C: SDA0
- 9 1 3 5 I2C: SCL0
-10 8 8 24 SPI: CE0
-11 7 7 26 SPI: CE1
-12 10 10 19 SPI: MOSI
-13 9 9 21 SPI: MISO
-14 11 11 23 SPI: SCLK
-15 14 14 8 TxD
-16 15 16 10 RxD
-17 - 28
-18 - 29
-19 - 30
-20 - 31
-.TE
-
-Note that "r1" and "r2" above refers to the board revision. Normally
-wiringPi detects the correct board revision with use for it's own
-numbering scheme, but if you are using a Revision 2 board with some
-of the pins which change numbers between revisions you will need
-to alter your software.
+The quickest way to get a list of the pin differences is to run the command
+.TP
+gpio readall
.SH FILES
@@ -361,7 +342,7 @@ Please report bugs to
.SH COPYRIGHT
-Copyright (c) 2012-2013 Gordon Henderson
+Copyright (c) 2012-2015 Gordon Henderson
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/gpio/gpio.c b/gpio/gpio.c
index 7881c65..3cee59f 100644
--- a/gpio/gpio.c
+++ b/gpio/gpio.c
@@ -2,7 +2,7 @@
* gpio.c:
* Swiss-Army-Knife, Set-UID command-line interface to the Raspberry
* Pi's GPIO.
- * Copyright (c) 2012-2014 Gordon Henderson
+ * Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
@@ -35,11 +35,11 @@
#include
#include
+#include
#include
#include
-#include "extensions.h"
extern int wiringPiDebug ;
@@ -53,7 +53,7 @@ extern void doPins (void) ;
# define FALSE (1==2)
#endif
-#define VERSION "2.22"
+#define VERSION "2.23"
#define PI_USB_POWER_CONTROL 38
#define I2CDETECT "/usr/sbin/i2cdetect"
@@ -73,6 +73,7 @@ char *usage = "Usage: gpio -v\n"
" gpio pwmr \n"
" gpio pwmc \n"
" gpio load spi/i2c\n"
+ " gpio unload spi/i2c\n"
" gpio i2cd/i2cdetect\n"
" gpio usbp high/low\n"
" gpio gbr \n"
@@ -115,12 +116,9 @@ static void changeOwner (char *cmd, char *file)
if (chown (file, uid, gid) != 0)
{
if (errno == ENOENT) // Warn that it's not there
- fprintf (stderr, "%s: Warning: File not present: %s\n", cmd, file) ;
+ fprintf (stderr, "%s: Warning (not an error): File not present: %s\n", cmd, file) ;
else
- {
- fprintf (stderr, "%s: Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ;
- exit (1) ;
- }
+ fprintf (stderr, "%s: Warning (not an error): Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ;
}
}
@@ -167,7 +165,7 @@ static int moduleLoaded (char *modName)
static void _doLoadUsage (char *argv [])
{
- fprintf (stderr, "Usage: %s load [SPI bufferSize in KB | I2C baudrate in Kb/sec]\n", argv [0]) ;
+ fprintf (stderr, "Usage: %s load [I2C baudrate in Kb/sec]\n", argv [0]) ;
exit (1) ;
}
@@ -190,7 +188,10 @@ static void doLoad (int argc, char *argv [])
file1 = "/dev/spidev0.0" ;
file2 = "/dev/spidev0.1" ;
if (argc == 4)
- sprintf (args1, " bufsiz=%d", atoi (argv [3]) * 1024) ;
+ {
+ fprintf (stderr, "%s: Unable to set the buffer size now. Load aborted. Please see the man page.\n", argv [0]) ;
+ exit (1) ;
+ }
else if (argc > 4)
_doLoadUsage (argv) ;
}
@@ -210,13 +211,13 @@ static void doLoad (int argc, char *argv [])
if (!moduleLoaded (module1))
{
- sprintf (cmd, "modprobe %s%s", module1, args1) ;
+ sprintf (cmd, "/sbin/modprobe %s%s", module1, args1) ;
system (cmd) ;
}
if (!moduleLoaded (module2))
{
- sprintf (cmd, "modprobe %s%s", module2, args2) ;
+ sprintf (cmd, "/sbin/modprobe %s%s", module2, args2) ;
system (cmd) ;
}
@@ -233,6 +234,53 @@ static void doLoad (int argc, char *argv [])
}
+/*
+ * doUnLoad:
+ * Un-Load either the spi or i2c modules and change device ownerships, etc.
+ *********************************************************************************
+ */
+
+static void _doUnLoadUsage (char *argv [])
+{
+ fprintf (stderr, "Usage: %s unload \n", argv [0]) ;
+ exit (1) ;
+}
+
+static void doUnLoad (int argc, char *argv [])
+{
+ char *module1, *module2 ;
+ char cmd [80] ;
+
+ if (argc != 3)
+ _doUnLoadUsage (argv) ;
+
+ /**/ if (strcasecmp (argv [2], "spi") == 0)
+ {
+ module1 = "spidev" ;
+ module2 = "spi_bcm2708" ;
+ }
+ else if (strcasecmp (argv [2], "i2c") == 0)
+ {
+ module1 = "i2c_dev" ;
+ module2 = "i2c_bcm2708" ;
+ }
+ else
+ _doUnLoadUsage (argv) ;
+
+ if (moduleLoaded (module1))
+ {
+ sprintf (cmd, "/sbin/rmmod %s", module1) ;
+ system (cmd) ;
+ }
+
+ if (moduleLoaded (module2))
+ {
+ sprintf (cmd, "/sbin/rmmod %s", module2) ;
+ system (cmd) ;
+ }
+}
+
+
/*
* doI2Cdetect:
* Run the i2cdetect command with the right runes for this Pi revision
@@ -586,24 +634,6 @@ void doUnexportall (char *progName)
}
-/*
- * doResetExternal:
- * Load readallExternal, we try to do this with an external device.
- *********************************************************************************
- */
-
-static void doResetExternal (void)
-{
- int pin ;
-
- for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
- {
- pinMode (pin, INPUT) ;
- pullUpDnControl (pin, PUD_OFF) ;
- }
-}
-
-
/*
* doReset:
* Reset the GPIO pins - as much as we can do
@@ -612,45 +642,9 @@ static void doResetExternal (void)
static void doReset (char *progName)
{
- int model, rev, mem, maker, overVolted ;
- int pin, endPin ;
-
- printf ("GPIO Reset is dangerous!\n") ;
- printf (" - Do Not rely on this to do anything sensible!\n") ;
-
- if (wiringPiNodes != NULL) // External
- {
- doResetExternal () ;
- return ;
- }
-
- piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
-
- /**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
- endPin = 16 ;
- else if (model == PI_MODEL_BP)
- endPin = 39 ;
- else if (model == PI_MODEL_CM)
- {
- printf (" - Don't know how to reset a comput module:\n") ;
- printf (" Write a shell-script to reset the pins to the state you need.\n") ;
- return ;
- }
- else
- {
- printf ("Oops - unable to determine board type... model: %d\n", model) ;
- return ;
- }
-
- for (pin = 0 ; pin <= endPin ; ++pin)
- {
- if (wpiPinToGpio (pin) == -1)
- continue ;
-
- digitalWrite (pin, LOW) ;
- pinMode (pin, INPUT) ;
- pullUpDnControl (pin, PUD_OFF) ;
- }
+ printf ("GPIO Reset is dangerous and has been removed from the gpio command.\n") ;
+ printf (" - Please write a shell-script to reset the GPIO pins into the state\n") ;
+ printf (" that you need them in for your applications.\n") ;
}
@@ -686,9 +680,6 @@ void doMode (int argc, char *argv [])
else if (strcasecmp (mode, "down") == 0) pullUpDnControl (pin, PUD_DOWN) ;
else if (strcasecmp (mode, "tri") == 0) pullUpDnControl (pin, PUD_OFF) ;
else if (strcasecmp (mode, "off") == 0) pullUpDnControl (pin, PUD_OFF) ;
-
-// Undocumented
-
else if (strcasecmp (mode, "alt0") == 0) pinModeAlt (pin, 0b100) ;
else if (strcasecmp (mode, "alt1") == 0) pinModeAlt (pin, 0b101) ;
else if (strcasecmp (mode, "alt2") == 0) pinModeAlt (pin, 0b110) ;
@@ -1183,7 +1174,7 @@ int main (int argc, char *argv [])
if (strcmp (argv [1], "-v") == 0)
{
printf ("gpio version: %s\n", VERSION) ;
- printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
+ printf ("Copyright (c) 2012-2015 Gordon Henderson\n") ;
printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ;
printf ("For details type: %s -warranty\n", argv [0]) ;
printf ("\n") ;
@@ -1206,7 +1197,7 @@ int main (int argc, char *argv [])
if (strcasecmp (argv [1], "-warranty") == 0)
{
printf ("gpio version: %s\n", VERSION) ;
- printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
+ printf ("Copyright (c) 2012-2015 Gordon Henderson\n") ;
printf ("\n") ;
printf (" This program is free software; you can redistribute it and/or modify\n") ;
printf (" it under the terms of the GNU Leser General Public License as published\n") ;
@@ -1240,7 +1231,8 @@ int main (int argc, char *argv [])
// Check for load command:
- if (strcasecmp (argv [1], "load" ) == 0) { doLoad (argc, argv) ; return 0 ; }
+ if (strcasecmp (argv [1], "load" ) == 0) { doLoad (argc, argv) ; return 0 ; }
+ if (strcasecmp (argv [1], "unload" ) == 0) { doUnLoad (argc, argv) ; return 0 ; }
// Gertboard commands
@@ -1301,7 +1293,7 @@ int main (int argc, char *argv [])
exit (EXIT_FAILURE) ;
}
- if (!doExtension (argv [0], argv [2])) // Prints its own error messages
+ if (!loadWPiExtension (argv [0], argv [2], TRUE)) // Prints its own error messages
exit (EXIT_FAILURE) ;
for (i = 3 ; i < argc ; ++i)
diff --git a/gpio/pins.c b/gpio/pins.c
index 19fcc1a..d889a45 100644
--- a/gpio/pins.c
+++ b/gpio/pins.c
@@ -1,7 +1,7 @@
/*
* pins.c:
* Just display a handy Pi pinnout diagram.
- * Copyright (c) 2012-2013 Gordon Henderson
+ * Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
diff --git a/gpio/pintest b/gpio/pintest
index 83ca12a..4da3d94 100755
--- a/gpio/pintest
+++ b/gpio/pintest
@@ -2,7 +2,7 @@
#
# pintest
# Test the Pi's GPIO port
-# Copyright (c) 2013 Gordon Henderson
+# Copyright (c) 2013-2015 Gordon Henderson
#################################################################################
# This file is part of wiringPi:
# Wiring Compatable library for the Raspberry Pi
@@ -104,13 +104,11 @@ testPins()
intro()
{
- revision=`gpio -V`
cat <
#include
#include
+#include
#include
#include
#include
@@ -35,27 +38,31 @@
#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
+#include "mcp23008.h"
+#include "mcp23016.h"
+#include "mcp23017.h"
+#include "mcp23s08.h"
+#include "mcp23s17.h"
+#include "sr595.h"
+#include "pcf8591.h"
+#include "pcf8574.h"
+#include "max31855.h"
+#include "max5322.h"
+#include "mcp3002.h"
+#include "mcp3004.h"
+#include "mcp4802.h"
+#include "mcp3422.h"
+#include "sn3218.h"
+#include "drcSerial.h"
-#include "extensions.h"
+#include "wpiExtensions.h"
extern int wiringPiDebug ;
+static int verbose ;
+static char errorMessage [1024] ;
+
+
#ifndef TRUE
# define TRUE (1==1)
# define FALSE (1==2)
@@ -70,6 +77,24 @@ struct extensionFunctionStruct
} ;
+/*
+ * verbError:
+ * Convenient error handling
+ *********************************************************************************
+ */
+
+static void verbError (const char *message, ...)
+{
+ va_list argp ;
+ va_start (argp, message) ;
+ vsnprintf (errorMessage, 1023, message, argp) ;
+ va_end (argp) ;
+
+ if (verbose)
+ fprintf (stderr, "%s\n", errorMessage) ;
+}
+
+
/*
* extractInt:
* Check & return an integer at the given location (prefixed by a :)
@@ -80,7 +105,7 @@ static char *extractInt (char *progName, char *p, int *num)
{
if (*p != ':')
{
- fprintf (stderr, "%s: colon expected\n", progName) ;
+ verbError ("%s: colon expected", progName) ;
return NULL ;
}
@@ -88,7 +113,7 @@ static char *extractInt (char *progName, char *p, int *num)
if (!isdigit (*p))
{
- fprintf (stderr, "%s: digit expected\n", progName) ;
+ verbError ("%s: digit expected", progName) ;
return NULL ;
}
@@ -112,7 +137,7 @@ static char *extractStr (char *progName, char *p, char **str)
if (*p != ':')
{
- fprintf (stderr, "%s: colon expected\n", progName) ;
+ verbError ("%s: colon expected", progName) ;
return NULL ;
}
@@ -120,7 +145,7 @@ static char *extractStr (char *progName, char *p, char **str)
if (!isprint (*p))
{
- fprintf (stderr, "%s: character expected\n", progName) ;
+ verbError ("%s: character expected", progName) ;
return NULL ;
}
@@ -152,9 +177,9 @@ static int doExtensionMcp23008 (char *progName, int pinBase, char *params)
if ((params = extractInt (progName, params, &i2c)) == NULL)
return FALSE ;
- if ((i2c < 0x03) || (i2c > 0x77))
+ if ((i2c < 0x01) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -180,7 +205,7 @@ static int doExtensionMcp23016 (char *progName, int pinBase, char *params)
if ((i2c < 0x03) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -206,7 +231,7 @@ static int doExtensionMcp23017 (char *progName, int pinBase, char *params)
if ((i2c < 0x03) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -232,7 +257,7 @@ static int doExtensionMcp23s08 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI address (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI address (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -241,7 +266,7 @@ static int doExtensionMcp23s08 (char *progName, int pinBase, char *params)
if ((port < 0) || (port > 7))
{
- fprintf (stderr, "%s: port address (%d) out of range\n", progName, port) ;
+ verbError ("%s: port address (%d) out of range", progName, port) ;
return FALSE ;
}
@@ -267,7 +292,7 @@ static int doExtensionMcp23s17 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI address (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI address (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -276,7 +301,7 @@ static int doExtensionMcp23s17 (char *progName, int pinBase, char *params)
if ((port < 0) || (port > 7))
{
- fprintf (stderr, "%s: port address (%d) out of range\n", progName, port) ;
+ verbError ("%s: port address (%d) out of range", progName, port) ;
return FALSE ;
}
@@ -304,7 +329,7 @@ static int doExtensionSr595 (char *progName, int pinBase, char *params)
if ((pins < 8) || (pins > 32))
{
- fprintf (stderr, "%s: pin count (%d) out of range - 8-32 expected.\n", progName, pins) ;
+ verbError ("%s: pin count (%d) out of range - 8-32 expected.", progName, pins) ;
return FALSE ;
}
@@ -339,7 +364,7 @@ static int doExtensionPcf8574 (char *progName, int pinBase, char *params)
if ((i2c < 0x03) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -365,7 +390,7 @@ static int doExtensionPcf8591 (char *progName, int pinBase, char *params)
if ((i2c < 0x03) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -391,7 +416,7 @@ static int doExtensionMax31855 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI channel (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -417,7 +442,7 @@ static int doExtensionMcp3002 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI channel (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -443,7 +468,7 @@ static int doExtensionMcp3004 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI channel (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -469,7 +494,7 @@ static int doExtensionMax5322 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI channel (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -495,7 +520,7 @@ static int doExtensionMcp4802 (char *progName, int pinBase, char *params)
if ((spi < 0) || (spi > 1))
{
- fprintf (stderr, "%s: SPI channel (%d) out of range\n", progName, spi) ;
+ verbError ("%s: SPI channel (%d) out of range", progName, spi) ;
return FALSE ;
}
@@ -535,7 +560,7 @@ static int doExtensionMcp3422 (char *progName, int pinBase, char *params)
if ((i2c < 0x03) || (i2c > 0x77))
{
- fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ;
+ verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ;
return FALSE ;
}
@@ -544,7 +569,7 @@ static int doExtensionMcp3422 (char *progName, int pinBase, char *params)
if ((sampleRate < 0) || (sampleRate > 3))
{
- fprintf (stderr, "%s: sample rate (%d) out of range\n", progName, sampleRate) ;
+ verbError ("%s: sample rate (%d) out of range", progName, sampleRate) ;
return FALSE ;
}
@@ -553,7 +578,7 @@ static int doExtensionMcp3422 (char *progName, int pinBase, char *params)
if ((gain < 0) || (gain > 3))
{
- fprintf (stderr, "%s: gain (%d) out of range\n", progName, gain) ;
+ verbError ("%s: gain (%d) out of range", progName, gain) ;
return FALSE ;
}
@@ -562,6 +587,7 @@ static int doExtensionMcp3422 (char *progName, int pinBase, char *params)
return TRUE ;
}
+
/*
* doExtensionDrcS:
* Interface to a DRC Serial system
@@ -579,7 +605,7 @@ static int doExtensionDrcS (char *progName, int pinBase, char *params)
if ((pins < 1) || (pins > 100))
{
- fprintf (stderr, "%s: pins (%d) out of range (2-100)\n", progName, pins) ;
+ verbError ("%s: pins (%d) out of range (2-100)", progName, pins) ;
return FALSE ;
}
@@ -588,7 +614,7 @@ static int doExtensionDrcS (char *progName, int pinBase, char *params)
if (strlen (port) == 0)
{
- fprintf (stderr, "%s: serial port device name required\n", progName) ;
+ verbError ("%s: serial port device name required", progName) ;
return FALSE ;
}
@@ -597,7 +623,7 @@ static int doExtensionDrcS (char *progName, int pinBase, char *params)
if ((baud < 1) || (baud > 4000000))
{
- fprintf (stderr, "%s: baud rate (%d) out of range\n", progName, baud) ;
+ verbError ("%s: baud rate (%d) out of range", progName, baud) ;
return FALSE ;
}
@@ -613,7 +639,7 @@ static int doExtensionDrcS (char *progName, int pinBase, char *params)
*********************************************************************************
*/
-struct extensionFunctionStruct extensionFunctions [] =
+static struct extensionFunctionStruct extensionFunctions [] =
{
{ "mcp23008", &doExtensionMcp23008 },
{ "mcp23016", &doExtensionMcp23016 },
@@ -636,18 +662,20 @@ struct extensionFunctionStruct extensionFunctions [] =
/*
- * doExtension:
+ * loadWPiExtension:
* Load in a wiringPi extension
*********************************************************************************
*/
-int doExtension (char *progName, char *extensionData)
+int loadWPiExtension (char *progName, char *extensionData, int printErrors)
{
char *p ;
char *extension = extensionData ;
struct extensionFunctionStruct *extensionFn ;
int pinBase = 0 ;
+ verbose = printErrors ;
+
// Get the extension extension name by finding the first colon
p = extension ;
@@ -655,7 +683,7 @@ int doExtension (char *progName, char *extensionData)
{
if (!*p) // ran out of characters
{
- fprintf (stderr, "%s: extension name not terminated by a colon\n", progName) ;
+ verbError ("%s: extension name not terminated by a colon", progName) ;
return FALSE ;
}
++p ;
@@ -665,7 +693,7 @@ int doExtension (char *progName, char *extensionData)
if (!isdigit (*p))
{
- fprintf (stderr, "%s: pinBase number expected after extension name\n", progName) ;
+ verbError ("%s: pinBase number expected after extension name", progName) ;
return FALSE ;
}
@@ -673,7 +701,7 @@ int doExtension (char *progName, char *extensionData)
{
if (pinBase > 1000000000)
{
- fprintf (stderr, "%s: pinBase too large\n", progName) ;
+ verbError ("%s: pinBase too large", progName) ;
return FALSE ;
}
@@ -683,7 +711,7 @@ int doExtension (char *progName, char *extensionData)
if (pinBase < 64)
{
- fprintf (stderr, "%s: pinBase (%d) too small. Minimum is 64.\n", progName, pinBase) ;
+ verbError ("%s: pinBase (%d) too small. Minimum is 64.", progName, pinBase) ;
return FALSE ;
}
@@ -695,6 +723,6 @@ int doExtension (char *progName, char *extensionData)
return extensionFn->function (progName, pinBase, p) ;
}
- fprintf (stderr, "%s: extension %s not found\n", progName, extension) ;
+ verbError ("%s: extension %s not found", progName, extension) ;
return FALSE ;
}
diff --git a/gpio/extensions.h b/wiringPi/wpiExtensions.h
similarity index 89%
rename from gpio/extensions.h
rename to wiringPi/wpiExtensions.h
index 5d27123..fcaec96 100644
--- a/gpio/extensions.h
+++ b/wiringPi/wpiExtensions.h
@@ -2,7 +2,7 @@
* extensions.h:
* Part of the GPIO program to test, peek, poke and otherwise
* noodle with the GPIO hardware on the Raspberry Pi.
- * Copyright (c) 2012-2013 Gordon Henderson
+ * Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
@@ -23,4 +23,4 @@
*/
-extern int doExtension (char *progName, char *extensionData) ;
+extern int loadWPiExtension (char *progName, char *extensionData, int verbose) ;