@@ -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 @@ | |||||
2.71 | |||||
2.72 |
@@ -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 | ||||
@@ -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)]) ; | |||||
} | } |
@@ -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 |
@@ -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 | ||||
################################################################################# |
@@ -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 | ||||
@@ -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__ |