Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f8fe26e4f | |||
| 5cabf4a4f8 | |||
| 6a17382a0a | |||
| 772e1198dd | |||
| afddd8c504 | |||
| 8b33c328be | |||
| d903619255 | |||
| f152400923 | |||
| f66c883d7c | |||
| 10be9486ff | |||
| 22fac72e1a | |||
| e9821abdb4 | |||
| 0bfff4e208 | |||
| 3772a913d0 | |||
| 91f3520239 | |||
| d4b96c7cb4 | |||
| 4fc9420625 | |||
| 50fa6362f9 | |||
| 726d5c411c | |||
| 1aed7f7c9d | |||
| 6ca0231124 | |||
| 5c6bab7d42 | |||
| 6d9ce35f00 | |||
| f9ff3b4d35 | |||
| 50b7c5ed7d | |||
| 7d8188d0bf | |||
| 33fbcd7e50 | |||
| 5bbb6e34b8 | |||
| 651136a110 | |||
| 1f908c5eed | |||
| 2a8e57a1c7 | |||
| 16a23e3688 | |||
| 9aed9a4415 | |||
| 41f941a78e | |||
| a49f696232 | |||
| aca883a051 |
@@ -0,0 +1,16 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run build
|
||||
run: |
|
||||
./build
|
||||
@@ -23,7 +23,11 @@ To un-install wiringPi:
|
||||
|
||||
./build uninstall
|
||||
|
||||
Gordon Henderson
|
||||
For help and support see:
|
||||
|
||||
projects@drogon.net
|
||||
* https://github.com/WiringPi/WiringPi/issues
|
||||
* https://discord.gg/SM4WUVG
|
||||
|
||||
|
||||
wiringPi originally created by Gordon Henderson
|
||||
https://projects.drogon.net/
|
||||
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
Note
|
||||
====
|
||||
|
||||
This is an unofficial mirror of WiringPi to support ports (Python/Ruby/etc).
|
||||
|
||||
Please do not email Gordon if you have issues, he will not be able to help.
|
||||
|
||||
Pull-requests are not currently accepted, since this is a mirror.
|
||||
|
||||
For support, comments, questions, etc please join the WiringPi Discord channel: https://discord.gg/SM4WUVG
|
||||
|
||||
wiringPi README
|
||||
===============
|
||||
|
||||
Please note that the official way to get wiringPi is via git from
|
||||
git.drogon.net and not GitHub.
|
||||
|
||||
ie.
|
||||
|
||||
git clone git://git.drogon.net/wiringPi
|
||||
|
||||
The version of wiringPi held on GitHub by "Gadgetoid" is used to build the
|
||||
wiringPython, Ruby, Perl, etc. wrappers for these other languages. This
|
||||
version may lag the official Drogon release. Pull requests may not be
|
||||
accepted to Github....
|
||||
|
||||
Please see
|
||||
|
||||
http://wiringpi.com/
|
||||
|
||||
for the official documentation, etc. and the best way to submit bug reports, etc.
|
||||
is by sending an email to projects@drogon.net
|
||||
|
||||
Thanks!
|
||||
|
||||
-Gordon
|
||||
@@ -0,0 +1,33 @@
|
||||
WiringPi (Unofficial Mirror/Fork)
|
||||
=================================
|
||||
|
||||
This is an unofficial mirror/fork of wiringPi to support ports (Python/Ruby/etc). With the
|
||||
[end of official development](http://wiringpi.com/wiringpi-deprecated/), this repository
|
||||
has become a mirror of the last "official" source release, plus a fork facilitating updates
|
||||
to support newer hardware (primarily for use by the ports) and fix bugs.
|
||||
|
||||
* The final "official" source release can be found at the
|
||||
[`final_source_2.50`](https://github.com/WiringPi/WiringPi/tree/final_official_2.50) tag.
|
||||
* The default `master` branch contains code that has been written since that final source
|
||||
release to provide support for newer hardware.
|
||||
|
||||
Ports
|
||||
-----
|
||||
|
||||
wiringPi has been wrapped for multiple languages:
|
||||
|
||||
* Node - https://github.com/WiringPi/WiringPi-Node
|
||||
* Perl - https://github.com/WiringPi/WiringPi-Perl
|
||||
* PHP - https://github.com/WiringPi/WiringPi-PHP
|
||||
* Python - https://github.com/WiringPi/WiringPi-Python
|
||||
* Ruby - https://github.com/WiringPi/WiringPi-Ruby
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
Please do not email Gordon if you have issues, he will not be able to help.
|
||||
|
||||
Pull-requests may be accepted to add or fix support for newer hardware, but new features or
|
||||
other changes may not be accepted.
|
||||
|
||||
For support, comments, questions, etc please join the WiringPi Discord channel: https://discord.gg/SM4WUVG
|
||||
@@ -36,8 +36,8 @@ check_make_ok() {
|
||||
echo ""
|
||||
echo "Make Failed..."
|
||||
echo "Please check the messages and fix any problems. If you're still stuck,"
|
||||
echo "then please email all the output and as many details as you can to"
|
||||
echo " projects@drogon.net"
|
||||
echo "then raise a GitHub issue with the output and as many details as you can"
|
||||
echo " https://github.com/WiringPi/WiringPi/issues"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
@@ -84,14 +84,15 @@ fi
|
||||
|
||||
if [ x$1 = "xdebian" ]; then
|
||||
here=`pwd`
|
||||
deb_destdir=${here}/debian-template/wiringPi
|
||||
cd debian-template/wiringPi
|
||||
rm -rf usr
|
||||
cd $here/wiringPi
|
||||
make install-deb
|
||||
make install-deb DEB_DESTDIR=${deb_destdir}
|
||||
cd $here/devLib
|
||||
make install-deb INCLUDE='-I. -I../wiringPi'
|
||||
make install-deb INCLUDE='-I. -I../wiringPi' DEB_DESTDIR=${deb_destdir}
|
||||
cd $here/gpio
|
||||
make install-deb INCLUDE='-I../wiringPi -I../devLib' LDFLAGS=-L../debian-template/wiringPi/usr/lib
|
||||
make install-deb INCLUDE='-I../wiringPi -I../devLib' LDFLAGS=-L../debian-template/wiringPi/usr/lib DEB_DESTDIR=${deb_destdir}
|
||||
cd $here/debian-template
|
||||
fakeroot dpkg-deb --build wiringPi
|
||||
mv wiringPi.deb wiringpi-`cat $here/VERSION`-1.deb
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Package: wiringpi
|
||||
Version: 2.50
|
||||
Version: 2.60
|
||||
Section: libraries
|
||||
Priority: optional
|
||||
Architecture: armhf
|
||||
|
||||
Regular → Executable
Regular → Executable
+14
-8
@@ -36,10 +36,10 @@ DYNAMIC=libwiringPiDev.so.$(VERSION)
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O2
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I.
|
||||
DEFS = -D_GNU_SOURCE
|
||||
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
|
||||
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC $(EXTRA_CFLAGS)
|
||||
|
||||
LIBS =
|
||||
|
||||
@@ -105,15 +105,21 @@ install-static: $(STATIC)
|
||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
|
||||
$Q install -m 0755 libwiringPiDev.a $(DESTDIR)$(PREFIX)/lib
|
||||
|
||||
.PHONY: check-deb-destdir
|
||||
check-deb-destdir:
|
||||
ifndef DEB_DESTDIR
|
||||
$(error DEB_DESTDIR is undefined)
|
||||
endif
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: $(DYNAMIC)
|
||||
install-deb: $(DYNAMIC) check-deb-destdir
|
||||
$Q echo "[Install Headers: deb]"
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/include
|
||||
$Q install -m 0644 $(HEADERS) ~/wiringPi/debian-template/wiringPi/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]"
|
||||
install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/lib
|
||||
install -m 0755 libwiringPiDev.so.$(VERSION) ~/wiringPi/debian-template/wiringPi/usr/lib/libwiringPiDev.so.$(VERSION)
|
||||
ln -sf ~/wiringPi/debian-template/wiringPi/usr/lib/libwiringPiDev.so.$(VERSION) ~/wiringPi/debian-template/wiringPi/usr/lib/libwiringPiDev.so
|
||||
install -m 0755 -d $(DEB_DESTDIR)/usr/lib
|
||||
install -m 0755 libwiringPiDev.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPiDev.so.$(VERSION)
|
||||
ln -sf $(DEB_DESTDIR)/usr/lib/libwiringPiDev.so.$(VERSION) $(DEB_DESTDIR)/usr/lib/libwiringPiDev.so
|
||||
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
|
||||
@@ -11,9 +11,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
+2
-2
@@ -28,9 +28,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
|
||||
|
||||
@@ -28,9 +28,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
@@ -28,9 +28,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
@@ -28,9 +28,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
@@ -28,9 +28,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I/usr/local/include
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L/usr/local/lib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
+13
-7
@@ -32,9 +32,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O2
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I$(DESTDIR)$(PREFIX)/include
|
||||
CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib
|
||||
LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
|
||||
@@ -80,13 +80,19 @@ endif
|
||||
$Q mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1
|
||||
$Q cp gpio.1 $(DESTDIR)$(PREFIX)/share/man/man1
|
||||
|
||||
.PHONY: check-deb-destdir
|
||||
check-deb-destdir:
|
||||
ifndef DEB_DESTDIR
|
||||
$(error DEB_DESTDIR is undefined)
|
||||
endif
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: gpio
|
||||
install-deb: gpio check-deb-destdir
|
||||
$Q echo "[Install: deb]"
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/bin
|
||||
$Q install -m 0755 gpio ~/wiringPi/debian-template/wiringPi/usr/bin
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/share/man/man1
|
||||
$Q install -m 0644 gpio.1 ~/wiringPi/debian-template/wiringPi/usr/share/man/man1
|
||||
$Q install -m 0755 -d $(DEB_DESTDIR)/usr/bin
|
||||
$Q install -m 0755 gpio $(DEB_DESTDIR)/usr/bin
|
||||
$Q install -m 0755 -d $(DEB_DESTDIR)/usr/share/man/man1
|
||||
$Q install -m 0644 gpio.1 $(DEB_DESTDIR)/usr/share/man/man1
|
||||
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
|
||||
+1
-1
@@ -337,7 +337,7 @@ Gordon Henderson
|
||||
|
||||
.SH "REPORTING BUGS"
|
||||
|
||||
Please report bugs to <projects@drogon.net>
|
||||
Please report bugs to https://github.com/WiringPi/WiringPi/issues
|
||||
|
||||
.SH COPYRIGHT
|
||||
|
||||
|
||||
+9
-4
@@ -80,7 +80,7 @@ static char *alts [] =
|
||||
"IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3"
|
||||
} ;
|
||||
|
||||
static int physToWpi [64] =
|
||||
static int physToWpi [64] =
|
||||
{
|
||||
-1, // 0
|
||||
-1, -1, // 1, 2
|
||||
@@ -113,7 +113,7 @@ static int physToWpi [64] =
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||
} ;
|
||||
|
||||
static char *physNames [64] =
|
||||
static char *physNames [64] =
|
||||
{
|
||||
NULL,
|
||||
|
||||
@@ -309,6 +309,10 @@ static void plus2header (int model)
|
||||
printf (" +-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+\n") ;
|
||||
else if (model == PI_MODEL_3AP)
|
||||
printf (" +-----+-----+---------+------+---+---Pi 3A+-+---+------+---------+-----+-----+\n") ;
|
||||
else if (model == PI_MODEL_4B)
|
||||
printf (" +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+\n") ;
|
||||
else if (model == PI_MODEL_400)
|
||||
printf (" +-----+-----+---------+------+---+---Pi 400-+---+------+---------+-----+-----+\n") ;
|
||||
else
|
||||
printf (" +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+\n") ;
|
||||
}
|
||||
@@ -356,9 +360,10 @@ void doReadall (void)
|
||||
(model == PI_MODEL_2) ||
|
||||
(model == PI_MODEL_3AP) ||
|
||||
(model == PI_MODEL_3B) || (model == PI_MODEL_3BP) ||
|
||||
(model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W))
|
||||
(model == PI_MODEL_4B) || (model == PI_MODEL_400) ||
|
||||
(model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W) || (model == PI_MODEL_CM4))
|
||||
piPlusReadall (model) ;
|
||||
else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || ((model == PI_MODEL_CM3P)))
|
||||
else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || (model == PI_MODEL_CM3P) )
|
||||
allReadall () ;
|
||||
else
|
||||
printf ("Oops - unable to determine board type... model: %d\n", model) ;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#define VERSION "2.50"
|
||||
#define VERSION "2.60"
|
||||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 50
|
||||
#define VERSION_MINOR 60
|
||||
|
||||
+15
-9
@@ -36,10 +36,10 @@ DYNAMIC=libwiringPi.so.$(VERSION)
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O2
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I.
|
||||
DEFS = -D_GNU_SOURCE
|
||||
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Wextra -Winline $(INCLUDE) -pipe -fPIC
|
||||
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Wextra -Winline $(INCLUDE) -pipe -fPIC $(EXTRA_CFLAGS)
|
||||
#CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Wextra -Wconversion -Winline $(INCLUDE) -pipe -fPIC
|
||||
|
||||
LIBS = -lm -lpthread -lrt -lcrypt
|
||||
@@ -75,7 +75,7 @@ static:
|
||||
|
||||
$(DYNAMIC): $(OBJ)
|
||||
$Q echo "[Link (Dynamic)]"
|
||||
$Q $(CC) -shared -Wl,-soname,libwiringPi.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPi.so.$(VERSION) $(LIBS) $(OBJ)
|
||||
$Q $(CC) -shared -Wl,-soname,libwiringPi.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPi.so.$(VERSION) $(OBJ) $(LIBS)
|
||||
|
||||
.c.o:
|
||||
$Q echo [Compile] $<
|
||||
@@ -104,15 +104,21 @@ install: $(DYNAMIC)
|
||||
$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
|
||||
$Q $(LDCONFIG)
|
||||
|
||||
.PHONY: check-deb-destdir
|
||||
check-deb-destdir:
|
||||
ifndef DEB_DESTDIR
|
||||
$(error DEB_DESTDIR is undefined)
|
||||
endif
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: $(DYNAMIC)
|
||||
install-deb: $(DYNAMIC) check-deb-destdir
|
||||
$Q echo "[Install Headers: deb]"
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/include
|
||||
$Q install -m 0644 $(HEADERS) ~/wiringPi/debian-template/wiringPi/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]"
|
||||
install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/lib
|
||||
install -m 0755 libwiringPi.so.$(VERSION) ~/wiringPi/debian-template/wiringPi/usr/lib/libwiringPi.so.$(VERSION)
|
||||
ln -sf ~/wiringPi/debian-template/wiringPi/usr/lib/libwiringPi.so.$(VERSION) ~/wiringPi/debian-template/wiringPi/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
|
||||
uninstall:
|
||||
|
||||
@@ -153,6 +153,9 @@ int softPwmCreate (int pin, int initialValue, int pwmRange)
|
||||
newPin = pin ;
|
||||
res = pthread_create (&myThread, NULL, softPwmThread, (void *)passPin) ;
|
||||
|
||||
if (res != 0)
|
||||
return res ;
|
||||
|
||||
while (newPin != -1)
|
||||
delay (1) ;
|
||||
|
||||
|
||||
+85
-35
@@ -213,12 +213,13 @@ volatile unsigned int *_wiringPiTimerIrqRaw ;
|
||||
// piGpioBase:
|
||||
// The base address of the GPIO memory mapped hardware IO
|
||||
|
||||
#define GPIO_PERI_BASE_OLD 0x20000000
|
||||
#define GPIO_PERI_BASE_NEW 0x3F000000
|
||||
#define GPIO_PERI_BASE_OLD 0x20000000
|
||||
#define GPIO_PERI_BASE_2835 0x3F000000
|
||||
#define GPIO_PERI_BASE_2711 0xFE000000
|
||||
|
||||
static volatile unsigned int piGpioBase = 0 ;
|
||||
|
||||
const char *piModelNames [20] =
|
||||
const char *piModelNames [21] =
|
||||
{
|
||||
"Model A", // 0
|
||||
"Model B", // 1
|
||||
@@ -237,9 +238,10 @@ const char *piModelNames [20] =
|
||||
"Pi 3A+", // 14
|
||||
"Unknown15", // 15
|
||||
"CM3+", // 16
|
||||
"Unknown17", // 17
|
||||
"Pi 4B", // 17
|
||||
"Unknown18", // 18
|
||||
"Unknown19", // 19
|
||||
"Pi 400", // 19
|
||||
"CM4", // 20
|
||||
} ;
|
||||
|
||||
const char *piRevisionNames [16] =
|
||||
@@ -287,9 +289,9 @@ const int piMemorySize [8] =
|
||||
256, // 0
|
||||
512, // 1
|
||||
1024, // 2
|
||||
0, // 3
|
||||
0, // 4
|
||||
0, // 5
|
||||
2048, // 3
|
||||
4096, // 4
|
||||
8192, // 5
|
||||
0, // 6
|
||||
0, // 7
|
||||
} ;
|
||||
@@ -542,6 +544,14 @@ static uint8_t gpioToFEN [] =
|
||||
|
||||
#define GPPUD 37
|
||||
|
||||
/* 2711 has a different mechanism for pin pull-up/down/enable */
|
||||
#define GPPUPPDN0 57 /* Pin pull-up/down for pins 15:0 */
|
||||
#define GPPUPPDN1 58 /* Pin pull-up/down for pins 31:16 */
|
||||
#define GPPUPPDN2 59 /* Pin pull-up/down for pins 47:32 */
|
||||
#define GPPUPPDN3 60 /* Pin pull-up/down for pins 57:48 */
|
||||
|
||||
static volatile unsigned int piGpioPupOffset = 0 ;
|
||||
|
||||
// gpioToPUDCLK
|
||||
// (Word) offset to the Pull Up Down Clock regsiter
|
||||
|
||||
@@ -818,7 +828,7 @@ int piGpioLayout (void)
|
||||
|
||||
for (c = &line [strlen (line) - 1] ; (*c == '\n') || (*c == '\r') ; --c)
|
||||
*c = 0 ;
|
||||
|
||||
|
||||
if (wiringPiDebug)
|
||||
printf ("piGpioLayout: Revision string: %s\n", line) ;
|
||||
|
||||
@@ -887,7 +897,7 @@ int piBoardRev (void)
|
||||
* So the distinction between boards that I can see is:
|
||||
*
|
||||
* 0000 - Error
|
||||
* 0001 - Not used
|
||||
* 0001 - Not used
|
||||
*
|
||||
* Original Pi boards:
|
||||
* 0002 - Model B, Rev 1, 256MB, Egoman
|
||||
@@ -972,7 +982,7 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty)
|
||||
|
||||
for (c = &line [strlen (line) - 1] ; (*c == '\n') || (*c == '\r') ; --c)
|
||||
*c = 0 ;
|
||||
|
||||
|
||||
if (wiringPiDebug)
|
||||
printf ("piBoardId: Revision string: %s\n", line) ;
|
||||
|
||||
@@ -1011,7 +1021,7 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty)
|
||||
bMfg = (revision & (0x0F << 16)) >> 16 ;
|
||||
bMem = (revision & (0x07 << 20)) >> 20 ;
|
||||
bWarranty = (revision & (0x03 << 24)) != 0 ;
|
||||
|
||||
|
||||
*model = bType ;
|
||||
*rev = bRev ;
|
||||
*mem = bMem ;
|
||||
@@ -1038,7 +1048,7 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty)
|
||||
// If longer than 4, we'll assume it's been overvolted
|
||||
|
||||
*warranty = strlen (c) > 4 ;
|
||||
|
||||
|
||||
// Extract last 4 characters:
|
||||
|
||||
c = c + strlen (c) - 4 ;
|
||||
@@ -1078,7 +1088,7 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty)
|
||||
else { *model = 0 ; *rev = 0 ; *mem = 0 ; *maker = 0 ; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@@ -1209,6 +1219,11 @@ void pwmSetRange (unsigned int range)
|
||||
void pwmSetClock (int divisor)
|
||||
{
|
||||
uint32_t pwm_control ;
|
||||
|
||||
if (piGpioBase == GPIO_PERI_BASE_2711)
|
||||
{
|
||||
divisor = 540*divisor/192;
|
||||
}
|
||||
divisor &= 4095 ;
|
||||
|
||||
if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO))
|
||||
@@ -1264,7 +1279,7 @@ void gpioClockSet (int pin, int freq)
|
||||
pin = physToGpio [pin] ;
|
||||
else if (wiringPiMode != WPI_MODE_GPIO)
|
||||
return ;
|
||||
|
||||
|
||||
divi = 19200000 / freq ;
|
||||
divr = 19200000 % freq ;
|
||||
divf = (int)((double)divr * 4096.0 / 19200000.0) ;
|
||||
@@ -1309,8 +1324,8 @@ struct wiringPiNodeStruct *wiringPiFindNode (int pin)
|
||||
|
||||
static void pinModeDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int mode) { return ; }
|
||||
static void pullUpDnControlDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int pud) { return ; }
|
||||
static unsigned int digitalRead8Dummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return 0 ; }
|
||||
static void digitalWrite8Dummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; }
|
||||
//static unsigned int digitalRead8Dummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return 0 ; }
|
||||
//static void digitalWrite8Dummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; }
|
||||
static int digitalReadDummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return LOW ; }
|
||||
static void digitalWriteDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; }
|
||||
static void pwmWriteDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; }
|
||||
@@ -1508,11 +1523,36 @@ void pullUpDnControl (int pin, int pud)
|
||||
else if (wiringPiMode != WPI_MODE_GPIO)
|
||||
return ;
|
||||
|
||||
*(gpio + GPPUD) = pud & 3 ; delayMicroseconds (5) ;
|
||||
*(gpio + gpioToPUDCLK [pin]) = 1 << (pin & 31) ; delayMicroseconds (5) ;
|
||||
|
||||
*(gpio + GPPUD) = 0 ; delayMicroseconds (5) ;
|
||||
*(gpio + gpioToPUDCLK [pin]) = 0 ; delayMicroseconds (5) ;
|
||||
if (piGpioPupOffset == GPPUPPDN0)
|
||||
{
|
||||
// Pi 4B pull up/down method
|
||||
int pullreg = GPPUPPDN0 + (pin>>4);
|
||||
int pullshift = (pin & 0xf) << 1;
|
||||
unsigned int pullbits;
|
||||
unsigned int pull;
|
||||
|
||||
switch (pud)
|
||||
{
|
||||
case PUD_OFF: pull = 0; break;
|
||||
case PUD_UP: pull = 1; break;
|
||||
case PUD_DOWN: pull = 2; break;
|
||||
default: return ; /* An illegal value */
|
||||
}
|
||||
|
||||
pullbits = *(gpio + pullreg);
|
||||
pullbits &= ~(3 << pullshift);
|
||||
pullbits |= (pull << pullshift);
|
||||
*(gpio + pullreg) = pullbits;
|
||||
}
|
||||
else
|
||||
{
|
||||
// legacy pull up/down method
|
||||
*(gpio + GPPUD) = pud & 3 ; delayMicroseconds (5) ;
|
||||
*(gpio + gpioToPUDCLK [pin]) = 1 << (pin & 31) ; delayMicroseconds (5) ;
|
||||
|
||||
*(gpio + GPPUD) = 0 ; delayMicroseconds (5) ;
|
||||
*(gpio + gpioToPUDCLK [pin]) = 0 ; delayMicroseconds (5) ;
|
||||
}
|
||||
}
|
||||
else // Extension module
|
||||
{
|
||||
@@ -1533,7 +1573,6 @@ int digitalRead (int pin)
|
||||
{
|
||||
char c ;
|
||||
struct wiringPiNodeStruct *node = wiringPiNodes ;
|
||||
|
||||
if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin
|
||||
{
|
||||
/**/ if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode
|
||||
@@ -1684,7 +1723,7 @@ void pwmWrite (int pin, int value)
|
||||
|
||||
/*
|
||||
* analogRead:
|
||||
* Read the analog value of a given Pin.
|
||||
* Read the analog value of a given Pin.
|
||||
* There is no on-board Pi analog hardware,
|
||||
* so this needs to go to a new node.
|
||||
*********************************************************************************
|
||||
@@ -1703,7 +1742,7 @@ int analogRead (int pin)
|
||||
|
||||
/*
|
||||
* analogWrite:
|
||||
* Write the analog value to the given Pin.
|
||||
* Write the analog value to the given Pin.
|
||||
* There is no on-board Pi analog hardware,
|
||||
* so this needs to go to a new node.
|
||||
*********************************************************************************
|
||||
@@ -1752,7 +1791,7 @@ void pwmToneWrite (int pin, int freq)
|
||||
* Write an 8-bit byte to the first 8 GPIO pins - try to do it as
|
||||
* fast as possible.
|
||||
* However it still needs 2 operations to set the bits, so any external
|
||||
* hardware must not rely on seeing a change as there will be a change
|
||||
* hardware must not rely on seeing a change as there will be a change
|
||||
* to set the outputs bits to zero, then another change to set the 1's
|
||||
* Reading is just bit fiddling.
|
||||
* These are wiringPi pin numbers 0..7, or BCM_GPIO pin numbers
|
||||
@@ -1808,7 +1847,7 @@ unsigned int digitalReadByte (void)
|
||||
data = (data << 1) | x ;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
raw = *(gpio + gpioToGPLEV [0]) ; // First bank for these pins
|
||||
for (pin = 0 ; pin < 8 ; ++pin)
|
||||
@@ -1865,7 +1904,7 @@ unsigned int digitalReadByte2 (void)
|
||||
data = (data << 1) | x ;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
data = ((*(gpio + gpioToGPLEV [0])) >> 20) & 0xFF ; // First bank for these pins
|
||||
|
||||
return data ;
|
||||
@@ -2010,7 +2049,7 @@ int wiringPiISR (int pin, int mode, void (*function)(void))
|
||||
return wiringPiFailure (WPI_FATAL, "wiringPiISR: Can't find gpio program\n") ;
|
||||
}
|
||||
else // Parent, wait
|
||||
wait (NULL) ;
|
||||
waitpid (pid, NULL, 0) ;
|
||||
}
|
||||
|
||||
// Now pre-open the /sys/class node - but it may already be open if
|
||||
@@ -2243,7 +2282,9 @@ int wiringPiSetup (void)
|
||||
|
||||
piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
|
||||
|
||||
if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3) || (model == PI_MODEL_CM3P))
|
||||
if ((model == PI_MODEL_CM) ||
|
||||
(model == PI_MODEL_CM3) ||
|
||||
(model == PI_MODEL_CM3P))
|
||||
wiringPiMode = WPI_MODE_GPIO ;
|
||||
else
|
||||
wiringPiMode = WPI_MODE_PINS ;
|
||||
@@ -2268,16 +2309,25 @@ int wiringPiSetup (void)
|
||||
case PI_ALPHA: case PI_MODEL_CM:
|
||||
case PI_MODEL_ZERO: case PI_MODEL_ZERO_W:
|
||||
piGpioBase = GPIO_PERI_BASE_OLD ;
|
||||
piGpioPupOffset = GPPUD ;
|
||||
break ;
|
||||
|
||||
case PI_MODEL_4B:
|
||||
case PI_MODEL_400:
|
||||
case PI_MODEL_CM4:
|
||||
piGpioBase = GPIO_PERI_BASE_2711 ;
|
||||
piGpioPupOffset = GPPUPPDN0 ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
piGpioBase = GPIO_PERI_BASE_NEW ;
|
||||
piGpioBase = GPIO_PERI_BASE_2835 ;
|
||||
piGpioPupOffset = GPPUD ;
|
||||
break ;
|
||||
}
|
||||
|
||||
// Open the master /dev/ memory control device
|
||||
// Device strategy: December 2016:
|
||||
// Try /dev/mem. If that fails, then
|
||||
// Try /dev/mem. If that fails, then
|
||||
// try /dev/gpiomem. If that fails then game over.
|
||||
|
||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC)) < 0)
|
||||
@@ -2315,13 +2365,13 @@ int wiringPiSetup (void)
|
||||
pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PWM) ;
|
||||
if (pwm == MAP_FAILED)
|
||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PWM) failed: %s\n", strerror (errno)) ;
|
||||
|
||||
|
||||
// Clock control (needed for PWM)
|
||||
|
||||
clk = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_CLOCK_BASE) ;
|
||||
if (clk == MAP_FAILED)
|
||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (CLOCK) failed: %s\n", strerror (errno)) ;
|
||||
|
||||
|
||||
// The drive pads
|
||||
|
||||
pads = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PADS) ;
|
||||
@@ -2441,7 +2491,7 @@ int wiringPiSetupSys (void)
|
||||
|
||||
// Open and scan the directory, looking for exported GPIOs, and pre-open
|
||||
// the 'value' interface to speed things up for later
|
||||
|
||||
|
||||
for (pin = 0 ; pin < 64 ; ++pin)
|
||||
{
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/value", pin) ;
|
||||
|
||||
+6
-3
@@ -102,6 +102,9 @@
|
||||
#define PI_MODEL_3BP 13
|
||||
#define PI_MODEL_3AP 14
|
||||
#define PI_MODEL_CM3P 16
|
||||
#define PI_MODEL_4B 17
|
||||
#define PI_MODEL_400 19
|
||||
#define PI_MODEL_CM4 20
|
||||
|
||||
#define PI_VERSION_1 0
|
||||
#define PI_VERSION_1_1 1
|
||||
@@ -113,7 +116,7 @@
|
||||
#define PI_MAKER_EMBEST 2
|
||||
#define PI_MAKER_UNKNOWN 3
|
||||
|
||||
extern const char *piModelNames [20] ;
|
||||
extern const char *piModelNames [21] ;
|
||||
extern const char *piRevisionNames [16] ;
|
||||
extern const char *piMakerNames [16] ;
|
||||
extern const int piMemorySize [ 8] ;
|
||||
@@ -134,7 +137,7 @@ extern const int piMemorySize [ 8] ;
|
||||
// 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
|
||||
// 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....
|
||||
@@ -211,7 +214,7 @@ 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) ;
|
||||
|
||||
+6
-6
@@ -31,9 +31,9 @@ endif
|
||||
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O2
|
||||
CC = gcc
|
||||
CC ?= gcc
|
||||
INCLUDE = -I$(DESTDIR)$(PREFIX)/include
|
||||
CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe
|
||||
CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe $(EXTRA_CFLAGS)
|
||||
|
||||
LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib
|
||||
LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
|
||||
@@ -78,10 +78,10 @@ install: wiringpid
|
||||
.PHONY: install-deb
|
||||
install-deb: gpio
|
||||
$Q echo "[Install: deb]"
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/bin
|
||||
$Q install -m 0755 gpio ~/wiringPi/debian-template/wiringPi/usr/bin
|
||||
$Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/man/man1
|
||||
$Q install -m 0644 gpio.1 ~/wiringPi/debian-template/wiringPi/man/man1
|
||||
$Q install -m 0755 -d $(DEB_DESTDIR)/usr/bin
|
||||
$Q install -m 0755 gpio $(DEB_DESTDIR)/usr/bin
|
||||
$Q install -m 0755 -d $(DEB_DESTDIR)/man/man1
|
||||
$Q install -m 0644 gpio.1 $(DEB_DESTDIR)/man/man1
|
||||
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
|
||||
@@ -40,5 +40,4 @@ struct drcNetComStruct
|
||||
uint32_t pin ;
|
||||
uint32_t cmd ;
|
||||
uint32_t data ;
|
||||
} comDat ;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user