@@ -0,0 +1,7 @@ | |||||
*.o | |||||
*.so | |||||
lib*.so.* | |||||
*~ | |||||
debian-template/wiringPi | |||||
debian-template/wiringpi-*.deb | |||||
gpio/gpio |
@@ -1 +1 @@ | |||||
2.25 | |||||
2.30 |
@@ -1,4 +1,4 @@ | |||||
#!/bin/sh | |||||
#!/bin/sh -e | |||||
# build | # build | ||||
# Simple wiringPi build and install script | # Simple wiringPi build and install script | ||||
@@ -43,6 +43,8 @@ check_make_ok() { | |||||
fi | fi | ||||
} | } | ||||
sudo=${WIRINGPI_SUDO-sudo} | |||||
if [ x$1 = "xclean" ]; then | if [ x$1 = "xclean" ]; then | ||||
cd wiringPi | cd wiringPi | ||||
echo -n "wiringPi: " ; make clean | echo -n "wiringPi: " ; make clean | ||||
@@ -65,11 +67,11 @@ fi | |||||
if [ x$1 = "xuninstall" ]; then | if [ x$1 = "xuninstall" ]; then | ||||
cd wiringPi | cd wiringPi | ||||
echo -n "wiringPi: " ; sudo make uninstall | |||||
echo -n "wiringPi: " ; $sudo make uninstall | |||||
cd ../devLib | cd ../devLib | ||||
echo -n "DevLib: " ; sudo make uninstall | |||||
echo -n "DevLib: " ; $sudo make uninstall | |||||
cd ../gpio | cd ../gpio | ||||
echo -n "gpio: " ; sudo make uninstall | |||||
echo -n "gpio: " ; $sudo make uninstall | |||||
exit | exit | ||||
fi | fi | ||||
@@ -77,15 +79,15 @@ fi | |||||
if [ x$1 = "xdebian" ]; then | if [ x$1 = "xdebian" ]; then | ||||
here=`pwd` | here=`pwd` | ||||
cd debian/wiringPi | |||||
cd debian-template/wiringPi | |||||
rm -rf usr | rm -rf usr | ||||
cd $here/wiringPi | cd $here/wiringPi | ||||
make install-deb | make install-deb | ||||
cd $here/devLib | cd $here/devLib | ||||
make install-deb | |||||
make install-deb INCLUDE='-I. -I../wiringPi' | |||||
cd $here/gpio | cd $here/gpio | ||||
make install-deb | |||||
cd $here/debian | |||||
make install-deb INCLUDE='-I../wiringPi -I../devLib' LDFLAGS=-L../debian-template/wiringPi/usr/lib | |||||
cd $here/debian-template | |||||
fakeroot dpkg-deb --build wiringPi | fakeroot dpkg-deb --build wiringPi | ||||
mv wiringPi.deb wiringpi-`cat $here/VERSION`-1.deb | mv wiringPi.deb wiringpi-`cat $here/VERSION`-1.deb | ||||
exit | exit | ||||
@@ -121,30 +123,30 @@ fi | |||||
echo | echo | ||||
echo "WiringPi Library" | echo "WiringPi Library" | ||||
cd wiringPi | cd wiringPi | ||||
sudo make uninstall | |||||
$sudo make uninstall | |||||
if [ x$1 = "xstatic" ]; then | if [ x$1 = "xstatic" ]; then | ||||
make -j5 static | make -j5 static | ||||
check_make_ok | check_make_ok | ||||
sudo make install-static | |||||
$sudo make install-static | |||||
else | else | ||||
make -j5 | make -j5 | ||||
check_make_ok | check_make_ok | ||||
sudo make install | |||||
$sudo make install | |||||
fi | fi | ||||
check_make_ok | check_make_ok | ||||
echo | echo | ||||
echo "WiringPi Devices Library" | echo "WiringPi Devices Library" | ||||
cd ../devLib | cd ../devLib | ||||
sudo make uninstall | |||||
$sudo make uninstall | |||||
if [ x$1 = "xstatic" ]; then | if [ x$1 = "xstatic" ]; then | ||||
make -j5 static | make -j5 static | ||||
check_make_ok | check_make_ok | ||||
sudo make install-static | |||||
$sudo make install-static | |||||
else | else | ||||
make -j5 | make -j5 | ||||
check_make_ok | check_make_ok | ||||
sudo make install | |||||
$sudo make install | |||||
fi | fi | ||||
check_make_ok | check_make_ok | ||||
@@ -153,7 +155,7 @@ fi | |||||
cd ../gpio | cd ../gpio | ||||
make -j5 | make -j5 | ||||
check_make_ok | check_make_ok | ||||
sudo make install | |||||
$sudo make install | |||||
check_make_ok | check_make_ok | ||||
# echo | # echo | ||||
@@ -1,5 +1,5 @@ | |||||
Package: wiringpi | Package: wiringpi | ||||
Version: 2.24 | |||||
Version: 2.30 | |||||
Section: libraries | Section: libraries | ||||
Priority: optional | Priority: optional | ||||
Architecture: armhf | Architecture: armhf |
@@ -0,0 +1,9 @@ | |||||
*.debhelper.log | |||||
*.substvars | |||||
tmp | |||||
wiringpi | |||||
libwiringpi2 | |||||
libwiringpi-dev | |||||
files | |||||
*.postinst.debhelper | |||||
*.postrm.debhelper |
@@ -0,0 +1,6 @@ | |||||
wiringpi (2.26~iwj) rpi-unstable; urgency=low | |||||
* Initial version with real Debian source package build. | |||||
-- Ian Jackson <ijackson@chiark.greenend.org.uk> Sat, 12 Sep 2015 18:31:35 +0100 | |||||
@@ -0,0 +1 @@ | |||||
8 |
@@ -0,0 +1,29 @@ | |||||
Source: wiringpi | |||||
Section: electronics | |||||
Priority: optional | |||||
Maintainer: Ian Jackson <ijackson@chiark.greenend.org.uk> | |||||
Standards-Version: 3.8.0 | |||||
Homepage: http://wiringpi.com/ | |||||
Build-Depends: debhelper (>= 8) | |||||
Package: libwiringpi2 | |||||
Section: libs | |||||
Architecture: armhf | |||||
Depends: ${shlibs:Depends}, ${misc:Depends} | |||||
Description: GPIO librariees for Raspberry Pi (runtime). | |||||
Runtime for the popular wiringPi library. | |||||
Package: wiringpi | |||||
Architecture: armhf | |||||
Depends: ${shlibs:Depends}, ${misc:Depends} | |||||
Description: gpio utility for Raspberry Pi | |||||
The wiringPi gpio command line utility, for GPIO access on a | |||||
Raspberry Pi from the command line. | |||||
Package: libwiringpi-dev | |||||
Architecture: armhf | |||||
Depends: libwiringpi2 (= ${binary:Version}), libc6-dev, ${misc:Depends} | |||||
Suggests: wiringpi | |||||
Description: GPIO development library for Raspberry Pi | |||||
Development libraries to allow GPIO access on a Raspberry Pi from C | |||||
and C++ programs. |
@@ -0,0 +1,15 @@ | |||||
wiringPi is Copyright (C) 2012-2015 Gordon Henderson. | |||||
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. | |||||
On all Debian and Raspbian systems, a copy of the GNU Lesser General | |||||
Public License version 3 can be found in | |||||
`/usr/share/common-licenses/LGPL-3'. |
@@ -0,0 +1,2 @@ | |||||
usr/lib | |||||
usr/include |
@@ -0,0 +1,3 @@ | |||||
debian/tmp/usr/include | |||||
debian/tmp/usr/lib/*.so | |||||
examples usr/share/doc/libwiringpi-dev |
@@ -0,0 +1 @@ | |||||
debian/tmp/usr/lib/lib*.so.* |
@@ -0,0 +1,2 @@ | |||||
libwiringPi 2 libwiringpi2 | |||||
libwiringPiDev 2 libwiringpi2 |
@@ -0,0 +1,49 @@ | |||||
#!/usr/bin/make -f | |||||
.PHONY: build | |||||
VERSION:=$(shell cat VERSION) | |||||
export VERSION | |||||
soname:=$(shell echo $${VERSION%%.*}) | |||||
WIRINGPI_SONAME_SUFFIX:=.$(soname) | |||||
export soname | |||||
export WIRINGPI_SONAME_SUFFIX | |||||
build: | |||||
dh $@ | |||||
override_dh_auto_configure: | |||||
override_dh_prep: | |||||
dh_prep -Xdebian/tmp | |||||
dirs: | |||||
dh_installdirs -A | |||||
mkdir debian/tmp | |||||
set -e; for p in `dh_listpackages`; do \ | |||||
(cd debian/$$p; find -type d) | \ | |||||
(cd debian/tmp; xargs mkdir -p) \ | |||||
done | |||||
override_dh_clean: | |||||
dh_clean | |||||
WIRINGPI_SUDO= bash -xe ./build clean | |||||
override_dh_auto_build: dirs | |||||
V=1 LDCONFIG=: WIRINGPI_SUDO= WIRINGPI_SUID=0 \ | |||||
DESTDIR=`pwd`/debian/tmp/usr \ | |||||
PREFIX= WIRINGPI_SUDO= \ | |||||
bash -xe ./build | |||||
override_dh_auto_install: | |||||
dh_install | |||||
set -ex; for l in libwiringPi libwiringPiDev; do \ | |||||
ln -sf $$l.so.$${VERSION} \ | |||||
debian/libwiringpi$$soname/usr/lib/$$l.so.$$soname; \ | |||||
ln -sf $$l.so.$${VERSION} \ | |||||
debian/libwiringpi-dev/usr/lib/$$l.so; \ | |||||
done | |||||
%: | |||||
dh $@ |
@@ -0,0 +1 @@ | |||||
usr/bin |
@@ -0,0 +1,4 @@ | |||||
debian/tmp/usr/bin | |||||
debian/tmp/usr/man usr/share | |||||
README.TXT usr/share/doc/wiringpi | |||||
People usr/share/doc/wiringpi |
@@ -22,8 +22,14 @@ | |||||
################################################################################# | ################################################################################# | ||||
VERSION=$(shell cat ../VERSION) | VERSION=$(shell cat ../VERSION) | ||||
DESTDIR=/usr | |||||
PREFIX=/local | |||||
DESTDIR?=/usr | |||||
PREFIX?=/local | |||||
LDCONFIG?=ldconfig | |||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
STATIC=libwiringPiDev.a | STATIC=libwiringPiDev.a | ||||
DYNAMIC=libwiringPiDev.so.$(VERSION) | DYNAMIC=libwiringPiDev.so.$(VERSION) | ||||
@@ -53,66 +59,66 @@ all: $(DYNAMIC) | |||||
static: $(STATIC) | static: $(STATIC) | ||||
$(STATIC): $(OBJ) | $(STATIC): $(OBJ) | ||||
@echo "[Link (Static)]" | |||||
@ar rcs $(STATIC) $(OBJ) | |||||
@ranlib $(STATIC) | |||||
$Q echo "[Link (Static)]" | |||||
$Q ar rcs $(STATIC) $(OBJ) | |||||
$Q ranlib $(STATIC) | |||||
# @size $(STATIC) | # @size $(STATIC) | ||||
$(DYNAMIC): $(OBJ) | $(DYNAMIC): $(OBJ) | ||||
@echo "[Link (Dynamic)]" | |||||
@$(CC) -shared -Wl,-soname,libwiringPiDev.so -o libwiringPiDev.so.$(VERSION) -lpthread $(OBJ) | |||||
$Q echo "[Link (Dynamic)]" | |||||
$Q $(CC) -shared -Wl,-soname,libwiringPiDev.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPiDev.so.$(VERSION) -lpthread $(OBJ) | |||||
.c.o: | .c.o: | ||||
@echo [Compile] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [Compile] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
.PHONY: clean | .PHONY: clean | ||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPiDev.* | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPiDev.* | |||||
.PHONY: tags | .PHONY: tags | ||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
.PHONY: install | .PHONY: install | ||||
install: $(DYNAMIC) | install: $(DYNAMIC) | ||||
@echo "[Install Headers]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
@install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
@echo "[Install Dynamic Lib]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
@install -m 0755 libwiringPiDev.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION) | |||||
@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION) $(DESTDIR)/lib/libwiringPiDev.so | |||||
@ldconfig | |||||
$Q echo "[Install Headers]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
$Q echo "[Install Dynamic Lib]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
$Q install -m 0755 libwiringPiDev.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION) | |||||
$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION) $(DESTDIR)/lib/libwiringPiDev.so | |||||
$Q $(LDCONFIG) | |||||
.PHONY: install-static | .PHONY: install-static | ||||
install-static: $(STATIC) | install-static: $(STATIC) | ||||
@echo "[Install Headers]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
@install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
@echo "[Install Static Lib]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
@install -m 0755 libwiringPiDev.a $(DESTDIR)$(PREFIX)/lib | |||||
$Q echo "[Install Headers]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
$Q echo "[Install Static Lib]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
$Q install -m 0755 libwiringPiDev.a $(DESTDIR)$(PREFIX)/lib | |||||
.PHONY: install-deb | .PHONY: install-deb | ||||
install-deb: $(DYNAMIC) | install-deb: $(DYNAMIC) | ||||
@echo "[Install Headers: deb]" | |||||
@install -m 0755 -d ~/wiringPi/debian/wiringPi/usr/include | |||||
@install -m 0644 $(HEADERS) ~/wiringPi/debian/wiringPi/usr/include | |||||
@echo "[Install Dynamic Lib: deb]" | |||||
install -m 0755 -d ~/wiringPi/debian/wiringPi/usr/lib | |||||
install -m 0755 libwiringPiDev.so.$(VERSION) ~/wiringPi/debian/wiringPi/usr/lib/libwiringPiDev.so.$(VERSION) | |||||
ln -sf ~/wiringPi/debian/wiringPi/usr/lib/libwiringPi.so.$(VERSION) ~/wiringPi/debian/wiringPi/usr/lib/libwiringPiDev.so | |||||
$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 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 | |||||
.PHONY: uninstall | .PHONY: uninstall | ||||
uninstall: | uninstall: | ||||
@echo "[UnInstall]" | |||||
@cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS) | |||||
@cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPiDev.* | |||||
@ldconfig | |||||
$Q echo "[UnInstall]" | |||||
$Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS) | |||||
$Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPiDev.* | |||||
$Q $(LDCONFIG) | |||||
.PHONY: depend | .PHONY: depend | ||||
@@ -5,6 +5,10 @@ | |||||
# Copyright (c) 2013 Gordon Henderson | # Copyright (c) 2013 Gordon Henderson | ||||
################################################################################# | ################################################################################# | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O3 | DEBUG = -O3 | ||||
CC = gcc | CC = gcc | ||||
@@ -29,44 +33,44 @@ BINS = $(SRC:.c=) | |||||
all: $(BINS) | all: $(BINS) | ||||
gertboard: gertboard.o | gertboard: gertboard.o | ||||
@echo [link] | |||||
@$(CC) -o $@ gertboard.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ gertboard.o $(LDFLAGS) $(LDLIBS) | |||||
buttons: buttons.o | buttons: buttons.o | ||||
@echo [link] | |||||
@$(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) | |||||
7segments: 7segments.o | 7segments: 7segments.o | ||||
@echo [link] | |||||
@$(CC) -o $@ 7segments.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ 7segments.o $(LDFLAGS) $(LDLIBS) | |||||
voltmeter: voltmeter.o | voltmeter: voltmeter.o | ||||
@echo [link] | |||||
@$(CC) -o $@ voltmeter.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ voltmeter.o $(LDFLAGS) $(LDLIBS) | |||||
temperature: temperature.o | temperature: temperature.o | ||||
@echo [link] | |||||
@$(CC) -o $@ temperature.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ temperature.o $(LDFLAGS) $(LDLIBS) | |||||
vumeter: vumeter.o | vumeter: vumeter.o | ||||
@echo [link] | |||||
@$(CC) -o $@ vumeter.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ vumeter.o $(LDFLAGS) $(LDLIBS) | |||||
record: record.o | record: record.o | ||||
@echo [link] | |||||
@$(CC) -o $@ record.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ record.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | .c.o: | ||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [CC] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | clean: | ||||
@echo [Clean] | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
$Q echo [Clean] | |||||
$Q rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
@@ -3,7 +3,7 @@ | |||||
# wiringPi - Wiring Compatable library for the Raspberry Pi | # wiringPi - Wiring Compatable library for the Raspberry Pi | ||||
# https://projects.drogon.net/wiring-pi | # https://projects.drogon.net/wiring-pi | ||||
# | # | ||||
# Copyright (c) 2012 Gordon Henderson | |||||
# Copyright (c) 2012-2015 Gordon Henderson | |||||
################################################################################# | ################################################################################# | ||||
# This file is part of wiringPi: | # This file is part of wiringPi: | ||||
# Wiring Compatable library for the Raspberry Pi | # Wiring Compatable library for the Raspberry Pi | ||||
@@ -22,6 +22,9 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O3 | DEBUG = -O3 | ||||
@@ -44,123 +47,123 @@ SRC = blink.c blink8.c blink12.c \ | |||||
softPwm.c softTone.c \ | softPwm.c softTone.c \ | ||||
delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \ | delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \ | ||||
lowPower.c \ | lowPower.c \ | ||||
rht03.c piglow.c | |||||
max31855.c \ | |||||
rht03.c | |||||
OBJ = $(SRC:.c=.o) | OBJ = $(SRC:.c=.o) | ||||
BINS = $(SRC:.c=) | BINS = $(SRC:.c=) | ||||
all: | all: | ||||
@cat README.TXT | |||||
@echo " $(BINS)" | fmt | |||||
@echo "" | |||||
$Q cat README.TXT | |||||
$Q echo " $(BINS)" | fmt | |||||
$Q echo "" | |||||
really-all: $(BINS) | really-all: $(BINS) | ||||
blink: blink.o | blink: blink.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
blink8: blink8.o | blink8: blink8.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink8.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink8.o $(LDFLAGS) $(LDLIBS) | |||||
blink12drcs: blink12drcs.o | blink12drcs: blink12drcs.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink12drcs.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink12drcs.o $(LDFLAGS) $(LDLIBS) | |||||
blink12: blink12.o | blink12: blink12.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink12.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink12.o $(LDFLAGS) $(LDLIBS) | |||||
speed: speed.o | speed: speed.o | ||||
@echo [link] | |||||
@$(CC) -o $@ speed.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ speed.o $(LDFLAGS) $(LDLIBS) | |||||
lcd: lcd.o | lcd: lcd.o | ||||
@echo [link] | |||||
@$(CC) -o $@ lcd.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ lcd.o $(LDFLAGS) $(LDLIBS) | |||||
lcd-adafruit: lcd-adafruit.o | lcd-adafruit: lcd-adafruit.o | ||||
@echo [link] | |||||
@$(CC) -o $@ lcd-adafruit.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ lcd-adafruit.o $(LDFLAGS) $(LDLIBS) | |||||
clock: clock.o | clock: clock.o | ||||
@echo [link] | |||||
@$(CC) -o $@ clock.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ clock.o $(LDFLAGS) $(LDLIBS) | |||||
wfi: wfi.o | wfi: wfi.o | ||||
@echo [link] | |||||
@$(CC) -o $@ wfi.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ wfi.o $(LDFLAGS) $(LDLIBS) | |||||
isr: isr.o | isr: isr.o | ||||
@echo [link] | |||||
@$(CC) -o $@ isr.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ isr.o $(LDFLAGS) $(LDLIBS) | |||||
isr-osc: isr-osc.o | isr-osc: isr-osc.o | ||||
@echo [link] | |||||
@$(CC) -o $@ isr-osc.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ isr-osc.o $(LDFLAGS) $(LDLIBS) | |||||
nes: nes.o | nes: nes.o | ||||
@echo [link] | |||||
@$(CC) -o $@ nes.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ nes.o $(LDFLAGS) $(LDLIBS) | |||||
rht03: rht03.o | rht03: rht03.o | ||||
@echo [link] | |||||
@$(CC) -o $@ rht03.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ rht03.o $(LDFLAGS) $(LDLIBS) | |||||
pwm: pwm.o | pwm: pwm.o | ||||
@echo [link] | |||||
@$(CC) -o $@ pwm.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ pwm.o $(LDFLAGS) $(LDLIBS) | |||||
softPwm: softPwm.o | softPwm: softPwm.o | ||||
@echo [link] | |||||
@$(CC) -o $@ softPwm.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ softPwm.o $(LDFLAGS) $(LDLIBS) | |||||
softTone: softTone.o | softTone: softTone.o | ||||
@echo [link] | |||||
@$(CC) -o $@ softTone.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ softTone.o $(LDFLAGS) $(LDLIBS) | |||||
delayTest: delayTest.o | delayTest: delayTest.o | ||||
@echo [link] | |||||
@$(CC) -o $@ delayTest.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ delayTest.o $(LDFLAGS) $(LDLIBS) | |||||
serialRead: serialRead.o | serialRead: serialRead.o | ||||
@echo [link] | |||||
@$(CC) -o $@ serialRead.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ serialRead.o $(LDFLAGS) $(LDLIBS) | |||||
serialTest: serialTest.o | serialTest: serialTest.o | ||||
@echo [link] | |||||
@$(CC) -o $@ serialTest.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ serialTest.o $(LDFLAGS) $(LDLIBS) | |||||
okLed: okLed.o | okLed: okLed.o | ||||
@echo [link] | |||||
@$(CC) -o $@ okLed.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ okLed.o $(LDFLAGS) $(LDLIBS) | |||||
tone: tone.o | tone: tone.o | ||||
@echo [link] | |||||
@$(CC) -o $@ tone.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ tone.o $(LDFLAGS) $(LDLIBS) | |||||
ds1302: ds1302.o | ds1302: ds1302.o | ||||
@echo [link] | |||||
@$(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS) | |||||
piglow: piglow.o | |||||
@echo [link] | |||||
@$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS) | |||||
max31855: max31855.o | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ max31855.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | .c.o: | ||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [CC] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
@@ -22,6 +22,9 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O3 | DEBUG = -O3 | ||||
@@ -44,40 +47,40 @@ BINS = $(SRC:.c=) | |||||
all: $(BINS) | all: $(BINS) | ||||
blink: blink.o | blink: blink.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
buttons: buttons.o | buttons: buttons.o | ||||
@echo [link] | |||||
@$(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) | |||||
reaction: reaction.o | reaction: reaction.o | ||||
@echo [link] | |||||
@$(CC) -o $@ reaction.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ reaction.o $(LDFLAGS) $(LDLIBS) | |||||
ladder: ladder.o | ladder: ladder.o | ||||
@echo [link] | |||||
@$(CC) -o $@ ladder.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ ladder.o $(LDFLAGS) $(LDLIBS) | |||||
metro: metro.o | metro: metro.o | ||||
@echo [link] | |||||
@$(CC) -o $@ metro.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ metro.o $(LDFLAGS) $(LDLIBS) | |||||
motor: motor.o | motor: motor.o | ||||
@echo [link] | |||||
@$(CC) -o $@ motor.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ motor.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | .c.o: | ||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [CC] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
@@ -3,7 +3,7 @@ | |||||
# wiringPi - Wiring Compatable library for the Raspberry Pi | # wiringPi - Wiring Compatable library for the Raspberry Pi | ||||
# https://projects.drogon.net/wiring-pi | # https://projects.drogon.net/wiring-pi | ||||
# | # | ||||
# Copyright (c) 2012-2013 Gordon Henderson | |||||
# Copyright (c) 2012-2015 Gordon Henderson | |||||
################################################################################# | ################################################################################# | ||||
# This file is part of wiringPi: | # This file is part of wiringPi: | ||||
# Wiring Compatable library for the Raspberry Pi | # Wiring Compatable library for the Raspberry Pi | ||||
@@ -22,6 +22,9 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O3 | DEBUG = -O3 | ||||
@@ -44,34 +47,34 @@ BINS = $(SRC:.c=) | |||||
all: $(BINS) | all: $(BINS) | ||||
piGlow0: piGlow0.o | piGlow0: piGlow0.o | ||||
@echo [link] | |||||
@$(CC) -o $@ piGlow0.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ piGlow0.o $(LDFLAGS) $(LDLIBS) | |||||
piGlow1: piGlow1.o | piGlow1: piGlow1.o | ||||
@echo [link] | |||||
@$(CC) -o $@ piGlow1.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ piGlow1.o $(LDFLAGS) $(LDLIBS) | |||||
piglow: piglow.o | piglow: piglow.o | ||||
@echo [link] | |||||
@$(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | .c.o: | ||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [CC] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
install: piglow | install: piglow | ||||
@echo Installing piglow into /usr/local/bin | |||||
@cp -a piglow /usr/local/bin/piglow | |||||
@chmod 755 /usr/local/bin/piglow | |||||
@echo Done. Remember to load the I2C drivers! | |||||
$Q echo Installing piglow into /usr/local/bin | |||||
$Q cp -a piglow /usr/local/bin/piglow | |||||
$Q chmod 755 /usr/local/bin/piglow | |||||
$Q echo Done. Remember to load the I2C drivers! | |||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
@@ -1,4 +1,4 @@ | |||||
#!/bin/sh | |||||
#!/bin/sh -e | |||||
# | # | ||||
# blink.sh: | # blink.sh: | ||||
# Standard "blink" program in wiringPi. Blinks an LED connected | # Standard "blink" program in wiringPi. Blinks an LED connected | ||||
@@ -0,0 +1,60 @@ | |||||
/* | |||||
* max31855.c: | |||||
* SPI Thermocouple interface chip | |||||
* | |||||
* Copyright (c) 2015 Gordon Henderson. | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/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 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/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <stdint.h> | |||||
#include <string.h> | |||||
#include <time.h> | |||||
#include <wiringPi.h> | |||||
#include <max31855.h> | |||||
int main (int argc, char *argv []) | |||||
{ | |||||
int i = 0 ; | |||||
wiringPiSetup () ; | |||||
max31855Setup (200, 0) ; | |||||
max31855Setup (400, 1) ; | |||||
for (;;) | |||||
{ | |||||
if (i == 0) | |||||
{ | |||||
printf ("+------+------+------+------++------+------+------+------+\n") ; | |||||
printf ("| Raw | Err | C | F || Raw | Err | C | F |\n") ; | |||||
printf ("+------+------+------+------++------+------+------+------+\n") ; | |||||
} | |||||
printf ("| %4d | %4d | %4d | %4d |", analogRead (200), analogRead (201), analogRead (202), analogRead (203)) ; | |||||
printf ("| %4d | %4d | %4d | %4d |\n", analogRead (400), analogRead (401), analogRead (402), analogRead (403)) ; | |||||
delay (500) ; | |||||
if (++i == 10) | |||||
i = 0 ; | |||||
} | |||||
} |
@@ -22,6 +22,9 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O3 | DEBUG = -O3 | ||||
@@ -43,37 +46,37 @@ BINS = $(SRC:.c=) | |||||
all: $(BINS) | all: $(BINS) | ||||
blink: blink.o | blink: blink.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
blink-io: blink-io.o | blink-io: blink-io.o | ||||
@echo [link] | |||||
@$(CC) -o $@ blink-io.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ blink-io.o $(LDFLAGS) $(LDLIBS) | |||||
button: button.o | button: button.o | ||||
@echo [link] | |||||
@$(CC) -o $@ button.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ button.o $(LDFLAGS) $(LDLIBS) | |||||
volts: volts.o | volts: volts.o | ||||
@echo [link] | |||||
@$(CC) -o $@ volts.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ volts.o $(LDFLAGS) $(LDLIBS) | |||||
bright: bright.o | bright: bright.o | ||||
@echo [link] | |||||
@$(CC) -o $@ bright.o $(LDFLAGS) $(LDLIBS) | |||||
$Q echo [link] | |||||
$Q $(CC) -o $@ bright.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | .c.o: | ||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [CC] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
@@ -1,4 +1,4 @@ | |||||
#!/bin/sh | |||||
#!/bin/sh -e | |||||
# | # | ||||
# blink.sh: | # blink.sh: | ||||
# Standard "blink" program in wiringPi. Blinks an LED connected | # Standard "blink" program in wiringPi. Blinks an LED connected | ||||
@@ -23,8 +23,12 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
DESTDIR=/usr | |||||
PREFIX=/local | |||||
DESTDIR?=/usr | |||||
PREFIX?=/local | |||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
#DEBUG = -g -O0 | #DEBUG = -g -O0 | ||||
DEBUG = -O2 | DEBUG = -O2 | ||||
@@ -33,7 +37,7 @@ INCLUDE = -I$(DESTDIR)$(PREFIX)/include | |||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe | CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe | ||||
LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib | LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib | ||||
LIBS = -lwiringPi -lwiringPiDev -lpthread -lm | |||||
LIBS = -lwiringPi -lwiringPiDev -lpthread | |||||
# May not need to alter anything below this line | # May not need to alter anything below this line | ||||
############################################################################### | ############################################################################### | ||||
@@ -45,49 +49,53 @@ OBJ = $(SRC:.c=.o) | |||||
all: gpio | all: gpio | ||||
version.h: ../VERSION | version.h: ../VERSION | ||||
./newVersion | |||||
$Q echo Need to run newVersion above. | |||||
gpio: $(OBJ) | gpio: $(OBJ) | ||||
@echo [Link] | |||||
@$(CC) -o $@ $(OBJ) $(LDFLAGS) $(LIBS) | |||||
$Q echo [Link] | |||||
$Q $(CC) -o $@ $(OBJ) $(LDFLAGS) $(LIBS) | |||||
.c.o: | .c.o: | ||||
@echo [Compile] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [Compile] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
.PHONY: clean | .PHONY: clean | ||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) gpio *~ core tags *.bak | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) gpio *~ core tags *.bak | |||||
.PHONY: tags | .PHONY: tags | ||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
.PHONY: install | .PHONY: install | ||||
install: gpio | install: gpio | ||||
@echo "[Install]" | |||||
@cp gpio $(DESTDIR)$(PREFIX)/bin | |||||
@chown root.root $(DESTDIR)$(PREFIX)/bin/gpio | |||||
@chmod 4755 $(DESTDIR)$(PREFIX)/bin/gpio | |||||
@mkdir -p $(DESTDIR)$(PREFIX)/man/man1 | |||||
@cp gpio.1 $(DESTDIR)$(PREFIX)/man/man1 | |||||
$Q echo "[Install]" | |||||
$Q cp gpio $(DESTDIR)$(PREFIX)/bin | |||||
ifneq ($(WIRINGPI_SUID),0) | |||||
$Q chown root.root $(DESTDIR)$(PREFIX)/bin/gpio | |||||
$Q chmod 4755 $(DESTDIR)$(PREFIX)/bin/gpio | |||||
endif | |||||
$Q mkdir -p $(DESTDIR)$(PREFIX)/man/man1 | |||||
$Q cp gpio.1 $(DESTDIR)$(PREFIX)/man/man1 | |||||
.PHONY: install-deb | .PHONY: install-deb | ||||
install-deb: gpio | install-deb: gpio | ||||
@echo "[Install: deb]" | |||||
@install -m 0755 -d ~/wiringPi/debian/wiringPi/usr/bin | |||||
@install -m 0755 gpio ~/wiringPi/debian/wiringPi/usr/bin | |||||
$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 | |||||
.PHONY: uninstall | .PHONY: uninstall | ||||
uninstall: | uninstall: | ||||
@echo "[UnInstall]" | |||||
@rm -f $(DESTDIR)$(PREFIX)/bin/gpio | |||||
@rm -f $(DESTDIR)$(PREFIX)/man/man1/gpio.1 | |||||
$Q echo "[UnInstall]" | |||||
$Q rm -f $(DESTDIR)$(PREFIX)/bin/gpio | |||||
$Q rm -f $(DESTDIR)$(PREFIX)/man/man1/gpio.1 | |||||
.PHONY: depend | .PHONY: depend | ||||
depend: | depend: | ||||
makedepend -Y $(SRC) | makedepend -Y $(SRC) | ||||
# DO NOT DELETE | # DO NOT DELETE | ||||
gpio.o: version.h |
@@ -1,4 +1,4 @@ | |||||
.TH "GPIO" "January 2015" "Command-Line access to Raspberry Pi's GPIO" | |||||
.TH GPIO 1 "September 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO" | |||||
.SH NAME | .SH NAME | ||||
gpio \- Command-line access to Raspberry Pi's GPIO | gpio \- Command-line access to Raspberry Pi's GPIO | ||||
@@ -251,30 +251,24 @@ on the associated /dev/ entries so that the current user has access to | |||||
them. Optionally it will set the I2C baudrate to that supplied in Kb/sec | them. Optionally it will set the I2C baudrate to that supplied in Kb/sec | ||||
(or as close as the Pi can manage) The default speed is 100Kb/sec. | (or as close as the Pi can manage) The default speed is 100Kb/sec. | ||||
Note that on a Pi with a recent 3.18 kernel with the device-tree structure | |||||
enable, the load may fail until you add: | |||||
.I dtparam=i2c=on | |||||
into \fB/boot/config.txt\fR to allow user use of the I2C bus. | |||||
Note: On recent kernels with the device tree enabled you should use the | |||||
raspi-config program to load/unload the I2C device at boot time. | |||||
(or disable the device tree to continue to use this method) | |||||
.TP | .TP | ||||
.B load spi | .B load spi | ||||
This loads the spi drivers into the kernel and changes the permissions | This loads the spi drivers into the kernel and changes the permissions | ||||
on the associated /dev/ entries so that the current user has access to | on the associated /dev/ entries so that the current user has access to | ||||
them. It used to have the ability to change the buffer size from the | them. It used to have the ability to change the buffer size from the | ||||
default of 4096 bytes to an arbitary value, however for some time the | |||||
default of 4096 bytes to an arbitrary value, however for some time the | |||||
Pi Foundation have compiled the SPI device driver into the kernel and | Pi Foundation have compiled the SPI device driver into the kernel and | ||||
this has fixed the buffer size. The way to change it now is to edit | this has fixed the buffer size. The way to change it now is to edit | ||||
the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to | the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to | ||||
e.g. 8192 bytes then reboot. | e.g. 8192 bytes then reboot. | ||||
Note that on a Pi with a recent 3.18 kernel with the device-tree structure | |||||
enable, the load may fail until you add: | |||||
.I dtparam=spi=on | |||||
into \fB/boot/config.txt\fR to allow user use of the I2C bus. | |||||
Note: On recent kernels with the device tree enabled you should use the | |||||
raspi-config program to load/unload the SPI device at boot time. | |||||
(or disable the device tree to continue to use this method) | |||||
.TP | .TP | ||||
.B gbr | .B gbr | ||||
@@ -327,6 +321,18 @@ When using the \fIexport\fR, \fIedge\fR or \fIunexport\fR commands, the | |||||
pin numbers are \fBalways\fR native BCM_GPIO numbers and never wiringPi | pin numbers are \fBalways\fR native BCM_GPIO numbers and never wiringPi | ||||
pin numbers. | pin numbers. | ||||
As of kernels 4.1.7, a user-level GPIO access mechanism is available, | |||||
however wiringPi will not use this by default - because at this time | |||||
there appears to be issues when trying to program the PWM or clock output | |||||
hardware. If you can live without PWM or GPIO clocks and you want to use | |||||
the GPIO from a non-root program, then you need to make sure that the | |||||
module \fIbcm2835_gpiomem\fR is loaded at boot time. This should happen | |||||
automatically when you enable the device tree in raspi-config. You may | |||||
also need some additional information in /etc/udev/rules.d/ to change the | |||||
mode and ownership of the /dev/gpiomem file. Finally, you need to set | |||||
the environment variable \fIWIRINGPI_GPIOMEM\fR. This will go-away | |||||
in future releases once the /dev/gpiomem interface is fully operational. | |||||
.SH "SEE ALSO" | .SH "SEE ALSO" | ||||
.LP | .LP | ||||
@@ -116,7 +116,7 @@ static void changeOwner (char *cmd, char *file) | |||||
if (chown (file, uid, gid) != 0) | if (chown (file, uid, gid) != 0) | ||||
{ | { | ||||
if (errno == ENOENT) // Warn that it's not there | if (errno == ENOENT) // Warn that it's not there | ||||
fprintf (stderr, "%s: Warning (not an error): File not present: %s\n", cmd, file) ; | |||||
fprintf (stderr, "%s: Warning (not an error, do not report): File not present: %s\n", cmd, file) ; | |||||
else | else | ||||
fprintf (stderr, "%s: Warning (not an error): Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ; | fprintf (stderr, "%s: Warning (not an error): Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ; | ||||
} | } | ||||
@@ -163,6 +163,22 @@ static int moduleLoaded (char *modName) | |||||
********************************************************************************* | ********************************************************************************* | ||||
*/ | */ | ||||
static void checkDevTree (char *argv []) | |||||
{ | |||||
struct stat statBuf ; | |||||
if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ... | |||||
{ | |||||
fprintf (stderr, | |||||
"%s: Unable to load/unload modules as this Pi has the device tree enabled.\n" | |||||
" You need to run the raspi-config program (as root) and select the\n" | |||||
" modules (SPI or I2C) that you wish to load/unload there and reboot.\n" | |||||
" There is more information here:\n" | |||||
" https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314\n", argv [0]) ; | |||||
exit (1) ; | |||||
} | |||||
} | |||||
static void _doLoadUsage (char *argv []) | static void _doLoadUsage (char *argv []) | ||||
{ | { | ||||
fprintf (stderr, "Usage: %s load <spi/i2c> [I2C baudrate in Kb/sec]\n", argv [0]) ; | fprintf (stderr, "Usage: %s load <spi/i2c> [I2C baudrate in Kb/sec]\n", argv [0]) ; | ||||
@@ -176,6 +192,8 @@ static void doLoad (int argc, char *argv []) | |||||
char *file1, *file2 ; | char *file1, *file2 ; | ||||
char args1 [32], args2 [32] ; | char args1 [32], args2 [32] ; | ||||
checkDevTree (argv) ; | |||||
if (argc < 3) | if (argc < 3) | ||||
_doLoadUsage (argv) ; | _doLoadUsage (argv) ; | ||||
@@ -251,6 +269,8 @@ static void doUnLoad (int argc, char *argv []) | |||||
char *module1, *module2 ; | char *module1, *module2 ; | ||||
char cmd [80] ; | char cmd [80] ; | ||||
checkDevTree (argv) ; | |||||
if (argc != 3) | if (argc != 3) | ||||
_doUnLoadUsage (argv) ; | _doUnLoadUsage (argv) ; | ||||
@@ -1129,6 +1149,56 @@ static void doPwmClock (int argc, char *argv []) | |||||
/* | /* | ||||
* doVersion: | |||||
* Handle the ever more complicated version command | |||||
********************************************************************************* | |||||
*/ | |||||
static void doVersion (char *argv []) | |||||
{ | |||||
int model, rev, mem, maker, warranty ; | |||||
struct stat statBuf ; | |||||
printf ("gpio version: %s\n", VERSION) ; | |||||
printf ("Copyright (c) 2012-2015 Gordon Henderson\n") ; | |||||
printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ; | |||||
printf ("For details type: %s -warranty\n", argv [0]) ; | |||||
printf ("\n") ; | |||||
piBoardId (&model, &rev, &mem, &maker, &warranty) ; | |||||
/************* | |||||
if (model == PI_MODEL_UNKNOWN) | |||||
{ | |||||
printf ("Your Raspberry Pi has an unknown model type. Please report this to\n") ; | |||||
printf (" projects@drogon.net\n") ; | |||||
printf ("with a copy of your /proc/cpuinfo if possible\n") ; | |||||
} | |||||
else | |||||
***************/ | |||||
{ | |||||
printf ("Raspberry Pi Details:\n") ; | |||||
printf (" Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n", | |||||
piModelNames [model], piRevisionNames [rev], piMemorySize [mem], piMakerNames [maker], warranty ? "[Out of Warranty]" : "") ; | |||||
// Check for device tree | |||||
if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ... | |||||
printf (" Device tree is enabled.\n") ; | |||||
if (stat ("/dev/gpiomem", &statBuf) == 0) // User level GPIO is GO | |||||
{ | |||||
printf (" This Raspberry Pi supports user-level GPIO access.\n") ; | |||||
printf (" -> See the man-page for more details\n") ; | |||||
} | |||||
else | |||||
printf (" * Root or sudo required for GPIO access.\n") ; | |||||
} | |||||
} | |||||
/* | |||||
* main: | * main: | ||||
* Start here | * Start here | ||||
********************************************************************************* | ********************************************************************************* | ||||
@@ -1137,7 +1207,6 @@ static void doPwmClock (int argc, char *argv []) | |||||
int main (int argc, char *argv []) | int main (int argc, char *argv []) | ||||
{ | { | ||||
int i ; | int i ; | ||||
int model, rev, mem, maker, overVolted ; | |||||
if (getenv ("WIRINGPI_DEBUG") != NULL) | if (getenv ("WIRINGPI_DEBUG") != NULL) | ||||
{ | { | ||||
@@ -1159,42 +1228,20 @@ int main (int argc, char *argv []) | |||||
return 0 ; | return 0 ; | ||||
} | } | ||||
// Sort of a special: | |||||
if (strcmp (argv [1], "-R") == 0) | |||||
{ | |||||
printf ("%d\n", piBoardRev ()) ; | |||||
return 0 ; | |||||
} | |||||
// Version & Warranty | // Version & Warranty | ||||
// Wish I could remember why I have both -R and -V ... | |||||
if (strcmp (argv [1], "-V") == 0) | |||||
if ((strcmp (argv [1], "-R") == 0) || (strcmp (argv [1], "-V") == 0)) | |||||
{ | { | ||||
printf ("%d\n", piBoardRev ()) ; | printf ("%d\n", piBoardRev ()) ; | ||||
return 0 ; | return 0 ; | ||||
} | } | ||||
// Version and information | |||||
if (strcmp (argv [1], "-v") == 0) | if (strcmp (argv [1], "-v") == 0) | ||||
{ | { | ||||
printf ("gpio version: %s\n", VERSION) ; | |||||
printf ("Copyright (c) 2012-2015 Gordon Henderson\n") ; | |||||
printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ; | |||||
printf ("For details type: %s -warranty\n", argv [0]) ; | |||||
printf ("\n") ; | |||||
piBoardId (&model, &rev, &mem, &maker, &overVolted) ; | |||||
if (model == PI_MODEL_UNKNOWN) | |||||
{ | |||||
printf ("Your Raspberry Pi has an unknown model type. Please report this to\n") ; | |||||
printf (" projects@drogon.net\n") ; | |||||
printf ("with a copy of your /proc/cpuinfo if possible\n") ; | |||||
} | |||||
else | |||||
{ | |||||
printf ("Raspberry Pi Details:\n") ; | |||||
printf (" Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n", | |||||
piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker], overVolted ? "[OV]" : "") ; | |||||
} | |||||
doVersion (argv) ; | |||||
return 0 ; | return 0 ; | ||||
} | } | ||||
@@ -1 +1 @@ | |||||
#define VERSION "2.26" | |||||
#define VERSION "2.30" |
@@ -1,7 +1,8 @@ | |||||
#!/bin/sh | |||||
#!/bin/sh -e | |||||
# | # | ||||
# newVersion: | # newVersion: | ||||
# Utility to create the version.h include file for the gpio command. | # Utility to create the version.h include file for the gpio command. | ||||
# and the Debian package | |||||
# | # | ||||
# Copyright (c) 2012-2015 Gordon Henderson | # Copyright (c) 2012-2015 Gordon Henderson | ||||
################################################################################# | ################################################################################# | ||||
@@ -22,5 +23,21 @@ | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | # along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | ||||
################################################################################# | ################################################################################# | ||||
rm -f version.h | |||||
echo "#define VERSION \"`cat ../VERSION`\"" > version.h | |||||
echo Updating to version: `cat VERSION` | |||||
rm -f gpio/version.h | |||||
echo "#define VERSION \"`cat VERSION`\"" > gpio/version.h | |||||
rm -f debian-template/wiringPi/DEBIAN/control | |||||
cat > debian-template/wiringPi/DEBIAN/control <<EOF | |||||
Package: wiringpi | |||||
Version: `cat VERSION` | |||||
Section: libraries | |||||
Priority: optional | |||||
Architecture: armhf | |||||
Depends: libc6 | |||||
Maintainer: Gordon Henderson <projects@drogon.net> | |||||
Description: The wiringPi libraries, headers and gpio command | |||||
Libraries to allow GPIO access on a Raspberry Pi from C and C++ | |||||
programs as well as from the command-line | |||||
EOF |
@@ -1,18 +1,22 @@ | |||||
SRC = pins.tex | SRC = pins.tex | ||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
all: ${SRC} | all: ${SRC} | ||||
@echo Generating DVI | |||||
@latex pins.tex | |||||
$Q echo Generating DVI | |||||
$Q latex pins.tex | |||||
pins.dvi: pins.tex | pins.dvi: pins.tex | ||||
@latex pins.tex | |||||
$Q latex pins.tex | |||||
pdf: pins.dvi | pdf: pins.dvi | ||||
@dvipdf pins.dvi | |||||
$Q dvipdf pins.dvi | |||||
.PHONY: clean | .PHONY: clean | ||||
clean: | clean: | ||||
@rm -f *.dvi *.aux *.log *.ps *.toc *.bak *~ | |||||
$Q rm -f *.dvi *.aux *.log *.ps *.toc *.bak *~ |
@@ -22,8 +22,14 @@ | |||||
################################################################################# | ################################################################################# | ||||
VERSION=$(shell cat ../VERSION) | VERSION=$(shell cat ../VERSION) | ||||
DESTDIR=/usr | |||||
PREFIX=/local | |||||
DESTDIR?=/usr | |||||
PREFIX?=/local | |||||
LDCONFIG?=ldconfig | |||||
ifneq ($V,1) | |||||
Q ?= @ | |||||
endif | |||||
STATIC=libwiringPi.a | STATIC=libwiringPi.a | ||||
DYNAMIC=libwiringPi.so.$(VERSION) | DYNAMIC=libwiringPi.so.$(VERSION) | ||||
@@ -76,67 +82,67 @@ all: $(DYNAMIC) | |||||
static: $(STATIC) | static: $(STATIC) | ||||
$(STATIC): $(OBJ) | $(STATIC): $(OBJ) | ||||
@echo "[Link (Static)]" | |||||
@ar rcs $(STATIC) $(OBJ) | |||||
@ranlib $(STATIC) | |||||
$Q echo "[Link (Static)]" | |||||
$Q ar rcs $(STATIC) $(OBJ) | |||||
$Q ranlib $(STATIC) | |||||
# @size $(STATIC) | # @size $(STATIC) | ||||
$(DYNAMIC): $(OBJ) | $(DYNAMIC): $(OBJ) | ||||
@echo "[Link (Dynamic)]" | |||||
@$(CC) -shared -Wl,-soname,libwiringPi.so -o libwiringPi.so.$(VERSION) -lpthread $(OBJ) | |||||
$Q echo "[Link (Dynamic)]" | |||||
$Q $(CC) -shared -Wl,-soname,libwiringPi.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPi.so.$(VERSION) -lpthread $(OBJ) | |||||
.c.o: | .c.o: | ||||
@echo [Compile] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
$Q echo [Compile] $< | |||||
$Q $(CC) -c $(CFLAGS) $< -o $@ | |||||
.PHONY: clean | .PHONY: clean | ||||
clean: | clean: | ||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.* | |||||
$Q echo "[Clean]" | |||||
$Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.* | |||||
.PHONY: tags | .PHONY: tags | ||||
tags: $(SRC) | tags: $(SRC) | ||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
$Q echo [ctags] | |||||
$Q ctags $(SRC) | |||||
.PHONY: install | .PHONY: install | ||||
install: $(DYNAMIC) | install: $(DYNAMIC) | ||||
@echo "[Install Headers]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
@install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
@echo "[Install Dynamic Lib]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
@install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) | |||||
@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so | |||||
@ldconfig | |||||
$Q echo "[Install Headers]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
$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 $(LDCONFIG) | |||||
.PHONY: install-static | .PHONY: install-static | ||||
install-static: $(STATIC) | install-static: $(STATIC) | ||||
@echo "[Install Headers]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
@install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
@echo "[Install Static Lib]" | |||||
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
@install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib | |||||
$Q echo "[Install Headers]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include | |||||
$Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include | |||||
$Q echo "[Install Static Lib]" | |||||
$Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib | |||||
$Q install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib | |||||
.PHONY: install-deb | .PHONY: install-deb | ||||
install-deb: $(DYNAMIC) | install-deb: $(DYNAMIC) | ||||
@echo "[Install Headers: deb]" | |||||
@install -m 0755 -d ~/wiringPi/debian/wiringPi/usr/include | |||||
@install -m 0644 $(HEADERS) ~/wiringPi/debian/wiringPi/usr/include | |||||
@echo "[Install Dynamic Lib: deb]" | |||||
install -m 0755 -d ~/wiringPi/debian/wiringPi/usr/lib | |||||
install -m 0755 libwiringPi.so.$(VERSION) ~/wiringPi/debian/wiringPi/usr/lib/libwiringPi.so.$(VERSION) | |||||
ln -sf ~/wiringPi/debian/wiringPi/usr/lib/libwiringPi.so.$(VERSION) ~/wiringPi/debian/wiringPi/usr/lib/libwiringPi.so | |||||
$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 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 | |||||
.PHONY: uninstall | .PHONY: uninstall | ||||
uninstall: | uninstall: | ||||
@echo "[UnInstall]" | |||||
@cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS) | |||||
@cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPi.* | |||||
@ldconfig | |||||
$Q echo "[UnInstall]" | |||||
$Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS) | |||||
$Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPi.* | |||||
$Q $(LDCONFIG) | |||||
.PHONY: depend | .PHONY: depend | ||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* max31855.c: | * max31855.c: | ||||
* Extend wiringPi with the max31855 SPI Analog to Digital convertor | * Extend wiringPi with the max31855 SPI Analog to Digital convertor | ||||
* Copyright (c) 2012-2013 Gordon Henderson | |||||
* Copyright (c) 2012-2015 Gordon Henderson | |||||
*********************************************************************** | *********************************************************************** | ||||
* This file is part of wiringPi: | * This file is part of wiringPi: | ||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | * https://projects.drogon.net/raspberry-pi/wiringpi/ | ||||
@@ -22,39 +22,57 @@ | |||||
*********************************************************************** | *********************************************************************** | ||||
*/ | */ | ||||
#include <byteswap.h> | |||||
#include <stdint.h> | |||||
#include <wiringPi.h> | #include <wiringPi.h> | ||||
#include <wiringPiSPI.h> | #include <wiringPiSPI.h> | ||||
#include "max31855.h" | #include "max31855.h" | ||||
/* | |||||
* myAnalogRead: | |||||
* Return the analog value of the given pin | |||||
* Note: The chip really only has one read "channel", but we're faking it | |||||
* here so we can read the error registers. Channel 0 will be the data | |||||
* channel, and 1 is the error register code. | |||||
* Note: Temperature returned is temp in C * 4, so divide result by 4 | |||||
********************************************************************************* | |||||
*/ | |||||
static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) | static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) | ||||
{ | { | ||||
unsigned int spiData ; | |||||
uint32_t spiData ; | |||||
int temp ; | int temp ; | ||||
int chan = pin - node->pinBase ; | int chan = pin - node->pinBase ; | ||||
wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ; | wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ; | ||||
if (chan == 0) // Read temp in C | |||||
spiData = __bswap_32(spiData) ; | |||||
switch (chan) | |||||
{ | { | ||||
spiData >>= 18 ; | |||||
temp = spiData & 0x3FFF ; // Bottom 13 bits | |||||
if ((spiData & 0x2000) != 0) // Negative | |||||
temp = -temp ; | |||||
return temp ; | |||||
case 0: // Existing read - return raw value * 4 | |||||
spiData >>= 18 ; | |||||
temp = spiData & 0x1FFF ; // Bottom 13 bits | |||||
if ((spiData & 0x2000) != 0) // Negative | |||||
temp = -temp ; | |||||
return temp ; | |||||
case 1: // Return error bits | |||||
return spiData & 0x7 ; | |||||
case 2: // Return temp in C * 10 | |||||
spiData >>= 18 ; | |||||
temp = spiData & 0x1FFF ; // Bottom 13 bits | |||||
if ((spiData & 0x2000) != 0) // Negative | |||||
temp = -temp ; | |||||
return (int)((((double)temp * 25) + 0.5) / 10.0) ; | |||||
case 3: // Return temp in F * 10 | |||||
spiData >>= 18 ; | |||||
temp = spiData & 0x1FFF ; // Bottom 13 bits | |||||
if ((spiData & 0x2000) != 0) // Negative | |||||
temp = -temp ; | |||||
return (int)((((((double)temp * 0.25 * 9.0 / 5.0) + 32.0) * 100.0) + 0.5) / 10.0) ; | |||||
default: // Who knows... | |||||
return 0 ; | |||||
} | } | ||||
else // Return error bits | |||||
return spiData & 0x7 ; | |||||
} | } | ||||
@@ -72,7 +90,7 @@ int max31855Setup (const int pinBase, int spiChannel) | |||||
if (wiringPiSPISetup (spiChannel, 5000000) < 0) // 5MHz - prob 4 on the Pi | if (wiringPiSPISetup (spiChannel, 5000000) < 0) // 5MHz - prob 4 on the Pi | ||||
return -1 ; | return -1 ; | ||||
node = wiringPiNewNode (pinBase, 2) ; | |||||
node = wiringPiNewNode (pinBase, 4) ; | |||||
node->fd = spiChannel ; | node->fd = spiChannel ; | ||||
node->analogRead = myAnalogRead ; | node->analogRead = myAnalogRead ; | ||||
@@ -84,6 +84,7 @@ | |||||
#define ENV_DEBUG "WIRINGPI_DEBUG" | #define ENV_DEBUG "WIRINGPI_DEBUG" | ||||
#define ENV_CODES "WIRINGPI_CODES" | #define ENV_CODES "WIRINGPI_CODES" | ||||
#define ENV_GPIOMEM "WIRINGPI_GPIOMEM" | |||||
// Mask for the bottom 64 pins which belong to the Raspberry Pi | // Mask for the bottom 64 pins which belong to the Raspberry Pi | ||||
@@ -130,13 +131,16 @@ struct wiringPiNodeStruct *wiringPiNodes = NULL ; | |||||
// Access from ARM Running Linux | // Access from ARM Running Linux | ||||
// Taken from Gert/Doms code. Some of this is not in the manual | // Taken from Gert/Doms code. Some of this is not in the manual | ||||
// that I can find )-: | // that I can find )-: | ||||
// | |||||
// Updates in September 2015 - all now static variables (and apologies for the caps) | |||||
// due to the Pi v2 and the new /dev/gpiomem interface | |||||
static volatile unsigned int BCM2708_PERI_BASE = 0x20000000 ; // Variable for Pi2 | |||||
#define GPIO_PADS (BCM2708_PERI_BASE + 0x00100000) | |||||
#define CLOCK_BASE (BCM2708_PERI_BASE + 0x00101000) | |||||
#define GPIO_BASE (BCM2708_PERI_BASE + 0x00200000) | |||||
#define GPIO_TIMER (BCM2708_PERI_BASE + 0x0000B000) | |||||
#define GPIO_PWM (BCM2708_PERI_BASE + 0x0020C000) | |||||
static volatile unsigned int RASPBERRY_PI_PERI_BASE ; | |||||
static volatile unsigned int GPIO_PADS ; | |||||
static volatile unsigned int GPIO_CLOCK_BASE ; | |||||
static volatile unsigned int GPIO_BASE ; | |||||
static volatile unsigned int GPIO_TIMER ; | |||||
static volatile unsigned int GPIO_PWM ; | |||||
#define PAGE_SIZE (4*1024) | #define PAGE_SIZE (4*1024) | ||||
#define BLOCK_SIZE (4*1024) | #define BLOCK_SIZE (4*1024) | ||||
@@ -205,35 +209,77 @@ static volatile uint32_t *timerIrqRaw ; | |||||
static int piModel2 = FALSE ; | static int piModel2 = FALSE ; | ||||
const char *piModelNames [7] = | |||||
const char *piModelNames [16] = | |||||
{ | { | ||||
"Unknown", | |||||
"Model A", | |||||
"Model B", | |||||
"Model B+", | |||||
"Compute Module", | |||||
"Model A+", | |||||
"Model 2", // Quad Core | |||||
"Model A", // 0 | |||||
"Model B", // 1 | |||||
"Model A+", // 2 | |||||
"Model B+", // 3 | |||||
"Pi 2", // 4 | |||||
"Alpha", // 5 | |||||
"CM", // 6 | |||||
"Unknown07", // 07 | |||||
"Unknown08", // 08 | |||||
"Pi Zero", // 09 | |||||
"Unknown10", // 10 | |||||
"Unknown11", // 11 | |||||
"Unknown12", // 12 | |||||
"Unknown13", // 13 | |||||
"Unknown14", // 14 | |||||
"Unknown15", // 15 | |||||
} ; | } ; | ||||
const char *piRevisionNames [5] = | |||||
const char *piRevisionNames [16] = | |||||
{ | { | ||||
"Unknown", | |||||
"1", | |||||
"1.1", | |||||
"1.2", | |||||
"2", | |||||
"00", | |||||
"01", | |||||
"02", | |||||
"03", | |||||
"04", | |||||
"05", | |||||
"06", | |||||
"07", | |||||
"08", | |||||
"09", | |||||
"10", | |||||
"11", | |||||
"12", | |||||
"13", | |||||
"14", | |||||
"15", | |||||
} ; | } ; | ||||
const char *piMakerNames [5] = | |||||
const char *piMakerNames [16] = | |||||
{ | { | ||||
"Unknown", | |||||
"Egoman", | |||||
"Sony", | |||||
"Qusda", | |||||
"MBest", | |||||
"Sony", // 0 | |||||
"Egoman", // 1 | |||||
"Embest", // 2 | |||||
"Unknown", // 3 | |||||
"Embest", // 4 | |||||
"Unknown05", // 5 | |||||
"Unknown06", // 6 | |||||
"Unknown07", // 7 | |||||
"Unknown08", // 8 | |||||
"Unknown09", // 9 | |||||
"Unknown10", // 10 | |||||
"Unknown11", // 11 | |||||
"Unknown12", // 12 | |||||
"Unknown13", // 13 | |||||
"Unknown14", // 14 | |||||
"Unknown15", // 15 | |||||
} ; | } ; | ||||
const int piMemorySize [8] = | |||||
{ | |||||
256, // 0 | |||||
512, // 1 | |||||
1024, // 2 | |||||
0, // 3 | |||||
0, // 4 | |||||
0, // 5 | |||||
0, // 6 | |||||
0, // 7 | |||||
} ; | |||||
// Time for easy calculations | // Time for easy calculations | ||||
@@ -250,6 +296,10 @@ static pthread_mutex_t pinMutex ; | |||||
int wiringPiDebug = FALSE ; | int wiringPiDebug = FALSE ; | ||||
int wiringPiReturnCodes = FALSE ; | int wiringPiReturnCodes = FALSE ; | ||||
// Use /dev/gpiomem ? | |||||
int wiringPiTryGpioMem = FALSE ; | |||||
// sysFds: | // sysFds: | ||||
// Map a file descriptor from the /sys/class/gpio/gpioX/value | // Map a file descriptor from the /sys/class/gpio/gpioX/value | ||||
@@ -604,42 +654,20 @@ int wiringPiFailure (int fatal, const char *message, ...) | |||||
/* | /* | ||||
* piBoardRev: | * piBoardRev: | ||||
* Return a number representing the hardware revision of the board. | * Return a number representing the hardware revision of the board. | ||||
* This is not strictly the board revision but is used to check the | |||||
* layout of the GPIO connector - and there are 2 types that we are | |||||
* really interested in here. The very earliest Pi's and the | |||||
* ones that came after that which switched some pins .... | |||||
* | * | ||||
* Revision 1 really means the early Model B's. | |||||
* Revision 1 really means the early Model A and B's. | |||||
* Revision 2 is everything else - it covers the B, B+ and CM. | * Revision 2 is everything else - it covers the B, B+ and CM. | ||||
* ... and the Pi 2 - which is a B+ ++ ... | * ... and the Pi 2 - which is a B+ ++ ... | ||||
* ... and the Pi 0 - which is an A+ ... | |||||
* | * | ||||
* Seems there are some boards with 0000 in them (mistake in manufacture) | |||||
* So the distinction between boards that I can see is: | |||||
* 0000 - Error | |||||
* 0001 - Not used | |||||
* 0002 - Model B, Rev 1, 256MB, Egoman | |||||
* 0003 - Model B, Rev 1.1, 256MB, Egoman, Fuses/D14 removed. | |||||
* 0004 - Model B, Rev 2, 256MB, Sony | |||||
* 0005 - Model B, Rev 2, 256MB, Qisda | |||||
* 0006 - Model B, Rev 2, 256MB, Egoman | |||||
* 0007 - Model A, Rev 2, 256MB, Egoman | |||||
* 0008 - Model A, Rev 2, 256MB, Sony | |||||
* 0009 - Model A, Rev 2, 256MB, Qisda | |||||
* 000d - Model B, Rev 2, 512MB, Egoman | |||||
* 000e - Model B, Rev 2, 512MB, Sony | |||||
* 000f - Model B, Rev 2, 512MB, Qisda | |||||
* 0010 - Model B+, Rev 1.2, 512MB, Sony | |||||
* 0011 - Pi CM, Rev 1.2, 512MB, Sony | |||||
* 0012 - Model A+ Rev 1.2, 256MB, Sony | |||||
* 0014 - Pi CM, Rev 1.1, 512MB, Sony (Actual Revision might be different) | |||||
* | |||||
* For the Pi 2: | |||||
* 0010 - Model 2, Rev 1.1, Quad Core, 1GB, Sony | |||||
* | |||||
* A small thorn is the olde style overvolting - that will add in | |||||
* 1000000 | |||||
* | |||||
* The Pi compute module has an revision of 0011 - since we only check the | |||||
* last digit, then it's 1, therefore it'll default to not 2 or 3 for a | |||||
* Rev 1, so will appear as a Rev 2. This is fine for the most part, but | |||||
* we'll properly detect the Compute Module later and adjust accordingly. | |||||
* And the next rev of the CN is 0014 ... | |||||
* The main difference between the revision 1 and 2 system that I use here | |||||
* is the mapping of the GPIO pins. From revision 2, the Pi Foundation changed | |||||
* 3 GPIO pins on the (original) 26-way header - BCM_GPIO 22 was dropped and | |||||
* replaced with 27, and 0 + 1 - I2C bus 0 was changed to 2 + 3; I2C bus 1. | |||||
* | * | ||||
********************************************************************************* | ********************************************************************************* | ||||
*/ | */ | ||||
@@ -666,33 +694,45 @@ int piBoardRev (void) | |||||
if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL) | if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL) | ||||
piBoardRevOops ("Unable to open /proc/cpuinfo") ; | piBoardRevOops ("Unable to open /proc/cpuinfo") ; | ||||
// Start by looking for the Architecture, then we can look for a B2 revision.... | |||||
// Start by looking for the Architecture to make sure we're really running | |||||
// on a Pi. I'm getting fed-up with people whinging at me because | |||||
// they can't get it to work on weirdFruitPi boards... | |||||
while (fgets (line, 120, cpuFd) != NULL) | while (fgets (line, 120, cpuFd) != NULL) | ||||
if (strncmp (line, "Hardware", 8) == 0) | if (strncmp (line, "Hardware", 8) == 0) | ||||
break ; | break ; | ||||
if (strncmp (line, "Hardware", 8) != 0) | if (strncmp (line, "Hardware", 8) != 0) | ||||
piBoardRevOops ("No \"Hardware\" line") ; | |||||
piBoardRevOops ("No hardware line") ; | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
printf ("piboardRev: Hardware: %s\n", line) ; | printf ("piboardRev: Hardware: %s\n", line) ; | ||||
// See if it's BCM2708 or BCM2709 | // See if it's BCM2708 or BCM2709 | ||||
if (strstr (line, "BCM2709") != NULL) | |||||
if (strstr (line, "BCM2709") != NULL) // Pi v2 - no point doing anything more at this point | |||||
{ | |||||
piModel2 = TRUE ; | piModel2 = TRUE ; | ||||
fclose (cpuFd) ; | |||||
return boardRev = 2 ; | |||||
} | |||||
else if (strstr (line, "BCM2708") == NULL) | else if (strstr (line, "BCM2708") == NULL) | ||||
{ | { | ||||
fprintf (stderr, "Unable to determine hardware version. I see: %s,\n", line) ; | fprintf (stderr, "Unable to determine hardware version. I see: %s,\n", line) ; | ||||
fprintf (stderr, " - expecting BCM2708 or BCM2709. Please report this to projects@drogon.net\n") ; | |||||
fprintf (stderr, " - expecting BCM2708 or BCM2709.\n") ; | |||||
fprintf (stderr, "If this is a genuine Raspberry Pi then please report this\n") ; | |||||
fprintf (stderr, "to projects@drogon.net. If this is not a Raspberry Pi then you\n") ; | |||||
fprintf (stderr, "are on your own as wiringPi is designed to support the\n") ; | |||||
fprintf (stderr, "Raspberry Pi ONLY.\n") ; | |||||
exit (EXIT_FAILURE) ; | exit (EXIT_FAILURE) ; | ||||
} | } | ||||
// Now do the rest of it as before | |||||
// Now do the rest of it as before - we just need to see if it's an older | |||||
// Rev 1 as anything else is rev 2. | |||||
rewind (cpuFd) ; | |||||
// Isolate the Revision line | |||||
rewind (cpuFd) ; | |||||
while (fgets (line, 120, cpuFd) != NULL) | while (fgets (line, 120, cpuFd) != NULL) | ||||
if (strncmp (line, "Revision", 8) == 0) | if (strncmp (line, "Revision", 8) == 0) | ||||
break ; | break ; | ||||
@@ -710,28 +750,43 @@ int piBoardRev (void) | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
printf ("piboardRev: Revision string: %s\n", line) ; | printf ("piboardRev: Revision string: %s\n", line) ; | ||||
// Scan to first digit | |||||
// Scan to the first character of the revision number | |||||
for (c = line ; *c ; ++c) | for (c = line ; *c ; ++c) | ||||
if (isdigit (*c)) | |||||
if (*c == ':') | |||||
break ; | break ; | ||||
if (!isdigit (*c)) | |||||
piBoardRevOops ("No numeric revision string") ; | |||||
if (*c != ':') | |||||
piBoardRevOops ("Bogus \"Revision\" line (no colon)") ; | |||||
// Chomp spaces | |||||
++c ; | |||||
while (isspace (*c)) | |||||
++c ; | |||||
if (!isxdigit (*c)) | |||||
piBoardRevOops ("Bogus \"Revision\" line (no hex digit at start of revision)") ; | |||||
// Make sure its long enough | // Make sure its long enough | ||||
if (strlen (c) < 4) | if (strlen (c) < 4) | ||||
piBoardRevOops ("Bogus \"Revision\" line (too small)") ; | |||||
piBoardRevOops ("Bogus revision line (too small)") ; | |||||
// If you have overvolted the Pi, then it appears that the revision | // If you have overvolted the Pi, then it appears that the revision | ||||
// has 100000 added to it! | // has 100000 added to it! | ||||
// The actual condition for it being set is: | // The actual condition for it being set is: | ||||
// (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0 | // (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0 | ||||
// This test is not correct for the new encoding scheme, so we'll remove it here as | |||||
// we don't really need it at this point. | |||||
/******************** | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
if (strlen (c) != 4) | if (strlen (c) != 4) | ||||
printf ("piboardRev: This Pi has/is (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0\n") ; | printf ("piboardRev: This Pi has/is (force_turbo || current_limit_override || temp_limit>85) && over_voltage>0\n") ; | ||||
*******************/ | |||||
// Isolate last 4 characters: | // Isolate last 4 characters: | ||||
@@ -754,12 +809,49 @@ int piBoardRev (void) | |||||
/* | /* | ||||
* piBoardId: | * piBoardId: | ||||
* Do more digging into the board revision string as above, but return | |||||
* as much details as we can. | |||||
* Return the real details of the board we have. | |||||
* | |||||
* This is undocumented and really only intended for the GPIO command. | * This is undocumented and really only intended for the GPIO command. | ||||
* Use at your own risk! | * Use at your own risk! | ||||
* | * | ||||
* for Pi v2: | |||||
* Seems there are some boards with 0000 in them (mistake in manufacture) | |||||
* So the distinction between boards that I can see is: | |||||
* | |||||
* 0000 - Error | |||||
* 0001 - Not used | |||||
* | |||||
* Original Pi boards: | |||||
* 0002 - Model B, Rev 1, 256MB, Egoman | |||||
* 0003 - Model B, Rev 1.1, 256MB, Egoman, Fuses/D14 removed. | |||||
* | |||||
* Newer Pi's with remapped GPIO: | |||||
* 0004 - Model B, Rev 2, 256MB, Sony | |||||
* 0005 - Model B, Rev 2, 256MB, Qisda | |||||
* 0006 - Model B, Rev 2, 256MB, Egoman | |||||
* 0007 - Model A, Rev 2, 256MB, Egoman | |||||
* 0008 - Model A, Rev 2, 256MB, Sony | |||||
* 0009 - Model A, Rev 2, 256MB, Qisda | |||||
* 000d - Model B, Rev 2, 512MB, Egoman (Red Pi, Blue Pi?) | |||||
* 000e - Model B, Rev 2, 512MB, Sony | |||||
* 000f - Model B, Rev 2, 512MB, Qisda | |||||
* 0010 - Model B+, Rev 1.2, 512MB, Sony | |||||
* 0011 - Pi CM, Rev 1.2, 512MB, Sony | |||||
* 0012 - Model A+ Rev 1.2, 256MB, Sony | |||||
* 0014 - Pi CM, Rev 1.1, 512MB, Sony (Actual Revision might be different) | |||||
* 0015 - Model A+ Rev 1.1, 256MB, Sony | |||||
* | |||||
* A small thorn is the olde style overvolting - that will add in | |||||
* 1000000 | |||||
* | |||||
* The Pi compute module has an revision of 0011 or 0014 - since we only | |||||
* check the last digit, then it's 1, therefore it'll default to not 2 or | |||||
* 3 for a Rev 1, so will appear as a Rev 2. This is fine for the most part, but | |||||
* we'll properly detect the Compute Module later and adjust accordingly. | |||||
* | |||||
* And then things changed with the introduction of the v2... | |||||
* | |||||
* For Pi v2 and subsequent models - e.g. the Zero: | |||||
* | |||||
* [USER:8] [NEW:1] [MEMSIZE:3] [MANUFACTURER:4] [PROCESSOR:4] [TYPE:8] [REV:4] | * [USER:8] [NEW:1] [MEMSIZE:3] [MANUFACTURER:4] [PROCESSOR:4] [TYPE:8] [REV:4] | ||||
* NEW 23: will be 1 for the new scheme, 0 for the old scheme | * NEW 23: will be 1 for the new scheme, 0 for the old scheme | ||||
* MEMSIZE 20: 0=256M 1=512M 2=1G | * MEMSIZE 20: 0=256M 1=512M 2=1G | ||||
@@ -770,11 +862,13 @@ int piBoardRev (void) | |||||
********************************************************************************* | ********************************************************************************* | ||||
*/ | */ | ||||
void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) | |||||
void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty) | |||||
{ | { | ||||
FILE *cpuFd ; | FILE *cpuFd ; | ||||
char line [120] ; | char line [120] ; | ||||
char *c ; | char *c ; | ||||
unsigned int revision ; | |||||
int bRev, bType, bProc, bMfg, bMem, bWarranty ; | |||||
// Will deal with the properly later on - for now, lets just get it going... | // Will deal with the properly later on - for now, lets just get it going... | ||||
// unsigned int modelNum ; | // unsigned int modelNum ; | ||||
@@ -801,33 +895,59 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
printf ("piboardId: Revision string: %s\n", line) ; | printf ("piboardId: Revision string: %s\n", line) ; | ||||
if (piModel2) | |||||
{ | |||||
// Need to work out if it's using the new or old encoding scheme: | |||||
// Scan to the first character of the revision number | |||||
for (c = line ; *c ; ++c) | |||||
if (*c == ':') | |||||
break ; | |||||
if (*c != ':') | |||||
piBoardRevOops ("Bogus \"Revision\" line (no colon)") ; | |||||
// Chomp spaces | |||||
// Scan to the colon | |||||
++c ; | |||||
while (isspace (*c)) | |||||
++c ; | |||||
for (c = line ; *c ; ++c) | |||||
if (*c == ':') | |||||
break ; | |||||
if (!isxdigit (*c)) | |||||
piBoardRevOops ("Bogus \"Revision\" line (no hex digit at start of revision)") ; | |||||
if (*c != ':') | |||||
piBoardRevOops ("Bogus \"Revision\" line (no colon)") ; | |||||
revision = (unsigned int)strtol (c, NULL, 16) ; // Hex number with no leading 0x | |||||
// modelNum = (unsigned int)strtol (++c, NULL, 16) ; // Hex number with no leading 0x | |||||
// Check for new way: | |||||
if ((revision & (1 << 23)) != 0) // New way | |||||
{ | |||||
if (wiringPiDebug) | |||||
printf ("piBoardId: New Way: revision is: 0x%08X\n", revision) ; | |||||
bRev = (revision & (0x0F << 0)) >> 0 ; | |||||
bType = (revision & (0xFF << 4)) >> 4 ; | |||||
bProc = (revision & (0x0F << 12)) >> 12 ; // Not used for now. | |||||
bMfg = (revision & (0x0F << 16)) >> 16 ; | |||||
bMem = (revision & (0x07 << 20)) >> 20 ; | |||||
bWarranty = (revision & (0x03 << 24)) != 0 ; | |||||
*model = PI_MODEL_2 ; | |||||
*rev = PI_VERSION_1_1 ; | |||||
*mem = 1024 ; | |||||
*maker = PI_MAKER_SONY ; | |||||
*model = bType ; | |||||
*rev = bRev ; | |||||
*mem = bMem ; | |||||
*maker = bMfg ; | |||||
*warranty = bWarranty ; | |||||
if (wiringPiDebug) | |||||
printf ("piboardId: rev: %d, type: %d, proc: %d, mfg: %d, mem: %d, warranty: %d\n", | |||||
bRev, bType, bProc, bMfg, bMem, bWarranty) ; | |||||
} | } | ||||
else | |||||
else // Old way | |||||
{ | { | ||||
if (wiringPiDebug) | |||||
printf ("piBoardId: Old Way: revision is: %s\n", c) ; | |||||
// Scan to first digit | |||||
for (c = line ; *c ; ++c) | |||||
if (isdigit (*c)) | |||||
break ; | |||||
if (!isdigit (*c)) | |||||
piBoardRevOops ("Bogus \"Revision\" line (no digit at start of revision)") ; | |||||
// Make sure its long enough | // Make sure its long enough | ||||
@@ -836,7 +956,7 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) | |||||
// If longer than 4, we'll assume it's been overvolted | // If longer than 4, we'll assume it's been overvolted | ||||
*overVolted = strlen (c) > 4 ; | |||||
*warranty = strlen (c) > 4 ; | |||||
// Extract last 4 characters: | // Extract last 4 characters: | ||||
@@ -844,22 +964,23 @@ void piBoardId (int *model, int *rev, int *mem, int *maker, int *overVolted) | |||||
// Fill out the replys as appropriate | // Fill out the replys as appropriate | ||||
/**/ if (strcmp (c, "0002") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_1 ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0003") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_1_1 ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0004") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0005") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_QISDA ; } | |||||
else if (strcmp (c, "0006") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0007") == 0) { *model = PI_MODEL_A ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0008") == 0) { *model = PI_MODEL_A ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_SONY ; ; } | |||||
else if (strcmp (c, "0009") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 256 ; *maker = PI_MAKER_QISDA ; } | |||||
else if (strcmp (c, "000d") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 512 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "000e") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 512 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "000f") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 512 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0010") == 0) { *model = PI_MODEL_BP ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0011") == 0) { *model = PI_MODEL_CM ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0012") == 0) { *model = PI_MODEL_AP ; *rev = PI_VERSION_1_2 ; *mem = 256 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0013") == 0) { *model = PI_MODEL_BP ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_MBEST ; } | |||||
else if (strcmp (c, "0014") == 0) { *model = PI_MODEL_CM ; *rev = PI_VERSION_1_2 ; *mem = 512 ; *maker = PI_MAKER_SONY ; } | |||||
/**/ if (strcmp (c, "0002") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_1 ; *mem = 0 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0003") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_1_1 ; *mem = 0 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0004") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0005") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_UNKNOWN ; } | |||||
else if (strcmp (c, "0006") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0007") == 0) { *model = PI_MODEL_A ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0008") == 0) { *model = PI_MODEL_A ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_SONY ; ; } | |||||
else if (strcmp (c, "0009") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 0 ; *maker = PI_MAKER_UNKNOWN ; } | |||||
else if (strcmp (c, "000d") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 1 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "000e") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 1 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "000f") == 0) { *model = PI_MODEL_B ; *rev = PI_VERSION_2 ; *mem = 1 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0010") == 0) { *model = PI_MODEL_BP ; *rev = PI_VERSION_1_2 ; *mem = 1 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0011") == 0) { *model = PI_MODEL_CM ; *rev = PI_VERSION_1_2 ; *mem = 1 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0012") == 0) { *model = PI_MODEL_AP ; *rev = PI_VERSION_1_2 ; *mem = 0 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0013") == 0) { *model = PI_MODEL_BP ; *rev = PI_VERSION_1_2 ; *mem = 1 ; *maker = PI_MAKER_EGOMAN ; } | |||||
else if (strcmp (c, "0014") == 0) { *model = PI_MODEL_CM ; *rev = PI_VERSION_1_2 ; *mem = 1 ; *maker = PI_MAKER_SONY ; } | |||||
else if (strcmp (c, "0015") == 0) { *model = PI_MODEL_AP ; *rev = PI_VERSION_1_1 ; *mem = 0 ; *maker = PI_MAKER_SONY ; } | |||||
else { *model = 0 ; *rev = 0 ; *mem = 0 ; *maker = 0 ; } | else { *model = 0 ; *rev = 0 ; *mem = 0 ; *maker = 0 ; } | ||||
} | } | ||||
} | } | ||||
@@ -904,6 +1025,9 @@ void setPadDrive (int group, int value) | |||||
if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
if ((group < 0) || (group > 2)) | if ((group < 0) || (group > 2)) | ||||
return ; | return ; | ||||
@@ -977,6 +1101,9 @@ void pwmSetRange (unsigned int range) | |||||
{ | { | ||||
if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
*(pwm + PWM0_RANGE) = range ; delayMicroseconds (10) ; | *(pwm + PWM0_RANGE) = range ; delayMicroseconds (10) ; | ||||
*(pwm + PWM1_RANGE) = range ; delayMicroseconds (10) ; | *(pwm + PWM1_RANGE) = range ; delayMicroseconds (10) ; | ||||
} | } | ||||
@@ -998,6 +1125,9 @@ void pwmSetClock (int divisor) | |||||
if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | if ((wiringPiMode == WPI_MODE_PINS) || (wiringPiMode == WPI_MODE_PHYS) || (wiringPiMode == WPI_MODE_GPIO)) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
printf ("Setting to: %d. Current: 0x%08X\n", divisor, *(clk + PWMCLK_DIV)) ; | printf ("Setting to: %d. Current: 0x%08X\n", divisor, *(clk + PWMCLK_DIV)) ; | ||||
@@ -1050,6 +1180,9 @@ void gpioClockSet (int pin, int freq) | |||||
else if (wiringPiMode != WPI_MODE_GPIO) | else if (wiringPiMode != WPI_MODE_GPIO) | ||||
return ; | return ; | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
divi = 19200000 / freq ; | divi = 19200000 / freq ; | ||||
divr = 19200000 % freq ; | divr = 19200000 % freq ; | ||||
divf = (int)((double)divr * 4096.0 / 19200000.0) ; | divf = (int)((double)divr * 4096.0 / 19200000.0) ; | ||||
@@ -1222,11 +1355,17 @@ void pinMode (int pin, int mode) | |||||
softToneCreate (origPin) ; | softToneCreate (origPin) ; | ||||
else if (mode == PWM_TONE_OUTPUT) | else if (mode == PWM_TONE_OUTPUT) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
pinMode (origPin, PWM_OUTPUT) ; // Call myself to enable PWM mode | pinMode (origPin, PWM_OUTPUT) ; // Call myself to enable PWM mode | ||||
pwmSetMode (PWM_MODE_MS) ; | pwmSetMode (PWM_MODE_MS) ; | ||||
} | } | ||||
else if (mode == PWM_OUTPUT) | else if (mode == PWM_OUTPUT) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
if ((alt = gpioToPwmALT [pin]) == 0) // Not a hardware capable PWM pin | if ((alt = gpioToPwmALT [pin]) == 0) // Not a hardware capable PWM pin | ||||
return ; | return ; | ||||
@@ -1241,6 +1380,9 @@ void pinMode (int pin, int mode) | |||||
} | } | ||||
else if (mode == GPIO_CLOCK) | else if (mode == GPIO_CLOCK) | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
if ((alt = gpioToGpClkALT0 [pin]) == 0) // Not a GPIO_CLOCK pin | if ((alt = gpioToGpClkALT0 [pin]) == 0) // Not a GPIO_CLOCK pin | ||||
return ; | return ; | ||||
@@ -1395,6 +1537,9 @@ void pwmWrite (int pin, int value) | |||||
if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin | if ((pin & PI_GPIO_MASK) == 0) // On-Board Pin | ||||
{ | { | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
/**/ if (wiringPiMode == WPI_MODE_PINS) | /**/ if (wiringPiMode == WPI_MODE_PINS) | ||||
pin = pinToGpio [pin] ; | pin = pinToGpio [pin] ; | ||||
else if (wiringPiMode == WPI_MODE_PHYS) | else if (wiringPiMode == WPI_MODE_PHYS) | ||||
@@ -1461,6 +1606,9 @@ void pwmToneWrite (int pin, int freq) | |||||
{ | { | ||||
int range ; | int range ; | ||||
if (RASPBERRY_PI_PERI_BASE == 0) // Ignore for now | |||||
return ; | |||||
if (freq == 0) | if (freq == 0) | ||||
pwmWrite (pin, 0) ; // Off | pwmWrite (pin, 0) ; // Off | ||||
else | else | ||||
@@ -1829,11 +1977,15 @@ int wiringPiSetup (void) | |||||
if (getenv (ENV_CODES) != NULL) | if (getenv (ENV_CODES) != NULL) | ||||
wiringPiReturnCodes = TRUE ; | wiringPiReturnCodes = TRUE ; | ||||
if (geteuid () != 0) | |||||
(void)wiringPiFailure (WPI_FATAL, "wiringPiSetup: Must be root. (Did you forget sudo?)\n") ; | |||||
if (getenv (ENV_GPIOMEM) != NULL) | |||||
wiringPiTryGpioMem = TRUE ; | |||||
if (wiringPiDebug) | if (wiringPiDebug) | ||||
{ | |||||
printf ("wiringPi: wiringPiSetup called\n") ; | printf ("wiringPi: wiringPiSetup called\n") ; | ||||
if (wiringPiTryGpioMem) | |||||
printf ("wiringPi: Using /dev/gpiomem\n") ; | |||||
} | |||||
boardRev = piBoardRev () ; | boardRev = piBoardRev () ; | ||||
@@ -1844,43 +1996,77 @@ int wiringPiSetup (void) | |||||
} | } | ||||
else // A, B, Rev 2, B+, CM, Pi2 | else // A, B, Rev 2, B+, CM, Pi2 | ||||
{ | { | ||||
if (piModel2) | |||||
BCM2708_PERI_BASE = 0x3F000000 ; | |||||
pinToGpio = pinToGpioR2 ; | pinToGpio = pinToGpioR2 ; | ||||
physToGpio = physToGpioR2 ; | physToGpio = physToGpioR2 ; | ||||
} | } | ||||
// Open the master /dev/memory device | |||||
if (piModel2) | |||||
RASPBERRY_PI_PERI_BASE = 0x3F000000 ; | |||||
else | |||||
RASPBERRY_PI_PERI_BASE = 0x20000000 ; | |||||
// Open the master /dev/ memory control device | |||||
// See if /dev/gpiomem exists and we can open it... | |||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0) | |||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/mem: %s\n", strerror (errno)) ; | |||||
if (wiringPiTryGpioMem) | |||||
{ | |||||
if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0) | |||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/gpiomem: %s\n", strerror (errno)) ; | |||||
RASPBERRY_PI_PERI_BASE = 0 ; | |||||
} | |||||
// GPIO: | |||||
// ... otherwise fall back to the original /dev/mem which requires root level access | |||||
else | |||||
{ | |||||
// This check is here because people are too stupid to check for themselves or read | |||||
// error messages. | |||||
if (geteuid () != 0) | |||||
(void)wiringPiFailure (WPI_FATAL, "wiringPiSetup: Must be root. (Did you forget sudo?)\n") ; | |||||
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0) | |||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/mem: %s\n", strerror (errno)) ; | |||||
} | |||||
// Set the offsets into the memory interface. | |||||
GPIO_PADS = RASPBERRY_PI_PERI_BASE + 0x00100000 ; | |||||
GPIO_CLOCK_BASE = RASPBERRY_PI_PERI_BASE + 0x00101000 ; | |||||
GPIO_BASE = RASPBERRY_PI_PERI_BASE + 0x00200000 ; | |||||
GPIO_TIMER = RASPBERRY_PI_PERI_BASE + 0x0000B000 ; | |||||
GPIO_PWM = RASPBERRY_PI_PERI_BASE + 0x0020C000 ; | |||||
// Map the individual hardware components | |||||
// GPIO: | |||||
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE) ; | gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE) ; | ||||
if ((int32_t)gpio == -1) | if ((int32_t)gpio == -1) | ||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ; | return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror (errno)) ; | ||||
// PWM | |||||
// PWM | |||||
pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PWM) ; | pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PWM) ; | ||||
if ((int32_t)pwm == -1) | if ((int32_t)pwm == -1) | ||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PWM) failed: %s\n", strerror (errno)) ; | return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PWM) failed: %s\n", strerror (errno)) ; | ||||
// Clock control (needed for PWM) | |||||
// Clock control (needed for PWM) | |||||
clk = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, CLOCK_BASE) ; | |||||
clk = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_CLOCK_BASE) ; | |||||
if ((int32_t)clk == -1) | if ((int32_t)clk == -1) | ||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (CLOCK) failed: %s\n", strerror (errno)) ; | return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (CLOCK) failed: %s\n", strerror (errno)) ; | ||||
// The drive pads | |||||
// The drive pads | |||||
pads = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PADS) ; | pads = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_PADS) ; | ||||
if ((int32_t)pads == -1) | if ((int32_t)pads == -1) | ||||
return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PADS) failed: %s\n", strerror (errno)) ; | return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: mmap (PADS) failed: %s\n", strerror (errno)) ; | ||||
#ifdef USE_TIMER | #ifdef USE_TIMER | ||||
// The system timer | |||||
// The system timer | |||||
timer = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_TIMER) ; | timer = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_TIMER) ; | ||||
if ((int32_t)timer == -1) | if ((int32_t)timer == -1) | ||||
@@ -26,8 +26,7 @@ | |||||
// Handy defines | // Handy defines | ||||
// Deprecated | |||||
#define NUM_PINS 17 | |||||
// wiringPi modes | |||||
#define WPI_MODE_PINS 0 | #define WPI_MODE_PINS 0 | ||||
#define WPI_MODE_GPIO 1 | #define WPI_MODE_GPIO 1 | ||||
@@ -70,29 +69,28 @@ | |||||
// 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. | ||||
#define PI_MODEL_UNKNOWN 0 | |||||
#define PI_MODEL_A 1 | |||||
#define PI_MODEL_B 2 | |||||
#define PI_MODEL_A 0 | |||||
#define PI_MODEL_B 1 | |||||
#define PI_MODEL_AP 2 | |||||
#define PI_MODEL_BP 3 | #define PI_MODEL_BP 3 | ||||
#define PI_MODEL_CM 4 | |||||
#define PI_MODEL_AP 5 | |||||
#define PI_MODEL_2 6 | |||||
#define PI_MODEL_2 4 | |||||
#define PI_ALPHA 5 | |||||
#define PI_MODEL_CM 6 | |||||
#define PI_VERSION_UNKNOWN 0 | |||||
#define PI_VERSION_1 1 | |||||
#define PI_VERSION_1_1 2 | |||||
#define PI_VERSION_1_2 3 | |||||
#define PI_VERSION_2 4 | |||||
#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_UNKNOWN 0 | |||||
#define PI_MAKER_SONY 0 | |||||
#define PI_MAKER_EGOMAN 1 | #define PI_MAKER_EGOMAN 1 | ||||
#define PI_MAKER_SONY 2 | |||||
#define PI_MAKER_QISDA 3 | |||||
#define PI_MAKER_MBEST 4 | |||||
#define PI_MAKER_MBEST 2 | |||||
#define PI_MAKER_UNKNOWN 3 | |||||
extern const char *piModelNames [7] ; | |||||
extern const char *piRevisionNames [5] ; | |||||
extern const char *piMakerNames [5] ; | |||||
extern const char *piModelNames [16] ; | |||||
extern const char *piRevisionNames [16] ; | |||||
extern const char *piMakerNames [16] ; | |||||
extern const int piMemorySize [ 8] ; | |||||
// Intended for the GPIO program Use at your own risk. | // Intended for the GPIO program Use at your own risk. | ||||