OBJ = test1.o test2.o speed.o lcd.o wfi.o piface.o gertboard.o nes.o delayTest.o softPwm.o
-all: test1 test2 speed lcd wfi piface gertboard nes softPwm
+BINS = test1 test2 speed lcd wfi piface gertboard nes delayTest softPwm
+
+all:
+ @cat README.TXT
+ @echo " $(BINS)" | fmt
+ @echo ""
test1: test1.o
@echo [link]
@echo [link]
$(CC) -o $@ softPwm.o $(LDFLAGS) $(LIBS) -lm -lpthread
-
delayTest: delayTest.o
@echo [link]
$(CC) -o $@ delayTest.o $(LDFLAGS) $(LIBS)
all: gpio
-gpio: gpio.o /usr/local/lib/libwiringPi.a
+gpio: gpio.o /usr/local/lib/libwiringPi.a /usr/local/lib/libwiringPi.so.1.0
@echo [LD]
@$(CC) -o $@ gpio.o $(LDFLAGS) $(LIBS)
makedepend -Y $(SRC)
install:
- cp gpio /usr/local/bin
- chown root.root /usr/local/bin/gpio
- chmod 4755 /usr/local/bin/gpio
- mkdir -p /usr/local/man/man1
- cp gpio.1 /usr/local/man/man1
+ @echo -n "Installing... "
+ @cp gpio /usr/local/bin
+ @chown root.root /usr/local/bin/gpio
+ @chmod 4755 /usr/local/bin/gpio
+ @mkdir -p /usr/local/man/man1
+ @cp gpio.1 /usr/local/man/man1
+ @echo "Done."
+
uninstall:
rm -f /usr/local/bin/gpio
.SH DESCRIPTION
.B GPIO
-is a swiss army knofe of a command line tool to allow the user easy
+is a swiss army knife of a command line tool to allow the user easy
access to the GPIO pins on the Raspberry Pi and the SPI A/D and D/A
-convertors on the Gertboard. It's designed for simple testing and
+converters on the Gertboard. It's designed for simple testing and
diagnostic purposes, but can be used in shell scripts for general if
somewhat slow control of the GPIO pins.
above and note that \fBBCM_GPIO\fR pin number is used not not wiringPi pin
numbering.
-Like the export commands abovem ownership is set to that of the
+Like the export commands above, ownership is set to that of the
calling user, allowing subsequent access from user programs without
requiring root/sudo.
.B gbr
channel
-This reads the analog to digital convertor on the Gertboard on the given
+This reads the analog to digital converter on the Gertboard on the given
channel. The board jumpers need to be in-place to do this operation.
.TP
channel value
This writes the supplied value to the output channel on the Gertboards
-SPI digital to analogue convertor.
+SPI digital to analogue converter.
The board jumpers need to be in-place to do this operation.
.PP
.TS
-r r l.
-WiringPi GPIO Function
+r r r l.
+WiringPi GPIO-r1 GPIO-r2 Function
_
-0 17
-1 18 (PWM)
-2 21
-3 22
-4 23
-5 24
-6 25
-7 4
-8 0 SDA0
-9 1 SCL0
-10 8 SPI CE0
-11 7 SPI CE1
-12 10 SPI MOSI
-13 9 SPI MISO
-14 11 SPI SCLK
-15 14 TxD
-16 15 RxD
+0 17 17
+1 18 18 (PWM)
+2 21 27
+3 22 22
+4 23 23
+5 24 24
+6 25 25
+7 4 4
+8 0 2 I2C: SDA0
+9 1 3 I2C: SCL0
+10 8 8 SPI: CE0
+11 7 7 SPI: CE1
+12 10 10 SPI: MOSI
+13 9 9 SPI: MISO
+14 11 11 SPI: SCLK
+15 14 14 TxD
+16 15 16 RxD
+17 - 28
+18 - 29
+19 - 30
+20 - 31
.TE
.SH FILES
# define FALSE (1==2)
#endif
-#define VERSION "1.2"
+#define VERSION "1.3"
static int wpMode ;
if (argc == 1)
{
- fprintf (stderr, "%s: %s\n", argv [0], usage) ;
+ fprintf (stderr, "%s\n", usage) ;
return 1 ;
}
printf ("Copyright (c) 2012 Gordon Henderson\n") ;
printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ;
printf ("For details type: %s -warranty\n", argv [0]) ;
+ printf ("\n") ;
+ printf ("This Raspberry Pi is a revision %d board.\n", piBoardRev ()) ;
return 0 ;
}
else if (strcasecmp (argv [1], "unexportall") == 0) { doUnexportall (argc, argv) ; return 0 ; }
else if (strcasecmp (argv [1], "unexport" ) == 0) { doUnexport (argc, argv) ; return 0 ; }
-// Check for drive or load commands:
+// Check for load command:
- if (strcasecmp (argv [1], "drive") == 0) { doPadDrive (argc, argv) ; return 0 ; }
if (strcasecmp (argv [1], "load" ) == 0) { doLoad (argc, argv) ; return 0 ; }
// Gertboard commands
wpMode = WPI_MODE_PINS ;
}
-// Check for PWM operations
+// Check for PWM or Pad Drive operations
if (wpMode != WPI_MODE_PIFACE)
{
- if (strcasecmp (argv [1], "pwm-bal") == 0) { doPwmMode (PWM_MODE_BAL) ; return 0 ; }
- if (strcasecmp (argv [1], "pwm-ms") == 0) { doPwmMode (PWM_MODE_MS) ; return 0 ; }
- if (strcasecmp (argv [1], "pwmr") == 0) { doPwmRange (argc, argv) ; return 0 ; }
- if (strcasecmp (argv [1], "pwmc") == 0) { doPwmClock (argc, argv) ; return 0 ; }
+ if (strcasecmp (argv [1], "pwm-bal") == 0) { doPwmMode (PWM_MODE_BAL) ; return 0 ; }
+ if (strcasecmp (argv [1], "pwm-ms") == 0) { doPwmMode (PWM_MODE_MS) ; return 0 ; }
+ if (strcasecmp (argv [1], "pwmr") == 0) { doPwmRange (argc, argv) ; return 0 ; }
+ if (strcasecmp (argv [1], "pwmc") == 0) { doPwmClock (argc, argv) ; return 0 ; }
+ if (strcasecmp (argv [1], "drive") == 0) { doPadDrive (argc, argv) ; return 0 ; }
}
// Check for wiring commands
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
#################################################################################
+DYN_VERS_MAJ=1
+DYN_VERS_MIN=0
-TARGET=libwiringPi.a
+STATIC=libwiringPi.a
+DYNAMIC=libwiringPi.so.$(DYN_VERS_MAJ).$(DYN_VERS_MIN)
#DEBUG = -g -O0
-DEBUG = -O3
+DEBUG = -O2
CC = gcc
INCLUDE = -I.
-CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
+CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe -fPIC
LIBS =
piNes.o \
lcd.o piHiPri.o piThread.o softPwm.o wiringPiSPI.o
-all: $(TARGET)
+all: $(STATIC) $(DYNAMIC)
-$(TARGET): $(OBJ)
- @echo [AR] $(OBJ)
- @ar rcs $(TARGET) $(OBJ)
- @ranlib $(TARGET)
- @size $(TARGET)
+$(STATIC): $(OBJ)
+ @echo [STATIC]
+ @ar rcs $(STATIC) $(OBJ)
+ @ranlib $(STATIC)
+
+# @size $(STATIC)
+
+$(DYNAMIC): $(OBJ)
+ @echo [DYNAMIC]
+ @gcc -shared -Wl,-soname,libwiringPi.so.1 -o libwiringPi.so.1.0 -lpthread $(OBJ)
.c.o:
@echo [CC] $<
@$(CC) -c $(CFLAGS) $< -o $@
clean:
- rm -f $(OBJ) $(TARGET) *~ core tags Makefile.bak
+ rm -f $(OBJ) *~ core tags Makefile.bak libwiringPi.*
tags: $(SRC)
@echo [ctags]
install: $(TARGET)
@echo [install]
- install -m 0755 -d /usr/local/lib
- install -m 0755 -d /usr/local/include
- install -m 0644 wiringPi.h /usr/local/include
- install -m 0644 wiringSerial.h /usr/local/include
- install -m 0644 wiringShift.h /usr/local/include
- install -m 0644 gertboard.h /usr/local/include
- install -m 0644 piNes.h /usr/local/include
- install -m 0644 softPwm.h /usr/local/include
- install -m 0644 lcd.h /usr/local/include
- install -m 0644 wiringPiSPI.h /usr/local/include
- install -m 0644 libwiringPi.a /usr/local/lib
+ @install -m 0755 -d /usr/local/lib
+ @install -m 0755 -d /usr/local/include
+ @install -m 0644 wiringPi.h /usr/local/include
+ @install -m 0644 wiringSerial.h /usr/local/include
+ @install -m 0644 wiringShift.h /usr/local/include
+ @install -m 0644 gertboard.h /usr/local/include
+ @install -m 0644 piNes.h /usr/local/include
+ @install -m 0644 softPwm.h /usr/local/include
+ @install -m 0644 lcd.h /usr/local/include
+ @install -m 0644 wiringPiSPI.h /usr/local/include
+ @install -m 0644 libwiringPi.a /usr/local/lib
+ @install -m 0755 libwiringPi.so.1.0 /usr/local/lib
+ @ln -sf /usr/local/lib/libwiringPi.so.1.0 /usr/local/lib/libwiringPi.so
+ @ln -sf /usr/local/lib/libwiringPi.so.1.0 /usr/local/lib/libwiringPi.so.1
+ @ldconfig
uninstall:
@echo [uninstall]
- rm -f /usr/local/include/lcd.h
- rm -f /usr/local/include/lpiNes.h
- rm -f /usr/local/include/gertboard.h
- rm -f /usr/local/include/wiringShift.h
- rm -f /usr/local/include/wiringSerial.h
- rm -f /usr/local/include/wiringPi.h
- rm -f /usr/local/lib/libwiringPi.a
+ @rm -f /usr/local/include/wiringPi.h
+ @rm -f /usr/local/include/wiringSerial.h
+ @rm -f /usr/local/include/wiringShift.h
+ @rm -f /usr/local/include/gertboard.h
+ @rm -f /usr/local/include/piNes.h
+ @rm -f /usr/local/include/softPwm.h
+ @rm -f /usr/local/include/lcd.h
+ @rm -f /usr/local/include/wiringPiSPI.h
+ @rm -f /usr/local/lib/libwiringPi.*
+ @ldconfig
# DO NOT DELETE
wiringPiFace.o: wiringPi.h
wiringSerial.o: wiringSerial.h
wiringShift.o: wiringPi.h wiringShift.h
-gertboard.o: gertboard.h
+gertboard.o: wiringPiSPI.h gertboard.h
piNes.o: wiringPi.h piNes.h
lcd.o: wiringPi.h lcd.h
piHiPri.o: wiringPi.h
piThread.o: wiringPi.h
+softPwm.o: wiringPi.h softPwm.h
+wiringPiSPI.o: wiringPiSPI.h
static void strobe (struct lcdDataStruct *lcd)
{
- digitalWrite (lcd->strbPin, 1) ; delayMicroseconds (1) ;
+
+// Note timing changes for new version of delayMicroseconds ()
+
+ digitalWrite (lcd->strbPin, 1) ; delayMicroseconds (50) ;
digitalWrite (lcd->strbPin, 0) ; delayMicroseconds (50) ;
}
#define MAX_LCDS 8
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern void lcdHome (int fd) ;
extern void lcdClear (int fd) ;
extern void lcdPosition (int fd, int x, int y) ;
extern void lcdPuts (int fd, char *string) ;
extern void lcdPrintf (int fd, char *message, ...) ;
-#ifdef __cplusplus
-extern "C" {
-#endif
-
extern int lcdInit (int rows, int cols, int bits, int rs, int strb,
int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;
}
fclose (cpuFd) ;
+
if (r == -1)
{
fprintf (stderr, "piBoardRev: Unable to determine board revision from /proc/cpuinfo\n") ;
boardRev = 2 ;
else
{
- fprintf (stderr, "piBoardRev: Unable to determine board revision from %d\n", r) ;
- errno = 0 ;
- return -1 ;
+ fprintf (stderr, "WARNING: wiringPi: Unable to determine board revision from \"%d\"\n", r) ;
+ fprintf (stderr, " -> You may want to check:\n") ;
+ fprintf (stderr, " -> http://www.raspberrypi.org/phpBB3/viewtopic.php?p=184410#p184410\n") ;
+ fprintf (stderr, " -> Assuming a Rev 1 board\n") ;
+ boardRev = 1 ;
}
if (wiringPiDebug)