Browse Source

Updates based on latest RPi revision codes

pull/158/head
Jim Parziale 2 years ago
parent
commit
1584f9315e
21 changed files with 1964 additions and 2222 deletions
  1. +0
    -33
      People
  2. +1
    -1
      VERSION
  3. +1
    -1
      debian-template/wiringPi/DEBIAN/control
  4. +0
    -0
      debian-template/wiringPi/DEBIAN/postinst
  5. +0
    -0
      debian-template/wiringPi/DEBIAN/postrm
  6. +0
    -0
      examples/Makefile
  7. +0
    -0
      examples/blink.sh
  8. +0
    -0
      examples/pwm.c
  9. +0
    -0
      examples/q2w/blink.sh
  10. +0
    -0
      examples/servo.c
  11. +0
    -0
      gpio/Makefile
  12. +620
    -647
      gpio/gpio.c
  13. +0
    -0
      gpio/pintest
  14. +48
    -48
      gpio/readall.c
  15. +2
    -2
      version.h
  16. +33
    -26
      wiringPi/Makefile
  17. +5
    -7
      wiringPi/drcNet.c
  18. +0
    -0
      wiringPi/softServo.c
  19. +1049
    -1253
      wiringPi/wiringPi.c
  20. +205
    -204
      wiringPi/wiringPi.h
  21. +0
    -0
      wiringPi/wiringPiSPI.c

+ 0
- 33
People View File

@@ -1,33 +0,0 @@

Just a quick note to some people who've provided help, suggestions,
bug-fixes, etc. along the way...

Nick Lott: (And others)
Hints about making it work with C++

Philipp Stefan Neininger:
Minor bug in the Makefile to do with cross compiling

Chris McSweeny
Hints and tips about the use of arithmetic in gettimeofday()
inside the dealyMicrosecondsHard() function.
And spotting a couple of schoolboy errors in the (experimental)
softServo code, prompting me to completely re-write it.

Armin (Via projects website)
Some pointers about the i2c-dev.h files.

Arno Wagner
Suggestions for the mmap calls in wiringPiSetup()

CHARLES Thibaut:
A small issue in softTone

Xian Stannard
Fixing some typos in the man page!

Andre Crone
Suggested the __WIRING_PI.H__ round wiringPi.h

Rik Teerling
Pointing out some silly mistooks in the I2C code...

+ 1
- 1
VERSION View File

@@ -1 +1 @@
2.71
2.72

+ 1
- 1
debian-template/wiringPi/DEBIAN/control View File

@@ -1,5 +1,5 @@
Package: wiringpi Package: wiringpi
Version: 2.71
Version: 2.72
Section: libraries Section: libraries
Priority: optional Priority: optional
Architecture: armhf Architecture: armhf


+ 0
- 0
debian-template/wiringPi/DEBIAN/postinst View File


+ 0
- 0
debian-template/wiringPi/DEBIAN/postrm View File


+ 0
- 0
examples/Makefile View File


+ 0
- 0
examples/blink.sh View File


+ 0
- 0
examples/pwm.c View File


+ 0
- 0
examples/q2w/blink.sh View File


+ 0
- 0
examples/servo.c View File


+ 0
- 0
gpio/Makefile View File


+ 620
- 647
gpio/gpio.c
File diff suppressed because it is too large
View File


+ 0
- 0
gpio/pintest View File


+ 48
- 48
gpio/readall.c View File

@@ -75,15 +75,15 @@ static void doReadallExternal (void)
********************************************************************************* *********************************************************************************
*/ */


static char *alts [] =
static char *alts[] =
{ {
"IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3" "IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3"
} ; } ;


static int physToWpi [64] =
static int physToWpi[64] =
{ {
-1, // 0
-1, -1, // 1, 2
-1, // 0
-1, -1, // 1, 2
8, -1, 8, -1,
9, -1, 9, -1,
7, 15, 7, 15,
@@ -95,48 +95,48 @@ static int physToWpi [64] =
12, -1, 12, -1,
13, 6, 13, 6,
14, 10, 14, 10,
-1, 11, // 25, 26
-1, 11, // 25, 26
30, 31, // Actually I2C, but not used 30, 31, // Actually I2C, but not used
21, -1, 21, -1,
22, 26, 22, 26,
23, -1, 23, -1,
24, 27, 24, 27,
25, 28, 25, 28,
-1, 29,
-1, -1,
-1, 29, // 39, 40

-1, -1, // 41, 42
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
17, 18, 17, 18,
19, 20,
19, 20, // 53, 54
-1, -1, -1, -1, -1, -1, -1, -1, -1 -1, -1, -1, -1, -1, -1, -1, -1, -1
} ; } ;


static char *physNames [64] =
static char *physNames[64] =
{ {
NULL, NULL,

" 3.3v", "5v ", " 3.3v", "5v ",
" SDA.1", "5v ", " SDA.1", "5v ",
" SCL.1", "0v ",
" SCL.1", "GND ",
"GPIO. 7", "TxD ", "GPIO. 7", "TxD ",
" 0v", "RxD ",
" GND", "RxD ",
"GPIO. 0", "GPIO. 1", "GPIO. 0", "GPIO. 1",
"GPIO. 2", "0v ",
"GPIO. 2", "GND ",
"GPIO. 3", "GPIO. 4", "GPIO. 3", "GPIO. 4",
" 3.3v", "GPIO. 5", " 3.3v", "GPIO. 5",
" MOSI", "0v ",
" MOSI", "GND ",
" MISO", "GPIO. 6", " MISO", "GPIO. 6",
" SCLK", "CE0 ", " SCLK", "CE0 ",
" 0v", "CE1 ",
" GND", "CE1 ",
" SDA.0", "SCL.0 ", " SDA.0", "SCL.0 ",
"GPIO.21", "0v ",
"GPIO.21", "GND ",
"GPIO.22", "GPIO.26", "GPIO.22", "GPIO.26",
"GPIO.23", "0v ",
"GPIO.23", "GND ",
"GPIO.24", "GPIO.27", "GPIO.24", "GPIO.27",
"GPIO.25", "GPIO.28", "GPIO.25", "GPIO.28",
" 0v", "GPIO.29",
" GND", "GPIO.29",
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
@@ -162,22 +162,22 @@ static void readallPhys (int physPin)
if (physPinToGpio (physPin) == -1) if (physPinToGpio (physPin) == -1)
printf (" | | ") ; printf (" | | ") ;
else else
printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]) ;
printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi[physPin]) ;


printf (" | %s", physNames [physPin]) ;
printf (" | %s", physNames[physPin]) ;


if (physToWpi [physPin] == -1)
if (physToWpi[physPin] == -1)
printf (" | | ") ; printf (" | | ") ;
else else
{ {
/**/ if (wpMode == WPI_MODE_GPIO)
if (wpMode == WPI_MODE_GPIO)
pin = physPinToGpio (physPin) ; pin = physPinToGpio (physPin) ;
else if (wpMode == WPI_MODE_PHYS) else if (wpMode == WPI_MODE_PHYS)
pin = physPin ; pin = physPin ;
else else
pin = physToWpi [physPin] ;
pin = physToWpi[physPin] ;


printf (" | %4s", alts [getAlt (pin)]) ;
printf (" | %4s", alts[getAlt (pin)]) ;
printf (" | %d", digitalRead (pin)) ; printf (" | %d", digitalRead (pin)) ;
} }


@@ -189,27 +189,27 @@ static void readallPhys (int physPin)


// Same, reversed // Same, reversed


if (physToWpi [physPin] == -1)
if (physToWpi[physPin] == -1)
printf (" | | ") ; printf (" | | ") ;
else else
{ {
/**/ if (wpMode == WPI_MODE_GPIO)
if (wpMode == WPI_MODE_GPIO)
pin = physPinToGpio (physPin) ; pin = physPinToGpio (physPin) ;
else if (wpMode == WPI_MODE_PHYS) else if (wpMode == WPI_MODE_PHYS)
pin = physPin ; pin = physPin ;
else else
pin = physToWpi [physPin] ;
pin = physToWpi[physPin] ;


printf (" | %d", digitalRead (pin)) ; printf (" | %d", digitalRead (pin)) ;
printf (" | %-4s", alts [getAlt (pin)]) ;
printf (" | %-4s", alts[getAlt (pin)]) ;
} }


printf (" | %-5s", physNames [physPin]) ;
printf (" | %-5s", physNames[physPin]) ;


if (physToWpi [physPin] == -1)
if (physToWpi [physPin] == -1)
printf (" | | ") ; printf (" | | ") ;
else else
printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin)) ;
printf (" | %-3d | %-3d", physToWpi[physPin], physPinToGpio (physPin)) ;


printf (" |\n") ; printf (" |\n") ;
} }
@@ -233,11 +233,11 @@ static void allReadall (void)
for (pin = 0 ; pin < 27 ; ++pin) for (pin = 0 ; pin < 27 ; ++pin)
{ {
printf ("| %3d ", pin) ; printf ("| %3d ", pin) ;
printf ("| %-4s ", alts [getAlt (pin)]) ;
printf ("| %-4s ", alts[getAlt (pin)]) ;
printf ("| %s ", digitalRead (pin) == HIGH ? "High" : "Low ") ; printf ("| %s ", digitalRead (pin) == HIGH ? "High" : "Low ") ;
printf ("| ") ; printf ("| ") ;
printf ("| %3d ", pin + 27) ; printf ("| %3d ", pin + 27) ;
printf ("| %-4s ", alts [getAlt (pin + 27)]) ;
printf ("| %-4s ", alts[getAlt (pin + 27)]) ;
printf ("| %s ", digitalRead (pin + 27) == HIGH ? "High" : "Low ") ; printf ("| %s ", digitalRead (pin + 27) == HIGH ? "High" : "Low ") ;
printf ("|\n") ; printf ("|\n") ;
} }
@@ -303,7 +303,7 @@ static void plus2header (int model)
printf (" +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_ZERO_2W) else if (model == PI_MODEL_ZERO_2W)
printf (" +-----+-----+---------+------+---+Pi Zero 2W+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+Pi Zero 2W+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_2)
else if (model == PI_MODEL_2B)
printf (" +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_3B) else if (model == PI_MODEL_3B)
printf (" +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+\n") ; printf (" +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+\n") ;
@@ -346,7 +346,7 @@ static void piPlusReadall (int model)


void doReadall (void) void doReadall (void)
{ {
int model, rev, mem, maker, overVolted ;
int model, proc, rev, mem, maker, overVolted ;


if (wiringPiNodes != NULL) // External readall if (wiringPiNodes != NULL) // External readall
{ {
@@ -354,18 +354,18 @@ void doReadall (void)
return ; return ;
} }


piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
piBoardId (&model, &proc, &rev, &mem, &maker, &overVolted) ;


/**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
abReadall (model, rev) ; abReadall (model, rev) ;
else if ((model == PI_MODEL_BP) || (model == PI_MODEL_AP) ||
(model == PI_MODEL_2) ||
(model == PI_MODEL_3AP) ||
(model == PI_MODEL_3B) || (model == PI_MODEL_3BP) ||
(model == PI_MODEL_4B) || (model == PI_MODEL_400) || (model == PI_MODEL_CM4) ||
(model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W) || (model == PI_MODEL_ZERO_2W))
else if ((model == PI_MODEL_BP) || (model == PI_MODEL_AP) ||
(model == PI_MODEL_2B) ||
(model == PI_MODEL_3AP) ||
(model == PI_MODEL_3B) || (model == PI_MODEL_3BP) ||
(model == PI_MODEL_4B) || (model == PI_MODEL_400) || (model == PI_MODEL_CM4) ||
(model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W) || (model == PI_MODEL_ZERO_2W))
piPlusReadall (model) ; piPlusReadall (model) ;
else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || (model == PI_MODEL_CM3P) )
else if ((model == PI_MODEL_CM1) || (model == PI_MODEL_CM3) || (model == PI_MODEL_CM3P) )
allReadall () ; allReadall () ;
else else
printf ("Oops - unable to determine board type... model: %d\n", model) ; printf ("Oops - unable to determine board type... model: %d\n", model) ;
@@ -390,16 +390,16 @@ void doAllReadall (void)
********************************************************************************* *********************************************************************************
*/ */


void doQmode (int argc, char *argv [])
void doQmode (int argc, char *argv[])
{ {
int pin ; int pin ;


if (argc != 3) if (argc != 3)
{ {
fprintf (stderr, "Usage: %s qmode pin\n", argv [0]) ;
fprintf (stderr, "Usage: %s qmode pin\n", argv[0]) ;
exit (EXIT_FAILURE) ; exit (EXIT_FAILURE) ;
} }


pin = atoi (argv [2]) ;
printf ("%s\n", alts [getAlt (pin)]) ;
pin = atoi (argv[2]) ;
printf ("%s\n", alts[getAlt (pin)]) ;
} }

+ 2
- 2
version.h View File

@@ -1,3 +1,3 @@
#define VERSION "2.71"
#define VERSION "2.72"
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 71
#define VERSION_MINOR 72

+ 33
- 26
wiringPi/Makefile View File

@@ -1,4 +1,4 @@
#
#################################################################################
# Makefile: # Makefile:
# wiringPi - Wiring Compatable library for the Raspberry Pi # wiringPi - Wiring Compatable library for the Raspberry Pi
# #
@@ -27,11 +27,11 @@ PREFIX?=/local


LDCONFIG?=ldconfig LDCONFIG?=ldconfig


# Specify "V=1" on the make command line to enable
ifneq ($V,1) ifneq ($V,1)
Q ?= @ Q ?= @
endif endif


STATIC=libwiringPi.a
DYNAMIC=libwiringPi.so.$(VERSION) DYNAMIC=libwiringPi.so.$(VERSION)


#DEBUG = -g -O0 #DEBUG = -g -O0
@@ -46,28 +46,30 @@ LIBS = -lm -lpthread -lrt -lcrypt


############################################################################### ###############################################################################


SRC = wiringPi.c \
wiringSerial.c wiringShift.c \
SRC = wiringPi.c \
wiringSerial.c wiringShift.c \
piHiPri.c piThread.c \ piHiPri.c piThread.c \
wiringPiSPI.c wiringPiI2C.c \ wiringPiSPI.c wiringPiI2C.c \
softPwm.c softTone.c \ softPwm.c softTone.c \
mcp23008.c mcp23016.c mcp23017.c \
mcp23008.c mcp23016.c mcp23017.c \
mcp23s08.c mcp23s17.c \ mcp23s08.c mcp23s17.c \
sr595.c \
pcf8574.c pcf8591.c \
mcp3002.c mcp3004.c mcp4802.c mcp3422.c \
max31855.c max5322.c ads1115.c \
sn3218.c \
bmp180.c htu21d.c ds18b20.c rht03.c \
sr595.c \
pcf8574.c pcf8591.c \
mcp3002.c mcp3004.c mcp4802.c mcp3422.c \
max31855.c max5322.c ads1115.c \
sn3218.c \
bmp180.c htu21d.c ds18b20.c rht03.c \
drcSerial.c drcNet.c \ drcSerial.c drcNet.c \
pseudoPins.c \
pseudoPins.c \
wpiExtensions.c wpiExtensions.c


HEADERS = $(shell ls *.h) HEADERS = $(shell ls *.h)


OBJ = $(SRC:.c=.o) OBJ = $(SRC:.c=.o)


all: $(DYNAMIC)
#################################################################################

all: $(DYNAMIC)


.PHONY: static .PHONY: static
static: static:
@@ -81,27 +83,29 @@ $(DYNAMIC): $(OBJ)
$Q echo [Compile] $< $Q echo [Compile] $<
$Q $(CC) -c $(CFLAGS) $< -o $@ $Q $(CC) -c $(CFLAGS) $< -o $@


#################################################################################


.PHONY: clean .PHONY: clean
clean: clean:
$Q echo "[Clean]" $Q echo "[Clean]"
$Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*
$Q rm -vf $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*


.PHONY: tags .PHONY: tags
tags: $(SRC) tags: $(SRC)
$Q echo [ctags] $Q echo [ctags]
$Q ctags $(SRC) $Q ctags $(SRC)


#################################################################################


.PHONY: install .PHONY: install
install: $(DYNAMIC) install: $(DYNAMIC)
$Q echo "[Install Headers]" $Q echo "[Install Headers]"
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
$Q echo "[Install Dynamic Lib]" $Q echo "[Install Dynamic Lib]"
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
$Q install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
$Q install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
$Q $(LDCONFIG) $Q $(LDCONFIG)


.PHONY: check-deb-destdir .PHONY: check-deb-destdir
@@ -113,18 +117,18 @@ endif
.PHONY: install-deb .PHONY: install-deb
install-deb: $(DYNAMIC) check-deb-destdir install-deb: $(DYNAMIC) check-deb-destdir
$Q echo "[Install Headers: deb]" $Q echo "[Install Headers: deb]"
$Q install -m 0755 -d $(DEB_DESTDIR)/usr/include
$Q install -m 0644 $(HEADERS) $(DEB_DESTDIR)/usr/include
$Q install -m 0755 -d $(DEB_DESTDIR)/usr/include
$Q install -m 0644 $(HEADERS) $(DEB_DESTDIR)/usr/include
$Q echo "[Install Dynamic Lib: deb]" $Q echo "[Install Dynamic Lib: deb]"
install -m 0755 -d $(DEB_DESTDIR)/usr/lib
install -m 0755 libwiringPi.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPi.so.$(VERSION)
ln -sf $(DEB_DESTDIR)/usr/lib/libwiringPi.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPi.so
install -m 0755 -d $(DEB_DESTDIR)/usr/lib
install -m 0755 libwiringPi.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPi.so.$(VERSION)
ln -sf $(DEB_DESTDIR)/usr/lib/libwiringPi.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPi.so


.PHONY: uninstall .PHONY: uninstall
uninstall: uninstall:
$Q echo "[UnInstall]" $Q echo "[UnInstall]"
$Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS)
$Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPi.*
$Q cd $(DESTDIR)$(PREFIX)/include/ && rm -vf $(HEADERS)
$Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -vf libwiringPi.*
$Q $(LDCONFIG) $Q $(LDCONFIG)




@@ -132,6 +136,7 @@ uninstall:
depend: depend:
makedepend -Y $(SRC) $(SRC_I2C) makedepend -Y $(SRC) $(SRC_I2C)


#################################################################################
# DO NOT DELETE # DO NOT DELETE


wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h
@@ -169,3 +174,5 @@ wpiExtensions.o: mcp23s17.h sr595.h pcf8574.h pcf8591.h mcp3002.h mcp3004.h
wpiExtensions.o: mcp4802.h mcp3422.h max31855.h max5322.h ads1115.h sn3218.h wpiExtensions.o: mcp4802.h mcp3422.h max31855.h max5322.h ads1115.h sn3218.h
wpiExtensions.o: drcSerial.h pseudoPins.h bmp180.h htu21d.h ds18b20.h wpiExtensions.o: drcSerial.h pseudoPins.h bmp180.h htu21d.h ds18b20.h
wpiExtensions.o: wpiExtensions.h wpiExtensions.o: wpiExtensions.h

#################################################################################

+ 5
- 7
wiringPi/drcNet.c View File

@@ -104,26 +104,24 @@ static int authenticate (int fd, const char *pass)
{ {
char *challenge ; char *challenge ;
char *encrypted ; char *encrypted ;
char salted [1024] ;
char salted [1024+4] ; // Need to hold 4 more chars - see sprintf below


if ((challenge = getChallenge (fd)) == NULL) if ((challenge = getChallenge (fd)) == NULL)
return -1 ; return -1 ;


sprintf (salted, "$6$%s$", challenge) ; sprintf (salted, "$6$%s$", challenge) ;
encrypted = crypt (pass, salted) ; encrypted = crypt (pass, salted) ;
// This is an assertion, or sanity check on my part...
// The '20' comes from the $6$ then the 16 characters of the salt,
// then the terminating $.


// Assertion:
// The '20' comes from the $6$ then the 16 characters of the salt,
// then the terminating $.
if (strncmp (encrypted, salted, 20) != 0) if (strncmp (encrypted, salted, 20) != 0)
{ {
errno = EBADE ; errno = EBADE ;
return -1 ; return -1 ;
} }


// 86 characters is the length of the SHA-256 hash

// 86 characters is the length of the SHA-256 hash
if (write (fd, encrypted + 20, 86) == 86) if (write (fd, encrypted + 20, 86) == 86)
return 0 ; return 0 ;
else else


+ 0
- 0
wiringPi/softServo.c View File


+ 1049
- 1253
wiringPi/wiringPi.c
File diff suppressed because it is too large
View File


+ 205
- 204
wiringPi/wiringPi.h View File

@@ -1,191 +1,201 @@
/* /*
* wiringPi.h: * wiringPi.h:
* Arduino like Wiring library for the Raspberry Pi.
* Copyright (c) 2012-2017 Gordon Henderson
* Arduino like Wiring library for the Raspberry Pi.
* Copyright (c) 2012-2017 Gordon Henderson
*********************************************************************** ***********************************************************************
* This file is part of wiringPi: * This file is part of wiringPi:
* https://github.com/WiringPi/WiringPi/
* https://github.com/WiringPi/WiringPi/
* *
* 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 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.
* 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 <http://www.gnu.org/licenses/>.
* You should have received a copy of the GNU Lesser General Public License
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************** ***********************************************************************
*/ */


#ifndef __WIRING_PI_H__
#define __WIRING_PI_H__
#ifndef __WIRING_PI_H__
#define __WIRING_PI_H__


// C doesn't have true/false by default and I can never remember which
// way round they are, so ...
// (and yes, I know about stdbool.h but I like capitals for these and I'm old)

#ifndef TRUE
# define TRUE (1==1)
# define FALSE (!TRUE)
#include <stdbool.h>
#ifndef TRUE
# define TRUE true
# define FALSE false
#endif #endif


// GCC warning suppressor
#define UNU __attribute__((unused))
// GCC warning suppressor - don't warn about unused parameters (-Wunused-parameter)
// @TODO Remove this and fix instances where parameters are unused.
#define UNU __attribute__((unused))


// Mask for the bottom 64 pins which belong to the Raspberry Pi // Mask for the bottom 64 pins which belong to the Raspberry Pi
// The others are available for the other devices
// The others are available for the other devices
// @TODO Replace these checks with a check for (pin < 64)
#define PI_GPIO_MASK (0xFFFFFFC0)


#define PI_GPIO_MASK (0xFFFFFFC0)

// Handy defines


// wiringPi modes // wiringPi modes

#define WPI_MODE_PINS 0
#define WPI_MODE_GPIO 1
#define WPI_MODE_GPIO_SYS 2
#define WPI_MODE_PHYS 3
#define WPI_MODE_PIFACE 4
#define WPI_MODE_UNINITIALISED -1
#define WPI_MODE_PINS 0 // Virtual pin numbers 0 through 16
#define WPI_MODE_GPIO 1 // Broadcom GPIO pin numbers
#define WPI_MODE_GPIO_SYS 2 // Broadcom GPIO pin numbers, but uses /sys/class/gpio (slower)
#define WPI_MODE_PHYS 3 // Raspberry Pi pysical pins
#define WPI_MODE_PIFACE 4 // UNUSED
#define WPI_MODE_UNINITIALISED -1


// Pin modes // Pin modes
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
#define LOW 0
#define HIGH 1
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
// Pin levels
#define LOW 0
#define HIGH 1


// Pull up/down/none // Pull up/down/none

#define PUD_OFF 0
#define PUD_DOWN 1
#define PUD_UP 2
#define PUD_OFF 0
#define PUD_DOWN 1
#define PUD_UP 2


// PWM // PWM

#define PWM_MODE_MS 0
#define PWM_MODE_BAL 1
#define PWM_MODE_MS 0
#define PWM_MODE_BAL 1


// Interrupt levels // Interrupt levels

#define INT_EDGE_SETUP 0
#define INT_EDGE_FALLING 1
#define INT_EDGE_RISING 2
#define INT_EDGE_BOTH 3
#define INT_EDGE_SETUP 0
#define INT_EDGE_FALLING 1
#define INT_EDGE_RISING 2
#define INT_EDGE_BOTH 3


// Pi model types and version numbers // Pi model types and version numbers
// Intended for the GPIO program Use at your own risk.
// Intended for the GPIO program
// Use at your own risk
// https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#new-style-revision-codes // https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#new-style-revision-codes

#define PI_MODEL_A 0
#define PI_MODEL_B 1
#define PI_MODEL_AP 2
#define PI_MODEL_BP 3
#define PI_MODEL_2 4
#define PI_ALPHA 5
#define PI_MODEL_CM 6
#define PI_MODEL_07 7
#define PI_MODEL_3B 8
#define PI_MODEL_ZERO 9
#define PI_MODEL_CM3 10
#define PI_MODEL_ZERO_W 12
#define PI_MODEL_3BP 13
#define PI_MODEL_3AP 14
#define PI_MODEL_CM3P 16
#define PI_MODEL_4B 17
#define PI_MODEL_ZERO_2W 18
#define PI_MODEL_400 19
#define PI_MODEL_CM4 20

#define PI_VERSION_1 0
#define PI_VERSION_1_1 1
#define PI_VERSION_1_2 2
#define PI_VERSION_2 3

#define PI_MAKER_SONY 0
#define PI_MAKER_EGOMAN 1
#define PI_MAKER_EMBEST 2
#define PI_MAKER_SONYJAPAN 3
#define PI_MAKER_EMBEST4 4
#define PI_MAKER_STADIUM 5

extern const char *piModelNames [21] ;
extern const char *piRevisionNames [21] ;
extern const char *piMakerNames [16] ;
extern const int piMemorySize [ 8] ;


// Intended for the GPIO program Use at your own risk.
// Format (bits): FMMM'CCCC'PPPP'TTTTTTTT'RRRR

// F bit (New flag)
#define PI_FLAG_OLD 0 // old-style revision
#define PI_FLAG_NEW 1 // new-style revision

// MMM bits (Memory size)
#define PI_MEM_256M 0
#define PI_MEM_512M 1
#define PI_MEM_1G 2
#define PI_MEM_2G 3
#define PI_MEM_4G 4
#define PI_MEM_8G 5

// CCCC bits (Manufacturer)
#define PI_MAKER_SONY 0 // Sony UK
#define PI_MAKER_EGOMAN 1
#define PI_MAKER_EMBEST 2
#define PI_MAKER_SONYJAPAN 3
#define PI_MAKER_EMBEST4 4
#define PI_MAKER_STADIUM 5

// PPPP bits (Processor)
#define PI_PROC_BCM2835 0
#define PI_PROC_BCM2836 1
#define PI_PROC_BCM2837 2
#define PI_PROC_BCM2711 3

// TTTTTTTT bits (Type)
#define PI_MODEL_A 0x00
#define PI_MODEL_B 0x01
#define PI_MODEL_AP 0x02
#define PI_MODEL_BP 0x03
#define PI_MODEL_2B 0x04
#define PI_ALPHA 0x05
#define PI_MODEL_CM1 0x06
// 0x07
#define PI_MODEL_3B 0x08
#define PI_MODEL_ZERO 0x09
#define PI_MODEL_CM3 0x0A
// 0x0B
#define PI_MODEL_ZERO_W 0x0C
#define PI_MODEL_3BP 0x0D
#define PI_MODEL_3AP 0x0E
// 0x0F
#define PI_MODEL_CM3P 0x10
#define PI_MODEL_4B 0x11
#define PI_MODEL_ZERO_2W 0x12
#define PI_MODEL_400 0x13
#define PI_MODEL_CM4 0x14

// RRRR bits (Revision)
#define PI_VERSION_1 0
#define PI_VERSION_1_1 1
#define PI_VERSION_1_2 2
#define PI_VERSION_2 3
#define PI_VERSION_1_4 4


extern const char *piModelNames [21];
extern const char *piRevisionNames [ 5];
extern const char *piMakerNames [16];
extern const char *piProcessorNames[ 5];
extern const int piMemorySize [ 8];


// Intended for the GPIO program
// Use at your own risk.


// Threads // Threads

#define PI_THREAD(X) void *X (UNU void *dummy)
#define PI_THREAD(X) void *X (UNU void *dummy)


// Failure modes // Failure modes

#define WPI_FATAL (1==1)
#define WPI_ALMOST (1==2)
#define WPI_FATAL true
#define WPI_ALMOST false




// wiringPiNodeStruct: // wiringPiNodeStruct:
// This describes additional device nodes in the extended wiringPi
// 2.0 scheme of things.
// It's a simple linked list for now, but will hopefully migrate to
// a binary tree for efficiency reasons - but then again, the chances
// of more than 1 or 2 devices being added are fairly slim, so who
// knows....

// This describes additional device nodes in the extended wiringPi
// 2.0 scheme of things. It's a simple linked list.
struct wiringPiNodeStruct struct wiringPiNodeStruct
{ {
int pinBase ;
int pinMax ;

int fd ; // Node specific
unsigned int data0 ; // ditto
unsigned int data1 ; // ditto
unsigned int data2 ; // ditto
unsigned int data3 ; // ditto

void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode) ;
void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode) ;
int (*digitalRead) (struct wiringPiNodeStruct *node, int pin) ;
//unsigned int (*digitalRead8) (struct wiringPiNodeStruct *node, int pin) ;
void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;
// void (*digitalWrite8) (struct wiringPiNodeStruct *node, int pin, int value) ;
void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;
int (*analogRead) (struct wiringPiNodeStruct *node, int pin) ;
void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value) ;

struct wiringPiNodeStruct *next ;
} ;

extern struct wiringPiNodeStruct *wiringPiNodes ;
int pinBase;
int pinMax;


// Export variables for the hardware pointers
int fd; // Node specific
unsigned int data0; // ditto
unsigned int data1; // ditto
unsigned int data2; // ditto
unsigned int data3; // ditto


extern volatile unsigned int *_wiringPiGpio ;
extern volatile unsigned int *_wiringPiPwm ;
extern volatile unsigned int *_wiringPiClk ;
extern volatile unsigned int *_wiringPiPads ;
extern volatile unsigned int *_wiringPiTimer ;
extern volatile unsigned int *_wiringPiTimerIrqRaw ;
void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode);
void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode);
int (*digitalRead) (struct wiringPiNodeStruct *node, int pin);
void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value);
void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value);
int (*analogRead) (struct wiringPiNodeStruct *node, int pin);
void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value);


struct wiringPiNodeStruct *next;
};

extern struct wiringPiNodeStruct *wiringPiNodes;

// Export variables for the hardware pointers
extern volatile unsigned int *_wiringPiGpio;
extern volatile unsigned int *_wiringPiPwm;
extern volatile unsigned int *_wiringPiClk;
extern volatile unsigned int *_wiringPiPads;
extern volatile unsigned int *_wiringPiTimer;
extern volatile unsigned int *_wiringPiTimerIrqRaw;


// Function prototypes
// c++ wrappers thanks to a comment by Nick Lott
// (and others on the Raspberry Pi forums)


// Function prototypes
// c++ wrappers thanks to a comment by Nick Lott
// (and others on the Raspberry Pi forums)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -193,81 +203,72 @@ extern "C" {
// Data // Data


// Internal // Internal

extern int wiringPiFailure (int fatal, const char *message, ...) ;
extern int wiringPiFailure (int fatal, const char *message, ...);


// Core wiringPi functions // Core wiringPi functions

extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ;
extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) ;

extern void wiringPiVersion (int *major, int *minor) ;
extern int wiringPiSetup (void) ;
extern int wiringPiSetupSys (void) ;
extern int wiringPiSetupGpio (void) ;
extern int wiringPiSetupPhys (void) ;

extern void pinModeAlt (int pin, int mode) ;
extern void pinMode (int pin, int mode) ;
extern void pullUpDnControl (int pin, int pud) ;
extern int digitalRead (int pin) ;
extern void digitalWrite (int pin, int value) ;
extern unsigned int digitalRead8 (int pin) ;
extern void digitalWrite8 (int pin, int value) ;
extern void pwmWrite (int pin, int value) ;
extern int analogRead (int pin) ;
extern void analogWrite (int pin, int value) ;
extern struct wiringPiNodeStruct *wiringPiFindNode (int pin);
extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins);

extern void wiringPiVersion (int *major, int *minor);
extern int wiringPiSetup (void);
extern int wiringPiSetupSys (void);
extern int wiringPiSetupGpio (void);
extern int wiringPiSetupPhys (void);

extern void pinModeAlt (int pin, int mode);
extern void pinMode (int pin, int mode);
extern void pullUpDnControl (int pin, int pud);
extern int digitalRead (int pin);
extern void digitalWrite (int pin, int value);
extern unsigned int digitalRead8 (int pin);
extern void digitalWrite8 (int pin, int value);
extern void pwmWrite (int pin, int value);
extern int analogRead (int pin);
extern void analogWrite (int pin, int value);


// PiFace specifics // PiFace specifics
// (Deprecated)

extern int wiringPiSetupPiFace (void) ;
extern int wiringPiSetupPiFaceForGpioProg (void) ; // Don't use this - for gpio program only
// (Deprecated)
extern int wiringPiSetupPiFace (void);
extern int wiringPiSetupPiFaceForGpioProg (void); // Don't use this - for gpio program only


// On-Board Raspberry Pi hardware specific stuff // On-Board Raspberry Pi hardware specific stuff

extern int piGpioLayout (void) ;
extern int piBoardRev (void) ; // Deprecated
extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) ;
extern int wpiPinToGpio (int wpiPin) ;
extern int physPinToGpio (int physPin) ;
extern void setPadDrive (int group, int value) ;
extern int getAlt (int pin) ;
extern void pwmToneWrite (int pin, int freq) ;
extern void pwmSetMode (int mode) ;
extern void pwmSetRange (unsigned int range) ;
extern void pwmSetClock (int divisor) ;
extern void gpioClockSet (int pin, int freq) ;
extern unsigned int digitalReadByte (void) ;
extern unsigned int digitalReadByte2 (void) ;
extern void digitalWriteByte (int value) ;
extern void digitalWriteByte2 (int value) ;
extern int piGpioLayout (void);
extern void piBoardId (int *model, int *proc, int *rev, int *mem, int *maker, int *overVolted);
extern int wpiPinToGpio (int wpiPin);
extern int physPinToGpio (int physPin);
extern void setPadDrive (int group, int value);
extern int getAlt (int pin);
extern void pwmToneWrite (int pin, int freq);
extern void pwmSetMode (int mode);
extern void pwmSetRange (unsigned int range);
extern void pwmSetClock (int divisor);
extern void gpioClockSet (int pin, int freq);
extern unsigned int digitalReadByte (void);
extern unsigned int digitalReadByte2 (void);
extern void digitalWriteByte (int value);
extern void digitalWriteByte2 (int value);


// Interrupts // Interrupts
// (Also Pi hardware specific)

extern int waitForInterrupt (int pin, int mS) ;
extern int wiringPiISR (int pin, int mode, void (*function)(void)) ;
// (Also Pi hardware specific)
extern int waitForInterrupt (int pin, int mS);
extern int wiringPiISR (int pin, int mode, void (*function)(void));


// Threads // Threads

extern int piThreadCreate (void *(*fn)(void *)) ;
extern void piLock (int key) ;
extern void piUnlock (int key) ;
extern int piThreadCreate (void *(*fn)(void *));
extern void piLock (int key);
extern void piUnlock (int key);


// Schedulling priority // Schedulling priority

extern int piHiPri (const int pri) ;
extern int piHiPri (const int pri);


// Extras from arduino land // Extras from arduino land

extern void delay (unsigned int howLong) ;
extern void delayMicroseconds (unsigned int howLong) ;
extern unsigned int millis (void) ;
extern unsigned int micros (void) ;
extern void delay (unsigned int howLong); // milliseconds
extern void delayMicroseconds (unsigned int howLong);
extern unsigned int millis (void);
extern unsigned int micros (void);


#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif


#endif
#endif // __WIRING_PI_H__

+ 0
- 0
wiringPi/wiringPiSPI.c View File


Loading…
Cancel
Save