From 89cf23cbcd6d91850fddba9c40512542007c99c5 Mon Sep 17 00:00:00 2001 From: Deokgyu Yang Date: Thu, 19 Mar 2020 17:21:21 +0900 Subject: [PATCH] WiringPi: Remove files that seem won't be used or already have not been used Signed-off-by: Deokgyu Yang Change-Id: I1189f950d0e51cbc4c569b1e7a1182dc5f8fe762 --- build | 54 +- debian-template/wiringPi/DEBIAN/control | 10 - debian-template/wiringPi/DEBIAN/postinst | 5 - debian-template/wiringPi/DEBIAN/postrm | 2 - debian/control | 2 +- debian/libwiringpi-dev.dirs | 1 + debian/rules | 0 devLib/Makefile | 143 -- devLib/ds1302.c | 240 -- devLib/ds1302.h | 44 - devLib/font.h | 2577 ---------------------- devLib/gertboard.c | 164 -- devLib/gertboard.h | 45 - devLib/lcd.c | 495 ----- devLib/lcd.h | 52 - devLib/lcd128x64.c | 673 ------ devLib/lcd128x64.h | 39 - devLib/maxdetect.c | 238 -- devLib/maxdetect.h | 40 - devLib/piFace.c | 112 - devLib/piFace.h | 32 - devLib/piFaceOld.c | 177 -- devLib/piGlow.c | 118 - devLib/piGlow.h | 45 - devLib/piNes.c | 113 - devLib/piNes.h | 45 - devLib/scrollPhat.c | 430 ---- devLib/scrollPhat.h | 39 - devLib/scrollPhatFont.h | 544 ----- examples/Gertboard/7segments.c | 221 -- examples/Gertboard/Makefile | 78 - examples/Gertboard/buttons.c | 83 - examples/Gertboard/gertboard.c | 96 - examples/Gertboard/record.c | 60 - examples/Gertboard/temperature.c | 78 - examples/Gertboard/voltmeter.c | 73 - examples/Gertboard/vumeter.c | 152 -- examples/PiFace/Makefile | 88 - examples/PiFace/blink.c | 59 - examples/PiFace/buttons.c | 103 - examples/PiFace/ladder.c | 337 --- examples/PiFace/metro.c | 111 - examples/PiFace/motor.c | 120 - examples/PiFace/reaction.c | 194 -- examples/PiGlow/Makefile | 82 - examples/PiGlow/piGlow0.c | 51 - examples/PiGlow/piGlow1.c | 258 --- examples/PiGlow/piglow.c | 176 -- examples/{q2w/blink.c => blink-thread.c} | 35 +- examples/blink12drcs.c | 125 -- examples/blink6drcs.c | 115 - examples/blink8-drcn.c | 61 - examples/delayTest.c | 47 +- examples/ds1302.c | 238 -- examples/lcd-adafruit.c | 347 --- examples/lcd.c | 286 --- examples/max31855.c | 60 - examples/nes.c | 67 - examples/q2w/Makefile | 84 - examples/q2w/binary.c | 79 - examples/q2w/blink-io.c | 61 - examples/q2w/blink.sh | 37 - examples/q2w/bright.c | 59 - examples/q2w/button.c | 63 - examples/q2w/volts.c | 62 - examples/rht03.c | 86 - examples/scrollPhat/Makefile | 79 - examples/scrollPhat/scphat.c | 230 -- examples/scrollPhat/test.c | 115 - gpio/Makefile | 19 +- gpio/gpio.c | 248 +-- gpio/pins.c | 33 - gpio/pintest | 187 -- gpio/readall.c | 28 - gpio/test.sh | 44 - newVersion | 0 pins/Makefile | 3 +- pins/odroid_c1.tex | 0 pins/odroid_c2.tex | 0 pins/odroid_n1.tex | 0 pins/odroid_n2.tex | 0 pins/odroid_xu3.tex | 0 pins/pins.pdf | Bin 18249 -> 0 bytes pins/pins.tex | 116 - update | 0 wiringPi/Makefile | 74 +- wiringPi/ads1115.c | 297 --- wiringPi/ads1115.h | 55 - wiringPi/bmp180.c | 237 -- wiringPi/bmp180.h | 34 - wiringPi/drcNet.c | 405 ---- wiringPi/drcNet.h | 42 - wiringPi/drcSerial.c | 196 -- wiringPi/drcSerial.h | 33 - wiringPi/ds18b20.c | 146 -- wiringPi/ds18b20.h | 34 - wiringPi/htu21d.c | 150 -- wiringPi/htu21d.h | 34 - wiringPi/max31855.c | 104 - wiringPi/max31855.h | 33 - wiringPi/max5322.c | 84 - wiringPi/max5322.h | 33 - wiringPi/mcp23008.c | 149 -- wiringPi/mcp23008.h | 33 - wiringPi/mcp23016.c | 164 -- wiringPi/mcp23016.h | 33 - wiringPi/mcp23016reg.h | 48 - wiringPi/mcp23017.c | 195 -- wiringPi/mcp23017.h | 33 - wiringPi/mcp23s08.c | 188 -- wiringPi/mcp23s08.h | 33 - wiringPi/mcp23s17.c | 235 -- wiringPi/mcp23s17.h | 33 - wiringPi/mcp23x08.h | 73 - wiringPi/mcp23x0817.h | 87 - wiringPi/mcp3002.c | 76 - wiringPi/mcp3002.h | 33 - wiringPi/mcp3004.c | 76 - wiringPi/mcp3004.h | 33 - wiringPi/mcp3422.c | 129 -- wiringPi/mcp3422.h | 43 - wiringPi/mcp4802.c | 76 - wiringPi/mcp4802.h | 33 - wiringPi/odroid_template.c | 0 wiringPi/odroid_template.h | 0 wiringPi/odroidc1.c | 0 wiringPi/odroidc1.h | 0 wiringPi/odroidc2.c | 0 wiringPi/odroidc2.h | 0 wiringPi/odroidn1.c | 0 wiringPi/odroidn1.h | 0 wiringPi/odroidn2.c | 0 wiringPi/odroidn2.h | 0 wiringPi/odroidxu3.c | 0 wiringPi/odroidxu3.h | 0 wiringPi/pcf8574.c | 126 -- wiringPi/pcf8574.h | 33 - wiringPi/pcf8591.c | 94 - wiringPi/pcf8591.h | 33 - wiringPi/pseudoPins.c | 96 - wiringPi/pseudoPins.h | 26 - wiringPi/rht03.c | 252 --- wiringPi/rht03.h | 25 - wiringPi/sn3218.c | 75 - wiringPi/sn3218.h | 33 - wiringPi/sr595.c | 109 - wiringPi/sr595.h | 34 - wiringPi/wiringPi.c | 89 +- wiringPi/wiringPi.h | 62 +- wiringPi/wpiExtensions.c | 911 -------- wiringPi/wpiExtensions.h | 26 - wiringPiD/Makefile | 100 - wiringPiD/daemonise.c | 82 - wiringPiD/daemonise.h | 9 - wiringPiD/drcNetCmd.h | 44 - wiringPiD/network.c | 330 --- wiringPiD/network.h | 31 - wiringPiD/runRemote.c | 126 -- wiringPiD/runRemote.h | 29 - wiringPiD/wiringpid | Bin 18654 -> 0 bytes wiringPiD/wiringpid.c | 382 ---- 161 files changed, 98 insertions(+), 18766 deletions(-) delete mode 100644 debian-template/wiringPi/DEBIAN/control delete mode 100755 debian-template/wiringPi/DEBIAN/postinst delete mode 100755 debian-template/wiringPi/DEBIAN/postrm mode change 100755 => 100644 debian/rules delete mode 100644 devLib/Makefile delete mode 100644 devLib/ds1302.c delete mode 100644 devLib/ds1302.h delete mode 100644 devLib/font.h delete mode 100644 devLib/gertboard.c delete mode 100644 devLib/gertboard.h delete mode 100644 devLib/lcd.c delete mode 100644 devLib/lcd.h delete mode 100644 devLib/lcd128x64.c delete mode 100644 devLib/lcd128x64.h delete mode 100644 devLib/maxdetect.c delete mode 100644 devLib/maxdetect.h delete mode 100644 devLib/piFace.c delete mode 100644 devLib/piFace.h delete mode 100644 devLib/piFaceOld.c delete mode 100644 devLib/piGlow.c delete mode 100644 devLib/piGlow.h delete mode 100644 devLib/piNes.c delete mode 100644 devLib/piNes.h delete mode 100644 devLib/scrollPhat.c delete mode 100644 devLib/scrollPhat.h delete mode 100644 devLib/scrollPhatFont.h delete mode 100644 examples/Gertboard/7segments.c delete mode 100644 examples/Gertboard/Makefile delete mode 100644 examples/Gertboard/buttons.c delete mode 100644 examples/Gertboard/gertboard.c delete mode 100644 examples/Gertboard/record.c delete mode 100644 examples/Gertboard/temperature.c delete mode 100644 examples/Gertboard/voltmeter.c delete mode 100644 examples/Gertboard/vumeter.c delete mode 100644 examples/PiFace/Makefile delete mode 100644 examples/PiFace/blink.c delete mode 100644 examples/PiFace/buttons.c delete mode 100644 examples/PiFace/ladder.c delete mode 100644 examples/PiFace/metro.c delete mode 100644 examples/PiFace/motor.c delete mode 100644 examples/PiFace/reaction.c delete mode 100644 examples/PiGlow/Makefile delete mode 100644 examples/PiGlow/piGlow0.c delete mode 100644 examples/PiGlow/piGlow1.c delete mode 100644 examples/PiGlow/piglow.c rename examples/{q2w/blink.c => blink-thread.c} (73%) delete mode 100644 examples/blink12drcs.c delete mode 100644 examples/blink6drcs.c delete mode 100644 examples/blink8-drcn.c delete mode 100644 examples/ds1302.c delete mode 100644 examples/lcd-adafruit.c delete mode 100644 examples/lcd.c delete mode 100644 examples/max31855.c delete mode 100644 examples/nes.c delete mode 100644 examples/q2w/Makefile delete mode 100644 examples/q2w/binary.c delete mode 100644 examples/q2w/blink-io.c delete mode 100644 examples/q2w/blink.sh delete mode 100644 examples/q2w/bright.c delete mode 100644 examples/q2w/button.c delete mode 100644 examples/q2w/volts.c delete mode 100644 examples/rht03.c delete mode 100644 examples/scrollPhat/Makefile delete mode 100644 examples/scrollPhat/scphat.c delete mode 100644 examples/scrollPhat/test.c mode change 100755 => 100644 gpio/Makefile mode change 100755 => 100644 gpio/gpio.c delete mode 100644 gpio/pins.c delete mode 100644 gpio/pintest mode change 100755 => 100644 gpio/readall.c delete mode 100755 gpio/test.sh mode change 100755 => 100644 newVersion mode change 100755 => 100644 pins/Makefile mode change 100755 => 100644 pins/odroid_c1.tex mode change 100755 => 100644 pins/odroid_c2.tex mode change 100755 => 100644 pins/odroid_n1.tex mode change 100755 => 100644 pins/odroid_n2.tex mode change 100755 => 100644 pins/odroid_xu3.tex delete mode 100755 pins/pins.pdf delete mode 100644 pins/pins.tex mode change 100755 => 100644 update mode change 100755 => 100644 wiringPi/Makefile delete mode 100644 wiringPi/ads1115.c delete mode 100644 wiringPi/ads1115.h delete mode 100644 wiringPi/bmp180.c delete mode 100644 wiringPi/bmp180.h delete mode 100644 wiringPi/drcNet.c delete mode 100644 wiringPi/drcNet.h delete mode 100644 wiringPi/drcSerial.c delete mode 100644 wiringPi/drcSerial.h delete mode 100644 wiringPi/ds18b20.c delete mode 100644 wiringPi/ds18b20.h delete mode 100644 wiringPi/htu21d.c delete mode 100644 wiringPi/htu21d.h delete mode 100644 wiringPi/max31855.c delete mode 100644 wiringPi/max31855.h delete mode 100644 wiringPi/max5322.c delete mode 100644 wiringPi/max5322.h delete mode 100644 wiringPi/mcp23008.c delete mode 100644 wiringPi/mcp23008.h delete mode 100644 wiringPi/mcp23016.c delete mode 100644 wiringPi/mcp23016.h delete mode 100644 wiringPi/mcp23016reg.h delete mode 100644 wiringPi/mcp23017.c delete mode 100644 wiringPi/mcp23017.h delete mode 100644 wiringPi/mcp23s08.c delete mode 100644 wiringPi/mcp23s08.h delete mode 100644 wiringPi/mcp23s17.c delete mode 100644 wiringPi/mcp23s17.h delete mode 100644 wiringPi/mcp23x08.h delete mode 100644 wiringPi/mcp23x0817.h delete mode 100644 wiringPi/mcp3002.c delete mode 100644 wiringPi/mcp3002.h delete mode 100644 wiringPi/mcp3004.c delete mode 100644 wiringPi/mcp3004.h delete mode 100644 wiringPi/mcp3422.c delete mode 100644 wiringPi/mcp3422.h delete mode 100644 wiringPi/mcp4802.c delete mode 100644 wiringPi/mcp4802.h mode change 100755 => 100644 wiringPi/odroid_template.c mode change 100755 => 100644 wiringPi/odroid_template.h mode change 100755 => 100644 wiringPi/odroidc1.c mode change 100755 => 100644 wiringPi/odroidc1.h mode change 100755 => 100644 wiringPi/odroidc2.c mode change 100755 => 100644 wiringPi/odroidc2.h mode change 100755 => 100644 wiringPi/odroidn1.c mode change 100755 => 100644 wiringPi/odroidn1.h mode change 100755 => 100644 wiringPi/odroidn2.c mode change 100755 => 100644 wiringPi/odroidn2.h mode change 100755 => 100644 wiringPi/odroidxu3.c mode change 100755 => 100644 wiringPi/odroidxu3.h delete mode 100644 wiringPi/pcf8574.c delete mode 100644 wiringPi/pcf8574.h delete mode 100644 wiringPi/pcf8591.c delete mode 100644 wiringPi/pcf8591.h delete mode 100644 wiringPi/pseudoPins.c delete mode 100644 wiringPi/pseudoPins.h delete mode 100644 wiringPi/rht03.c delete mode 100644 wiringPi/rht03.h delete mode 100644 wiringPi/sn3218.c delete mode 100644 wiringPi/sn3218.h delete mode 100644 wiringPi/sr595.c delete mode 100644 wiringPi/sr595.h mode change 100755 => 100644 wiringPi/wiringPi.c mode change 100755 => 100644 wiringPi/wiringPi.h delete mode 100644 wiringPi/wpiExtensions.c delete mode 100644 wiringPi/wpiExtensions.h delete mode 100644 wiringPiD/Makefile delete mode 100644 wiringPiD/daemonise.c delete mode 100644 wiringPiD/daemonise.h delete mode 100644 wiringPiD/drcNetCmd.h delete mode 100644 wiringPiD/network.c delete mode 100644 wiringPiD/network.h delete mode 100644 wiringPiD/runRemote.c delete mode 100644 wiringPiD/runRemote.h delete mode 100755 wiringPiD/wiringpid delete mode 100644 wiringPiD/wiringpid.c diff --git a/build b/build index 37978ab..348ebe1 100755 --- a/build +++ b/build @@ -93,22 +93,6 @@ install() { echo echo "WiringPi Library" cd wiringPi -# $sudo $make uninstall - if [ x$1 = "xstatic" ]; then - $make static - check_make_ok - $sudo $make install-static - else - $make - check_make_ok - $sudo $make install - fi - check_make_ok - - echo - echo "WiringPi Devices Library" - cd ../devLib - $sudo $make uninstall if [ x$1 = "xstatic" ]; then $make static check_make_ok @@ -137,9 +121,6 @@ install() { echo "" echo "NOTE: To compile programs with wiringPi, you need to add:" echo " -lwiringPi" - echo " to your compile line(s) To use the Gertboard, MaxDetect, etc." - echo " code (the devLib), you need to also add:" - echo " -lwiringPiDev" echo " to your compile line(s)." echo "" } @@ -147,8 +128,6 @@ install() { uninstall() { cd wiringPi echo -n "wiringPi: " ; $sudo $make uninstall - cd ../devLib - echo -n "DevLib: " ; $sudo $make uninstall cd ../gpio echo -n "gpio: " ; $sudo $make uninstall cd .. @@ -159,23 +138,11 @@ uninstall() { clean() { cd wiringPi echo -n "wiringPi: " ; $make clean - cd ../devLib - echo -n "DevLib: " ; $make clean cd ../gpio echo -n "gpio: " ; $make clean cd ../examples - echo -n "Examples: " ; $make clean - cd Gertboard - echo -n "Gertboard: " ; $make clean - cd ../PiFace - echo -n "PiFace: " ; $make clean - cd ../q2w - echo -n "Quick2Wire: " ; $make clean - cd ../PiGlow - echo -n "PiGlow: " ; $make clean - cd ../scrollPhat - echo -n "scrollPhat: " ; $make clean - cd ../.. + echo -n "examples: " ; $make clean + cd .. } if [ x$1 = "xclean" ]; then @@ -188,23 +155,6 @@ if [ x$1 = "xuninstall" ]; then exit fi -# Only if you know what you're doing! -if [ x$1 = "xdebian" ]; then - here=`pwd` - cd debian-template/wiringPi - rm -rf usr - cd $here/wiringPi - $make install-deb - cd $here/devLib - $make install-deb INCLUDE='-I. -I../wiringPi' - cd $here/gpio - $make install-deb INCLUDE='-I../wiringPi -I../devLib' LDFLAGS=-L../debian-template/wiringPi/usr/lib - cd $here/debian-template - fakeroot dpkg-deb --build wiringPi - mv wiringPi.deb odroid-wiringpi-`cat $here/VERSION`.deb - exit -fi - if [ x$1 != "x" ]; then echo "Usage: $0 [clean | uninstall]" exit 1 diff --git a/debian-template/wiringPi/DEBIAN/control b/debian-template/wiringPi/DEBIAN/control deleted file mode 100644 index b00d350..0000000 --- a/debian-template/wiringPi/DEBIAN/control +++ /dev/null @@ -1,10 +0,0 @@ -Package: odroid-wiringpi -Version: 2.44-6.2 -Section: libraries -Priority: optional -Architecture: arm64 -Depends: libc6 -Maintainer: Yang Deokgyu -Description: The wiringPi libraries, headers and gpio command - Libraries to allow GPIO access on a ODROID from C and C++ - and BASIC programs as well as from the command-line diff --git a/debian-template/wiringPi/DEBIAN/postinst b/debian-template/wiringPi/DEBIAN/postinst deleted file mode 100755 index 4997e98..0000000 --- a/debian-template/wiringPi/DEBIAN/postinst +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -e -/bin/chown root.root /usr/bin/gpio -/bin/chmod 4755 /usr/bin/gpio -/sbin/ldconfig diff --git a/debian-template/wiringPi/DEBIAN/postrm b/debian-template/wiringPi/DEBIAN/postrm deleted file mode 100755 index 4be8c58..0000000 --- a/debian-template/wiringPi/DEBIAN/postrm +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -/sbin/ldconfig diff --git a/debian/control b/debian/control index 1e813ed..3f501bf 100644 --- a/debian/control +++ b/debian/control @@ -1,7 +1,7 @@ Source: odroid-wiringpi Section: electronics Priority: optional -Maintainer: Yang Deokgyu +Maintainer: Deokgyu Yang Standards-Version: 3.8.0 Homepage: https://wiki.odroid.com Build-Depends: debhelper (>= 10) diff --git a/debian/libwiringpi-dev.dirs b/debian/libwiringpi-dev.dirs index 4418816..6aae0bb 100644 --- a/debian/libwiringpi-dev.dirs +++ b/debian/libwiringpi-dev.dirs @@ -1,2 +1,3 @@ usr/lib +usr/man usr/include diff --git a/debian/rules b/debian/rules old mode 100755 new mode 100644 diff --git a/devLib/Makefile b/devLib/Makefile deleted file mode 100644 index f1c3e63..0000000 --- a/devLib/Makefile +++ /dev/null @@ -1,143 +0,0 @@ -# -# Makefile: -# wiringPi device - A "wiring" library for the Raspberry Pi -# -# Copyright (c) 2012-2016 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 . -################################################################################# - -VERSION=$(shell cat ../VERSION) -DESTDIR?=/usr -PREFIX?=/local - -MAJOR=$(shell cat ../VERSION | cut -d'.' -f1) - -LDCONFIG?=ldconfig - -ifneq ($V,1) -Q ?= @ -endif - -STATIC=libwiringPiDev.a -DYNAMIC=libwiringPiDev.so.$(VERSION) - -#DEBUG = -g -O0 -DEBUG = -O2 -CC = gcc -INCLUDE = -I. -I../wiringPi -DEFS = -D_GNU_SOURCE -CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC - -LIBS = - -############################################################################### - -SRC = ds1302.c maxdetect.c piNes.c \ - gertboard.c piFace.c \ - lcd128x64.c lcd.c \ - scrollPhat.c \ - piGlow.c - -OBJ = $(SRC:.c=.o) - -HEADERS = ds1302.h gertboard.h lcd128x64.h lcd.h maxdetect.h piFace.h piGlow.h piNes.h\ - scrollPhat.h - -all: $(DYNAMIC) - -static: $(STATIC) - -$(STATIC): $(OBJ) - $Q echo "[Link (Static)]" - $Q ar rcs $(STATIC) $(OBJ) - $Q ranlib $(STATIC) -# @size $(STATIC) - -$(DYNAMIC): $(OBJ) - $Q echo "[Link (Dynamic)]" - $Q $(CC) -shared -Wl,-soname,libwiringPiDev.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPiDev.so.$(VERSION) -lpthread $(OBJ) - -.c.o: - $Q echo [Compile] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -.PHONY: clean -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPiDev.* - -.PHONY: tags -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - - -.PHONY: install -install: $(DYNAMIC) - $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 libwiringPiDev.so.$(VERSION) $(DESTDIR)/lib/libwiringPiDev.so.$(MAJOR) - $Q ln -sf libwiringPiDev.so.$(MAJOR) $(DESTDIR)/lib/libwiringPiDev.so - $Q $(LDCONFIG) - -.PHONY: install-static -install-static: $(STATIC) - $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 -install-deb: $(DYNAMIC) - $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 -uninstall: - $Q echo "[UnInstall]" - $Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS) - $Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPiDev.* - $Q $(LDCONFIG) - - -.PHONY: depend -depend: - makedepend -Y $(SRC) - -# DO NOT DELETE - -ds1302.o: ds1302.h -maxdetect.o: maxdetect.h -piNes.o: piNes.h -gertboard.o: gertboard.h -piFace.o: piFace.h -lcd128x64.o: font.h lcd128x64.h -lcd.o: lcd.h -scrollPhat.o: scrollPhatFont.h scrollPhat.h -piGlow.o: piGlow.h diff --git a/devLib/ds1302.c b/devLib/ds1302.c deleted file mode 100644 index cf64de7..0000000 --- a/devLib/ds1302.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * ds1302.c: - * Real Time clock - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include - -#include "ds1302.h" - -// Register defines - -#define RTC_SECS 0 -#define RTC_MINS 1 -#define RTC_HOURS 2 -#define RTC_DATE 3 -#define RTC_MONTH 4 -#define RTC_DAY 5 -#define RTC_YEAR 6 -#define RTC_WP 7 -#define RTC_TC 8 -#define RTC_BM 31 - - -// Locals - -static int dPin, cPin, sPin ; - -/* - * dsShiftIn: - * Shift a number in from the chip, LSB first. Note that the data is - * sampled on the trailing edge of the last clock, so it's valid immediately. - ********************************************************************************* - */ - -static unsigned int dsShiftIn (void) -{ - uint8_t value = 0 ; - int i ; - - pinMode (dPin, INPUT) ; delayMicroseconds (1) ; - - for (i = 0 ; i < 8 ; ++i) - { - value |= (digitalRead (dPin) << i) ; - digitalWrite (cPin, HIGH) ; delayMicroseconds (1) ; - digitalWrite (cPin, LOW) ; delayMicroseconds (1) ; - } - - return value; -} - - -/* - * dsShiftOut: - * A normal LSB-first shift-out, just slowed down a bit - the Pi is - * a bit faster than the chip can handle. - ********************************************************************************* - */ - -static void dsShiftOut (unsigned int data) -{ - int i ; - - pinMode (dPin, OUTPUT) ; - - for (i = 0 ; i < 8 ; ++i) - { - digitalWrite (dPin, data & (1 << i)) ; delayMicroseconds (1) ; - digitalWrite (cPin, HIGH) ; delayMicroseconds (1) ; - digitalWrite (cPin, LOW) ; delayMicroseconds (1) ; - } -} - - -/* - * ds1302regRead: ds1302regWrite: - * Read/Write a value to an RTC Register or RAM location on the chip - ********************************************************************************* - */ - -static unsigned int ds1302regRead (const int reg) -{ - unsigned int data ; - - digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ; - dsShiftOut (reg) ; - data = dsShiftIn () ; - digitalWrite (sPin, LOW) ; delayMicroseconds (1) ; - - return data ; -} - -static void ds1302regWrite (const int reg, const unsigned int data) -{ - digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ; - dsShiftOut (reg) ; - dsShiftOut (data) ; - digitalWrite (sPin, LOW) ; delayMicroseconds (1) ; -} - - -/* - * ds1302rtcWrite: ds1302rtcRead: - * Writes/Reads the data to/from the RTC register - ********************************************************************************* - */ - -unsigned int ds1302rtcRead (const int reg) -{ - return ds1302regRead (0x81 | ((reg & 0x1F) << 1)) ; -} - -void ds1302rtcWrite (int reg, unsigned int data) -{ - ds1302regWrite (0x80 | ((reg & 0x1F) << 1), data) ; -} - - -/* - * ds1302ramWrite: ds1302ramRead: - * Writes/Reads the data to/from the RTC register - ********************************************************************************* - */ - -unsigned int ds1302ramRead (const int addr) -{ - return ds1302regRead (0xC1 | ((addr & 0x1F) << 1)) ; -} - -void ds1302ramWrite (const int addr, const unsigned int data) -{ - ds1302regWrite ( 0xC0 | ((addr & 0x1F) << 1), data) ; -} - -/* - * ds1302clockRead: - * Read all 8 bytes of the clock in a single operation - ********************************************************************************* - */ - -void ds1302clockRead (int clockData [8]) -{ - int i ; - unsigned int regVal = 0x81 | ((RTC_BM & 0x1F) << 1) ; - - digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ; - - dsShiftOut (regVal) ; - for (i = 0 ; i < 8 ; ++i) - clockData [i] = dsShiftIn () ; - - digitalWrite (sPin, LOW) ; delayMicroseconds (1) ; -} - - -/* - * ds1302clockWrite: - * Write all 8 bytes of the clock in a single operation - ********************************************************************************* - */ - -void ds1302clockWrite (const int clockData [8]) -{ - int i ; - unsigned int regVal = 0x80 | ((RTC_BM & 0x1F) << 1) ; - - digitalWrite (sPin, HIGH) ; delayMicroseconds (1) ; - - dsShiftOut (regVal) ; - for (i = 0 ; i < 8 ; ++i) - dsShiftOut (clockData [i]) ; - - digitalWrite (sPin, LOW) ; delayMicroseconds (1) ; -} - - -/* - * ds1302trickleCharge: - * Set the bits on the trickle charger. - * Probably best left alone... - ********************************************************************************* - */ - -void ds1302trickleCharge (const int diodes, const int resistors) -{ - if (diodes + resistors == 0) - ds1302rtcWrite (RTC_TC, 0x5C) ; // Disabled - else - ds1302rtcWrite (RTC_TC, 0xA0 | ((diodes & 3) << 2) | (resistors & 3)) ; -} - - - - -/* - * ds1302setup: - * Initialise the chip & remember the pins we're using - ********************************************************************************* - */ - -void ds1302setup (const int clockPin, const int dataPin, const int csPin) -{ - dPin = dataPin ; - cPin = clockPin ; - sPin = csPin ; - - digitalWrite (dPin, LOW) ; - digitalWrite (cPin, LOW) ; - digitalWrite (sPin, LOW) ; - - pinMode (dPin, OUTPUT) ; - pinMode (cPin, OUTPUT) ; - pinMode (sPin, OUTPUT) ; - - ds1302rtcWrite (RTC_WP, 0) ; // Remove write-protect -} diff --git a/devLib/ds1302.h b/devLib/ds1302.h deleted file mode 100644 index e82b3ed..0000000 --- a/devLib/ds1302.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * ds1302.h: - * Real Time clock - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern unsigned int ds1302rtcRead (const int reg) ; -extern void ds1302rtcWrite (const int reg, const unsigned int data) ; - -extern unsigned int ds1302ramRead (const int addr) ; -extern void ds1302ramWrite (const int addr, const unsigned int data) ; - -extern void ds1302clockRead (int clockData [8]) ; -extern void ds1302clockWrite (const int clockData [8]) ; - -extern void ds1302trickleCharge (const int diodes, const int resistors) ; - -extern void ds1302setup (const int clockPin, const int dataPin, const int csPin) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/font.h b/devLib/font.h deleted file mode 100644 index ce99e16..0000000 --- a/devLib/font.h +++ /dev/null @@ -1,2577 +0,0 @@ -/**********************************************/ -/* */ -/* Font file generated by cpi2fnt */ -/* ------------------------------ */ -/* Combined with the alpha-numeric */ -/* portion of Greg Harp's old PEARL */ -/* font (from earlier versions of */ -/* linux-m86k) by John Shifflett */ -/* */ -/**********************************************/ - -static const int fontHeight = 8 ; -static const int fontWidth = 8 ; - -static unsigned char font [] = -{ - /* 0 0x00 '^@' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 1 0x01 '^A' */ - 0x7e, /* 01111110 */ - 0x81, /* 10000001 */ - 0xa5, /* 10100101 */ - 0x81, /* 10000001 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0x81, /* 10000001 */ - 0x7e, /* 01111110 */ - - /* 2 0x02 '^B' */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xdb, /* 11011011 */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - - /* 3 0x03 '^C' */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 4 0x04 '^D' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 5 0x05 '^E' */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - - /* 6 0x06 '^F' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - - /* 7 0x07 '^G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 8 0x08 '^H' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xe7, /* 11100111 */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 9 0x09 '^I' */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x42, /* 01000010 */ - 0x42, /* 01000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 10 0x0a '^J' */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0x99, /* 10011001 */ - 0xbd, /* 10111101 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0xc3, /* 11000011 */ - 0xff, /* 11111111 */ - - /* 11 0x0b '^K' */ - 0x0f, /* 00001111 */ - 0x07, /* 00000111 */ - 0x0f, /* 00001111 */ - 0x7d, /* 01111101 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - - /* 12 0x0c '^L' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - - /* 13 0x0d '^M' */ - 0x3f, /* 00111111 */ - 0x33, /* 00110011 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x70, /* 01110000 */ - 0xf0, /* 11110000 */ - 0xe0, /* 11100000 */ - - /* 14 0x0e '^N' */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x67, /* 01100111 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - - /* 15 0x0f '^O' */ - 0x18, /* 00011000 */ - 0xdb, /* 11011011 */ - 0x3c, /* 00111100 */ - 0xe7, /* 11100111 */ - 0xe7, /* 11100111 */ - 0x3c, /* 00111100 */ - 0xdb, /* 11011011 */ - 0x18, /* 00011000 */ - - /* 16 0x10 '^P' */ - 0x80, /* 10000000 */ - 0xe0, /* 11100000 */ - 0xf8, /* 11111000 */ - 0xfe, /* 11111110 */ - 0xf8, /* 11111000 */ - 0xe0, /* 11100000 */ - 0x80, /* 10000000 */ - 0x00, /* 00000000 */ - - /* 17 0x11 '^Q' */ - 0x02, /* 00000010 */ - 0x0e, /* 00001110 */ - 0x3e, /* 00111110 */ - 0xfe, /* 11111110 */ - 0x3e, /* 00111110 */ - 0x0e, /* 00001110 */ - 0x02, /* 00000010 */ - 0x00, /* 00000000 */ - - /* 18 0x12 '^R' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - - /* 19 0x13 '^S' */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - - /* 20 0x14 '^T' */ - 0x7f, /* 01111111 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7b, /* 01111011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x00, /* 00000000 */ - - /* 21 0x15 '^U' */ - 0x3e, /* 00111110 */ - 0x61, /* 01100001 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x86, /* 10000110 */ - 0x7c, /* 01111100 */ - - /* 22 0x16 '^V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 23 0x17 '^W' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - - /* 24 0x18 '^X' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 25 0x19 '^Y' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 26 0x1a '^Z' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 27 0x1b '^[' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 28 0x1c '^\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 29 0x1d '^]' */ - 0x00, /* 00000000 */ - 0x24, /* 00100100 */ - 0x66, /* 01100110 */ - 0xff, /* 11111111 */ - 0x66, /* 01100110 */ - 0x24, /* 00100100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 30 0x1e '^^' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 31 0x1f '^_' */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 32 0x20 ' ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 33 0x21 '!' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 34 0x22 '"' */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 35 0x23 '#' */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 36 0x24 '$' */ - 0x18, /* 00011000 */ - 0x3e, /* 00111110 */ - 0x60, /* 01100000 */ - 0x3c, /* 00111100 */ - 0x06, /* 00000110 */ - 0x7c, /* 01111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 37 0x25 '%' */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x66, /* 01100110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 38 0x26 '&' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x68, /* 01101000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 39 0x27 ''' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 40 0x28 '(' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 41 0x29 ')' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - - /* 42 0x2a '*' */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0xff, /* 11111111 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 43 0x2b '+' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 44 0x2c ',' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - - /* 45 0x2d '-' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 46 0x2e '.' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 47 0x2f '/' */ - 0x03, /* 00000011 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 48 0x30 '0' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xde, /* 11011110 */ - 0xfe, /* 11111110 */ - 0xf6, /* 11110110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 49 0x31 '1' */ - 0x18, /* 00011000 */ - 0x78, /* 01111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 50 0x32 '2' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 51 0x33 '3' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x06, /* 00000110 */ - 0x1c, /* 00011100 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 52 0x34 '4' */ - 0x1c, /* 00011100 */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 53 0x35 '5' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 54 0x36 '6' */ - 0x38, /* 00111000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 55 0x37 '7' */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - - /* 56 0x38 '8' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 57 0x39 '9' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 58 0x3a ':' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 59 0x3b ';' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - - /* 60 0x3c '<' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 61 0x3d '=' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 62 0x3e '>' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - - /* 63 0x3f '?' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 64 0x40 '@' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 65 0x41 'A' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 66 0x42 'B' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 67 0x43 'C' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 68 0x44 'D' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 69 0x45 'E' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 70 0x46 'F' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 71 0x47 'G' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 72 0x48 'H' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 73 0x49 'I' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 74 0x4a 'J' */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 75 0x4b 'K' */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xf0, /* 11110000 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 76 0x4c 'L' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 77 0x4d 'M' */ - 0x82, /* 10000010 */ - 0xc6, /* 11000110 */ - 0xee, /* 11101110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 78 0x4e 'N' */ - 0xc6, /* 11000110 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 79 0x4f 'O' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 80 0x50 'P' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 81 0x51 'Q' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - - /* 82 0x52 'R' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 83 0x53 'S' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x38, /* 00111000 */ - 0x0c, /* 00001100 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 84 0x54 'T' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 85 0x55 'U' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 86 0x56 'V' */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 87 0x57 'W' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0xee, /* 11101110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 88 0x58 'X' */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0xc3, /* 11000011 */ - 0x00, /* 00000000 */ - - /* 89 0x59 'Y' */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 90 0x5a 'Z' */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 91 0x5b '[' */ - 0x3c, /* 00111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 92 0x5c '\' */ - 0xc0, /* 11000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x03, /* 00000011 */ - 0x00, /* 00000000 */ - - /* 93 0x5d ']' */ - 0x3c, /* 00111100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 94 0x5e '^' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 95 0x5f '_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - - /* 96 0x60 '`' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 97 0x61 'a' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 98 0x62 'b' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 99 0x63 'c' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 100 0x64 'd' */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 101 0x65 'e' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 102 0x66 'f' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - - /* 103 0x67 'g' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x7c, /* 01111100 */ - - /* 104 0x68 'h' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 105 0x69 'i' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 106 0x6a 'j' */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - - /* 107 0x6b 'k' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xf0, /* 11110000 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - - /* 108 0x6c 'l' */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 109 0x6d 'm' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xec, /* 11101100 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 110 0x6e 'n' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 111 0x6f 'o' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 112 0x70 'p' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - - /* 113 0x71 'q' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - - /* 114 0x72 'r' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 115 0x73 's' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 116 0x74 't' */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x7c, /* 01111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x36, /* 00110110 */ - 0x1c, /* 00011100 */ - 0x00, /* 00000000 */ - - /* 117 0x75 'u' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 118 0x76 'v' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 119 0x77 'w' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 120 0x78 'x' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 121 0x79 'y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - - /* 122 0x7a 'z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 123 0x7b '{' */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x00, /* 00000000 */ - - /* 124 0x7c '|' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 125 0x7d '}' */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 126 0x7e '~' */ - 0x72, /* 01110010 */ - 0x9c, /* 10011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 127 0x7f '' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 128 0x80 '' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x0c, /* 00001100 */ - 0x78, /* 01111000 */ - - /* 129 0x81 '' */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 130 0x82 '' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 131 0x83 '' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 132 0x84 '' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 133 0x85 '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 134 0x86 '' */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 135 0x87 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x7e, /* 01111110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - - /* 136 0x88 '' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 137 0x89 '' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 138 0x8a '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 139 0x8b '' */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 140 0x8c '' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 141 0x8d '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 142 0x8e '' */ - 0xc6, /* 11000110 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 143 0x8f '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 144 0x90 '' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 145 0x91 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 146 0x92 '' */ - 0x3e, /* 00111110 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xce, /* 11001110 */ - 0x00, /* 00000000 */ - - /* 147 0x93 '' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 148 0x94 '' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 149 0x95 '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 150 0x96 '' */ - 0x78, /* 01111000 */ - 0x84, /* 10000100 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 151 0x97 '' */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 152 0x98 '' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0xfc, /* 11111100 */ - - /* 153 0x99 '' */ - 0xc6, /* 11000110 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 154 0x9a '' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 155 0x9b '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 156 0x9c '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x64, /* 01100100 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x66, /* 01100110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 157 0x9d '' */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 158 0x9e '' */ - 0xf8, /* 11111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xfa, /* 11111010 */ - 0xc6, /* 11000110 */ - 0xcf, /* 11001111 */ - 0xc6, /* 11000110 */ - 0xc7, /* 11000111 */ - - /* 159 0x9f '' */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 160 0xa0 '' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 161 0xa1 '' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 162 0xa2 '' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 163 0xa3 '' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 164 0xa4 '' */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - - /* 165 0xa5 '' */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0x00, /* 00000000 */ - - /* 166 0xa6 '' */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 167 0xa7 '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 168 0xa8 '' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x63, /* 01100011 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - - /* 169 0xa9 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 170 0xaa '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 171 0xab '' */ - 0x63, /* 01100011 */ - 0xe6, /* 11100110 */ - 0x6c, /* 01101100 */ - 0x7e, /* 01111110 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x0f, /* 00001111 */ - - /* 172 0xac '' */ - 0x63, /* 01100011 */ - 0xe6, /* 11100110 */ - 0x6c, /* 01101100 */ - 0x7a, /* 01111010 */ - 0x36, /* 00110110 */ - 0x6a, /* 01101010 */ - 0xdf, /* 11011111 */ - 0x06, /* 00000110 */ - - /* 173 0xad '' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 174 0xae '' */ - 0x00, /* 00000000 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x66, /* 01100110 */ - 0x33, /* 00110011 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 175 0xaf '' */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0x66, /* 01100110 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 176 0xb0 '' */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - - /* 177 0xb1 '' */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - - /* 178 0xb2 '' */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - - /* 179 0xb3 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 180 0xb4 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 181 0xb5 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 182 0xb6 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 183 0xb7 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 184 0xb8 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 185 0xb9 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 186 0xba '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 187 0xbb '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 188 0xbc '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 189 0xbd '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 190 0xbe '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 191 0xbf '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 192 0xc0 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 193 0xc1 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 194 0xc2 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 195 0xc3 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 196 0xc4 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 197 0xc5 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 198 0xc6 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 199 0xc7 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 200 0xc8 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 201 0xc9 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 202 0xca '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 203 0xcb '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 204 0xcc '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 205 0xcd '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 206 0xce '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 207 0xcf '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 208 0xd0 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 209 0xd1 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 210 0xd2 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 211 0xd3 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 212 0xd4 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 213 0xd5 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 214 0xd6 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 215 0xd7 '' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 216 0xd8 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 217 0xd9 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 218 0xda '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 219 0xdb '' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 220 0xdc '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 221 0xdd '' */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - - /* 222 0xde '' */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - - /* 223 0xdf '' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 224 0xe0 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xc8, /* 11001000 */ - 0xdc, /* 11011100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 225 0xe1 '' */ - 0x78, /* 01111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - - /* 226 0xe2 '' */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 227 0xe3 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 228 0xe4 '' */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 229 0xe5 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 230 0xe6 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0xc0, /* 11000000 */ - - /* 231 0xe7 '' */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 232 0xe8 '' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - - /* 233 0xe9 '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 234 0xea '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xee, /* 11101110 */ - 0x00, /* 00000000 */ - - /* 235 0xeb '' */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x3e, /* 00111110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 236 0xec '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 237 0xed '' */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7e, /* 01111110 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - - /* 238 0xee '' */ - 0x1e, /* 00011110 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x7e, /* 01111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x1e, /* 00011110 */ - 0x00, /* 00000000 */ - - /* 239 0xef '' */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 240 0xf0 '' */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 241 0xf1 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 242 0xf2 '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 243 0xf3 '' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 244 0xf4 '' */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 245 0xf5 '' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - - /* 246 0xf6 '' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 247 0xf7 '' */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 248 0xf8 '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 249 0xf9 '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 250 0xfa '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 251 0xfb '' */ - 0x0f, /* 00001111 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0xec, /* 11101100 */ - 0x6c, /* 01101100 */ - 0x3c, /* 00111100 */ - 0x1c, /* 00011100 */ - - /* 252 0xfc '' */ - 0x6c, /* 01101100 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 253 0xfd '' */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 254 0xfe '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 255 0xff '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - -}; diff --git a/devLib/gertboard.c b/devLib/gertboard.c deleted file mode 100644 index 6a84415..0000000 --- a/devLib/gertboard.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * gertboard.c: - * Access routines for the SPI devices on the Gertboard - * Copyright (c) 2012 Gordon Henderson - * - * The Gertboard has: - * - * An MCP3002 dual-channel A to D convertor connected - * to the SPI bus, selected by chip-select A, and: - * - * An MCP4802 dual-channel D to A convertor connected - * to the SPI bus, selected via chip-select B. - * - *********************************************************************** - * 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 . - *********************************************************************** - */ - - -#include -#include -#include -#include -#include - -#include -#include - -#include "gertboard.h" - -// The A-D convertor won't run at more than 1MHz @ 3.3v - -#define SPI_ADC_SPEED 1000000 -#define SPI_DAC_SPEED 1000000 -#define SPI_A2D 0 -#define SPI_D2A 1 - - -/* - * gertboardAnalogWrite: - * Write an 8-bit data value to the MCP4802 Analog to digital - * convertor on the Gertboard. - ********************************************************************************* - */ - -void gertboardAnalogWrite (const int chan, const int value) -{ - uint8_t spiData [2] ; - uint8_t chanBits, dataBits ; - - if (chan == 0) - chanBits = 0x30 ; - else - chanBits = 0xB0 ; - - chanBits |= ((value >> 4) & 0x0F) ; - dataBits = ((value << 4) & 0xF0) ; - - spiData [0] = chanBits ; - spiData [1] = dataBits ; - - wiringPiSPIDataRW (SPI_D2A, spiData, 2) ; -} - - -/* - * gertboardAnalogRead: - * Return the analog value of the given channel (0/1). - * The A/D is a 10-bit device - ********************************************************************************* - */ - -int gertboardAnalogRead (const int chan) -{ - uint8_t spiData [2] ; - - uint8_t chanBits ; - - if (chan == 0) - chanBits = 0b11010000 ; - else - chanBits = 0b11110000 ; - - spiData [0] = chanBits ; - spiData [1] = 0 ; - - wiringPiSPIDataRW (SPI_A2D, spiData, 2) ; - - return ((spiData [0] << 8) | (spiData [1] >> 1)) & 0x3FF ; -} - - -/* - * gertboardSPISetup: - * Initialise the SPI bus, etc. - ********************************************************************************* - */ - -int gertboardSPISetup (void) -{ - if (wiringPiSPISetup (SPI_A2D, SPI_ADC_SPEED) < 0) - return -1 ; - - if (wiringPiSPISetup (SPI_D2A, SPI_DAC_SPEED) < 0) - return -1 ; - - return 0 ; -} - - -/* - * New wiringPi node extension methods. - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, const int chan) -{ - return gertboardAnalogRead (chan - node->pinBase) ; -} - -static void myAnalogWrite (struct wiringPiNodeStruct *node, const int chan, const int value) -{ - gertboardAnalogWrite (chan - node->pinBase, value) ; -} - - -/* - * gertboardAnalogSetup: - * Create a new wiringPi device node for the analog devices on the - * Gertboard. We create one node with 2 pins - each pin being read - * and write - although the operations actually go to different - * hardware devices. - ********************************************************************************* - */ - -int gertboardAnalogSetup (const int pinBase) -{ - struct wiringPiNodeStruct *node ; - int x ; - - if (( x = gertboardSPISetup ()) != 0) - return x; - - node = wiringPiNewNode (pinBase, 2) ; - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - - return 0 ; -} diff --git a/devLib/gertboard.h b/devLib/gertboard.h deleted file mode 100644 index 3fa1919..0000000 --- a/devLib/gertboard.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * gertboard.h: - * Access routines for the SPI devices on the Gertboard - * Copyright (c) 2012 Gordon Henderson - * - * The Gertboard has an MCP4802 dual-channel D to A convertor - * connected to the SPI bus, selected via chip-select B. - * - *********************************************************************** - * 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -// Old routines - -extern void gertboardAnalogWrite (const int chan, const int value) ; -extern int gertboardAnalogRead (const int chan) ; -extern int gertboardSPISetup (void) ; - -// New - -extern int gertboardAnalogSetup (const int pinBase) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/lcd.c b/devLib/lcd.c deleted file mode 100644 index 6c0e474..0000000 --- a/devLib/lcd.c +++ /dev/null @@ -1,495 +0,0 @@ -/* - * lcd.c: - * Text-based LCD driver. - * This is designed to drive the parallel interface LCD drivers - * based in the Hitachi HD44780U controller and compatables. - * - * Copyright (c) 2012 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include - -#include "lcd.h" - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (1==2) -#endif - -// HD44780U Commands - -#define LCD_CLEAR 0x01 -#define LCD_HOME 0x02 -#define LCD_ENTRY 0x04 -#define LCD_CTRL 0x08 -#define LCD_CDSHIFT 0x10 -#define LCD_FUNC 0x20 -#define LCD_CGRAM 0x40 -#define LCD_DGRAM 0x80 - -// Bits in the entry register - -#define LCD_ENTRY_SH 0x01 -#define LCD_ENTRY_ID 0x02 - -// Bits in the control register - -#define LCD_BLINK_CTRL 0x01 -#define LCD_CURSOR_CTRL 0x02 -#define LCD_DISPLAY_CTRL 0x04 - -// Bits in the function register - -#define LCD_FUNC_F 0x04 -#define LCD_FUNC_N 0x08 -#define LCD_FUNC_DL 0x10 - -#define LCD_CDSHIFT_RL 0x04 - -struct lcdDataStruct -{ - int bits, rows, cols ; - int rsPin, strbPin ; - int dataPins [8] ; - int cx, cy ; -} ; - -struct lcdDataStruct *lcds [MAX_LCDS] ; - -static int lcdControl ; - -// Row offsets - -static const int rowOff [4] = { 0x00, 0x40, 0x14, 0x54 } ; - - -/* - * strobe: - * Toggle the strobe (Really the "E") pin to the device. - * According to the docs, data is latched on the falling edge. - ********************************************************************************* - */ - -static void strobe (const struct lcdDataStruct *lcd) -{ - -// Note timing changes for new version of delayMicroseconds () - - digitalWrite (lcd->strbPin, 1) ; delayMicroseconds (50) ; - digitalWrite (lcd->strbPin, 0) ; delayMicroseconds (50) ; -} - - -/* - * sentDataCmd: - * Send an data or command byte to the display. - ********************************************************************************* - */ - -static void sendDataCmd (const struct lcdDataStruct *lcd, unsigned char data) -{ - register unsigned char myData = data ; - unsigned char i, d4 ; - - if (lcd->bits == 4) - { - d4 = (myData >> 4) & 0x0F; - for (i = 0 ; i < 4 ; ++i) - { - digitalWrite (lcd->dataPins [i], (d4 & 1)) ; - d4 >>= 1 ; - } - strobe (lcd) ; - - d4 = myData & 0x0F ; - for (i = 0 ; i < 4 ; ++i) - { - digitalWrite (lcd->dataPins [i], (d4 & 1)) ; - d4 >>= 1 ; - } - } - else - { - for (i = 0 ; i < 8 ; ++i) - { - digitalWrite (lcd->dataPins [i], (myData & 1)) ; - myData >>= 1 ; - } - } - strobe (lcd) ; -} - - -/* - * putCommand: - * Send a command byte to the display - ********************************************************************************* - */ - -static void putCommand (const struct lcdDataStruct *lcd, unsigned char command) -{ - digitalWrite (lcd->rsPin, 0) ; - sendDataCmd (lcd, command) ; - delay (2) ; -} - -static void put4Command (const struct lcdDataStruct *lcd, unsigned char command) -{ - register unsigned char myCommand = command ; - register unsigned char i ; - - digitalWrite (lcd->rsPin, 0) ; - - for (i = 0 ; i < 4 ; ++i) - { - digitalWrite (lcd->dataPins [i], (myCommand & 1)) ; - myCommand >>= 1 ; - } - strobe (lcd) ; -} - - -/* - ********************************************************************************* - * User Callable code below here - ********************************************************************************* - */ - -/* - * lcdHome: lcdClear: - * Home the cursor or clear the screen. - ********************************************************************************* - */ - -void lcdHome (const int fd) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - putCommand (lcd, LCD_HOME) ; - lcd->cx = lcd->cy = 0 ; - delay (5) ; -} - -void lcdClear (const int fd) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - putCommand (lcd, LCD_CLEAR) ; - putCommand (lcd, LCD_HOME) ; - lcd->cx = lcd->cy = 0 ; - delay (5) ; -} - - -/* - * lcdDisplay: lcdCursor: lcdCursorBlink: - * Turn the display, cursor, cursor blinking on/off - ********************************************************************************* - */ - -void lcdDisplay (const int fd, int state) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - if (state) - lcdControl |= LCD_DISPLAY_CTRL ; - else - lcdControl &= ~LCD_DISPLAY_CTRL ; - - putCommand (lcd, LCD_CTRL | lcdControl) ; -} - -void lcdCursor (const int fd, int state) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - if (state) - lcdControl |= LCD_CURSOR_CTRL ; - else - lcdControl &= ~LCD_CURSOR_CTRL ; - - putCommand (lcd, LCD_CTRL | lcdControl) ; -} - -void lcdCursorBlink (const int fd, int state) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - if (state) - lcdControl |= LCD_BLINK_CTRL ; - else - lcdControl &= ~LCD_BLINK_CTRL ; - - putCommand (lcd, LCD_CTRL | lcdControl) ; -} - - -/* - * lcdSendCommand: - * Send any arbitary command to the display - ********************************************************************************* - */ - -void lcdSendCommand (const int fd, unsigned char command) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - putCommand (lcd, command) ; -} - - -/* - * lcdPosition: - * Update the position of the cursor on the display. - * Ignore invalid locations. - ********************************************************************************* - */ - -void lcdPosition (const int fd, int x, int y) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - if ((x > lcd->cols) || (x < 0)) - return ; - if ((y > lcd->rows) || (y < 0)) - return ; - - putCommand (lcd, x + (LCD_DGRAM | rowOff [y])) ; - - lcd->cx = x ; - lcd->cy = y ; -} - - -/* - * lcdCharDef: - * Defines a new character in the CGRAM - ********************************************************************************* - */ - -void lcdCharDef (const int fd, int index, unsigned char data [8]) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - int i ; - - putCommand (lcd, LCD_CGRAM | ((index & 7) << 3)) ; - - digitalWrite (lcd->rsPin, 1) ; - for (i = 0 ; i < 8 ; ++i) - sendDataCmd (lcd, data [i]) ; -} - - -/* - * lcdPutchar: - * Send a data byte to be displayed on the display. We implement a very - * simple terminal here - with line wrapping, but no scrolling. Yet. - ********************************************************************************* - */ - -void lcdPutchar (const int fd, unsigned char data) -{ - struct lcdDataStruct *lcd = lcds [fd] ; - - digitalWrite (lcd->rsPin, 1) ; - sendDataCmd (lcd, data) ; - - if (++lcd->cx == lcd->cols) - { - lcd->cx = 0 ; - if (++lcd->cy == lcd->rows) - lcd->cy = 0 ; - - putCommand (lcd, lcd->cx + (LCD_DGRAM | rowOff [lcd->cy])) ; - } -} - - -/* - * lcdPuts: - * Send a string to be displayed on the display - ********************************************************************************* - */ - -void lcdPuts (const int fd, const char *string) -{ - while (*string) - lcdPutchar (fd, *string++) ; -} - - -/* - * lcdPrintf: - * Printf to an LCD display - ********************************************************************************* - */ - -void lcdPrintf (const int fd, const char *message, ...) -{ - va_list argp ; - char buffer [1024] ; - - va_start (argp, message) ; - vsnprintf (buffer, 1023, message, argp) ; - va_end (argp) ; - - lcdPuts (fd, buffer) ; -} - - -/* - * lcdInit: - * Take a lot of parameters and initialise the LCD, and return a handle to - * that LCD, or -1 if any error. - ********************************************************************************* - */ - -int lcdInit (const int rows, const int cols, const int bits, - const int rs, const int strb, - const int d0, const int d1, const int d2, const int d3, const int d4, - const int d5, const int d6, const int d7) -{ - static int initialised = 0 ; - - unsigned char func ; - int i ; - int lcdFd = -1 ; - struct lcdDataStruct *lcd ; - - if (initialised == 0) - { - initialised = 1 ; - for (i = 0 ; i < MAX_LCDS ; ++i) - lcds [i] = NULL ; - } - -// Simple sanity checks - - if (! ((bits == 4) || (bits == 8))) - return -1 ; - - if ((rows < 0) || (rows > 20)) - return -1 ; - - if ((cols < 0) || (cols > 20)) - return -1 ; - -// Create a new LCD: - - for (i = 0 ; i < MAX_LCDS ; ++i) - { - if (lcds [i] == NULL) - { - lcdFd = i ; - break ; - } - } - - if (lcdFd == -1) - return -1 ; - - lcd = (struct lcdDataStruct *)malloc (sizeof (struct lcdDataStruct)) ; - if (lcd == NULL) - return -1 ; - - lcd->rsPin = rs ; - lcd->strbPin = strb ; - lcd->bits = 8 ; // For now - we'll set it properly later. - lcd->rows = rows ; - lcd->cols = cols ; - lcd->cx = 0 ; - lcd->cy = 0 ; - - lcd->dataPins [0] = d0 ; - lcd->dataPins [1] = d1 ; - lcd->dataPins [2] = d2 ; - lcd->dataPins [3] = d3 ; - lcd->dataPins [4] = d4 ; - lcd->dataPins [5] = d5 ; - lcd->dataPins [6] = d6 ; - lcd->dataPins [7] = d7 ; - - lcds [lcdFd] = lcd ; - - digitalWrite (lcd->rsPin, 0) ; pinMode (lcd->rsPin, OUTPUT) ; - digitalWrite (lcd->strbPin, 0) ; pinMode (lcd->strbPin, OUTPUT) ; - - for (i = 0 ; i < bits ; ++i) - { - digitalWrite (lcd->dataPins [i], 0) ; - pinMode (lcd->dataPins [i], OUTPUT) ; - } - delay (35) ; // mS - - -// 4-bit mode? -// OK. This is a PIG and it's not at all obvious from the documentation I had, -// so I guess some others have worked through either with better documentation -// or more trial and error... Anyway here goes: -// -// It seems that the controller needs to see the FUNC command at least 3 times -// consecutively - in 8-bit mode. If you're only using 8-bit mode, then it appears -// that you can get away with one func-set, however I'd not rely on it... -// -// So to set 4-bit mode, you need to send the commands one nibble at a time, -// the same three times, but send the command to set it into 8-bit mode those -// three times, then send a final 4th command to set it into 4-bit mode, and only -// then can you flip the switch for the rest of the library to work in 4-bit -// mode which sends the commands as 2 x 4-bit values. - - if (bits == 4) - { - func = LCD_FUNC | LCD_FUNC_DL ; // Set 8-bit mode 3 times - put4Command (lcd, func >> 4) ; delay (35) ; - put4Command (lcd, func >> 4) ; delay (35) ; - put4Command (lcd, func >> 4) ; delay (35) ; - func = LCD_FUNC ; // 4th set: 4-bit mode - put4Command (lcd, func >> 4) ; delay (35) ; - lcd->bits = 4 ; - } - else - { - func = LCD_FUNC | LCD_FUNC_DL ; - putCommand (lcd, func ) ; delay (35) ; - putCommand (lcd, func ) ; delay (35) ; - putCommand (lcd, func ) ; delay (35) ; - } - - if (lcd->rows > 1) - { - func |= LCD_FUNC_N ; - putCommand (lcd, func) ; delay (35) ; - } - -// Rest of the initialisation sequence - - lcdDisplay (lcdFd, TRUE) ; - lcdCursor (lcdFd, FALSE) ; - lcdCursorBlink (lcdFd, FALSE) ; - lcdClear (lcdFd) ; - - putCommand (lcd, LCD_ENTRY | LCD_ENTRY_ID) ; - putCommand (lcd, LCD_CDSHIFT | LCD_CDSHIFT_RL) ; - - return lcdFd ; -} diff --git a/devLib/lcd.h b/devLib/lcd.h deleted file mode 100644 index 0a0e598..0000000 --- a/devLib/lcd.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * lcd.h: - * Text-based LCD driver. - * This is designed to drive the parallel interface LCD drivers - * based in the Hitachi HD44780U controller and compatables. - * - * Copyright (c) 2012 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 . - *********************************************************************** - */ - -#define MAX_LCDS 8 - -#ifdef __cplusplus -extern "C" { -#endif - -extern void lcdHome (const int fd) ; -extern void lcdClear (const int fd) ; -extern void lcdDisplay (const int fd, int state) ; -extern void lcdCursor (const int fd, int state) ; -extern void lcdCursorBlink (const int fd, int state) ; -extern void lcdSendCommand (const int fd, unsigned char command) ; -extern void lcdPosition (const int fd, int x, int y) ; -extern void lcdCharDef (const int fd, int index, unsigned char data [8]) ; -extern void lcdPutchar (const int fd, unsigned char data) ; -extern void lcdPuts (const int fd, const char *string) ; -extern void lcdPrintf (const int fd, const char *message, ...) ; - -extern int lcdInit (const int rows, const int cols, const int bits, - const int rs, const int strb, - const int d0, const int d1, const int d2, const int d3, const int d4, - const int d5, const int d6, const int d7) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/lcd128x64.c b/devLib/lcd128x64.c deleted file mode 100644 index accd5c3..0000000 --- a/devLib/lcd128x64.c +++ /dev/null @@ -1,673 +0,0 @@ -/* - * lcd128x64.c: - * Graphics-based LCD driver. - * This is designed to drive the parallel interface LCD drivers - * based on the generic 12864H chips - * - * There are many variations on these chips, however they all mostly - * seem to be similar. - * This implementation has the Pins from the Pi hard-wired into it, - * in particular wiringPi pins 0-7 so that we can use - * digitalWriteByete() to speed things up somewhat. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include - -#include "font.h" -#include "lcd128x64.h" - -// Size - -#define LCD_WIDTH 128 -#define LCD_HEIGHT 64 - -// Hardware Pins -// Note pins 0-7 are the 8-bit data port - -#define CS1 10 -#define CS2 11 -#define STROBE 12 -#define RS 13 - -// Software copy of the framebuffer -// it's 8-bit deep although the display itself is only 1-bit deep. - -static unsigned char frameBuffer [LCD_WIDTH * LCD_HEIGHT] ; - -static int maxX, maxY ; -static int lastX, lastY ; -static int xOrigin, yOrigin ; -static int lcdOrientation = 0 ; - -/* - * strobe: - * Toggle the strobe (Really the "E") pin to the device. - * According to the docs, data is latched on the falling edge. - ********************************************************************************* - */ - -static void strobe (void) -{ - digitalWrite (STROBE, 1) ; delayMicroseconds (1) ; - digitalWrite (STROBE, 0) ; delayMicroseconds (5) ; -} - - -/* - * sentData: - * Send an data or command byte to the display. - ********************************************************************************* - */ - -static void sendData (const int data, const int chip) -{ - digitalWrite (chip, 0) ; - digitalWriteByte (data) ; - strobe () ; - digitalWrite (chip, 1) ; -} - - -/* - * sendCommand: - * Send a command byte to the display - ********************************************************************************* - */ - -static void sendCommand (const int command, const int chip) -{ - digitalWrite (RS, 0) ; - sendData (command, chip) ; - digitalWrite (RS, 1) ; -} - - -/* - * setCol: SetLine: - * Set the column and line addresses - ********************************************************************************* - */ - -static void setCol (int col, const int chip) - { sendCommand (0x40 | (col & 0x3F), chip) ; } - -static void setLine (int line, const int chip) - { sendCommand (0xB8 | (line & 0x07), chip) ; } - - -/* - * lcd128x64update: - * Copy our software version to the real display - ********************************************************************************* - */ - -void lcd128x64update (void) -{ - int line, x, y, fbLoc ; - unsigned char byte ; - -// Left side - - for (line = 0 ; line < 8 ; ++line) - { - setCol (0, CS1) ; - setLine (line, CS1) ; - - for (x = 63 ; x >= 0 ; --x) - { - byte = 0 ; - for (y = 0 ; y < 8 ; ++y) - { - fbLoc = x + (((7 - line) * 8) + (7 - y)) * LCD_WIDTH ; - if (frameBuffer [fbLoc] != 0) - byte |= (1 << y) ; - } - sendData (byte, CS1) ; - } - } - -// Right side - - for (line = 0 ; line < 8 ; ++line) - { - setCol (0, CS2) ; - setLine (line, CS2) ; - - for (x = 127 ; x >= 64 ; --x) - { - byte = 0 ; - for (y = 0 ; y < 8 ; ++y) - { - fbLoc = x + (((7 - line) * 8) + (7 - y)) * LCD_WIDTH ; - if (frameBuffer [fbLoc] != 0) - byte |= (1 << y) ; - } - sendData (byte, CS2) ; - } - } -} - - -/* - * lcd128x64setOrigin: - * Set the display offset origin - ********************************************************************************* - */ - -void lcd128x64setOrigin (int x, int y) -{ - xOrigin = x ; - yOrigin = y ; -} - - -/* - * lcd128x64setOrientation: - * Set the display orientation: - * 0: Normal, the display is portrait mode, 0,0 is top left - * 1: Landscape - * 2: Portrait, flipped - * 3: Landscape, flipped - ********************************************************************************* - */ - -void lcd128x64setOrientation (int orientation) -{ - lcdOrientation = orientation & 3 ; - - lcd128x64setOrigin (0,0) ; - - switch (lcdOrientation) - { - case 0: - maxX = LCD_WIDTH ; - maxY = LCD_HEIGHT ; - break ; - - case 1: - maxX = LCD_HEIGHT ; - maxY = LCD_WIDTH ; - break ; - - case 2: - maxX = LCD_WIDTH ; - maxY = LCD_HEIGHT ; - break ; - - case 3: - maxX = LCD_HEIGHT ; - maxY = LCD_WIDTH ; - break ; - } -} - - -/* - * lcd128x64orientCoordinates: - * Adjust the coordinates given to the display orientation - ********************************************************************************* - */ - -void lcd128x64orientCoordinates (int *x, int *y) -{ - register int tmp ; - - *x += xOrigin ; - *y += yOrigin ; - *y = maxY - *y - 1 ; - - switch (lcdOrientation) - { - case 0: - break; - - case 1: - tmp = maxY - *y - 1 ; - *y = *x ; - *x = tmp ; - break; - - case 2: - *x = maxX - *x - 1 ; - *y = maxY - *y - 1 ; - break; - - case 3: - *x = maxX - *x - 1 ; - tmp = *y ; - *y = *x ; - *x = tmp ; - break ; - } -} - - -/* - * lcd128x64getScreenSize: - * Return the max X & Y screen sizes. Needs to be called again, if you - * change screen orientation. - ********************************************************************************* - */ - -void lcd128x64getScreenSize (int *x, int *y) -{ - *x = maxX ; - *y = maxY ; -} - - -/* - ********************************************************************************* - * Standard Graphical Functions - ********************************************************************************* - */ - - -/* - * lcd128x64point: - * Plot a pixel. - ********************************************************************************* - */ - -void lcd128x64point (int x, int y, int colour) -{ - lastX = x ; - lastY = y ; - - lcd128x64orientCoordinates (&x, &y) ; - - if ((x < 0) || (x >= LCD_WIDTH) || (y < 0) || (y >= LCD_HEIGHT)) - return ; - - frameBuffer [x + y * LCD_WIDTH] = colour ; -} - - -/* - * lcd128x64line: lcd128x64lineTo: - * Classic Bressenham Line code - ********************************************************************************* - */ - -void lcd128x64line (int x0, int y0, int x1, int y1, int colour) -{ - int dx, dy ; - int sx, sy ; - int err, e2 ; - - lastX = x1 ; - lastY = y1 ; - - dx = abs (x1 - x0) ; - dy = abs (y1 - y0) ; - - sx = (x0 < x1) ? 1 : -1 ; - sy = (y0 < y1) ? 1 : -1 ; - - err = dx - dy ; - - for (;;) - { - lcd128x64point (x0, y0, colour) ; - - if ((x0 == x1) && (y0 == y1)) - break ; - - e2 = 2 * err ; - - if (e2 > -dy) - { - err -= dy ; - x0 += sx ; - } - - if (e2 < dx) - { - err += dx ; - y0 += sy ; - } - } - -} - -void lcd128x64lineTo (int x, int y, int colour) -{ - lcd128x64line (lastX, lastY, x, y, colour) ; -} - - -/* - * lcd128x64rectangle: - * A rectangle is a spoilt days fishing - ********************************************************************************* - */ - -void lcd128x64rectangle (int x1, int y1, int x2, int y2, int colour, int filled) -{ - register int x ; - - if (filled) - { - /**/ if (x1 == x2) - lcd128x64line (x1, y1, x2, y2, colour) ; - else if (x1 < x2) - for (x = x1 ; x <= x2 ; ++x) - lcd128x64line (x, y1, x, y2, colour) ; - else - for (x = x2 ; x <= x1 ; ++x) - lcd128x64line (x, y1, x, y2, colour) ; - } - else - { - lcd128x64line (x1, y1, x2, y1, colour) ; - lcd128x64lineTo (x2, y2, colour) ; - lcd128x64lineTo (x1, y2, colour) ; - lcd128x64lineTo (x1, y1, colour) ; - } -} - - -/* - * lcd128x64circle: - * This is the midpoint circle algorithm. - ********************************************************************************* - */ - -void lcd128x64circle (int x, int y, int r, int colour, int filled) -{ - int ddF_x = 1 ; - int ddF_y = -2 * r ; - - int f = 1 - r ; - int x1 = 0 ; - int y1 = r ; - - if (filled) - { - lcd128x64line (x, y + r, x, y - r, colour) ; - lcd128x64line (x + r, y, x - r, y, colour) ; - } - else - { - lcd128x64point (x, y + r, colour) ; - lcd128x64point (x, y - r, colour) ; - lcd128x64point (x + r, y, colour) ; - lcd128x64point (x - r, y, colour) ; - } - - while (x1 < y1) - { - if (f >= 0) - { - y1-- ; - ddF_y += 2 ; - f += ddF_y ; - } - x1++ ; - ddF_x += 2 ; - f += ddF_x ; - if (filled) - { - lcd128x64line (x + x1, y + y1, x - x1, y + y1, colour) ; - lcd128x64line (x + x1, y - y1, x - x1, y - y1, colour) ; - lcd128x64line (x + y1, y + x1, x - y1, y + x1, colour) ; - lcd128x64line (x + y1, y - x1, x - y1, y - x1, colour) ; - } - else - { - lcd128x64point (x + x1, y + y1, colour) ; lcd128x64point (x - x1, y + y1, colour) ; - lcd128x64point (x + x1, y - y1, colour) ; lcd128x64point (x - x1, y - y1, colour) ; - lcd128x64point (x + y1, y + x1, colour) ; lcd128x64point (x - y1, y + x1, colour) ; - lcd128x64point (x + y1, y - x1, colour) ; lcd128x64point (x - y1, y - x1, colour) ; - } - } -} - - -/* - * lcd128x64ellipse: - * Fast ellipse drawing algorithm by - * John Kennedy - * Mathematics Department - * Santa Monica College - * 1900 Pico Blvd. - * Santa Monica, CA 90405 - * jrkennedy6@gmail.com - * -Confirned in email this algorithm is in the public domain -GH- - ********************************************************************************* - */ - -static void plot4ellipsePoints (int cx, int cy, int x, int y, int colour, int filled) -{ - if (filled) - { - lcd128x64line (cx + x, cy + y, cx - x, cy + y, colour) ; - lcd128x64line (cx - x, cy - y, cx + x, cy - y, colour) ; - } - else - { - lcd128x64point (cx + x, cy + y, colour) ; - lcd128x64point (cx - x, cy + y, colour) ; - lcd128x64point (cx - x, cy - y, colour) ; - lcd128x64point (cx + x, cy - y, colour) ; - } -} - -void lcd128x64ellipse (int cx, int cy, int xRadius, int yRadius, int colour, int filled) -{ - int x, y ; - int xChange, yChange, ellipseError ; - int twoAsquare, twoBsquare ; - int stoppingX, stoppingY ; - - twoAsquare = 2 * xRadius * xRadius ; - twoBsquare = 2 * yRadius * yRadius ; - - x = xRadius ; - y = 0 ; - - xChange = yRadius * yRadius * (1 - 2 * xRadius) ; - yChange = xRadius * xRadius ; - - ellipseError = 0 ; - stoppingX = twoBsquare * xRadius ; - stoppingY = 0 ; - - while (stoppingX >= stoppingY) // 1st set of points - { - plot4ellipsePoints (cx, cy, x, y, colour, filled) ; - ++y ; - stoppingY += twoAsquare ; - ellipseError += yChange ; - yChange += twoAsquare ; - - if ((2 * ellipseError + xChange) > 0 ) - { - --x ; - stoppingX -= twoBsquare ; - ellipseError += xChange ; - xChange += twoBsquare ; - } - } - - x = 0 ; - y = yRadius ; - - xChange = yRadius * yRadius ; - yChange = xRadius * xRadius * (1 - 2 * yRadius) ; - - ellipseError = 0 ; - stoppingX = 0 ; - stoppingY = twoAsquare * yRadius ; - - while (stoppingX <= stoppingY) //2nd set of points - { - plot4ellipsePoints (cx, cy, x, y, colour, filled) ; - ++x ; - stoppingX += twoBsquare ; - ellipseError += xChange ; - xChange += twoBsquare ; - - if ((2 * ellipseError + yChange) > 0 ) - { - --y ; - stoppingY -= twoAsquare ; - ellipseError += yChange ; - yChange += twoAsquare ; - } - } -} - - -/* - * lcd128x64putchar: - * Print a single character to the screen - ********************************************************************************* - */ - -void lcd128x64putchar (int x, int y, int c, int bgCol, int fgCol) -{ - int y1, y2 ; - - unsigned char line ; - unsigned char *fontPtr ; - -// Can't print if we're offscreen - -//if ((x < 0) || (x >= (maxX - fontWidth)) || (y < 0) || (y >= (maxY - fontHeight))) -// return ; - - fontPtr = font + c * fontHeight ; - - for (y1 = fontHeight - 1 ; y1 >= 0 ; --y1) - { - y2 = y + y1 ; - line = *fontPtr++ ; - lcd128x64point (x + 0, y2, (line & 0x80) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 1, y2, (line & 0x40) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 2, y2, (line & 0x20) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 3, y2, (line & 0x10) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 4, y2, (line & 0x08) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 5, y2, (line & 0x04) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 6, y2, (line & 0x02) == 0 ? bgCol : fgCol) ; - lcd128x64point (x + 7, y2, (line & 0x01) == 0 ? bgCol : fgCol) ; - } -} - - -/* - * lcd128x64puts: - * Send a string to the display. Obeys \n and \r formatting - ********************************************************************************* - */ - -void lcd128x64puts (int x, int y, const char *str, int bgCol, int fgCol) -{ - int c, mx, my ; - - mx = x ; my = y ; - - while (*str) - { - c = *str++ ; - - if (c == '\r') - { - mx = x ; - continue ; - } - - if (c == '\n') - { - mx = x ; - my -= fontHeight ; - continue ; - } - - lcd128x64putchar (mx, my, c, bgCol, fgCol) ; - - mx += fontWidth ; - if (mx >= (maxX - fontWidth)) - { - mx = 0 ; - my -= fontHeight ; - } - } -} - - -/* - * lcd128x64clear: - * Clear the display to the given colour. - ********************************************************************************* - */ - -void lcd128x64clear (int colour) -{ - register int i ; - register unsigned char *ptr = frameBuffer ; - - for (i = 0 ; i < (maxX * maxY) ; ++i) - *ptr++ = colour ; -} - - - - -/* - * lcd128x64setup: - * Initialise the display and GPIO. - ********************************************************************************* - */ - -int lcd128x64setup (void) -{ - int i ; - - for (i = 0 ; i < 8 ; ++i) - pinMode (i, OUTPUT) ; - - digitalWrite (CS1, 1) ; - digitalWrite (CS2, 1) ; - digitalWrite (STROBE, 0) ; - digitalWrite (RS, 1) ; - - pinMode (CS1, OUTPUT) ; - pinMode (CS2, OUTPUT) ; - pinMode (STROBE, OUTPUT) ; - pinMode (RS, OUTPUT) ; - - sendCommand (0x3F, CS1) ; // Display ON - sendCommand (0xC0, CS1) ; // Set display start line to 0 - - sendCommand (0x3F, CS2) ; // Display ON - sendCommand (0xC0, CS2) ; // Set display start line to 0 - - lcd128x64clear (0) ; - lcd128x64setOrientation (0) ; - lcd128x64update () ; - - return 0 ; -} diff --git a/devLib/lcd128x64.h b/devLib/lcd128x64.h deleted file mode 100644 index b448bbc..0000000 --- a/devLib/lcd128x64.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * lcd128x64.h: - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -extern void lcd128x64setOrigin (int x, int y) ; -extern void lcd128x64setOrientation (int orientation) ; -extern void lcd128x64orientCoordinates (int *x, int *y) ; -extern void lcd128x64getScreenSize (int *x, int *y) ; -extern void lcd128x64point (int x, int y, int colour) ; -extern void lcd128x64line (int x0, int y0, int x1, int y1, int colour) ; -extern void lcd128x64lineTo (int x, int y, int colour) ; -extern void lcd128x64rectangle (int x1, int y1, int x2, int y2, int colour, int filled) ; -extern void lcd128x64circle (int x, int y, int r, int colour, int filled) ; -extern void lcd128x64ellipse (int cx, int cy, int xRadius, int yRadius, int colour, int filled) ; -extern void lcd128x64putchar (int x, int y, int c, int bgCol, int fgCol) ; -extern void lcd128x64puts (int x, int y, const char *str, int bgCol, int fgCol) ; -extern void lcd128x64update (void) ; -extern void lcd128x64clear (int colour) ; - -extern int lcd128x64setup (void) ; diff --git a/devLib/maxdetect.c b/devLib/maxdetect.c deleted file mode 100644 index 74ff70e..0000000 --- a/devLib/maxdetect.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * maxdetect.c: - * Driver for the MaxDetect series sensors - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -//#include -//#include - -#include - -#include "maxdetect.h" - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (1==2) -#endif - - -/* - * maxDetectLowHighWait: - * Wait for a transition from low to high on the bus - ********************************************************************************* - */ - -static int maxDetectLowHighWait (const int pin) -{ - struct timeval now, timeOut, timeUp ; - -// If already high then wait for pin to go low - - gettimeofday (&now, NULL) ; - timerclear (&timeOut) ; - timeOut.tv_usec = 1000 ; - timeradd (&now, &timeOut, &timeUp) ; - - while (digitalRead (pin) == HIGH) - { - gettimeofday (&now, NULL) ; - if (timercmp (&now, &timeUp, >)) - return FALSE ; - } - -// Wait for it to go HIGH - - gettimeofday (&now, NULL) ; - timerclear (&timeOut) ; - timeOut.tv_usec = 1000 ; - timeradd (&now, &timeOut, &timeUp) ; - - while (digitalRead (pin) == LOW) - { - gettimeofday (&now, NULL) ; - if (timercmp (&now, &timeUp, >)) - return FALSE ; - } - - return TRUE ; -} - - -/* - * maxDetectClockByte: - * Read in a single byte from the MaxDetect bus - ********************************************************************************* - */ - -static unsigned int maxDetectClockByte (const int pin) -{ - unsigned int byte = 0 ; - int bit ; - - for (bit = 0 ; bit < 8 ; ++bit) - { - if (!maxDetectLowHighWait (pin)) - return 0 ; - -// bit starting now - we need to time it. - - delayMicroseconds (30) ; - byte <<= 1 ; - if (digitalRead (pin) == HIGH) // It's a 1 - byte |= 1 ; - } - - return byte ; -} - - -/* - * maxDetectRead: - * Read in and return the 4 data bytes from the MaxDetect sensor. - * Return TRUE/FALSE depending on the checksum validity - ********************************************************************************* - */ - -int maxDetectRead (const int pin, unsigned char buffer [4]) -{ - int i ; - unsigned int checksum ; - unsigned char localBuf [5] ; - struct timeval now, then, took ; - -// See how long we took - - gettimeofday (&then, NULL) ; - -// Wake up the RHT03 by pulling the data line low, then high -// Low for 10mS, high for 40uS. - - pinMode (pin, OUTPUT) ; - digitalWrite (pin, 0) ; delay (10) ; - digitalWrite (pin, 1) ; delayMicroseconds (40) ; - pinMode (pin, INPUT) ; - -// Now wait for sensor to pull pin low - - if (!maxDetectLowHighWait (pin)) - return FALSE ; - -// and read in 5 bytes (40 bits) - - for (i = 0 ; i < 5 ; ++i) - localBuf [i] = maxDetectClockByte (pin) ; - - checksum = 0 ; - for (i = 0 ; i < 4 ; ++i) - { - buffer [i] = localBuf [i] ; - checksum += localBuf [i] ; - } - checksum &= 0xFF ; - -// See how long we took - - gettimeofday (&now, NULL) ; - timersub (&now, &then, &took) ; - -// Total time to do this should be: -// 10mS + 40µS - reset -// + 80µS + 80µS - sensor doing its low -> high thing -// + 40 * (50µS + 27µS (0) or 70µS (1) ) -// = 15010µS -// so if we take more than that, we've had a scheduling interruption and the -// reading is probably bogus. - - if ((took.tv_sec != 0) || (took.tv_usec > 16000)) - return FALSE ; - - return checksum == localBuf [4] ; -} - - -/* - * readRHT03: - * Read the Temperature & Humidity from an RHT03 sensor - * Values returned are *10, so 123 is 12.3. - ********************************************************************************* - */ - -int readRHT03 (const int pin, int *temp, int *rh) -{ - static struct timeval then ; // will initialise to zero - static int lastTemp = 0 ; - static int lastRh = 0 ; - - int result ; - struct timeval now, timeOut ; - unsigned char buffer [4] ; - -// The data sheets say to not read more than once every 2 seconds, so you -// get the last good reading - - gettimeofday (&now, NULL) ; - if (timercmp (&now, &then, <)) - { - *rh = lastRh ; - *temp = lastTemp ; - return TRUE ; - } - -// Set timeout for next read - - gettimeofday (&now, NULL) ; - timerclear (&timeOut) ; - timeOut.tv_sec = 2 ; - timeradd (&now, &timeOut, &then) ; - -// Read ... - - result = maxDetectRead (pin, buffer) ; - - if (!result) // Try again, but just once - result = maxDetectRead (pin, buffer) ; - - if (!result) - return FALSE ; - - *rh = (buffer [0] * 256 + buffer [1]) ; - *temp = (buffer [2] * 256 + buffer [3]) ; - - if ((*temp & 0x8000) != 0) // Negative - { - *temp &= 0x7FFF ; - *temp = -*temp ; - } - -// Discard obviously bogus readings - the checksum can't detect a 2-bit error -// (which does seem to happen - no realtime here) - - if ((*rh > 999) || (*temp > 800) || (*temp < -400)) - return FALSE ; - - lastRh = *rh ; - lastTemp = *temp ; - - return TRUE ; -} diff --git a/devLib/maxdetect.h b/devLib/maxdetect.h deleted file mode 100644 index a1fd742..0000000 --- a/devLib/maxdetect.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * maxdetect.h: - * Driver for the MaxDetect series sensors - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -// Main generic function - -int maxDetectRead (const int pin, unsigned char buffer [4]) ; - -// Individual sensors - -int readRHT03 (const int pin, int *temp, int *rh) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/piFace.c b/devLib/piFace.c deleted file mode 100644 index 74c3ddb..0000000 --- a/devLib/piFace.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * piFace.: - * This file to interface with the PiFace peripheral device which - * has an MCP23S17 GPIO device connected via the SPI bus. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - - -#include -#include - -#include -#include - -#include "piFace.h" - - -/* - * myDigitalWrite: - * Perform the digitalWrite function on the PiFace board - ********************************************************************************* - */ - -void myDigitalWrite (UNU struct wiringPiNodeStruct *node, int pin, int value) -{ - digitalWrite (pin + 16, value) ; -} - - -/* - * myDigitalRead: - * Perform the digitalRead function on the PiFace board - * With a slight twist - if we read from base + 8, then we - * read from the output latch... - ********************************************************************************* - */ - -int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - if ((pin - node->pinBase) >= 8) - return digitalRead (pin + 8) ; - else - return digitalRead (pin + 16 + 8) ; -} - - -/* - * myPullUpDnControl: - * Perform the pullUpDnControl function on the PiFace board - ********************************************************************************* - */ - -void myPullUpDnControl (UNU struct wiringPiNodeStruct *node, int pin, int pud) -{ - pullUpDnControl (pin + 16 + 8, pud) ; -} - - -/* - * piFaceSetup - * We're going to create an instance of the mcp23s17 here, then - * provide our own read/write routines on-top of it... - * The supplied PiFace code (in Pithon) treats it as an 8-bit device - * where you write the output ports and read the input port using the - * same pin numbers, however I have had a request to be able to read - * the output port, so reading 8..15 will read the output latch. - ********************************************************************************* - */ - -int piFaceSetup (const int pinBase) -{ - int i ; - struct wiringPiNodeStruct *node ; - -// Create an mcp23s17 instance: - - mcp23s17Setup (pinBase + 16, 0, 0) ; - -// Set the direction bits - - for (i = 0 ; i < 8 ; ++i) - { - pinMode (pinBase + 16 + i, OUTPUT) ; // Port A is the outputs - pinMode (pinBase + 16 + 8 + i, INPUT) ; // Port B inputs. - } - - node = wiringPiNewNode (pinBase, 16) ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->pullUpDnControl = myPullUpDnControl ; - - return 0 ; -} diff --git a/devLib/piFace.h b/devLib/piFace.h deleted file mode 100644 index 4965314..0000000 --- a/devLib/piFace.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * piFace.h: - * Control the PiFace Interface board for the Raspberry Pi - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int piFaceSetup (const int pinBase) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/piFaceOld.c b/devLib/piFaceOld.c deleted file mode 100644 index cadbfe8..0000000 --- a/devLib/piFaceOld.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * piFace.: - * Copyright (c) 2012-2016 Gordon Henderson - * - * This file to interface with the PiFace peripheral device which - * has an MCP23S17 GPIO device connected via the SPI bus. - *********************************************************************** - * 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 . - *********************************************************************** - */ - - -#include -#include - -#include -#include - -#include "../wiringPi/mcp23x0817.h" - -#include "piFace.h" - -#define PIFACE_SPEED 4000000 -#define PIFACE_DEVNO 0 - - - -/* - * writeByte: - * Write a byte to a register on the MCP23S17 on the SPI bus. - ********************************************************************************* - */ - -static void writeByte (uint8_t reg, uint8_t data) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_WRITE ; - spiData [1] = reg ; - spiData [2] = data ; - - wiringPiSPIDataRW (PIFACE_DEVNO, spiData, 3) ; -} - -/* - * readByte: - * Read a byte from a register on the MCP23S17 on the SPI bus. - ********************************************************************************* - */ - -static uint8_t readByte (uint8_t reg) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_READ ; - spiData [1] = reg ; - - wiringPiSPIDataRW (PIFACE_DEVNO, spiData, 3) ; - - return spiData [2] ; -} - - -/* - * myDigitalWrite: - * Perform the digitalWrite function on the PiFace board - ********************************************************************************* - */ - -void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - uint8_t mask, old ; - - pin -= node->pinBase ; - mask = 1 << pin ; - old = readByte (MCP23x17_GPIOA) ; - - if (value == 0) - old &= (~mask) ; - else - old |= mask ; - - writeByte (MCP23x17_GPIOA, old) ; -} - - -/* - * myDigitalRead: - * Perform the digitalRead function on the PiFace board - ********************************************************************************* - */ - -int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - uint8_t mask, reg ; - - mask = 1 << ((pin - node->pinBase) & 7) ; - - if (pin < 8) - reg = MCP23x17_GPIOB ; // Input regsiter - else - reg = MCP23x17_OLATA ; // Output latch regsiter - - if ((readByte (reg) & mask) != 0) - return HIGH ; - else - return LOW ; -} - - -/* - * myPullUpDnControl: - * Perform the pullUpDnControl function on the PiFace board - ********************************************************************************* - */ - -void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int pud) -{ - uint8_t mask, old ; - - mask = 1 << (pin - node->pinBase) ; - old = readByte (MCP23x17_GPPUB) ; - - if (pud == 0) - old &= (~mask) ; - else - old |= mask ; - - writeByte (MCP23x17_GPPUB, old) ; -} - - -/* - * piFaceSetup - * Setup the SPI interface and initialise the MCP23S17 chip - * We create one node with 16 pins - each if the first 8 pins being read - * and write - although the operations actually go to different - * hardware ports. The top 8 let you read the state of the output register. - ********************************************************************************* - */ - -int piFaceSetup (const int pinBase) -{ - int x ; - struct wiringPiNodeStruct *node ; - - if ((x = wiringPiSPISetup (PIFACE_DEVNO, PIFACE_SPEED)) < 0) - return x ; - -// Setup the MCP23S17 - - writeByte (MCP23x17_IOCON, IOCON_INIT) ; - writeByte (MCP23x17_IODIRA, 0x00) ; // Port A -> Outputs - writeByte (MCP23x17_IODIRB, 0xFF) ; // Port B -> Inputs - - node = wiringPiNewNode (pinBase, 16) ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->pullUpDnControl = myPullUpDnControl ; - - return 0 ; -} diff --git a/devLib/piGlow.c b/devLib/piGlow.c deleted file mode 100644 index 44e3db8..0000000 --- a/devLib/piGlow.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * piGlow.c: - * Easy access to the Pimoroni PiGlow board. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "piGlow.h" - -#define PIGLOW_BASE 577 - -static int leg0 [6] = { 6, 7, 8, 5, 4, 9 } ; -static int leg1 [6] = { 17, 16, 15, 13, 11, 10 } ; -static int leg2 [6] = { 0, 1, 2, 3, 14, 12 } ; - - -/* - * piGlow1: - * Light up an individual LED - ********************************************************************************* - */ - -void piGlow1 (const int leg, const int ring, const int intensity) -{ - int *legLeds ; - - if ((leg < 0) || (leg > 2)) return ; - if ((ring < 0) || (ring > 5)) return ; - - /**/ if (leg == 0) - legLeds = leg0 ; - else if (leg == 1) - legLeds = leg1 ; - else - legLeds = leg2 ; - - analogWrite (PIGLOW_BASE + legLeds [ring], intensity) ; -} - -/* - * piGlowLeg: - * Light up all 6 LEDs on a leg - ********************************************************************************* - */ - -void piGlowLeg (const int leg, const int intensity) -{ - int i ; - int *legLeds ; - - if ((leg < 0) || (leg > 2)) - return ; - - /**/ if (leg == 0) - legLeds = leg0 ; - else if (leg == 1) - legLeds = leg1 ; - else - legLeds = leg2 ; - - for (i = 0 ; i < 6 ; ++i) - analogWrite (PIGLOW_BASE + legLeds [i], intensity) ; -} - - -/* - * piGlowRing: - * Light up 3 LEDs in a ring. Ring 0 is the outermost, 5 the innermost - ********************************************************************************* - */ - -void piGlowRing (const int ring, const int intensity) -{ - if ((ring < 0) || (ring > 5)) - return ; - - analogWrite (PIGLOW_BASE + leg0 [ring], intensity) ; - analogWrite (PIGLOW_BASE + leg1 [ring], intensity) ; - analogWrite (PIGLOW_BASE + leg2 [ring], intensity) ; -} - -/* - * piGlowSetup: - * Initialise the board & remember the pins we're using - ********************************************************************************* - */ - -void piGlowSetup (int clear) -{ - sn3218Setup (PIGLOW_BASE) ; - - if (clear) - { - piGlowLeg (0, 0) ; - piGlowLeg (1, 0) ; - piGlowLeg (2, 0) ; - } -} diff --git a/devLib/piGlow.h b/devLib/piGlow.h deleted file mode 100644 index a4d89d0..0000000 --- a/devLib/piGlow.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * piglow.h: - * Easy access to the Pimoroni PiGlow board. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - - -#define PIGLOW_RED 0 -#define PIGLOW_ORANGE 1 -#define PIGLOW_YELLOW 2 -#define PIGLOW_GREEN 3 -#define PIGLOW_BLUE 4 -#define PIGLOW_WHITE 5 - - -#ifdef __cplusplus -extern "C" { -#endif - -extern void piGlow1 (const int leg, const int ring, const int intensity) ; -extern void piGlowLeg (const int leg, const int intensity) ; -extern void piGlowRing (const int ring, const int intensity) ; -extern void piGlowSetup (int clear) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/piNes.c b/devLib/piNes.c deleted file mode 100644 index a115050..0000000 --- a/devLib/piNes.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * piNes.c: - * Driver for the NES Joystick controller on the Raspberry Pi - * Copyright (c) 2012 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 . - *********************************************************************** - */ - -#include - -#include "piNes.h" - -#define MAX_NES_JOYSTICKS 8 - -#define NES_RIGHT 0x01 -#define NES_LEFT 0x02 -#define NES_DOWN 0x04 -#define NES_UP 0x08 -#define NES_START 0x10 -#define NES_SELECT 0x20 -#define NES_B 0x40 -#define NES_A 0x80 - - -#define PULSE_TIME 25 - -// Data to store the pins for each controller - -struct nesPinsStruct -{ - unsigned int cPin, dPin, lPin ; -} ; - -static struct nesPinsStruct nesPins [MAX_NES_JOYSTICKS] ; - -static int joysticks = 0 ; - - -/* - * setupNesJoystick: - * Create a new NES joystick interface, program the pins, etc. - ********************************************************************************* - */ - -int setupNesJoystick (int dPin, int cPin, int lPin) -{ - if (joysticks == MAX_NES_JOYSTICKS) - return -1 ; - - nesPins [joysticks].dPin = dPin ; - nesPins [joysticks].cPin = cPin ; - nesPins [joysticks].lPin = lPin ; - - digitalWrite (lPin, LOW) ; - digitalWrite (cPin, LOW) ; - - pinMode (lPin, OUTPUT) ; - pinMode (cPin, OUTPUT) ; - pinMode (dPin, INPUT) ; - - return joysticks++ ; -} - - -/* - * readNesJoystick: - * Do a single scan of the NES Joystick. - ********************************************************************************* - */ - -unsigned int readNesJoystick (int joystick) -{ - unsigned int value = 0 ; - int i ; - - struct nesPinsStruct *pins = &nesPins [joystick] ; - -// Toggle Latch - which presents the first bit - - digitalWrite (pins->lPin, HIGH) ; delayMicroseconds (PULSE_TIME) ; - digitalWrite (pins->lPin, LOW) ; delayMicroseconds (PULSE_TIME) ; - -// Read first bit - - value = digitalRead (pins->dPin) ; - -// Now get the next 7 bits with the clock - - for (i = 0 ; i < 7 ; ++i) - { - digitalWrite (pins->cPin, HIGH) ; delayMicroseconds (PULSE_TIME) ; - digitalWrite (pins->cPin, LOW) ; delayMicroseconds (PULSE_TIME) ; - value = (value << 1) | digitalRead (pins->dPin) ; - } - - return value ^ 0xFF ; -} diff --git a/devLib/piNes.h b/devLib/piNes.h deleted file mode 100644 index 897f181..0000000 --- a/devLib/piNes.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * piNes.h: - * Driver for the NES Joystick controller on the Raspberry Pi - * Copyright (c) 2012 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 . - *********************************************************************** - */ - -#define MAX_NES_JOYSTICKS 8 - -#define NES_RIGHT 0x01 -#define NES_LEFT 0x02 -#define NES_DOWN 0x04 -#define NES_UP 0x08 -#define NES_START 0x10 -#define NES_SELECT 0x20 -#define NES_B 0x40 -#define NES_A 0x80 - -#ifdef __cplusplus -extern "C" { -#endif - -extern int setupNesJoystick (int dPin, int cPin, int lPin) ; -extern unsigned int readNesJoystick (int joystick) ; - -#ifdef __cplusplus -} -#endif diff --git a/devLib/scrollPhat.c b/devLib/scrollPhat.c deleted file mode 100644 index c1a6f11..0000000 --- a/devLib/scrollPhat.c +++ /dev/null @@ -1,430 +0,0 @@ -/* - * scrollPhat.c: - * Simple driver for the Pimoroni Scroll Phat device - * - * 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include - -#include - -#include "scrollPhatFont.h" -#include "scrollPhat.h" - -// Size - -#define SP_WIDTH 11 -#define SP_HEIGHT 5 - -// I2C - -#define PHAT_I2C_ADDR 0x60 - -// Software copy of the framebuffer -// it's 8-bit deep although the display itself is only 1-bit deep. - -static unsigned char frameBuffer [SP_WIDTH * SP_HEIGHT] ; - -static int lastX, lastY ; -static int printDelayFactor ; -static int scrollPhatFd ; - -static int putcharX ; - -#undef DEBUG - - -/* - * delay: - * Wait for some number of milliseconds. - * This taken from wiringPi as there is no-need to include the whole of - * wiringPi just for the delay function. - ********************************************************************************* - */ - -static void delay (unsigned int howLong) -{ - struct timespec sleeper, dummy ; - - sleeper.tv_sec = (time_t)(howLong / 1000) ; - sleeper.tv_nsec = (long)(howLong % 1000) * 1000000 ; - - nanosleep (&sleeper, &dummy) ; -} - - - -/* - * scrollPhatUpdate: - * Copy our software version to the real display - ********************************************************************************* - */ - -void scrollPhatUpdate (void) -{ - register int x, y ; - register unsigned char data, pixel ; - unsigned char pixels [SP_WIDTH] ; - -#ifdef DEBUG - printf ("+-----------+\n") ; - for (y = 0 ; y < SP_HEIGHT ; ++y) - { - putchar ('|') ; - for (x = 0 ; x < SP_WIDTH ; ++x) - { - pixel = frameBuffer [x + y * SP_WIDTH] ; - putchar (pixel == 0 ? ' ' : '*') ; - } - printf ("|\n") ; - } - printf ("+-----------+\n") ; -#endif - - for (x = 0 ; x < SP_WIDTH ; ++x) - { - data = 0 ; - for (y = 0 ; y < SP_HEIGHT ; ++y) - { - pixel = frameBuffer [x + y * SP_WIDTH] ; - data = (data << 1) | ((pixel == 0) ? 0 : 1) ; - } - pixels [x] = data ; - } - - for (x = 0 ; x < SP_WIDTH ; ++x) - wiringPiI2CWriteReg8 (scrollPhatFd, 1 + x, pixels [x]) ; - - wiringPiI2CWriteReg8 (scrollPhatFd, 0x0C, 0) ; -} - - -/* - ********************************************************************************* - * Standard Graphical Functions - ********************************************************************************* - */ - - -/* - * scrollPhatPoint: - * Plot a pixel. Crude clipping - speed is not the essence here. - ********************************************************************************* - */ - -void scrollPhatPoint (int x, int y, int colour) -{ - lastX = x ; - lastY = y ; - - if ((x < 0) || (x >= SP_WIDTH) || (y < 0) || (y >= SP_HEIGHT)) - return ; - - frameBuffer [x + y * SP_WIDTH] = colour ; -} - - -/* - * scrollPhatLine: scrollPhatLineTo: - * Classic Bressenham Line code - rely on the point function to do the - * clipping for us here. - ********************************************************************************* - */ - -void scrollPhatLine (int x0, int y0, int x1, int y1, int colour) -{ - int dx, dy ; - int sx, sy ; - int err, e2 ; - - lastX = x1 ; - lastY = y1 ; - - dx = abs (x1 - x0) ; - dy = abs (y1 - y0) ; - - sx = (x0 < x1) ? 1 : -1 ; - sy = (y0 < y1) ? 1 : -1 ; - - err = dx - dy ; - - for (;;) - { - scrollPhatPoint (x0, y0, colour) ; - - if ((x0 == x1) && (y0 == y1)) - break ; - - e2 = 2 * err ; - - if (e2 > -dy) - { - err -= dy ; - x0 += sx ; - } - - if (e2 < dx) - { - err += dx ; - y0 += sy ; - } - } - -} - -void scrollPhatLineTo (int x, int y, int colour) -{ - scrollPhatLine (lastX, lastY, x, y, colour) ; -} - - -/* - * scrollPhatRectangle: - * A rectangle is a spoilt days fishing - ********************************************************************************* - */ - -void scrollPhatRectangle (int x1, int y1, int x2, int y2, int colour, int filled) -{ - register int x ; - - if (filled) - { - /**/ if (x1 == x2) - scrollPhatLine (x1, y1, x2, y2, colour) ; - else if (x1 < x2) - for (x = x1 ; x <= x2 ; ++x) - scrollPhatLine (x, y1, x, y2, colour) ; - else - for (x = x2 ; x <= x1 ; ++x) - scrollPhatLine (x, y1, x, y2, colour) ; - } - else - { - scrollPhatLine (x1, y1, x2, y1, colour) ; - scrollPhatLineTo (x2, y2, colour) ; - scrollPhatLineTo (x1, y2, colour) ; - scrollPhatLineTo (x1, y1, colour) ; - } -} - - -/* - * scrollPhatPutchar: - * Print a single character to the screen then advance the pointer by an - * appropriate ammount (variable width font). - * We rely on the clipping done by the pixel plot function to keep us - * out of trouble. - * Return the width + space - ********************************************************************************* - */ - -int scrollPhatPutchar (int c) -{ - register int x, y ; - - unsigned char line ; - unsigned char *fontPtr ; - unsigned char *p2 ; - int lineWidth, width, mask ; - -// The font is printable characters, uppercase only... -// and somewhat varaible width... - - c &= 0x7F ; - if (c > 0x60) - c -= 64 ; - else - c -= 32 ; - - fontPtr = scrollPhatFont + c * fontHeight ; - -// Work out width of this character -// There probably is a more efficient way to do this, but... - - p2 = fontPtr ; - width = 0 ; - for (y = 0 ; y < fontHeight ; ++y) - { - mask = 0x80 ; - for (lineWidth = 8 ; lineWidth > 0 ; --lineWidth) - { - if ((*p2 & mask) != 0) - break ; - mask >>= 1 ; - } - if (lineWidth > width) - width = lineWidth ; - - ++p2 ; - } - - if (width == 0) // Likely to be a blank or space character - width = 3 ; - - for (y = fontHeight - 1 ; y >= 0 ; --y) - { - x = 0 ; - line = *fontPtr++ ; - for (mask = 1 << (width - 1) ; mask != 0 ; mask >>= 1) - { - scrollPhatPoint (putcharX + x, y, (line & mask)) ; - ++x ; - } - } - -// make a line of space - - for (y = fontHeight - 1 ; y >= 0 ; --y) - scrollPhatPoint (putcharX + width, y, 0) ; - - putcharX = putcharX + width + 1 ; - - return width + 1 ; -} - - -/* - * scrollPhatPuts: - * Send a string to the display - and scroll it across. - * This is somewhat of a hack in that we print the entire string to the - * display and let the point clipping take care of what's off-screen... - ********************************************************************************* - */ - -void scrollPhatPuts (const char *str) -{ - int i ; - int movingX = 0 ; - const char *s ; - int pixelLen ; - -// Print it once, then we know the width in pixels... - - putcharX = 0 ; - s = str ; - while (*s) - scrollPhatPutchar (*s++) ; - - pixelLen = putcharX ; - -// Now scroll it by printing it and moving left one pixel - - movingX = 0 ; - for (i = 0 ; i < pixelLen ; ++i) - { - putcharX = movingX ; - s = str ; - while (*s) - scrollPhatPutchar (*s++) ; - --movingX ; - scrollPhatUpdate () ; - delay (printDelayFactor) ; - } -} - - -/* - * scrollPhatPrintf: - * Does what it says - ********************************************************************************* - */ - -void scrollPhatPrintf (const char *message, ...) -{ - va_list argp ; - char buffer [1024] ; - - va_start (argp, message) ; - vsnprintf (buffer, 1023, message, argp) ; - va_end (argp) ; - - scrollPhatPuts (buffer) ; -} - - -/* - * scrollPhatPrintSpeed: - * Change the print speed - mS per shift by 1 pixel - ********************************************************************************* - */ - -void scrollPhatPrintSpeed (const int pps) -{ - if (pps < 0) - printDelayFactor = 0 ; - else - printDelayFactor = pps ; -} - - -/* - * scrollPhatClear: - * Clear the display - ********************************************************************************* - */ - -void scrollPhatClear (void) -{ - register int i ; - register unsigned char *ptr = frameBuffer ; - - for (i = 0 ; i < (SP_WIDTH * SP_HEIGHT) ; ++i) - *ptr++ = 0 ; - - scrollPhatUpdate () ; -} - - -/* - * scrollPhatIntensity: - * Set the display brightness - percentage - ********************************************************************************* - */ - -void scrollPhatIntensity (const int percent) -{ - wiringPiI2CWriteReg8 (scrollPhatFd, 0x19, (127 * percent) / 100) ; -} - - -/* - * scrollPhatSetup: - * Initialise the Scroll Phat display - ********************************************************************************* - */ - -int scrollPhatSetup (void) -{ - if ((scrollPhatFd = wiringPiI2CSetup (PHAT_I2C_ADDR)) < 0) - return scrollPhatFd ; - - wiringPiI2CWriteReg8 (scrollPhatFd, 0x00, 0x03) ; // Enable display, set to 5x11 mode - scrollPhatIntensity (10) ; - scrollPhatClear () ; - scrollPhatPrintSpeed (100) ; - - return 0 ; -} diff --git a/devLib/scrollPhat.h b/devLib/scrollPhat.h deleted file mode 100644 index 0e762b1..0000000 --- a/devLib/scrollPhat.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * scrollPhat.h: - * Simple driver for the Pimoroni Scroll Phat device - * - * 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 . - *********************************************************************** - */ - -extern void scrollPhatPoint (int x, int y, int colour) ; -extern void scrollPhatLine (int x0, int y0, int x1, int y1, int colour) ; -extern void scrollPhatLineTo (int x, int y, int colour) ; -extern void scrollPhatRectangle (int x1, int y1, int x2, int y2, int colour, int filled) ; -extern void scrollPhatUpdate (void) ; -extern void scrollPhatClear (void) ; - -extern int scrollPhatPutchar (int c) ; -//extern void scrollPhatPutchar (int c) ; -extern void scrollPhatPuts (const char *str) ; -extern void scrollPhatPrintf (const char *message, ...) ; -extern void scrollPhatPrintSpeed (const int cps10) ; - -extern void scrollPhatIntensity (const int percent) ; -extern int scrollPhatSetup (void) ; diff --git a/devLib/scrollPhatFont.h b/devLib/scrollPhatFont.h deleted file mode 100644 index 92f623a..0000000 --- a/devLib/scrollPhatFont.h +++ /dev/null @@ -1,544 +0,0 @@ -/* - * scrollPhatFont.h: - * Simple font for the Pimoroni Scroll Phat. - * Note: this is a very much reduced font - 5 pixels high and - * mostly 4 pixels wide - sometimes 5. Also only - * printable characters from space to _ uppercase only. - * - * Copyright (c) 2015-2016 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 . - *********************************************************************** - */ - -static const int fontHeight = 5 ; - -static unsigned char scrollPhatFont [] = -{ - -// 0x20, Space. Handeled as a special case in the code. - - 0x0, // .... - 0x0, // .... - 0x0, // .... - 0x0, // .... - 0x0, // .... - -// 0x21, ! - - 0x1, // * - 0x1, // * - 0x1, // * - 0x0, // . - 0x1, // * - -// 0x22, " - - 0x5, // *..* - 0x5, // *..* - 0x0, // .... - 0x0, // .... - 0x0, // .... - -// 0x23, # - - 0x9, // *..* - 0xF, // **** - 0x9, // *..* - 0xF, // **** - 0x9, // *..* - -// 0x24, $ - - 0x1, // ..*. - 0x7, // .*** - 0x2, // ..*. - 0xE, // ***. - 0x8, // ..*. - -// 0x25, % - - 0x9, // *..* - 0x1, // ...* - 0x6, // .**. - 0x8, // *... - 0x9, // *..* - -// 0x26, & - - 0x6, // .**. - 0x8, // *... - 0x4, // .*.. - 0xA, // *.*. - 0x5, // .*.* - -// 0x27, ' - - 0x1, // .* - 0x2, // *. - 0x0, // .. - 0x0, // .. - 0x0, // .. - -// 0x28, ( - - 0x3, // ..** - 0x4, // .*.. - 0x8, // *... - 0x4, // .*.. - 0x3, // ..** - -// 0x29, ) - - 0xC, // **.. - 0x2, // ..*. - 0x1, // ...* - 0x2, // ..*. - 0xC, // **.. - -// 0x2A, * - - 0x9, // *..* - 0x6, // .**. - 0xF, // **** - 0x6, // .**. - 0x9, // *..* - -// 0x2B, + - - 0x6, // .**. - 0x6, // .**. - 0xF, // **** - 0x6, // .**. - 0x6, // .**. - -// 0x2C, , - - 0x0, // .. - 0x0, // .. - 0x0, // .. - 0x1, // .* - 0x2, // *. - -// 0x2D, - - - 0x0, // .... - 0x0, // .... - 0xF, // **** - 0x0, // .... - 0x0, // .... - -// 0x2E, . - - 0x0, // . - 0x0, // . - 0x0, // . - 0x0, // . - 0x1, // * - -// 0x2F, / - - 0x1, // ...* - 0x3, // ..** - 0x4, // ..*. - 0xC, // **.. - 0x8, // *... - -// 0x30, 0 - - 0x6, // .**. - 0x9, // *..* - 0x9, // *..* - 0x9, // *..* - 0x6, // .**. - -// 0x31, 1 - - 0x2, // ..*. - 0x6, // .**. - 0x2, // ..*. - 0x2, // ..*. - 0x7, // .*** - -// 0x32, 2 - - 0x6, // .**. - 0x1, // ...* - 0x6, // .**. - 0x8, // *... - 0xF, // **** - -// 0x33, 3 - - 0xE, // ***. - 0x1, // ...* - 0xE, // ***. - 0x1, // ...* - 0xE, // ***. - -// 0x34, 4 - - 0x6, // .**. - 0xA, // *.*. - 0xF, // **** - 0x2, // ..*. - 0x2, // ..*. - -// 0x35, 5 - - 0xF, // **** - 0x8, // *... - 0xF, // **** - 0x1, // ...* - 0xE, // ***. - -// 0x36, 6 - - 0x2, // ..*. - 0x4, // .*.. - 0xA, // *.*. - 0x9, // *..* - 0x6, // .**. - -// 0x37, 7 - - 0xF, // **** - 0x1, // ...* - 0x2, // ..*. - 0x4, // .*.. - 0x8, // *... - -// 0x38, 8 - - 0x6, // .**. - 0x9, // *..* - 0x6, // .**. - 0x9, // *..* - 0x6, // .**. - -// 0x39, 9 - - 0x6, // .**. - 0x9, // *..* - 0x7, // .*.* - 0x1, // ..*. - 0x2, // .*.. - -// 0x3A, : - - 0x0, // . - 0x1, // * - 0x0, // . - 0x1, // * - 0x0, // . - -// 0x3B, ; - - 0x0, // .. - 0x1, // .* - 0x0, // .. - 0x1, // .* - 0x2, // *. - -// 0x3C, < - - 0x2, // ..*. - 0x4, // .*.. - 0x8, // *... - 0x4, // .*.. - 0x2, // ..*. - -// 0x3D, = - - 0x0, // .... - 0xF, // **** - 0x0, // .... - 0xF, // **** - 0x0, // .... - -// 0x3E, > - - 0x0, // .*.. - 0x0, // ..*. - 0x0, // ...* - 0x0, // ..*. - 0x0, // .*.. - -// 0x3F, ? - - 0x6, // .**. - 0x1, // ...* - 0x2, // ..*. - 0x0, // .... - 0x2, // ..*. - -// 0x40, @ - - 0x6, // .**. - 0xD, // **.* - 0x8, // *... - 0x4, // .*.. - 0x3, // ..** - -// 0x41, A - - 0x6, // .**. - 0x9, // *..* - 0xF, // **** - 0x9, // *..* - 0x9, // *..* - -// 0x42, B - - 0xE, // ***. - 0x9, // *..* - 0xE, // ***. - 0x9, // *..* - 0xE, // ***. - -// 0x43, C - - 0x6, // .**. - 0x9, // *..* - 0x8, // *... - 0x9, // *..* - 0x6, // .**. - -// 0x44, D - - 0xE, // ***. - 0x9, // *..* - 0x9, // *..* - 0x9, // *..* - 0xE, // ***. - -// 0x45, E - - 0xF, // **** - 0x8, // *... - 0xE, // ***. - 0x8, // *... - 0xF, // **** - -// 0x46, F - - 0xF, // **** - 0x8, // *... - 0xE, // ***. - 0x8, // *... - 0x8, // *... - -// 0x47, G - - 0x6, // .**. - 0x9, // *..* - 0x8, // *... - 0xB, // *.** - 0x6, // .**. - -// 0x48, H - - 0x9, // *..* - 0x9, // *..* - 0xF, // **** - 0x9, // *..* - 0x9, // *..* - -// 0x49, I - - 0x7, // *** - 0x2, // .*. - 0x2, // .*. - 0x2, // .*. - 0x7, // *** - -// 0x4A, J - - 0x7, // .*** - 0x2, // ..*. - 0x2, // ..*. - 0xA, // *.*. - 0x4, // .*.. - -// 0x4B, K - - 0x9, // *..* - 0xA, // *.*. - 0xC, // **.. - 0xA, // *.*. - 0x9, // *..* - -// 0x4C, L - - 0x4, // *.. - 0x4, // *.. - 0x4, // *.. - 0x4, // *.. - 0x7, // *** - -// 0x4D, M - - 0x11, // *...* - 0x1B, // **.** - 0x15, // *.*.* - 0x11, // *...* - 0x11, // *...* - -// 0x4E, N - - 0x9, // *..* - 0xD, // **.* - 0xB, // *.** - 0x9, // *..* - 0x9, // *..* - -// 0x4F, O - - 0x6, // .**. - 0x9, // *..* - 0x9, // *..* - 0x9, // *..* - 0x6, // .**. - -// 0x50, P - - 0xE, // ***. - 0x9, // *..* - 0xE, // ***. - 0x8, // *... - 0x8, // *... - -// 0x51, Q - - 0x6, // .**. - 0x9, // *..* - 0x9, // *..* - 0xA, // *.*. - 0x5, // .*.* - -// 0x52, R - - 0xE, // ***. - 0x9, // *..* - 0xF, // ***. - 0xA, // *.*. - 0x9, // *..* - -// 0x53, S - - 0x6, // .**. - 0x8, // *... - 0x6, // .**. - 0x1, // ...* - 0x6, // .**. - -// 0x54, T - - 0x7, // .*** - 0x2, // ..*. - 0x2, // ..*. - 0x2, // ..*. - 0x2, // ..*. - -// 0x55, U - - 0x9, // *..* - 0x9, // *..* - 0x9, // *..* - 0x9, // *..* - 0x6, // .**. - -// 0x56, V - - 0x11, // *...* - 0x11, // *...* - 0x11, // *...* - 0x0A, // .*.*. - 0x04, // ..*.. - -// 0x57, W - - 0x11, // *...* - 0x11, // *...* - 0x11, // *...* - 0x15, // *.*.* - 0x1B, // **.** - -// 0x58, X - - 0x9, // *..* - 0x9, // *..* - 0x6, // .**. - 0x9, // *..* - 0x9, // *..* - -// 0x59, Y - - 0x11, // *...* - 0x0A, // .*.*. - 0x04, // ..*.. - 0x04, // ..*.. - 0x04, // ..*.. - -// 0x5A, Z - - 0xF, // **** - 0x1, // ...* - 0x6, // .**. - 0x8, // *... - 0xF, // **** - -// 0x5B, [ - - 0xE, // ***. - 0x8, // *... - 0x8, // *... - 0x8, // *... - 0xE, // ***. - -// 0x5C, Backslash - - 0x8, // *... - 0xC, // **.. - 0x6, // .**. - 0x3, // ..** - 0x1, // ...* - -// 0x5D, ] - - 0x7, // .*** - 0x1, // ...* - 0x1, // ...* - 0x1, // ...* - 0x7, // .*** - -// 0x5E, ^ - - 0x6, // .**. - 0x9, // *..* - 0x0, // .... - 0x0, // .... - 0x0, // .... - -// 0x5F, _ - - 0x0, // .... - 0x0, // .... - 0x0, // .... - 0x0, // .... - 0xF, // **** -} ; diff --git a/examples/Gertboard/7segments.c b/examples/Gertboard/7segments.c deleted file mode 100644 index 8797e49..0000000 --- a/examples/Gertboard/7segments.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 7segments.c: - * Simple test program to see if we can drive a 7-segment LED - * display using the GPIO and little else on the Raspberry Pi - * - * Copyright (c) 2013 Gordon Henderson - *********************************************************************** - */ - -#undef PHOTO_HACK - -#include - -#include -#include -#include -#include - -/* - * Segment mapping - * - * --a-- - * | | - * f b - * | | - * --g-- - * | | - * e c - * | | - * --d-- p - */ - -// GPIO Pin Mapping - -static int digits [6] = { 7, 11, 10, 13, 12, 14 } ; -static int segments [7] = { 6, 5, 4, 3, 2, 1, 0 } ; - - -static const int segmentDigits [] = -{ -// a b c d e f g Segments -// 6 5 4 3 2 1 0, // wiringPi pin No. - - 1, 1, 1, 1, 1, 1, 0, // 0 - 0, 1, 1, 0, 0, 0, 0, // 1 - 1, 1, 0, 1, 1, 0, 1, // 2 - 1, 1, 1, 1, 0, 0, 1, // 3 - 0, 1, 1, 0, 0, 1, 1, // 4 - 1, 0, 1, 1, 0, 1, 1, // 5 - 1, 0, 1, 1, 1, 1, 1, // 6 - 1, 1, 1, 0, 0, 0, 0, // 7 - 1, 1, 1, 1, 1, 1, 1, // 8 - 1, 1, 1, 1, 0, 1, 1, // 9 - 1, 1, 1, 0, 1, 1, 1, // A - 0, 0, 1, 1, 1, 1, 1, // b - 1, 0, 0, 1, 1, 1, 0, // C - 0, 1, 1, 1, 1, 0, 1, // d - 1, 0, 0, 1, 1, 1, 1, // E - 1, 0, 0, 0, 1, 1, 1, // F - 0, 0, 0, 0, 0, 0, 0, // blank -} ; - - -// display: -// A global variable which is written to by the main program and -// read from by the thread that updates the display. Only the first -// 6 characters are used. - -char display [8] ; - - -/* - * displayDigits: - * This is our thread that's run concurrently with the main program. - * Essentially sit in a loop, parsing and displaying the data held in - * the "display" global. - ********************************************************************************* - */ - -PI_THREAD (displayDigits) -{ - int digit, segment ; - int index, d, segVal ; - - piHiPri (50) ; - - for (;;) - { - for (digit = 0 ; digit < 6 ; ++digit) - { - for (segment = 0 ; segment < 7 ; ++segment) - { - d = toupper (display [digit]) ; - /**/ if ((d >= '0') && (d <= '9')) // Digit - index = d - '0' ; - else if ((d >= 'A') && (d <= 'F')) // Hex - index = d - 'A' + 10 ; - else - index = 16 ; // Blank - - segVal = segmentDigits [index * 7 + segment] ; - - digitalWrite (segments [segment], segVal) ; - } - digitalWrite (digits [digit], 1) ; - delay (2) ; - digitalWrite (digits [digit], 0) ; - } - } -} - - -/* - * setup: - * Initialise the hardware and start the thread - ********************************************************************************* - */ - -void setup (void) -{ - int i, c ; - - wiringPiSetup () ; - -// 7 segments - - for (i = 0 ; i < 7 ; ++i) - { digitalWrite (segments [i], 0) ; pinMode (segments [i], OUTPUT) ; } - -// 6 digits - - for (i = 0 ; i < 6 ; ++i) - { digitalWrite (digits [i], 0) ; pinMode (digits [i], OUTPUT) ; } - - strcpy (display, " ") ; - piThreadCreate (displayDigits) ; - delay (10) ; // Just to make sure it's started - -// Quick countdown LED test sort of thing - - c = 999999 ; - for (i = 0 ; i < 10 ; ++i) - { - sprintf (display, "%06d", c) ; - delay (400) ; - c -= 111111 ; - } - - strcpy (display, " ") ; - delay (400) ; - -#ifdef PHOTO_HACK - sprintf (display, "%s", "123456") ; - for (;;) - delay (1000) ; -#endif - -} - - -/* - * teenager: - * No explanation needed. (Nor one given!) - ********************************************************************************* - */ - -void teenager (void) -{ - char *message = " feedbeef babe cafe b00b " ; - int i ; - - for (i = 0 ; i < strlen (message) - 4 ; ++i) - { - strncpy (display, &message [i], 6) ; - delay (200) ; - } - delay (1000) ; - for (i = 0 ; i < 3 ; ++i) - { - strcpy (display, " ") ; - delay (150) ; - strcpy (display, " b00b ") ; - delay (250) ; - } - delay (1000) ; - strcpy (display, " ") ; - delay (1000) ; -} - - -/* - ********************************************************************************* - * main: - * Let the fun begin - ********************************************************************************* - */ - -int main (void) -{ - struct tm *t ; - time_t tim ; - - setup () ; - teenager () ; - - tim = time (NULL) ; - for (;;) - { - while (time (NULL) == tim) - delay (5) ; - - tim = time (NULL) ; - t = localtime (&tim) ; - - sprintf (display, "%02d%02d%02d", t->tm_hour, t->tm_min, t->tm_sec) ; - - delay (500) ; - } - - return 0 ; -} diff --git a/examples/Gertboard/Makefile b/examples/Gertboard/Makefile deleted file mode 100644 index 1939ad6..0000000 --- a/examples/Gertboard/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -# -# Makefile: -# Gertboard - Examples using wiringPi -# -# Copyright (c) 2013 Gordon Henderson -################################################################################# - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O3 -CC = gcc -INCLUDE = -I/usr/local/include -CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe - -LDFLAGS = -L/usr/local/lib -LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm - -# Should not alter anything below this line -############################################################################### - -SRC = gertboard.c \ - buttons.c 7segments.c \ - voltmeter.c temperature.c vumeter.c \ - record.c - -OBJ = $(SRC:.c=.o) - -BINS = $(SRC:.c=) - -all: $(BINS) - -gertboard: gertboard.o - $Q echo [link] - $Q $(CC) -o $@ gertboard.o $(LDFLAGS) $(LDLIBS) - -buttons: buttons.o - $Q echo [link] - $Q $(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) - -7segments: 7segments.o - $Q echo [link] - $Q $(CC) -o $@ 7segments.o $(LDFLAGS) $(LDLIBS) - -voltmeter: voltmeter.o - $Q echo [link] - $Q $(CC) -o $@ voltmeter.o $(LDFLAGS) $(LDLIBS) - -temperature: temperature.o - $Q echo [link] - $Q $(CC) -o $@ temperature.o $(LDFLAGS) $(LDLIBS) - -vumeter: vumeter.o - $Q echo [link] - $Q $(CC) -o $@ vumeter.o $(LDFLAGS) $(LDLIBS) - -record: record.o - $Q echo [link] - $Q $(CC) -o $@ record.o $(LDFLAGS) $(LDLIBS) - -.c.o: - $Q echo [CC] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -clean: - $Q echo [Clean] - $Q rm -f $(OBJ) *~ core tags $(BINS) - -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -depend: - makedepend -Y $(SRC) - -# DO NOT DELETE diff --git a/examples/Gertboard/buttons.c b/examples/Gertboard/buttons.c deleted file mode 100644 index 5f76764..0000000 --- a/examples/Gertboard/buttons.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * buttons.c: - * Read the Gertboard buttons. Each one will act as an on/off - * tiggle switch for 3 different LEDs - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -// Array to keep track of our LEDs - -int leds [] = { 0, 0, 0 } ; - -// scanButton: -// See if a button is pushed, if so, then flip that LED and -// wait for the button to be let-go - -void scanButton (int button) -{ - if (digitalRead (button) == HIGH) // Low is pushed - return ; - - leds [button] ^= 1 ; // Invert state - digitalWrite (4 + button, leds [button]) ; - - while (digitalRead (button) == LOW) // Wait for release - delay (10) ; -} - -int main (void) -{ - int i ; - - printf ("Raspberry Pi Gertboard Button Test\n") ; - - wiringPiSetup () ; - -// Setup the outputs: -// Pins 3, 4, 5, 6 and 7 output: -// We're not using 3 or 4, but make sure they're off anyway -// (Using same hardware config as blink12.c) - - for (i = 3 ; i < 8 ; ++i) - { - pinMode (i, OUTPUT) ; - digitalWrite (i, 0) ; - } - -// Setup the inputs - - for (i = 0 ; i < 3 ; ++i) - { - pinMode (i, INPUT) ; - pullUpDnControl (i, PUD_UP) ; - leds [i] = 0 ; - } - - for (;;) - { - for (i = 0 ; i < 3 ; ++i) - scanButton (i) ; - delay (1) ; - } -} diff --git a/examples/Gertboard/gertboard.c b/examples/Gertboard/gertboard.c deleted file mode 100644 index aefcb12..0000000 --- a/examples/Gertboard/gertboard.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * gertboard.c: - * Simple test for the SPI bus on the Gertboard - * - * Hardware setup: - * D/A port 0 jumpered to A/D port 0. - * - * We output a sine wave on D/A port 0 and sample A/D port 0. We then - * plot the input value on the terminal as a sort of vertical scrolling - * oscilloscipe. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -// Gertboard D to A is an 8-bit unit. - -#define B_SIZE 256 - -#include -#include - -int main (void) -{ - double angle ; - int i, inputValue ; - int buffer [B_SIZE] ; - int cols ; - struct winsize w ; - - - printf ("Raspberry Pi Gertboard SPI test program\n") ; - printf ("=======================================\n") ; - - ioctl (fileno (stdin), TIOCGWINSZ, &w); - cols = w.ws_col - 2 ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - -// Initialise the Gertboard analog hardware at pin 100 - - gertboardAnalogSetup (100) ; - -// Generate a Sine Wave and store in our buffer - - for (i = 0 ; i < B_SIZE ; ++i) - { - angle = ((double)i / (double)B_SIZE) * M_PI * 2.0 ; - buffer [i] = (int)rint ((sin (angle)) * 127.0 + 128.0) ; - } - -// Loop, output the sine wave on analog out port 0, read it into A-D port 0 -// and display it on the screen - - for (;;) - { - for (i = 0 ; i < B_SIZE ; ++i) - { - analogWrite (100, buffer [i]) ; - - inputValue = analogRead (100) ; - -// We don't need to wory about the scale or sign - the analog hardware is -// a 10-bit value, so 0-1023. Just scale this to our terminal - - printf ("%*s\n", (inputValue * cols) / 1023, "*") ; - delay (2) ; - } - } - - return 0 ; -} diff --git a/examples/Gertboard/record.c b/examples/Gertboard/record.c deleted file mode 100644 index 71d8718..0000000 --- a/examples/Gertboard/record.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * record.c: - * Record some audio via the Gertboard - * - * Copyright (c) 2013 Gordon Henderson - *********************************************************************** - */ - -#include -#include - -#include -#include - -#define B_SIZE 40000 - -int main () -{ - int i ; - struct timeval tStart, tEnd, tTaken ; - unsigned char buffer [B_SIZE] ; - - printf ("\n") ; - printf ("Gertboard demo: Recorder\n") ; - printf ("========================\n") ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - -// Initialise the Gertboard analog hardware at pin 100 - - gertboardAnalogSetup (100) ; - - gettimeofday (&tStart, NULL) ; - - for (i = 0 ; i < B_SIZE ; ++i) - buffer [i] = analogRead (100) >> 2 ; - - gettimeofday (&tEnd, NULL) ; - - timersub (&tEnd, &tStart, &tTaken) ; - - printf ("Time taken for %d reads: %ld.%ld\n", B_SIZE, tTaken.tv_sec, tTaken.tv_usec) ; - - gettimeofday (&tStart, NULL) ; - - for (i = 0 ; i < B_SIZE ; ++i) - analogWrite (100, buffer [i]) ; - - gettimeofday (&tEnd, NULL) ; - - timersub (&tEnd, &tStart, &tTaken) ; - - printf ("Time taken for %d writes: %ld.%ld\n", B_SIZE, tTaken.tv_sec, tTaken.tv_usec) ; - - return 0 ; -} - diff --git a/examples/Gertboard/temperature.c b/examples/Gertboard/temperature.c deleted file mode 100644 index 5985a12..0000000 --- a/examples/Gertboard/temperature.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * temperature.c: - * Demonstrate use of the Gertboard A to D converter to make - * a simple thermometer using the LM35. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include - -#include -#include - -int main () -{ - int x1, x2 ; - double v1, v2 ; - - printf ("\n") ; - printf ("Gertboard demo: Simple Thermemeter\n") ; - printf ("==================================\n") ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - -// Initialise the Gertboard analog hardware at pin 100 - - gertboardAnalogSetup (100) ; - - printf ("\n") ; - printf ("| Channel 0 | Channel 1 | Temperature 1 | Temperature 2 |\n") ; - - for (;;) - { - -// Read the 2 channels: - - x1 = analogRead (100) ; - x2 = analogRead (101) ; - -// Convert to a voltage: - - v1 = (double)x1 / 1023.0 * 3.3 ; - v2 = (double)x2 / 1023.0 * 3.3 ; - -// Print - - printf ("| %6.3f | %6.3f |", v1, v2) ; - -// Print Temperature of both channels by converting the LM35 reading -// to a temperature. Fortunately these are easy: 0.01 volts per C. - - printf (" %4.1f | %4.1f |\r", v1 * 100.0, v2 * 100.0) ; - fflush (stdout) ; - } - - return 0 ; -} - diff --git a/examples/Gertboard/voltmeter.c b/examples/Gertboard/voltmeter.c deleted file mode 100644 index c4d2113..0000000 --- a/examples/Gertboard/voltmeter.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * voltmeter.c: - * Demonstrate use of the Gertboard A to D converter to make - * a simple voltmeter. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include - -#include -#include - -int main () -{ - int x1, x2 ; - double v1, v2 ; - - printf ("\n") ; - printf ("Gertboard demo: Simple Voltmeters\n") ; - printf ("=================================\n") ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - -// Initialise the Gertboard analog hardware at pin 100 - - gertboardAnalogSetup (100) ; - - printf ("\n") ; - printf ("| Channel 0 | Channel 1 |\n") ; - - for (;;) - { - -// Read the 2 channels: - - x1 = analogRead (100) ; - x2 = analogRead (101) ; - -// Convert to a voltage: - - v1 = (double)x1 / 1023.0 * 3.3 ; - v2 = (double)x2 / 1023.0 * 3.3 ; - -// Print - - printf ("| %6.3f | %6.3f |\r", v1, v2) ; - fflush (stdout) ; - } - - return 0 ; -} - diff --git a/examples/Gertboard/vumeter.c b/examples/Gertboard/vumeter.c deleted file mode 100644 index 9643ace..0000000 --- a/examples/Gertboard/vumeter.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * vumeter.c: - * Simple VU meter - * - * Heres the theory: - * We will sample at 4000 samples/sec and put the data into a - * low-pass filter with a depth of 1000 samples. This will give - * us 1/4 a second of lag on the signal, but I think it might - * produce a more pleasing output. - * - * The input of the microphone should be at mid-pont with no - * sound input, but we might have to sample that too, to get - * our reference zero... - * - * Copyright (c) 2013 Gordon Henderson - *********************************************************************** - */ - -#include -#include -#include - -#include -#include - -#ifndef TRUE -#define TRUE (1==1) -#define FALSE (!TRUE) -#endif - -#define B_SIZE 1000 -#define S_SIZE 128 - -static int buffer [B_SIZE] ; -static int bPtr = 0 ; - -/* - * ledPercent: - * Output the given value as a percentage on the LEDs - ********************************************************************************* - */ - -static void ledPercent (int percent) -{ - unsigned int output = 0 ; - - if (percent > 11) output |= 0x01 ; - if (percent > 22) output |= 0x02 ; - if (percent > 33) output |= 0x04 ; - if (percent > 44) output |= 0x08 ; - if (percent > 55) output |= 0x10 ; - if (percent > 66) output |= 0x20 ; - if (percent > 77) output |= 0x40 ; - if (percent > 88) output |= 0x80 ; - - digitalWriteByte (output) ; -} - -static unsigned int tPeriod, tNextSampleTime ; - -/* - * sample: - * Get a sample from the Gertboard. If not enough time has elapsed - * since the last sample, then wait... - ********************************************************************************* - */ - -static void sample (void) -{ - unsigned int tFuture ; - -// Calculate the future sample time - - tFuture = tPeriod + tNextSampleTime ; - -// Wait until the next sample time - - while (micros () < tNextSampleTime) - ; - - buffer [bPtr] = gertboardAnalogRead (0) ; - - tNextSampleTime = tFuture ; -} - - -int main () -{ - int quietLevel, min, max ; - int i, sum ; - unsigned int tStart, tEnd ; - - printf ("\n") ; - printf ("Gertboard demo: VU Meter\n") ; - printf ("========================\n") ; - - wiringPiSetup () ; - gertboardSPISetup () ; - - ledPercent (0) ; - for (i = 0 ; i < 8 ; ++i) - pinMode (i, OUTPUT) ; - - for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr) - buffer [bPtr] = 99 ; - - tPeriod = 1000000 / 1000 ; - - printf ("Shhhh.... ") ; fflush (stdout) ; - delay (1000) ; - printf ("Sampling quiet... ") ; fflush (stdout) ; - - tStart = micros () ; - - tNextSampleTime = micros () ; - for (bPtr = 0 ; bPtr < B_SIZE ; ++bPtr) - sample () ; - - tEnd = micros () ; - - quietLevel = 0 ; - max = 0 ; - min = 1024 ; - for (i = 0 ; i < B_SIZE ; ++i) - { - quietLevel += buffer [i] ; - if (buffer [i] > max) max = buffer [i] ; - if (buffer [i] < min) min = buffer [i] ; - } - quietLevel /= B_SIZE ; - - printf ("Done. Quiet level is: %d [%d:%d] [%d:%d]\n", quietLevel, min, max, quietLevel - min, max - quietLevel) ; - - printf ("Time taken for %d reads: %duS\n", B_SIZE, tEnd - tStart) ; - - for (bPtr = 0 ;;) - { - sample () ; - sum = 0 ; - for (i = 0 ; i < S_SIZE ; ++i) - sum += buffer [i] ; - sum /= S_SIZE ; - sum = abs (quietLevel - sum) ; - sum = (sum * 1000) / quietLevel ; - ledPercent (sum) ; - if (++bPtr > S_SIZE) - bPtr = 0 ; - } - - - return 0 ; -} diff --git a/examples/PiFace/Makefile b/examples/PiFace/Makefile deleted file mode 100644 index f937c14..0000000 --- a/examples/PiFace/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -# -# Makefile: -# wiringPi - A "wiring" library for the Raspberry Pi -# https://projects.drogon.net/wiring-pi -# -# Copyright (c) 2012 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O3 -CC = gcc -INCLUDE = -I/usr/local/include -CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe - -LDFLAGS = -L/usr/local/lib -LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm - -# Should not alter anything below this line -############################################################################### - -SRC = blink.c buttons.c reaction.c ladder.c metro.c motor.c - -OBJ = $(SRC:.c=.o) - -BINS = $(SRC:.c=) - -all: $(BINS) - -blink: blink.o - $Q echo [link] - $Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) - -buttons: buttons.o - $Q echo [link] - $Q $(CC) -o $@ buttons.o $(LDFLAGS) $(LDLIBS) - -reaction: reaction.o - $Q echo [link] - $Q $(CC) -o $@ reaction.o $(LDFLAGS) $(LDLIBS) - -ladder: ladder.o - $Q echo [link] - $Q $(CC) -o $@ ladder.o $(LDFLAGS) $(LDLIBS) - -metro: metro.o - $Q echo [link] - $Q $(CC) -o $@ metro.o $(LDFLAGS) $(LDLIBS) - -motor: motor.o - $Q echo [link] - $Q $(CC) -o $@ motor.o $(LDFLAGS) $(LDLIBS) - -.c.o: - $Q echo [CC] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) *~ core tags $(BINS) - -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -depend: - makedepend -Y $(SRC) - -# DO NOT DELETE diff --git a/examples/PiFace/blink.c b/examples/PiFace/blink.c deleted file mode 100644 index ffb8a2e..0000000 --- a/examples/PiFace/blink.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * blink.c: - * Simple "blink" test for the PiFace interface board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include - -#include -#include - -// Use 200 as the pin-base for the PiFace board, and pick a pin -// for the LED that's not connected to a relay - -#define PIFACE 200 -#define LED (PIFACE+2) - -int main (int argc, char *argv []) -{ - printf ("Raspberry Pi PiFace Blink\n") ; - printf ("=========================\n") ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - -// Setup the PiFace board - - piFaceSetup (PIFACE) ; - - for (;;) - { - digitalWrite (LED, HIGH) ; // On - delay (500) ; // mS - digitalWrite (LED, LOW) ; // Off - delay (500) ; - } - - return 0 ; -} diff --git a/examples/PiFace/buttons.c b/examples/PiFace/buttons.c deleted file mode 100644 index 147a4bd..0000000 --- a/examples/PiFace/buttons.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * buttons.c: - * Simple test for the PiFace interface board. - * - * Read the buttons and output the same to the LEDs - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include - -#include -#include - -int outputs [4] = { 0,0,0,0 } ; - -// Use 200 as the pin-base for the PiFace board - -#define PIFACE_BASE 200 - - -/* - * scanButton: - * Read the guiven button - if it's pressed, then flip the state - * of the correspoinding output pin - ********************************************************************************* - */ - -void scanButton (int button) -{ - if (digitalRead (PIFACE_BASE + button) == LOW) - { - outputs [button] ^= 1 ; - digitalWrite (PIFACE_BASE + button, outputs [button]) ; - printf ("Button %d pushed - output now: %s\n", - button, (outputs [button] == 0) ? "Off" : "On") ; - } - - while (digitalRead (PIFACE_BASE + button) == LOW) - delay (1) ; -} - - -/* - * start here - ********************************************************************************* - */ - -int main (void) -{ - int pin, button ; - - printf ("Raspberry Pi wiringPi + PiFace test program\n") ; - printf ("===========================================\n") ; - printf ("\n") ; - printf ( -"This program reads the buttons and uses them to toggle the first 4\n" -"outputs. Push a button once to turn an output on, and push it again to\n" -"turn it off again.\n\n") ; - -// Always initialise wiringPi. Use wiringPiSys() if you don't need -// (or want) to run as root - - wiringPiSetupSys () ; - - piFaceSetup (PIFACE_BASE) ; - -// Enable internal pull-ups & start with all off - - for (pin = 0 ; pin < 8 ; ++pin) - { - pullUpDnControl (PIFACE_BASE + pin, PUD_UP) ; - digitalWrite (PIFACE_BASE + pin, 0) ; - } - -// Loop, scanning the buttons - - for (;;) - { - for (button = 0 ; button < 4 ; ++button) - scanButton (button) ; - delay (5) ; - } - - return 0 ; -} diff --git a/examples/PiFace/ladder.c b/examples/PiFace/ladder.c deleted file mode 100644 index 4f08a6f..0000000 --- a/examples/PiFace/ladder.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * ladder.c: - * - * Gordon Henderson, June 2012 - *********************************************************************** - */ - -#include -#include -#include -#include - -#include -#include - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (1==2) -#endif - -#undef DEBUG - -#define NUM_LEDS 8 - - -// Map the LEDs to the hardware pins -// using PiFace pin numbers here - -#define PIFACE 200 - -const int ledMap [NUM_LEDS] = -{ -// 0, 1, 2, 3, 4, 5, 6, 7, 8 - 200, 201, 202, 203, 204, 205, 206, 207 -} ; - - -// Some constants for our circuit simulation - -const double vBatt = 9.0 ; // Volts (ie. a PP3) -const double capacitor = 0.001 ; // 1000uF -const double rCharge = 2200.0 ; // ohms -const double rDischarge = 68000.0 ; // ohms -const double timeInc = 0.01 ; // Seconds - -double vCharge, vCap, vCapLast ; - - - -/* - * setup: - * Program the GPIO correctly and initialise the lamps - *********************************************************************** - */ - -void setup (void) -{ - int i ; - - wiringPiSetupSys () ; - - if (piFaceSetup (200) == -1) - exit (1) ; - -// Enable internal pull-ups - - for (i = 0 ; i < 8 ; ++i) - pullUpDnControl (PIFACE + i, PUD_UP) ; - -// Calculate the actual charging voltage - standard calculation of -// vCharge = r2 / (r1 + r2) * vBatt -// -// -// -----+--- vBatt -// | -// R1 -// | -// +---+---- vCharge -// | | -// R2 C -// | | -// -----+---+----- - - vCharge = rDischarge / (rCharge + rDischarge) * vBatt ; - -// Start with no charge - - vCap = vCapLast = 0.0 ; -} - - -/* - * introLeds - * Put a little pattern on the LEDs to start with - ********************************************************************************* - */ - -void introLeds (void) -{ - int i, j ; - - - printf ("Pi Ladder\n") ; - printf ("=========\n\n") ; - printf (" vBatt: %6.2f volts\n", vBatt) ; - printf (" rCharge: %6.0f ohms\n", rCharge) ; - printf (" rDischarge: %6.0f ohms\n", rDischarge) ; - printf (" vCharge: %6.2f volts\n", vCharge) ; - printf (" capacitor: %6.0f uF\n", capacitor * 1000.0) ; - -// Flash 3 times: - - for (j = 0 ; j < 3 ; ++j) - { - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 1) ; - delay (500) ; - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 0) ; - delay (100) ; - } - -// All On - - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 1) ; - delay (500) ; - -// Countdown... - - for (i = NUM_LEDS - 1 ; i >= 0 ; --i) - { - digitalWrite (ledMap [i], 0) ; - delay (100) ; - } - delay (500) ; -} - - -/* - * winningLeds - * Put a little pattern on the LEDs to start with - ********************************************************************************* - */ - -void winningLeds (void) -{ - int i, j ; - -// Flash 3 times: - - for (j = 0 ; j < 3 ; ++j) - { - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 1) ; - delay (500) ; - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 0) ; - delay (100) ; - } - -// All On - - for (i = 0 ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 1) ; - delay (500) ; - -// Countup... - - for (i = 0 ; i < NUM_LEDS ; ++i) - { - digitalWrite (ledMap [i], 0) ; - delay (100) ; - } - delay (500) ; -} - - -/* - * chargeCapacitor: dischargeCapacitor: - * Add or remove charge to the capacitor. - * Standard capacitor formulae. - ********************************************************************************* - */ - -void chargeCapacitor (void) -{ - vCap = (vCapLast - vCharge) * - exp (- timeInc / (rCharge * capacitor)) + vCharge ; - -#ifdef DEBUG - printf ("+vCap: %7.4f\n", vCap) ; -#endif - - vCapLast = vCap ; -} - -void dischargeCapacitor (void) -{ - vCap = vCapLast * - exp (- timeInc / (rDischarge * capacitor)) ; - -#ifdef DEBUG - printf ("-vCap: %7.4f\n", vCap) ; -#endif - - vCapLast = vCap ; -} - - -/* - * ledBargraph: - * Output the supplied number as a bargraph on the LEDs - ********************************************************************************* - */ - -void ledBargraph (double value, int topLedOn) -{ - int topLed = (int)floor (value / vCharge * (double)NUM_LEDS) + 1 ; - int i ; - - if (topLed > NUM_LEDS) - topLed = NUM_LEDS ; - - if (!topLedOn) - --topLed ; - - for (i = 0 ; i < topLed ; ++i) - digitalWrite (ledMap [i], 1) ; - - for (i = topLed ; i < NUM_LEDS ; ++i) - digitalWrite (ledMap [i], 0) ; -} - - -/* - * ledOnAction: - * Make sure the leading LED is on and check the button - ********************************************************************************* - */ - -void ledOnAction (void) -{ - if (digitalRead (PIFACE) == LOW) - { - chargeCapacitor () ; - ledBargraph (vCap, TRUE) ; - } -} - - -/* - * ledOffAction: - * Make sure the leading LED is off and check the button - ********************************************************************************* - */ - -void ledOffAction (void) -{ - dischargeCapacitor () ; - -// Are we still pushing the button? - - if (digitalRead (PIFACE) == LOW) - { - vCap = vCapLast = 0.0 ; - ledBargraph (vCap, FALSE) ; - -// Wait until we release the button - - while (digitalRead (PIFACE) == LOW) - delay (10) ; - } -} - - -/* - *********************************************************************** - * The main program - *********************************************************************** - */ - -int main (void) -{ - unsigned int then, ledOnTime, ledOffTime ; - unsigned int ourDelay = (int)(1000.0 * timeInc) ; - - setup () ; - introLeds () ; - -// Setup the LED times - TODO reduce the ON time as the game progresses - - ledOnTime = 1000 ; - ledOffTime = 1000 ; - -// This is our Gate/Squarewave loop - - for (;;) - { - -// LED ON: - - (void)ledBargraph (vCap, TRUE) ; - then = millis () + ledOnTime ; - while (millis () < then) - { - ledOnAction () ; - delay (ourDelay) ; - } - -// Have we won yet? -// We need vCap to be in the top NUM_LEDS of the vCharge - - if (vCap > ((double)(NUM_LEDS - 1) / (double)NUM_LEDS * vCharge)) // Woo hoo! - { - winningLeds () ; - while (digitalRead (PIFACE) == HIGH) - delay (10) ; - while (digitalRead (PIFACE) == LOW) - delay (10) ; - vCap = vCapLast = 0.0 ; - } - -// LED OFF: - - (void)ledBargraph (vCap, FALSE) ; - then = millis () + ledOffTime ; - while (millis () < then) - { - ledOffAction () ; - delay (ourDelay) ; - } - - } - - return 0 ; -} diff --git a/examples/PiFace/metro.c b/examples/PiFace/metro.c deleted file mode 100644 index a4a8c1d..0000000 --- a/examples/PiFace/metro.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * metronome.c: - * Simple test for the PiFace interface board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include - -#define PIFACE 200 - -/* - * middleA: - * Play middle A (on the relays - yea!) - ********************************************************************************* - */ - -static void middleA (void) -{ - unsigned int next ; - - for (;;) - { - next = micros () + 1136 ; - digitalWrite (PIFACE + 0, 0) ; - digitalWrite (PIFACE + 1, 0) ; - while (micros () < next) - delayMicroseconds (1) ; - - next = micros () + 1137 ; - digitalWrite (PIFACE + 0, 1) ; - digitalWrite (PIFACE + 1, 1) ; - while (micros () < next) - delayMicroseconds (1) ; - - } -} - - -int main (int argc, char *argv []) -{ - int bpm, msPerBeat, state = 0 ; - unsigned int end ; - - printf ("Raspberry Pi PiFace Metronome\n") ; - printf ("=============================\n") ; - - piHiPri (50) ; - - wiringPiSetupSys () ; // Needed for timing functions - piFaceSetup (PIFACE) ; - - if (argc != 2) - { - printf ("Usage: %s \n", argv [0]) ; - exit (1) ; - } - - if (strcmp (argv [1], "a") == 0) - middleA () ; - - bpm = atoi (argv [1]) ; - - if ((bpm < 40) || (bpm > 208)) - { - printf ("%s range is 40 through 208 beats per minute\n", argv [0]) ; - exit (1) ; - } - - msPerBeat = 60000 / bpm ; - -// Main loop: -// Put some random LED pairs up for a few seconds, then blank ... - - for (;;) - { - end = millis () + msPerBeat ; - - digitalWrite (PIFACE + 0, state) ; - digitalWrite (PIFACE + 1, state) ; - - while (millis () < end) - delayMicroseconds (500) ; - - state ^= 1 ; - } - - return 0 ; -} diff --git a/examples/PiFace/motor.c b/examples/PiFace/motor.c deleted file mode 100644 index 14f5539..0000000 --- a/examples/PiFace/motor.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * motor.c: - * Use the PiFace board to demonstrate an H bridge - * circuit via the 2 relays. - * Then add on an external transsitor to help with PWM. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include -#include - -int outputs [2] = { 0,0 } ; - -#define PIFACE_BASE 200 -#define PWM_OUT_PIN 204 -#define PWM_UP 202 -#define PWM_DOWN 203 - -void scanButton (int button) -{ - if (digitalRead (PIFACE_BASE + button) == LOW) - { - outputs [button] ^= 1 ; - digitalWrite (PIFACE_BASE + button, outputs [button]) ; - printf ("Button %d pushed - output now: %s\n", - button, (outputs [button] == 0) ? "Off" : "On") ; - } - - while (digitalRead (PIFACE_BASE + button) == LOW) - delay (1) ; -} - - -int main (void) -{ - int pin, button ; - int pwmValue = 0 ; - - printf ("Raspberry Pi PiFace - Motor control\n") ; - printf ("==================================\n") ; - printf ("\n") ; - printf ( -"This program is designed to be used with a motor connected to the relays\n" -"in an H-Bridge type configuration with optional speeed control via PWM.\n" -"\n" -"Use the leftmost buttons to turn each relay on and off, and the rigthmost\n" -"buttons to increase ot decrease the PWM output on the control pin (pin\n" -"4)\n\n") ; - - wiringPiSetup () ; - piFaceSetup (PIFACE_BASE) ; - softPwmCreate (PWM_OUT_PIN, 100, 100) ; - -// Enable internal pull-ups & start with all off - - for (pin = 0 ; pin < 8 ; ++pin) - { - pullUpDnControl (PIFACE_BASE + pin, PUD_UP) ; - digitalWrite (PIFACE_BASE + pin, 0) ; - } - - for (;;) - { - for (button = 0 ; button < 2 ; ++button) - scanButton (button) ; - - if (digitalRead (PWM_UP) == LOW) - { - pwmValue += 10 ; - if (pwmValue > 100) - pwmValue = 100 ; - - softPwmWrite (PWM_OUT_PIN, pwmValue) ; - printf ("PWM -> %3d\n", pwmValue) ; - - while (digitalRead (PWM_UP) == LOW) - delay (5) ; - } - - if (digitalRead (PWM_DOWN) == LOW) - { - pwmValue -= 10 ; - if (pwmValue < 0) - pwmValue = 0 ; - - softPwmWrite (PWM_OUT_PIN, pwmValue) ; - printf ("PWM -> %3d\n", pwmValue) ; - - while (digitalRead (PWM_DOWN) == LOW) - delay (5) ; - } - - delay (5) ; - } - - return 0 ; -} diff --git a/examples/PiFace/reaction.c b/examples/PiFace/reaction.c deleted file mode 100644 index 5084508..0000000 --- a/examples/PiFace/reaction.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * reaction.c: - * Simple test for the PiFace interface board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include - - -int outputs [4] = { 0,0,0,0 } ; - -#define PIFACE 200 - -/* - * light: - * Light up the given LED - actually lights up a pair - ********************************************************************************* - */ - -void light (int led, int value) -{ - led *= 2 ; - digitalWrite (PIFACE + led + 0, value) ; - digitalWrite (PIFACE + led + 1, value) ; -} - -/* - * lightAll: - * All On or Off - ********************************************************************************* - */ - -void lightAll (int onoff) -{ - light (0, onoff) ; - light (1, onoff) ; - light (2, onoff) ; - light (3, onoff) ; -} - - -/* - * waitForNoButtons: - * Wait for all buttons to be released - ********************************************************************************* - */ - -void waitForNoButtons (void) -{ - int i, button ; - - for (;;) - { - button = 0 ; - for (i = 0 ; i < 4 ; ++i) - button += digitalRead (PIFACE + i) ; - - if (button == 4) - break ; - } -} - - -void scanButton (int button) -{ - if (digitalRead (PIFACE + button) == LOW) - { - outputs [button] ^= 1 ; - digitalWrite (PIFACE + button, outputs [button]) ; - } - - while (digitalRead (PIFACE + button) == LOW) - delay (1) ; -} - - -int main (void) -{ - int i, j ; - int led, button ; - unsigned int start, stop ; - - printf ("Raspberry Pi PiFace Reaction Timer\n") ; - printf ("==================================\n") ; - - if (piFaceSetup (PIFACE) == -1) - exit (1) ; - -// Enable internal pull-ups - - for (i = 0 ; i < 8 ; ++i) - pullUpDnControl (PIFACE + i, PUD_UP) ; - - -// Main game loop: -// Put some random LED pairs up for a few seconds, then blank ... - - for (;;) - { - printf ("Press any button to start ... \n") ; fflush (stdout) ; - - for (;;) - { - led = rand () % 4 ; - light (led, 1) ; - delay (10) ; - light (led, 0) ; - - button = 0 ; - for (j = 0 ; j < 4 ; ++j) - button += digitalRead (PIFACE + j) ; - - if (button != 4) - break ; - } - - waitForNoButtons () ; - - printf ("Wait for it ... ") ; fflush (stdout) ; - - led = rand () % 4 ; - delay (rand () % 500 + 1000) ; - light (led, 1) ; - - start = millis () ; - for (button = -1 ; button == -1 ; ) - { - for (j = 0 ; j < 4 ; ++j) - if (digitalRead (PIFACE + j) == 0) // Pushed - { - button = j ; - break ; - } - } - stop = millis () ; - button = 3 - button ; // Correct for the buttons/LEDs reversed - - light (led, 0) ; - - waitForNoButtons () ; - - light (led, 1) ; - - if (button == led) - { - printf ("You got it in %3d mS\n", stop - start) ; - } - else - { - printf ("Missed: You pushed %d - LED was %d\n", button, led) ; - for (;;) - { - light (button, 1) ; - delay (100) ; - light (button, 0) ; - delay (100) ; - i = 0 ; - for (j = 0 ; j < 4 ; ++j) - i += digitalRead (PIFACE + j) ; - if (i != 4) - break ; - } - - waitForNoButtons () ; - } - light (led, 0) ; - delay (4000) ; - } - - return 0 ; -} diff --git a/examples/PiGlow/Makefile b/examples/PiGlow/Makefile deleted file mode 100644 index f182db7..0000000 --- a/examples/PiGlow/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -# -# Makefile: -# wiringPi - A "wiring" library for the Raspberry Pi -# https://projects.drogon.net/wiring-pi -# -# Copyright (c) 2012-2015 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O3 -CC = gcc -INCLUDE = -I/usr/local/include -CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe - -LDFLAGS = -L/usr/local/lib -LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm - -# Should not alter anything below this line -############################################################################### - -SRC = piGlow0.c piGlow1.c piglow.c - -OBJ = $(SRC:.c=.o) - -BINS = $(SRC:.c=) - -all: $(BINS) - -piGlow0: piGlow0.o - $Q echo [link] - $Q $(CC) -o $@ piGlow0.o $(LDFLAGS) $(LDLIBS) - -piGlow1: piGlow1.o - $Q echo [link] - $Q $(CC) -o $@ piGlow1.o $(LDFLAGS) $(LDLIBS) - -piglow: piglow.o - $Q echo [link] - $Q $(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS) - -.c.o: - $Q echo [CC] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) *~ core tags $(BINS) - -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -install: piglow - $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: - makedepend -Y $(SRC) - -# DO NOT DELETE diff --git a/examples/PiGlow/piGlow0.c b/examples/PiGlow/piGlow0.c deleted file mode 100644 index d3fe4b9..0000000 --- a/examples/PiGlow/piGlow0.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * piglow.c: - * Very simple demonstration of the PiGlow board. - * This uses the SN3218 directly - soon there will be a new PiGlow - * devLib device which will handle the PiGlow board on a more easy - * to use manner... - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#define LED_BASE 533 - -int main (void) -{ - int i, j ; - - wiringPiSetupSys () ; - - sn3218Setup (LED_BASE) ; - - for (;;) - { - for (i = 0 ; i < 256 ; ++i) - for (j = 0 ; j < 18 ; ++j) - analogWrite (LED_BASE + j, i) ; - - for (i = 255 ; i >= 0 ; --i) - for (j = 0 ; j < 18 ; ++j) - analogWrite (LED_BASE + j, i) ; - } -} diff --git a/examples/PiGlow/piGlow1.c b/examples/PiGlow/piGlow1.c deleted file mode 100644 index a00b31e..0000000 --- a/examples/PiGlow/piGlow1.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * piGlow1.c: - * Very simple demonstration of the PiGlow board. - * This uses the piGlow devLib. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include - -#define PIGLOW_BASE 533 - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (!TRUE) -#endif - - -/* - * keypressed: clearKeypressed: - * Simple but effective ways to tell if the enter key has been pressed - ********************************************************************************* - */ - -static int keypressed (void) -{ - struct pollfd polls ; - - polls.fd = fileno (stdin) ; - polls.events = POLLIN ; - - return poll (&polls, 1, 0) != 0 ; -} - -static void clearKeypressed (void) -{ - while (keypressed ()) - (void)getchar () ; -} - - -/* - * pulseLed: - * Pulses the LED at position leg, ring from off to a max. value, - * then off again - ********************************************************************************* - */ - -static void pulseLed (int leg, int ring) -{ - int i ; - - for (i = 0 ; i < 140 ; ++i) - { - piGlow1 (leg, ring, i) ; - delay (1) ; - } - delay (10) ; - for (i = 140 ; i >= 0 ; --i) - { - piGlow1 (leg, ring, i) ; - delay (1) ; - } -} - -/* - * pulseLeg: - * Same as above, but a whole leg at a time - ********************************************************************************* - */ - -static void pulseLeg (int leg) -{ - int i ; - - for (i = 0 ; i < 140 ; ++i) - { - piGlowLeg (leg, i) ; delay (1) ; - } - delay (10) ; - for (i = 140 ; i >= 0 ; --i) - { - piGlowLeg (leg, i) ; delay (1) ; - } -} - - -/* - * pulse Ring: - * Same as above, but a whole ring at a time - ********************************************************************************* - */ - -static void pulseRing (int ring) -{ - int i ; - - for (i = 0 ; i < 140 ; ++i) - { - piGlowRing (ring, i) ; delay (1) ; - } - delay (10) ; - for (i = 140 ; i >= 0 ; --i) - { - piGlowRing (ring, i) ; delay (1) ; - } -} - -#define LEG_STEPS 3 - -static int legSequence [] = -{ - 4, 12, 99, - 99, 4, 12, - 12, 99, 4, -} ; - - -#define RING_STEPS 16 - -static int ringSequence [] = -{ - 0, 0, 0, 0, 0, 64, - 0, 0, 0, 0, 64, 64, - 0, 0, 0, 64, 64, 0, - 0, 0, 64, 64, 0, 0, - 0, 64, 64, 0, 0, 0, - 64, 64, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, - 64, 64, 0, 0, 0, 0, - 0, 64, 64, 0, 0, 0, - 0, 0, 64, 64, 0, 0, - 0, 0, 0, 64, 64, 0, - 0, 0, 0, 0, 64, 64, - 0, 0, 0, 0, 0, 64, - 0, 0, 0, 0, 0, 0, -} ; - -/* - * main: - * Our little demo prgoram - ********************************************************************************* - */ - -int main (void) -{ - int i ; - int step, ring, leg ; - -// Always initialise wiringPi: -// Use the Sys method if you don't need to run as root - - wiringPiSetupSys () ; - -// Initialise the piGlow devLib with our chosen pin base - - piGlowSetup (1) ; - -// LEDs, one at a time - - printf ("LEDs, one at a time\n") ; - for (; !keypressed () ;) - for (leg = 0 ; leg < 3 ; ++leg) - { - for (ring = 0 ; ring < 6 ; ++ring) - { - pulseLed (leg, ring) ; - if (keypressed ()) - break ; - } - if (keypressed ()) - break ; - } - clearKeypressed () ; - -// Rings, one at a time - - printf ("Rings, one at a time\n") ; - for (; !keypressed () ;) - for (ring = 0 ; ring < 6 ; ++ring) - { - pulseRing (ring) ; - if (keypressed ()) - break ; - } - clearKeypressed () ; - -// Legs, one at a time - - printf ("Legs, one at a time\n") ; - for (; !keypressed () ;) - for (leg = 0 ; leg < 3 ; ++leg) - { - pulseLeg (leg) ; - if (keypressed ()) - break ; - } - clearKeypressed () ; - - delay (1000) ; - -// Sequence - alternating rings, legs and random - - printf ("Sequence now\n") ; - for (; !keypressed () ;) - { - for (i = 0 ; i < 20 ; ++i) - for (step = 0 ; step < LEG_STEPS ; ++step) - { - for (leg = 0 ; leg < 3 ; ++leg) - piGlowLeg (leg, legSequence [step * 3 + leg]) ; - delay (80) ; - } - - for (i = 0 ; i < 10 ; ++i) - for (step = 0 ; step < RING_STEPS ; ++step) - { - for (ring = 0 ; ring < 6 ; ++ring) - piGlowRing (ring, ringSequence [step * 6 + ring]) ; - delay (80) ; - } - - for (i = 0 ; i < 1000 ; ++i) - { - leg = random () % 3 ; - ring = random () % 6 ; - piGlow1 (leg, ring, random () % 256) ; - delay (5) ; - piGlow1 (leg, ring, 0) ; - } - } - - return 0 ; -} diff --git a/examples/PiGlow/piglow.c b/examples/PiGlow/piglow.c deleted file mode 100644 index e6a2db3..0000000 --- a/examples/PiGlow/piglow.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * piglow.c: - * Very simple demonstration of the PiGlow board. - * This uses the piGlow devLib. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (!TRUE) -#endif - -#include -#include - -static void failUsage (void) -{ - fprintf (stderr, "Usage examples:\n") ; - fprintf (stderr, " piglow off # All off\n") ; - fprintf (stderr, " piglow red 50 # Light the 3 red LEDs to 50%%\n") ; - fprintf (stderr, " colours are: red, yellow, orange, green, blue and white\n") ; - fprintf (stderr, " piglow all 75 # Light all to 75%%\n") ; - fprintf (stderr, " piglow leg 0 25 # Light leg 0 to 25%%\n") ; - fprintf (stderr, " piglow ring 3 100 # Light ring 3 to 100%%\n") ; - fprintf (stderr, " piglow led 2 5 100 # Light the single LED on Leg 2, ring 5 to 100%%\n") ; - - exit (EXIT_FAILURE) ; -} - -static int getPercent (char *typed) -{ - int percent ; - - percent = atoi (typed) ; - if ((percent < 0) || (percent > 100)) - { - fprintf (stderr, "piglow: percent value out of range\n") ; - exit (EXIT_FAILURE) ; - } - return (percent * 255) / 100 ; -} - - -/* - * main: - * Our little demo prgoram - ********************************************************************************* - */ - -int main (int argc, char *argv []) -{ - int percent ; - int ring, leg ; - -// Always initialise wiringPi: -// Use the Sys method if you don't need to run as root - - wiringPiSetupSys () ; - -// Initialise the piGlow devLib - - piGlowSetup (FALSE) ; - - if (argc == 1) - failUsage () ; - - if ((argc == 2) && (strcasecmp (argv [1], "off") == 0)) - { - for (leg = 0 ; leg < 3 ; ++leg) - piGlowLeg (leg, 0) ; - return 0 ; - } - - if (argc == 3) - { - percent = getPercent (argv [2]) ; - - /**/ if (strcasecmp (argv [1], "red") == 0) - piGlowRing (PIGLOW_RED, percent) ; - else if (strcasecmp (argv [1], "yellow") == 0) - piGlowRing (PIGLOW_YELLOW, percent) ; - else if (strcasecmp (argv [1], "orange") == 0) - piGlowRing (PIGLOW_ORANGE, percent) ; - else if (strcasecmp (argv [1], "green") == 0) - piGlowRing (PIGLOW_GREEN, percent) ; - else if (strcasecmp (argv [1], "blue") == 0) - piGlowRing (PIGLOW_BLUE, percent) ; - else if (strcasecmp (argv [1], "white") == 0) - piGlowRing (PIGLOW_WHITE, percent) ; - else if (strcasecmp (argv [1], "all") == 0) - for (ring = 0 ; ring < 6 ; ++ring) - piGlowRing (ring, percent) ; - else - { - fprintf (stderr, "piglow: invalid colour\n") ; - exit (EXIT_FAILURE) ; - } - return 0 ; - } - - if (argc == 4) - { - /**/ if (strcasecmp (argv [1], "leg") == 0) - { - leg = atoi (argv [2]) ; - if ((leg < 0) || (leg > 2)) - { - fprintf (stderr, "piglow: leg value out of range\n") ; - exit (EXIT_FAILURE) ; - } - percent = getPercent (argv [3]) ; - piGlowLeg (leg, percent) ; - } - else if (strcasecmp (argv [1], "ring") == 0) - { - ring = atoi (argv [2]) ; - if ((ring < 0) || (ring > 5)) - { - fprintf (stderr, "piglow: ring value out of range\n") ; - exit (EXIT_FAILURE) ; - } - percent = getPercent (argv [3]) ; - piGlowRing (ring, percent) ; - } - return 0 ; - } - - if (argc == 5) - { - if (strcasecmp (argv [1], "led") != 0) - failUsage () ; - - leg = atoi (argv [2]) ; - if ((leg < 0) || (leg > 2)) - { - fprintf (stderr, "piglow: leg value out of range\n") ; - exit (EXIT_FAILURE) ; - } - ring = atoi (argv [3]) ; - if ((ring < 0) || (ring > 5)) - { - fprintf (stderr, "piglow: ring value out of range\n") ; - exit (EXIT_FAILURE) ; - } - percent = getPercent (argv [4]) ; - piGlow1 (leg, ring, percent) ; - return 0 ; - } - - failUsage () ; - return 0 ; -} - - diff --git a/examples/q2w/blink.c b/examples/blink-thread.c similarity index 73% rename from examples/q2w/blink.c rename to examples/blink-thread.c index 62b694a..a53fbf3 100644 --- a/examples/q2w/blink.c +++ b/examples/blink-thread.c @@ -1,6 +1,7 @@ /* - * blink.c: - * Simple "blink" test for the Quick2Wire interface board. + * blink-thread.c: + * Standard "blink" program in wiringPi. Blinks an LED connected + * to the first GPIO pin. * * Copyright (c) 2012-2013 Gordon Henderson. *********************************************************************** @@ -25,25 +26,35 @@ #include #include -#define LED 1 +// LED Pin - wiringPi pin 0 is BCM_GPIO 17. + +#define LED 0 + +PI_THREAD (blinky) +{ + for (;;) + { + digitalWrite (LED, HIGH) ; // On + delay (500) ; // mS + digitalWrite (LED, LOW) ; // Off + delay (500) ; + } +} + int main (void) { - -// Enable the on-goard GPIO + printf ("Raspberry Pi blink\n") ; wiringPiSetup () ; - - printf ("Raspberry Pi - Quick2Wire Mainboard LED Blink Test\n") ; - pinMode (LED, OUTPUT) ; + piThreadCreate (blinky) ; + for (;;) { - digitalWrite (LED, HIGH) ; - delay (500) ; - digitalWrite (LED, LOW) ; - delay (500) ; + printf ("Hello, world\n") ; + delay (600) ; } return 0 ; diff --git a/examples/blink12drcs.c b/examples/blink12drcs.c deleted file mode 100644 index 6ee11fd..0000000 --- a/examples/blink12drcs.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * blink12drcs.c: - * Simple sequence over the first 12 GPIO pins - LEDs - * Aimed at the Gertboard, but it's fairly generic. - * This version uses DRC totalk to the ATmega on the Gertboard - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define GERT_BASE 100 - -static int pinMap [] = -{ - 0, 1, 2, 3, // Pi Native - GERT_BASE + 2, GERT_BASE + 3, GERT_BASE + 4, GERT_BASE + 5, - GERT_BASE + 6, GERT_BASE + 7, GERT_BASE + 8, GERT_BASE + 9, -} ; - -// Simple sequencer data -// Triplets of LED, On/Off and delay - - -int data [] = -{ - 0, 1, 1, - 1, 1, 1, - 0, 0, 0, 2, 1, 1, - 1, 0, 0, 3, 1, 1, - 2, 0, 0, 4, 1, 1, - 3, 0, 0, 5, 1, 1, - 4, 0, 0, 6, 1, 1, - 5, 0, 0, 7, 1, 1, - 6, 0, 0, 8, 1, 1, - 7, 0, 0, 9, 1, 1, - 8, 0, 0, 10, 1, 1, - 9, 0, 0, 11, 1, 1, - 10, 0, 1, - 11, 0, 1, - - 0, 0, 1, // Extra delay - -// Back again - - 11, 1, 1, - 10, 1, 1, - 11, 0, 0, 9, 1, 1, - 10, 0, 0, 8, 1, 1, - 9, 0, 0, 7, 1, 1, - 8, 0, 0, 6, 1, 1, - 7, 0, 0, 5, 1, 1, - 6, 0, 0, 4, 1, 1, - 5, 0, 0, 3, 1, 1, - 4, 0, 0, 2, 1, 1, - 3, 0, 0, 1, 1, 1, - 2, 0, 0, 0, 1, 1, - 1, 0, 1, - 0, 0, 1, - - 0, 0, 1, // Extra delay - - 0, 9, 0, // End marker - -} ; - - -int main (void) -{ - int pin ; - int dataPtr ; - int l, s, d ; - - printf ("Raspberry Pi - 12-LED Sequence\n") ; - printf ("==============================\n") ; - printf ("\n") ; - printf ("Connect LEDs up to the first 4 Pi pins and 8 pins on the ATmega\n") ; - printf (" from PD2 through PB1 in that order,\n") ; - printf (" then sit back and watch the show!\n") ; - - wiringPiSetup () ; - drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ; - - for (pin = 0 ; pin < 12 ; ++pin) - pinMode (pinMap [pin], OUTPUT) ; - - dataPtr = 0 ; - - for (;;) - { - l = data [dataPtr++] ; // LED - s = data [dataPtr++] ; // State - d = data [dataPtr++] ; // Duration (10ths) - - if (s == 9) // 9 -> End Marker - { - dataPtr = 0 ; - continue ; - } - - digitalWrite (pinMap [l], s) ; - delay (d * analogRead (GERT_BASE) / 4) ; - } - - return 0 ; -} diff --git a/examples/blink6drcs.c b/examples/blink6drcs.c deleted file mode 100644 index 32f4921..0000000 --- a/examples/blink6drcs.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * blink6drcs.c: - * Simple sequence over 6 pins on a remote DRC board. - * Aimed at the Gertduino, but it's fairly generic. - * This version uses DRC to talk to the ATmega on the Gertduino - * - * Copyright (c) 2012-2014 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define GERT_BASE 100 - -static int pinMap [] = -{ - GERT_BASE + 6, GERT_BASE + 5, GERT_BASE + 3, GERT_BASE + 10, GERT_BASE + 9, GERT_BASE + 13, -} ; - -// Simple sequencer data -// Triplets of LED, On/Off and delay - - -int data [] = -{ - 0, 1, 1, - 1, 1, 1, - 0, 0, 0, 2, 1, 1, - 1, 0, 0, 3, 1, 1, - 2, 0, 0, 4, 1, 1, - 3, 0, 0, 5, 1, 1, - 4, 0, 1, - 5, 0, 1, - - 0, 0, 1, // Extra delay - -// Back again - - 5, 1, 1, - 4, 1, 1, - 5, 0, 0, 3, 1, 1, - 4, 0, 0, 2, 1, 1, - 3, 0, 0, 1, 1, 1, - 2, 0, 0, 0, 1, 1, - 1, 0, 1, - 0, 0, 1, - - 0, 0, 1, // Extra delay - - 0, 9, 0, // End marker - -} ; - - -int main (void) -{ - int pin ; - int dataPtr ; - int l, s, d ; - - printf ("Raspberry Pi - 6-LED Sequence\n") ; - printf ("=============================\n") ; - printf ("\n") ; - printf (" Use the 2 buttons to temporarily speed up the sequence\n") ; - - wiringPiSetupSys () ; // Not using the Pi's GPIO here - drcSetupSerial (GERT_BASE, 20, "/dev/ttyAMA0", 115200) ; - - for (pin = 0 ; pin < 6 ; ++pin) - pinMode (pinMap [pin], OUTPUT) ; - - pinMode (GERT_BASE + 16, INPUT) ; // Buttons - pinMode (GERT_BASE + 17, INPUT) ; - - pullUpDnControl (GERT_BASE + 16, PUD_UP) ; - pullUpDnControl (GERT_BASE + 17, PUD_UP) ; - - dataPtr = 0 ; - - for (;;) - { - l = data [dataPtr++] ; // LED - s = data [dataPtr++] ; // State - d = data [dataPtr++] ; // Duration (10ths) - - if (s == 9) // 9 -> End Marker - { - dataPtr = 0 ; - continue ; - } - - digitalWrite (pinMap [l], s) ; - delay (d * digitalRead (GERT_BASE + 16) * 15 + digitalRead (GERT_BASE + 17) * 20) ; - } - - return 0 ; -} diff --git a/examples/blink8-drcn.c b/examples/blink8-drcn.c deleted file mode 100644 index 96c775b..0000000 --- a/examples/blink8-drcn.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * blink8-drcn.c: - * Simple sequence over the first 8 GPIO pins - LEDs - * Aimed at the Ladder board, but it's fairly generic. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -int main (void) -{ - int i, led ; - - printf ("Raspberry Pi - 8-LED Sequencer\n") ; - printf ("==============================\n") ; - printf ("\n") ; - printf ("Connect LEDs to the first 8 GPIO pins and watch ...\n") ; - - int pinBase = 100 ; - -// wiringPiSetup () ; - drcSetupNet (pinBase, 100, "192.168.254.21", "6124", "123456") ; - - for (i = 0 ; i < 8 ; ++i) - pinMode (i + pinBase, OUTPUT) ; - - for (;;) - { - for (led = 0 ; led < 8 ; ++led) - { - digitalWrite (led + pinBase, 1) ; - delay (10) ; - } - - for (led = 0 ; led < 8 ; ++led) - { - digitalWrite (led + pinBase, 0) ; - delay (10) ; - } - } -} diff --git a/examples/delayTest.c b/examples/delayTest.c index 4c8b6ca..d772cf9 100644 --- a/examples/delayTest.c +++ b/examples/delayTest.c @@ -25,7 +25,6 @@ #include #include -#include #include @@ -34,17 +33,13 @@ int main() { int x ; - struct timeval t1, t2 ; + struct timeval t1, t2, t3 ; int t ; int max, min ; int del ; - int underRuns, overRuns, exactRuns, total ; + int underRuns, overRuns, exactRuns, bogusRuns, total ; int descheds ; - if (wiringPiSetup () == -1) - return 1 ; - - piHiPri (10) ; sleep (1) ; // Baseline test @@ -58,21 +53,22 @@ int main() { underRuns = overRuns = exactRuns = total = 0 ; descheds = 0 ; - max = del ; - min = del ; + max = 0 ; + min = 999 ; for (x = 0 ; x < CYCLES ; ++x) { for (;;) // Repeat this if we get a delay over 999uS { // -> High probability Linux has deschedulled us gettimeofday (&t1, NULL) ; - delayMicroseconds (del) ; + usleep (del) ; +// delayMicroseconds (del) ; gettimeofday (&t2, NULL) ; - if (t2.tv_usec < t1.tv_usec) // Counter wrapped - t = (1000000 + t2.tv_usec) - t1.tv_usec; - else - t = t2.tv_usec - t1.tv_usec ; + timersub (&t2, &t1, &t3) ; + + t = t3.tv_usec ; + if (t > 999) { ++descheds ; @@ -82,25 +78,24 @@ int main() break ; } - if (t > max) - { - max = t ; - ++overRuns ; - } - else if (t < min) - { - min = t ; - ++underRuns ; - } - else + if (t == del) ++exactRuns ; + else if (t < del) + ++underRuns ; + else if (t > del) + ++overRuns ; + + if (t > max) + max = t ; + else if (t < min) + min = t ; total += t ; } printf ("Delay: %3d. Min: %3d, Max: %3d, Unders: %3d, Overs: %3d, Exacts: %3d, Average: %3d, Descheds: %2d\n", del, min, max, underRuns, overRuns, exactRuns, total / CYCLES, descheds) ; fflush (stdout) ; - delay (1) ; + usleep (1000) ; } return 0 ; diff --git a/examples/ds1302.c b/examples/ds1302.c deleted file mode 100644 index f1e9e20..0000000 --- a/examples/ds1302.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * ds1302.c: - * Real Time clock - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include - -#include -#include - -// Register defines - -#define RTC_SECS 0 -#define RTC_MINS 1 -#define RTC_HOURS 2 -#define RTC_DATE 3 -#define RTC_MONTH 4 -#define RTC_DAY 5 -#define RTC_YEAR 6 -#define RTC_WP 7 -#define RTC_TC 8 -#define RTC_BM 31 - - -static unsigned int masks [] = { 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x07, 0xFF } ; - - -/* - * bcdToD: dToBCD: - * BCD decode/encode - ********************************************************************************* - */ - -static int bcdToD (unsigned int byte, unsigned int mask) -{ - unsigned int b1, b2 ; - byte &= mask ; - b1 = byte & 0x0F ; - b2 = ((byte >> 4) & 0x0F) * 10 ; - return b1 + b2 ; -} - -static unsigned int dToBcd (unsigned int byte) -{ - return ((byte / 10) << 4) + (byte % 10) ; -} - - -/* - * ramTest: - * Simple test of the 31 bytes of RAM inside the DS1302 chip - ********************************************************************************* - */ - -static int ramTestValues [] = - { 0x00, 0xFF, 0xAA, 0x55, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0xF0, 0x0F, -1 } ; - -static int ramTest (void) -{ - int addr ; - int got ; - int i = 0 ; - int errors = 0 ; - int testVal ; - - printf ("DS1302 RAM TEST\n") ; - - testVal = ramTestValues [i] ; - - while (testVal != -1) - { - for (addr = 0 ; addr < 31 ; ++addr) - ds1302ramWrite (addr, testVal) ; - - for (addr = 0 ; addr < 31 ; ++addr) - if ((got = ds1302ramRead (addr)) != testVal) - { - printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n", - addr, testVal, got) ; - ++errors ; - } - testVal = ramTestValues [++i] ; - } - - for (addr = 0 ; addr < 31 ; ++addr) - ds1302ramWrite (addr, addr) ; - - for (addr = 0 ; addr < 31 ; ++addr) - if ((got = ds1302ramRead (addr)) != addr) - { - printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n", - addr, addr, got) ; - ++errors ; - } - - if (errors == 0) - printf ("-- DS1302 RAM TEST: OK\n") ; - else - printf ("-- DS1302 RAM TEST FAILURE. %d errors.\n", errors) ; - - return 0 ; -} - -/* - * setLinuxClock: - * Set the Linux clock from the hardware - ********************************************************************************* - */ - -static int setLinuxClock (void) -{ - char dateTime [20] ; - char command [64] ; - int clock [8] ; - - - printf ("Setting the Linux Clock from the DS1302... ") ; fflush (stdout) ; - - ds1302clockRead (clock) ; - -// [MMDDhhmm[[CC]YY][.ss]] - - sprintf (dateTime, "%02d%02d%02d%02d%02d%02d.%02d", - bcdToD (clock [RTC_MONTH], masks [RTC_MONTH]), - bcdToD (clock [RTC_DATE], masks [RTC_DATE]), - bcdToD (clock [RTC_HOURS], masks [RTC_HOURS]), - bcdToD (clock [RTC_MINS], masks [RTC_MINS]), - 20, - bcdToD (clock [RTC_YEAR], masks [RTC_YEAR]), - bcdToD (clock [RTC_SECS], masks [RTC_SECS])) ; - - sprintf (command, "/bin/date %s", dateTime) ; - system (command) ; - - return 0 ; -} - - -/* - * setDSclock: - * Set the DS1302 block from Linux time - ********************************************************************************* - */ - -static int setDSclock (void) -{ - struct tm t ; - time_t now ; - int clock [8] ; - - printf ("Setting the clock in the DS1302 from Linux time... ") ; - - now = time (NULL) ; - gmtime_r (&now, &t) ; - - clock [ 0] = dToBcd (t.tm_sec) ; // seconds - clock [ 1] = dToBcd (t.tm_min) ; // mins - clock [ 2] = dToBcd (t.tm_hour) ; // hours - clock [ 3] = dToBcd (t.tm_mday) ; // date - clock [ 4] = dToBcd (t.tm_mon + 1) ; // months 0-11 --> 1-12 - clock [ 5] = dToBcd (t.tm_wday + 1) ; // weekdays (sun 0) - clock [ 6] = dToBcd (t.tm_year - 100) ; // years - clock [ 7] = 0 ; // W-Protect off - - ds1302clockWrite (clock) ; - - printf ("OK\n") ; - - return 0 ; -} - - - - -int main (int argc, char *argv []) -{ - int i ; - int clock [8] ; - - wiringPiSetup () ; - ds1302setup (0, 1, 2) ; - - if (argc == 2) - { - /**/ if (strcmp (argv [1], "-slc") == 0) - return setLinuxClock () ; - else if (strcmp (argv [1], "-sdsc") == 0) - return setDSclock () ; - else if (strcmp (argv [1], "-rtest") == 0) - return ramTest () ; - else - { - printf ("Usage: ds1302 [-slc | -sdsc | -rtest]\n") ; - return EXIT_FAILURE ; - } - } - - for (i = 0 ;; ++i) - { - printf ("%5d: ", i) ; - - ds1302clockRead (clock) ; - printf (" %2d:%02d:%02d", - bcdToD (clock [2], masks [2]), bcdToD (clock [1], masks [1]), bcdToD (clock [0], masks [0])) ; - - printf (" %2d/%02d/%04d", - bcdToD (clock [3], masks [3]), bcdToD (clock [4], masks [4]), bcdToD (clock [6], masks [6]) + 2000) ; - - printf ("\n") ; - - delay (200) ; - } - - return 0 ; -} diff --git a/examples/lcd-adafruit.c b/examples/lcd-adafruit.c deleted file mode 100644 index 47c9b9b..0000000 --- a/examples/lcd-adafruit.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * lcd-adafruit.c: - * Text-based LCD driver test code - * This is designed to drive the Adafruit RGB LCD Plate - * with the additional 5 buttons for the Raspberry Pi - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include - -#include -#include -#include - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (1==2) -#endif - - -// Defines for the Adafruit Pi LCD interface board - -#define AF_BASE 100 -#define AF_RED (AF_BASE + 6) -#define AF_GREEN (AF_BASE + 7) -#define AF_BLUE (AF_BASE + 8) - -#define AF_E (AF_BASE + 13) -#define AF_RW (AF_BASE + 14) -#define AF_RS (AF_BASE + 15) - -#define AF_DB4 (AF_BASE + 12) -#define AF_DB5 (AF_BASE + 11) -#define AF_DB6 (AF_BASE + 10) -#define AF_DB7 (AF_BASE + 9) - -#define AF_SELECT (AF_BASE + 0) -#define AF_RIGHT (AF_BASE + 1) -#define AF_DOWN (AF_BASE + 2) -#define AF_UP (AF_BASE + 3) -#define AF_LEFT (AF_BASE + 4) - - -// User-Defined character test - -static unsigned char newChar [8] = -{ - 0b00100, - 0b00100, - 0b00000, - 0b00100, - 0b01110, - 0b11011, - 0b11011, - 0b10001, -} ; - -// Global lcd handle: - -static int lcdHandle ; - -/* - * usage: - ********************************************************************************* - */ - -int usage (const char *progName) -{ - fprintf (stderr, "Usage: %s colour\n", progName) ; - return EXIT_FAILURE ; -} - - -/* - * scrollMessage: - ********************************************************************************* - */ - -static const char *message = - " " - "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/" - " " ; - -void scrollMessage (int line, int width) -{ - char buf [32] ; - static int position = 0 ; - static int timer = 0 ; - - if (millis () < timer) - return ; - - timer = millis () + 200 ; - - strncpy (buf, &message [position], width) ; - buf [width] = 0 ; - lcdPosition (lcdHandle, 0, line) ; - lcdPuts (lcdHandle, buf) ; - - if (++position == (strlen (message) - width)) - position = 0 ; -} - - -/* - * setBacklightColour: - * The colour outputs are inverted. - ********************************************************************************* - */ - -static void setBacklightColour (int colour) -{ - colour &= 7 ; - - digitalWrite (AF_RED, !(colour & 1)) ; - digitalWrite (AF_GREEN, !(colour & 2)) ; - digitalWrite (AF_BLUE, !(colour & 4)) ; -} - - -/* - * adafruitLCDSetup: - * Setup the Adafruit board by making sure the additional pins are - * set to the correct modes, etc. - ********************************************************************************* - */ - -static void adafruitLCDSetup (int colour) -{ - int i ; - -// Backlight LEDs - - pinMode (AF_RED, OUTPUT) ; - pinMode (AF_GREEN, OUTPUT) ; - pinMode (AF_BLUE, OUTPUT) ; - setBacklightColour (colour) ; - -// Input buttons - - for (i = 0 ; i <= 4 ; ++i) - { - pinMode (AF_BASE + i, INPUT) ; - pullUpDnControl (AF_BASE + i, PUD_UP) ; // Enable pull-ups, switches close to 0v - } - -// Control signals - - pinMode (AF_RW, OUTPUT) ; digitalWrite (AF_RW, LOW) ; // Not used with wiringPi - always in write mode - -// The other control pins are initialised with lcdInit () - - lcdHandle = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ; - - if (lcdHandle < 0) - { - fprintf (stderr, "lcdInit failed\n") ; - exit (EXIT_FAILURE) ; - } -} - - -/* - * waitForEnter: - * On the Adafruit display, wait for the select button - ********************************************************************************* - */ - -static void waitForEnter (void) -{ - printf ("Press SELECT to continue: ") ; fflush (stdout) ; - - while (digitalRead (AF_SELECT) == HIGH) // Wait for push - delay (1) ; - - while (digitalRead (AF_SELECT) == LOW) // Wait for release - delay (1) ; - - printf ("OK\n") ; -} - - -/* - * speedTest: - * Test the update speed of the display - ********************************************************************************* - */ - -static void speedTest (void) -{ - unsigned int start, end, taken ; - int times ; - - lcdClear (lcdHandle) ; - start = millis () ; - for (times = 0 ; times < 10 ; ++times) - { - lcdPuts (lcdHandle, "0123456789ABCDEF") ; - lcdPuts (lcdHandle, "0123456789ABCDEF") ; - } - end = millis () ; - taken = (end - start) / 10; - - lcdClear (lcdHandle) ; - lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Speed: %dmS", taken) ; - lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "For full update") ; - - waitForEnter () ; - - lcdClear (lcdHandle) ; - lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Time: %dmS", taken / 32) ; - lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "Per character") ; - - waitForEnter () ; - - lcdClear (lcdHandle) ; - lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "%d cps...", 32000 / taken) ; - - waitForEnter () ; -} - - -/* - * The works - ********************************************************************************* - */ - -int main (int argc, char *argv[]) -{ - int colour ; - int cols = 16 ; - int waitForRelease = FALSE ; - - struct tm *t ; - time_t tim ; - - char buf [32] ; - - if (argc != 2) - return usage (argv [0]) ; - - printf ("Raspberry Pi Adafruit LCD test\n") ; - printf ("==============================\n") ; - - colour = atoi (argv [1]) ; - - wiringPiSetupSys () ; - mcp23017Setup (AF_BASE, 0x20) ; - - adafruitLCDSetup (colour) ; - - lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ; - lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; - - waitForEnter () ; - - lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "Adafruit RGB LCD") ; - - waitForEnter () ; - - lcdCharDef (lcdHandle, 2, newChar) ; - - lcdClear (lcdHandle) ; - lcdPosition (lcdHandle, 0, 0) ; - lcdPuts (lcdHandle, "User Char: ") ; - lcdPutchar (lcdHandle, 2) ; - - lcdCursor (lcdHandle, TRUE) ; - lcdCursorBlink (lcdHandle, TRUE) ; - - waitForEnter () ; - - lcdCursor (lcdHandle, FALSE) ; - lcdCursorBlink (lcdHandle, FALSE) ; - - speedTest () ; - - lcdClear (lcdHandle) ; - - for (;;) - { - scrollMessage (0, cols) ; - - tim = time (NULL) ; - t = localtime (&tim) ; - - sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ; - - lcdPosition (lcdHandle, (cols - 8) / 2, 1) ; - lcdPuts (lcdHandle, buf) ; - -// Check buttons to cycle colour - -// If Up or Down are still pushed, then skip - - if (waitForRelease) - { - if ((digitalRead (AF_UP) == LOW) || (digitalRead (AF_DOWN) == LOW)) - continue ; - else - waitForRelease = FALSE ; - } - - if (digitalRead (AF_UP) == LOW) // Pushed - { - colour = colour + 1 ; - if (colour == 8) - colour = 0 ; - setBacklightColour (colour) ; - waitForRelease = TRUE ; - } - - if (digitalRead (AF_DOWN) == LOW) // Pushed - { - colour = colour - 1 ; - if (colour == -1) - colour = 7 ; - setBacklightColour (colour) ; - waitForRelease = TRUE ; - } - - } - - return 0 ; -} diff --git a/examples/lcd.c b/examples/lcd.c deleted file mode 100644 index 510f562..0000000 --- a/examples/lcd.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * lcd.c: - * Text-based LCD driver. - * This is designed to drive the parallel interface LCD drivers - * based in the Hitachi HD44780U controller and compatables. - * - * This test program assumes the following: - * - * 8-bit displays: - * GPIO 0-7 is connected to display data pins 0-7. - * GPIO 11 is the RS pin. - * GPIO 10 is the Strobe/E pin. - * - * For 4-bit interface: - * GPIO 4-7 is connected to display data pins 4-7. - * GPIO 11 is the RS pin. - * GPIO 10 is the Strobe/E pin. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#ifndef TRUE -# define TRUE (1==1) -# define FALSE (1==2) -#endif - -static unsigned char newChar [8] = -{ - 0b11111, - 0b10001, - 0b10001, - 0b10101, - 0b11111, - 0b10001, - 0b10001, - 0b11111, -} ; - - -// Global lcd handle: - -static int lcdHandle ; - -/* - * usage: - ********************************************************************************* - */ - -int usage (const char *progName) -{ - fprintf (stderr, "Usage: %s bits cols rows\n", progName) ; - return EXIT_FAILURE ; -} - - -/* - * scrollMessage: - ********************************************************************************* - */ - -static const char *message = - " " - "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/" - " " ; - -void scrollMessage (int line, int width) -{ - char buf [32] ; - static int position = 0 ; - static int timer = 0 ; - - if (millis () < timer) - return ; - - timer = millis () + 200 ; - - strncpy (buf, &message [position], width) ; - buf [width] = 0 ; - lcdPosition (lcdHandle, 0, line) ; - lcdPuts (lcdHandle, buf) ; - - if (++position == (strlen (message) - width)) - position = 0 ; -} - - -/* - * pingPong: - * Bounce a character - only on 4-line displays - ********************************************************************************* - */ - -static void pingPong (int lcd, int cols) -{ - static int position = 0 ; - static int dir = 0 ; - - if (dir == 0) // Setup - { - dir = 1 ; - lcdPosition (lcdHandle, 0, 3) ; - lcdPutchar (lcdHandle, '*') ; - return ; - } - - lcdPosition (lcdHandle, position, 3) ; - lcdPutchar (lcdHandle, ' ') ; - position += dir ; - - if (position == cols) - { - dir = -1 ; - --position ; - } - - if (position < 0) - { - dir = 1 ; - ++position ; - } - - lcdPosition (lcdHandle, position, 3) ; - lcdPutchar (lcdHandle, '#') ; -} - - -/* - * waitForEnter: - ********************************************************************************* - */ - -static void waitForEnter (void) -{ - printf ("Press ENTER to continue: ") ; - (void)fgetc (stdin) ; -} - - -/* - * The works - ********************************************************************************* - */ - -int main (int argc, char *argv[]) -{ - int i ; - int lcd ; - int bits, rows, cols ; - - struct tm *t ; - time_t tim ; - - char buf [32] ; - - if (argc != 4) - return usage (argv [0]) ; - - printf ("Raspberry Pi LCD test\n") ; - printf ("=====================\n") ; - - bits = atoi (argv [1]) ; - cols = atoi (argv [2]) ; - rows = atoi (argv [3]) ; - - if (!((rows == 1) || (rows == 2) || (rows == 4))) - { - fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ; - return EXIT_FAILURE ; - } - - if (!((cols == 16) || (cols == 20))) - { - fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ; - return EXIT_FAILURE ; - } - - wiringPiSetup () ; - - if (bits == 4) - lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ; - else - lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ; - - if (lcdHandle < 0) - { - fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ; - return -1 ; - } - - lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ; - lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; - - waitForEnter () ; - - if (rows > 1) - { - lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; - - if (rows == 4) - { - lcdPosition (lcdHandle, 0, 2) ; - for (i = 0 ; i < ((cols - 1) / 2) ; ++i) - lcdPuts (lcdHandle, "=-") ; - lcdPuts (lcdHandle, "=3") ; - - lcdPosition (lcdHandle, 0, 3) ; - for (i = 0 ; i < ((cols - 1) / 2) ; ++i) - lcdPuts (lcdHandle, "-=") ; - lcdPuts (lcdHandle, "-4") ; - } - } - - waitForEnter () ; - - lcdCharDef (lcdHandle, 2, newChar) ; - - lcdClear (lcdHandle) ; - lcdPosition (lcdHandle, 0, 0) ; - lcdPuts (lcdHandle, "User Char: ") ; - lcdPutchar (lcdHandle, 2) ; - - lcdCursor (lcdHandle, TRUE) ; - lcdCursorBlink (lcdHandle, TRUE) ; - - waitForEnter () ; - - lcdCursor (lcdHandle, FALSE) ; - lcdCursorBlink (lcdHandle, FALSE) ; - lcdClear (lcdHandle) ; - - for (;;) - { - scrollMessage (0, cols) ; - - if (rows == 1) - continue ; - - tim = time (NULL) ; - t = localtime (&tim) ; - - sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ; - - lcdPosition (lcdHandle, (cols - 8) / 2, 1) ; - lcdPuts (lcdHandle, buf) ; - - if (rows == 2) - continue ; - - sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ; - - lcdPosition (lcdHandle, (cols - 10) / 2, 2) ; - lcdPuts (lcdHandle, buf) ; - - pingPong (lcd, cols) ; - } - - return 0 ; -} diff --git a/examples/max31855.c b/examples/max31855.c deleted file mode 100644 index 36b3cf6..0000000 --- a/examples/max31855.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include - -#include -#include - -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 ; - - } - -} diff --git a/examples/nes.c b/examples/nes.c deleted file mode 100644 index 31908e8..0000000 --- a/examples/nes.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * nes.c: - * Test program for an old NES controller connected to the Pi. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include - -#define BLANK "| " - -int main () -{ - int joystick ; - unsigned int buttons ; - - if (wiringPiSetup () == -1) - { - fprintf (stdout, "oops: %s\n", strerror (errno)) ; - return 1 ; - } - - if ((joystick = setupNesJoystick (2, 1, 0)) == -1) - { - fprintf (stdout, "Unable to setup joystick\n") ; - return 1 ; - } - - for (;;) - { - buttons = readNesJoystick (joystick) ; - - if ((buttons & NES_UP) != 0) printf ("| UP " ) ; else printf (BLANK) ; - if ((buttons & NES_DOWN) != 0) printf ("| DOWN " ) ; else printf (BLANK) ; - if ((buttons & NES_LEFT) != 0) printf ("| LEFT " ) ; else printf (BLANK) ; - if ((buttons & NES_RIGHT) != 0) printf ("|RIGHT " ) ; else printf (BLANK) ; - if ((buttons & NES_SELECT) != 0) printf ("|SELECT" ) ; else printf (BLANK) ; - if ((buttons & NES_START) != 0) printf ("|START " ) ; else printf (BLANK) ; - if ((buttons & NES_A) != 0) printf ("| A " ) ; else printf (BLANK) ; - if ((buttons & NES_B) != 0) printf ("| B " ) ; else printf (BLANK) ; - printf ("|\n") ; - } - - return 0 ; -} diff --git a/examples/q2w/Makefile b/examples/q2w/Makefile deleted file mode 100644 index 8f773bf..0000000 --- a/examples/q2w/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# -# Makefile: -# wiringPi - A "wiring" library for the Raspberry Pi -# https://projects.drogon.net/wiring-pi -# -# Copyright (c) 2012-2013 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O3 -CC = gcc -INCLUDE = -I/usr/local/include -CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe - -LDFLAGS = -L/usr/local/lib -LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm - -############################################################################### - -SRC = blink.c button.c blink-io.c volts.c bright.c - -OBJ = $(SRC:.c=.o) - -BINS = $(SRC:.c=) - -all: $(BINS) - -blink: blink.o - $Q echo [link] - $Q $(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) - -blink-io: blink-io.o - $Q echo [link] - $Q $(CC) -o $@ blink-io.o $(LDFLAGS) $(LDLIBS) - -button: button.o - $Q echo [link] - $Q $(CC) -o $@ button.o $(LDFLAGS) $(LDLIBS) - -volts: volts.o - $Q echo [link] - $Q $(CC) -o $@ volts.o $(LDFLAGS) $(LDLIBS) - -bright: bright.o - $Q echo [link] - $Q $(CC) -o $@ bright.o $(LDFLAGS) $(LDLIBS) - - -.c.o: - $Q echo [CC] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) *~ core tags $(BINS) - -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -depend: - makedepend -Y $(SRC) - -# DO NOT DELETE diff --git a/examples/q2w/binary.c b/examples/q2w/binary.c deleted file mode 100644 index 3c987c6..0000000 --- a/examples/q2w/binary.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * binary.c: - * Using the Quick 2 wire 16-bit GPIO expansion board to output - * a binary counter. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define Q2W_BASE 100 - -int main (void) -{ - int i, bit ; - -// Enable the on-goard GPIO - - wiringPiSetup () ; - -// Add in the mcp23017 on the q2w board - - mcp23017Setup (Q2W_BASE, 0x20) ; - - printf ("Raspberry Pi - quite2Wire MCP23017 Test\n") ; - -// On-board button Input: - - pinMode (0, INPUT) ; - -// First 10 pins on q2w board as outputs: - - for (i = 0 ; i < 10 ; ++i) - pinMode (Q2W_BASE + i, OUTPUT) ; - -// Last pin as an input with the internal pull-up enabled - - pinMode (Q2W_BASE + 15, INPUT) ; - pullUpDnControl (Q2W_BASE + 15, PUD_UP) ; - -// Loop, outputting a binary number, -// Go faster with the button, or stop if the -// on-board button is pushed - - for (;;) - { - for (i = 0 ; i < 1024 ; ++i) - { - for (bit = 0 ; bit < 10 ; ++bit) - digitalWrite (Q2W_BASE + bit, i & (1 << bit)) ; - - while (digitalRead (0) == HIGH) // While pushed - delay (1) ; - - if (digitalRead (Q2W_BASE + 15) == HIGH) // Not Pushed - delay (100) ; - } - } - return 0 ; -} diff --git a/examples/q2w/blink-io.c b/examples/q2w/blink-io.c deleted file mode 100644 index 4dd4276..0000000 --- a/examples/q2w/blink-io.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * blink-io.c: - * Simple "blink" test for the Quick2Wire 16-pin IO board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define LED 1 -#define Q2W_BASE 100 - -int main (void) -{ - -// Enable the on-goard GPIO - - wiringPiSetup () ; - -// Add in the mcp23017 on the q2w board - - mcp23017Setup (Q2W_BASE, 0x20) ; - - printf ("Raspberry Pi - Quick2Wire MCP23017 Blink Test\n") ; - -// Blink the on-board LED as well as one on the mcp23017 - - pinMode (LED, OUTPUT) ; - pinMode (Q2W_BASE + 0, OUTPUT) ; - - for (;;) - { - digitalWrite (LED, HIGH) ; - digitalWrite (Q2W_BASE + 0, HIGH) ; - delay (500) ; - digitalWrite (LED, LOW) ; - digitalWrite (Q2W_BASE + 0, LOW) ; - delay (500) ; - } - - return 0 ; -} diff --git a/examples/q2w/blink.sh b/examples/q2w/blink.sh deleted file mode 100644 index bb6107a..0000000 --- a/examples/q2w/blink.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -e -# -# blink.sh: -# Standard "blink" program in wiringPi. Blinks an LED connected -# to the LED on the Quick2Wire board -# -# Copyright (c) 2012-2013 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 . -####################################################################### - -# LED Pin - wiringPi pin 1 is BCM_GPIO 18. - -LED=1 - -gpio mode $LED out - -while true; do - gpio write $LED 1 - sleep 0.5 - gpio write $LED 0 - sleep 0.5 -done diff --git a/examples/q2w/bright.c b/examples/q2w/bright.c deleted file mode 100644 index 2318834..0000000 --- a/examples/q2w/bright.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * bright.c: - * Vary the Q2W LED brightness with the analog card - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define LED 1 -#define Q2W_ABASE 120 - -int main (void) -{ - int value ; - -// Enable the on-goard GPIO - - wiringPiSetup () ; - -// Add in the pcf8591 on the q2w board - - pcf8591Setup (Q2W_ABASE, 0x48) ; - - printf ("Raspberry Pi - Quick2Wire Analog Test\n") ; - -// Setup the LED - - pinMode (LED, PWM_OUTPUT) ; - pwmWrite (LED, 0) ; - - for (;;) - { - value = analogRead (Q2W_ABASE + 0) ; - pwmWrite (LED, value * 4) ; - delay (10) ; - } - - return 0 ; -} diff --git a/examples/q2w/button.c b/examples/q2w/button.c deleted file mode 100644 index 1781f02..0000000 --- a/examples/q2w/button.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * button.c: - * Simple button test for the Quick2Wire interface board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -#define BUTTON 0 -#define LED1 1 -#define LED2 7 - -int main (void) -{ - -// Enable the on-goard GPIO - - wiringPiSetup () ; - - printf ("Raspberry Pi - Quick2Wire Mainboard Button & LED Test\n") ; - - pinMode (BUTTON, INPUT) ; - pinMode (LED1, OUTPUT) ; - pinMode (LED2, OUTPUT) ; - - digitalWrite (LED1, HIGH) ; // On-board LED on - digitalWrite (LED2, LOW) ; // 2nd LED off - - for (;;) - { - if (digitalRead (BUTTON) == HIGH) // Swap LED states - { - digitalWrite (LED1, LOW) ; - digitalWrite (LED2, HIGH) ; - while (digitalRead (BUTTON) == HIGH) - delay (1) ; - digitalWrite (LED1, HIGH) ; - digitalWrite (LED2, LOW) ; - } - delay (1) ; - } - - return 0 ; -} diff --git a/examples/q2w/volts.c b/examples/q2w/volts.c deleted file mode 100644 index e091093..0000000 --- a/examples/q2w/volts.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * volts.c: - * Read in all 4 analogs on the Q2W analog board. - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#define LED 1 -#define Q2W_ABASE 120 - -int main (void) -{ - int value, pin ; - -// Enable the on-goard GPIO - - wiringPiSetup () ; - - pinMode (LED, OUTPUT) ; // On-board LED - -// Add in the pcf8591 on the q2w board - - pcf8591Setup (Q2W_ABASE, 0x48) ; - - printf ("Raspberry Pi - Quick2Wire Voltmeter\n") ; - - for (;;) - { - for (pin = 0 ; pin < 4 ; ++pin) - { - value = analogRead (Q2W_ABASE + pin) ; - printf (" %5.2f", (double)value * 3.3 / 255.0) ; - } - printf ("\r") ; fflush (stdout) ; - - delay (100) ; - digitalWrite (LED, !digitalRead (LED)) ; // Flicker the LED - } - - return 0 ; -} diff --git a/examples/rht03.c b/examples/rht03.c deleted file mode 100644 index 854f837..0000000 --- a/examples/rht03.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * rht03.c: - * Driver for the MaxDetect series sensors - * - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include - -#include -#include - -#define RHT03_PIN 7 - -/* - *********************************************************************** - * The main program - *********************************************************************** - */ - -int main (void) -{ - int result, temp, rh ; - int minT, maxT, minRH, maxRH ; - - int numGood, numBad ; - - wiringPiSetup () ; - piHiPri (55) ; - - minT = 1000 ; - maxT = -1000 ; - - minRH = 1000 ; - maxRH = -1000 ; - - numGood = numBad = 0 ; - - for (;;) - { - delay (100) ; - - result = readRHT03 (RHT03_PIN, &temp, &rh) ; - - if (!result) - { - printf (".") ; - fflush (stdout) ; - ++numBad ; - continue ; - } - - ++numGood ; - - if (temp < minT) minT = temp ; - if (temp > maxT) maxT = temp ; - if (rh < minRH) minRH = rh ; - if (rh > maxRH) maxRH = rh ; - - printf ("\r%6d, %6d: ", numGood, numBad) ; - printf ("Temp: %5.1f, RH: %5.1f%%", temp / 10.0, rh / 10.0) ; - printf (" Max/Min Temp: %5.1f:%5.1f", maxT / 10.0, minT / 10.0) ; - printf (" Max/Min RH: %5.1f:%5.1f", maxRH / 10.0, minRH / 10.0) ; - - printf ("\n") ; - } - - return 0 ; -} diff --git a/examples/scrollPhat/Makefile b/examples/scrollPhat/Makefile deleted file mode 100644 index 2471f69..0000000 --- a/examples/scrollPhat/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -# -# Makefile: -# wiringPi - A "wiring" library for the Raspberry Pi -# https://projects.drogon.net/wiring-pi -# -# Copyright (c) 2012-2015 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O3 -CC = gcc -INCLUDE = -I/usr/local/include -CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe - -LDFLAGS = -L/usr/local/lib -LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm - -# Should not alter anything below this line -############################################################################### - -SRC = scphat.c test.c - -OBJ = $(SRC:.c=.o) - -BINS = $(SRC:.c=) - -all: $(BINS) - -test: test.o - $Q echo [link] - $Q $(CC) -o $@ test.o $(LDFLAGS) $(LDLIBS) - -scphat: scphat.o - $Q echo [link] - $Q $(CC) -o $@ scphat.o $(LDFLAGS) $(LDLIBS) - - -.c.o: - $Q echo [CC] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) *~ core tags $(BINS) - -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -install: scphat - $Q echo Installing scphat into /usr/local/bin - $Q cp -a scphat /usr/local/bin/scphat - $Q chmod 755 /usr/local/bin/scphat - $Q echo Done. Remember to load the I2C drivers if needed. - -depend: - makedepend -Y $(SRC) - -# DO NOT DELETE diff --git a/examples/scrollPhat/scphat.c b/examples/scrollPhat/scphat.c deleted file mode 100644 index 8f90bad..0000000 --- a/examples/scrollPhat/scphat.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * scphat.c: - * Little program to allow use of the Pimoroni Sctoll Phat - * from the command-line. - * - * Copyright (c) 2015-2016 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include -#include - -static char *progName ; - - -/* - * checkArgs: - * Count the arguments for each little function - ********************************************************************************* - */ - -static void checkArgs (char *command, int num, int arg, int argc) -{ - if ((arg + num) < argc) - return ; - - fprintf (stderr, "%s: Not enough data for %s command.\n", progName, command) ; - exit (EXIT_FAILURE) ; -} - - -/* - * doClear: - * Clear the display - ********************************************************************************* - */ - -static int doClear (void) -{ - scrollPhatClear () ; - return 1 ; -} - - -/* - * doBright - ********************************************************************************* - */ - -static int doBright (int arg, int argc, char *argv []) -{ - checkArgs ("bright", 1, arg, argc) ; - scrollPhatIntensity (atoi (argv [arg+1])) ; - return 2 ; -} - - - -/* - * doPlot - ********************************************************************************* - */ - -static int doPlot (int arg, int argc, char *argv []) -{ - checkArgs ("plot", 2, arg, argc) ; - scrollPhatPoint (atoi (argv [arg+1]), atoi (argv [arg+2]), 1) ; - scrollPhatUpdate () ; - return 3 ; -} - - -/* - * doLine - ********************************************************************************* - */ - -static int doLine (int arg, int argc, char *argv []) -{ - checkArgs ("line", 4, arg, argc) ; - scrollPhatLine (atoi (argv [arg+1]), atoi (argv [arg+2]), - atoi (argv [arg+3]), atoi (argv [arg+4]), 1) ; - scrollPhatUpdate () ; - return 5 ; -} - - -/* - * doLineTo - ********************************************************************************* - */ - -static int doLineTo (int arg, int argc, char *argv []) -{ - checkArgs ("lineto", 2, arg, argc) ; - scrollPhatLineTo (atoi (argv [arg+1]), atoi (argv [arg+2]), 1) ; - scrollPhatUpdate () ; - return 3 ; -} - - -/* - * doWait - ********************************************************************************* - */ - -static int doWait (int arg, int argc, char *argv []) -{ - checkArgs ("wait", 1, arg, argc) ; - delay (atoi (argv [arg+1]) * 100) ; - scrollPhatUpdate () ; - return 2 ; -} - - -/* - * doSpeed - ********************************************************************************* - */ - -static int doSpeed (int arg, int argc, char *argv []) -{ - checkArgs ("speed", 1, arg, argc) ; - scrollPhatPrintSpeed (atoi (argv [arg+1])) ; - return 2 ; -} - - -/* - * doScroll - ********************************************************************************* - */ - -static int doScroll (int arg, int argc, char *argv []) -{ - checkArgs ("scroll", 1, arg, argc) ; - scrollPhatPuts (argv [arg+1]) ; - return 2 ; -} - - -static void failUsage (void) -{ - fprintf (stderr, "Usage: %s command [paremters] ...\n", progName) ; - fprintf (stderr, " commands:\n") ; - fprintf (stderr, " clear/cls - Clear the display\n") ; - fprintf (stderr, " bright N - Set display brightness; 1-100\n") ; - fprintf (stderr, " plot X Y - Set a single pixel at location X Y; 0-10, 0-4\n") ; - fprintf (stderr, " line X1 Y1 X2 Y2 - Draw a line from the 2 points\n") ; - fprintf (stderr, " lineto X2 Y2 - Draw a line from the last point to the new one\n") ; - fprintf (stderr, " wait/delay N - Wait for N 10ths seconds\n") ; - fprintf (stderr, " speed N - Set scrolling speed (cps)\n") ; - fprintf (stderr, " scroll S - Scroll the given string\n") ; - fprintf (stderr, "\n") ; - fprintf (stderr, " Example: %s plot 0 0 wait 50 scroll \" Hello \"\n", progName) ; - exit (EXIT_FAILURE) ; -} - - -/* - * the works - ********************************************************************************* - */ - -int main (int argc, char *argv []) -{ - int arg = 1 ; - char *command ; - - progName = argv [0] ; - - wiringPiSetupSys () ; - - if (scrollPhatSetup () != 0) - { - fprintf (stderr, "%s: Unable to initialise the scrollPhat: %s\n", progName, strerror (errno)) ; - exit (EXIT_FAILURE) ; - } - - progName = argv [0] ; - - if (argc < 2) - { - fprintf (stderr, "%s: Nothing to do...\n", argv [0]) ; - failUsage () ; - } - - while (arg != argc) - { - command = argv [arg] ; - /**/ if (strcasecmp (command, "clear") == 0) arg += doClear () ; - else if (strcasecmp (command, "cls") == 0) arg += doClear () ; - else if (strcasecmp (command, "bright") == 0) arg += doBright (arg, argc, argv) ; - else if (strcasecmp (command, "plot") == 0) arg += doPlot (arg, argc, argv) ; - else if (strcasecmp (command, "line") == 0) arg += doLine (arg, argc, argv) ; - else if (strcasecmp (command, "lineto") == 0) arg += doLineTo (arg, argc, argv) ; - else if (strcasecmp (command, "wait") == 0) arg += doWait (arg, argc, argv) ; - else if (strcasecmp (command, "delay") == 0) arg += doWait (arg, argc, argv) ; - else if (strcasecmp (command, "speed") == 0) arg += doSpeed (arg, argc, argv) ; - else if (strcasecmp (command, "scroll") == 0) arg += doScroll (arg, argc, argv) ; - else - { - fprintf (stderr, "%s: Unknown command: %s.\n", argv [0], argv [arg]) ; - failUsage () ; - } - } - - return 0 ; -} diff --git a/examples/scrollPhat/test.c b/examples/scrollPhat/test.c deleted file mode 100644 index e4d8021..0000000 --- a/examples/scrollPhat/test.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * test.c: - * Little test program forthe Pimoroni Scroll Phat. - * - * Copyright (c) 2015-2016 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include - - -/* - * prompt: - * Simple prompt & wait - ********************************************************************************* - */ - -static void prompt (const char *p) -{ - printf (" %s. Press ENTER: ", p) ; - (void)getchar () ; -} - - -/* - * the works - ********************************************************************************* - */ - -int main (void) -{ - int x, y ; - - printf ("\n") ; - printf ("Scroll Phat Test program\n") ; - printf ("========================\n") ; - - if (scrollPhatSetup () != 0) - { - printf ("Unable to initialise the scrollPhat: %s\n", strerror (errno)) ; - exit (1) ; - } - - printf ("-> Scroll Phat initialised OK\n") ; - printf ("... Basic display tests.\n\n") ; - - prompt ("Display ought to be blank") ; - -// Light all pixels using one point at a time - - for (y = 0 ; y < 5 ; ++y) - for (x = 0 ; x < 12 ; ++x) - scrollPhatPoint (x, y, 1) ; - scrollPhatUpdate () ; - - prompt ("Display ought to be all lit-up") ; - -// Big rectangle - - scrollPhatClear () ; - scrollPhatRectangle (0,0, 10, 4, 1, 0) ; - scrollPhatUpdate () ; - - prompt ("There should now be a rectangle round the outside") ; - - scrollPhatLine (0,0, 10,4, 1) ; - scrollPhatLine (0,4, 10,0, 1) ; - scrollPhatUpdate () ; - - prompt ("Diagonal lines") ; - - scrollPhatIntensity (1) ; - - prompt ("Minimum brightness") ; - - scrollPhatIntensity (100) ; - - prompt ("Maximum brightness") ; - - scrollPhatIntensity (10) ; - - prompt ("Default brightness") ; - - scrollPhatClear () ; - - printf (" Message Test...Press Ctrl-C to exit: ") ; - fflush (stdout) ; - - scrollPhatPrintSpeed (75) ; - for (;;) - scrollPhatPuts (" Welcome to the scroll phat from Pimoroni ") ; - - return 0 ; -} diff --git a/gpio/Makefile b/gpio/Makefile old mode 100755 new mode 100644 index 1e8f10e..85f5aa1 --- a/gpio/Makefile +++ b/gpio/Makefile @@ -37,11 +37,12 @@ INCLUDE = -I$(DESTDIR)$(PREFIX)/include CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib -LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt +LIBS = -lwiringPi -lpthread -lrt -lm -lcrypt # May not need to alter anything below this line ############################################################################### -SRC = gpio.c readall.c pins.c + +SRC = gpio.c readall.c OBJ = $(SRC:.c=.o) @@ -76,22 +77,14 @@ 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 -install-deb: gpio - $Q echo "[Install: deb]" - $Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/bin - $Q install -m 0755 gpio ~/wiringPi/debian-template/wiringPi/usr/bin - $Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/man/man1 - $Q install -m 0644 gpio.1 ~/wiringPi/debian-template/wiringPi/man/man1 + $Q mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1 + $Q cp gpio.1 $(DESTDIR)$(PREFIX)/share/man/man1 .PHONY: uninstall uninstall: $Q echo "[UnInstall]" $Q rm -f $(DESTDIR)$(PREFIX)/bin/gpio - $Q rm -f $(DESTDIR)$(PREFIX)/man/man1/gpio.1 + $Q rm -f $(DESTDIR)$(PREFIX)/share/man/man1/gpio.1 .PHONY: depend depend: diff --git a/gpio/gpio.c b/gpio/gpio.c old mode 100755 new mode 100644 index 6ea1440..aa1ec1b --- a/gpio/gpio.c +++ b/gpio/gpio.c @@ -33,20 +33,14 @@ #include #include -#include - -#include -#include #include "../version.h" extern int wiringPiDebug ; // External functions I can't be bothered creating a separate .h file for: - extern void doReadall (int argc, char *argv []); extern void doAllReadall (void) ; -extern void doPins (void) ; extern void doUnexport (int argc, char *agrv []); #ifndef TRUE @@ -65,11 +59,10 @@ char *usage = "Usage: gpio -v\n" " gpio -h\n" " gpio [-g|-1] ...\n" " gpio [-d] ...\n" - " [-x extension:params] [[ -x ...]] ...\n" " gpio [-p] ...\n" - " gpio ...\n" + " gpio ...\n" " gpio \n" - " gpio readall/reset [-a|--all]\n" + " gpio readall [-a|--all]\n" " gpio unexportall/exports\n" " gpio export/edge/unexport ...\n" " gpio wfi \n" @@ -81,10 +74,7 @@ char *usage = "Usage: gpio -v\n" " gpio unload spi/i2c\n" " gpio i2cd/i2cdetect\n" " gpio rbx/rbd\n" - " gpio wb \n" - " gpio usbp high/low\n" - " gpio gbr \n" - " gpio gbw " ; // No trailing newline needed here. + " gpio wb \n"; #ifdef NOT_FOR_NOW @@ -537,21 +527,6 @@ void doUnexportall (char *progName) } } - -/* - * doReset: - * Reset the GPIO pins - as much as we can do - ********************************************************************************* - */ - -static void doReset (UNU char *progName) -{ - printf ("GPIO Reset is dangerous and has been removed from the gpio command.\n") ; - printf (" - Please write a shell-script to reset the GPIO pins into the state\n") ; - printf (" that you need them in for your applications.\n") ; -} - - /* * doMode: * gpio mode pin mode ... @@ -576,18 +551,10 @@ void doMode (int argc, char *argv []) else if (strcasecmp (mode, "out") == 0) pinMode (pin, OUTPUT) ; else if (strcasecmp (mode, "output") == 0) pinMode (pin, OUTPUT) ; else if (strcasecmp (mode, "pwm") == 0) pinMode (pin, PWM_OUTPUT) ; - else if (strcasecmp (mode, "pwmTone") == 0) pinMode (pin, PWM_TONE_OUTPUT) ; - else if (strcasecmp (mode, "clock") == 0) pinMode (pin, GPIO_CLOCK) ; else if (strcasecmp (mode, "up") == 0) pullUpDnControl (pin, PUD_UP) ; else if (strcasecmp (mode, "down") == 0) pullUpDnControl (pin, PUD_DOWN) ; else if (strcasecmp (mode, "tri") == 0) pullUpDnControl (pin, PUD_OFF) ; else if (strcasecmp (mode, "off") == 0) pullUpDnControl (pin, PUD_OFF) ; - else if (strcasecmp (mode, "alt0") == 0) pinModeAlt (pin, 0b100) ; - else if (strcasecmp (mode, "alt1") == 0) pinModeAlt (pin, 0b101) ; - else if (strcasecmp (mode, "alt2") == 0) pinModeAlt (pin, 0b110) ; - else if (strcasecmp (mode, "alt3") == 0) pinModeAlt (pin, 0b111) ; - else if (strcasecmp (mode, "alt4") == 0) pinModeAlt (pin, 0b011) ; - else if (strcasecmp (mode, "alt5") == 0) pinModeAlt (pin, 0b010) ; else { fprintf (stderr, "%s: Invalid mode: %s. Should be in/out/pwm/clock/up/down/tri\n", argv [1], mode) ; exit (1) ; @@ -616,76 +583,6 @@ static void doPadDrive (int argc, char *argv []) setPadDrive (pin, val) ; } - -/* - * doGbw: - * gpio gbw channel value - * Gertboard Write - To the Analog output - ********************************************************************************* - */ - -static void doGbw (int argc, char *argv []) -{ - int channel, value ; - - if (argc != 4) { - fprintf (stderr, "Usage: %s gbw \n", argv [0]) ; - exit (1) ; - } - - channel = atoi (argv [2]) ; - value = atoi (argv [3]) ; - - if ((channel < 0) || (channel > 1)) { - fprintf (stderr, "%s: gbw: Channel number must be 0 or 1\n", argv [0]) ; - exit (1) ; - } - - if ((value < 0) || (value > 255)) { - fprintf (stderr, "%s: gbw: Value must be from 0 to 255\n", argv [0]) ; - exit (1) ; - } - - if (gertboardAnalogSetup (64) < 0) { - fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ; - exit (1) ; - } - - analogWrite (64 + channel, value) ; -} - - -/* - * doGbr: - * gpio gbr channel - * From the analog input - ********************************************************************************* - */ -static void doGbr (int argc, char *argv []) -{ - int channel ; - - if (argc != 3) { - fprintf (stderr, "Usage: %s gbr \n", argv [0]) ; - exit (1) ; - } - - channel = atoi (argv [2]) ; - - if ((channel < 0) || (channel > 1)) { - fprintf (stderr, "%s: gbr: Channel number must be 0 or 1\n", argv [0]) ; - exit (1) ; - } - - if (gertboardAnalogSetup (64) < 0) { - fprintf (stderr, "Unable to initialise the Gertboard SPI interface: %s\n", strerror (errno)) ; - exit (1) ; - } - - printf ("%d\n", analogRead (64 + channel)) ; -} - - /* * doWrite: * gpio write pin value @@ -716,28 +613,6 @@ static void doWrite (int argc, char *argv []) digitalWrite (pin, HIGH) ; } - -/* - * doAwriterite: - * gpio awrite pin value - ********************************************************************************* - */ - -static void UNU doAwrite (int argc, char *argv []) -{ - int pin, val ; - - if (argc != 4) { - fprintf (stderr, "Usage: %s awrite pin value\n", argv [0]) ; - exit (1) ; - } - pin = atoi (argv [2]) ; - val = atoi (argv [3]) ; - - analogWrite (pin, val) ; -} - - /* * doWriteByte: * gpio wb value @@ -862,52 +737,6 @@ void doBlink (int argc, char *argv []) } } - -/* - * doPwmTone: - * Output a tone in a PWM pin - ********************************************************************************* - */ - -void doPwmTone (int argc, char *argv []) -{ - int pin, freq ; - - if (argc != 4) { - fprintf (stderr, "Usage: %s pwmTone \n", argv [0]) ; - exit (1) ; - } - - pin = atoi (argv [2]) ; - freq = atoi (argv [3]) ; - - pwmToneWrite (pin, freq) ; -} - - -/* - * doClock: - * Output a clock on a pin - ********************************************************************************* - */ - -void doClock (int argc, char *argv []) -{ - int pin, freq ; - - if (argc != 4) { - fprintf (stderr, "Usage: %s clock \n", argv [0]) ; - exit (1) ; - } - - pin = atoi (argv [2]) ; - - freq = atoi (argv [3]) ; - - gpioClockSet (pin, freq) ; -} - - /* * doPwm: * Output a PWM value on a pin @@ -935,12 +764,12 @@ void doPwm (int argc, char *argv []) ********************************************************************************* */ -static void UNU doPwmMode (int mode) +static void doPwmMode (int mode) { pwmSetMode (mode) ; } -static void UNU doPwmRange (int argc, char *argv []) +static void doPwmRange (int argc, char *argv []) { unsigned int range ; @@ -958,7 +787,7 @@ static void UNU doPwmRange (int argc, char *argv []) pwmSetRange (range) ; } -static void UNU doPwmClock (int argc, char *argv []) +static void doPwmClock (int argc, char *argv []) { unsigned int clock ; @@ -976,17 +805,6 @@ static void UNU doPwmClock (int argc, char *argv []) pwmSetClock (clock) ; } -/* - * doNothing: - * function is not support by ODROID Board. - ********************************************************************************* - */ -static void doNothing (int UNU argc, char *argv []) -{ - fprintf(stderr, "warn : (%s) : This function is not supported by ODROID Board.\n", - argv[1]); -} - /* * doVersion: * Handle the ever more complicated version command and print out @@ -1005,7 +823,7 @@ static void doVersion (char *argv []) wiringPiVersion (&vMaj, vMin) ; printf ("gpio version: %d.%s\n", vMaj, *vMin) ; - printf ("Copyright (c) 2012-2017 Gordon Henderson, 2017-2019 Hardkernel Co., Ltd.\n") ; + printf ("Copyright (c) 2012-2017 Gordon Henderson, 2017-2020 Hardkernel Co., Ltd.\n") ; printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ; printf ("For details type: %s -warranty\n", argv [0]) ; printf ("\n") ; @@ -1084,7 +902,7 @@ int main (int argc, char *argv []) if (strcasecmp (argv [1], "-warranty") == 0) { printf ("gpio version: %s\n", VERSION) ; - printf ("Copyright (c) 2012-2017 Gordon Henderson, 2017-2019 Hardkernel Co., Ltd.\n") ; + printf ("Copyright (c) 2012-2017 Gordon Henderson, 2017-2020 Hardkernel Co., Ltd.\n") ; printf ("\n") ; printf (" This program is free software; you can redistribute it and/or modify\n") ; printf (" it under the terms of the GNU Leser General Public License as published\n") ; @@ -1118,13 +936,6 @@ int main (int argc, char *argv []) if (strcasecmp (argv [1], "load" ) == 0) { doLoad (argc, argv) ; return 0 ; } if (strcasecmp (argv [1], "unload" ) == 0) { doUnLoad (argc, argv) ; return 0 ; } - // Check for usb power command - if (strcasecmp (argv [1], "usbp" ) == 0) { doNothing(argc, argv) ; return 0 ; } - - // Gertboard commands - if (strcasecmp (argv [1], "gbr" ) == 0) { doGbr (argc, argv) ; return 0 ; } - if (strcasecmp (argv [1], "gbw" ) == 0) { doGbw (argc, argv) ; return 0 ; } - // Check for allreadall command, force Gpio mode if (strcasecmp (argv [1], "allreadall") == 0) { wiringPiSetupGpio () ; @@ -1146,13 +957,6 @@ int main (int argc, char *argv []) argv [i - 1] = argv [i] ; --argc ; wpMode = MODE_PHYS ; - } else if (strcasecmp (argv [1], "-p") == 0) { // Check for -p argument for PiFace - piFaceSetup (200) ; - - for (i = 2 ; i < argc ; ++i) - argv [i - 1] = argv [i] ; - --argc ; - wpMode = MODE_PIFACE ; } else if (strcasecmp (argv [1], "-z") == 0) { // Check for -z argument so we don't actually initialise wiringPi for (i = 2 ; i < argc ; ++i) argv [i - 1] = argv [i] ; @@ -1163,27 +967,6 @@ int main (int argc, char *argv []) wpMode = MODE_PINS ; } - // Check for -x argument to load in a new extension - // -x extension:base:args - // Can load many modules, but unless daemon mode we can only send one - // command at a time. - while (strcasecmp (argv [1], "-x") == 0) { - if (argc < 3) { - fprintf (stderr, "%s: -x missing extension command.\n", argv [0]) ; - exit (EXIT_FAILURE) ; - } - - if (!loadWPiExtension (argv [0], argv [2], TRUE)) { - fprintf (stderr, "%s: Extension load failed: %s\n", argv [0], strerror (errno)) ; - exit (EXIT_FAILURE) ; - } - - // Shift args down by 2 - for (i = 3 ; i < argc ; ++i) - argv [i - 2] = argv [i] ; - argc -= 2 ; - } - if (argc <= 1) { fprintf (stderr, "%s: no command given\n", argv [0]) ; exit (EXIT_FAILURE) ; @@ -1193,8 +976,7 @@ int main (int argc, char *argv []) /**/ if (strcasecmp (argv [1], "mode" ) == 0) doMode (argc, argv) ; else if (strcasecmp (argv [1], "read" ) == 0) doRead (argc, argv) ; else if (strcasecmp (argv [1], "write" ) == 0) doWrite (argc, argv) ; - else if (strcasecmp (argv [1], "pwm" ) == 0) doNothing (argc, argv) ; - else if (strcasecmp (argv [1], "awrite" ) == 0) doNothing (argc, argv) ; + else if (strcasecmp (argv [1], "pwm" ) == 0) doPwm (argc, argv) ; else if (strcasecmp (argv [1], "aread" ) == 0) doAread (argc, argv) ; // GPIO Nicies @@ -1202,22 +984,18 @@ int main (int argc, char *argv []) else if (strcasecmp (argv [1], "blink" ) == 0) doBlink (argc, argv) ; // Pi Specifics - else if (strcasecmp (argv [1], "pwm-bal" ) == 0) doNothing (argc, argv) ; - else if (strcasecmp (argv [1], "pwm-ms" ) == 0) doNothing (argc, argv) ; - else if (strcasecmp (argv [1], "pwmr" ) == 0) doNothing (argc, argv) ; - else if (strcasecmp (argv [1], "pwmc" ) == 0) doNothing (argc, argv) ; - else if (strcasecmp (argv [1], "pwmTone" ) == 0) doNothing (argc, argv) ; + else if (strcasecmp (argv [1], "pwm-bal" ) == 0) doPwmMode (PWM_MODE_BAL) ; + else if (strcasecmp (argv [1], "pwm-ms" ) == 0) doPwmMode (PWM_MODE_MS) ; + else if (strcasecmp (argv [1], "pwmr" ) == 0) doPwmRange (argc, argv) ; + else if (strcasecmp (argv [1], "pwmc" ) == 0) doPwmClock (argc, argv) ; else if (strcasecmp (argv [1], "drive" ) == 0) doPadDrive (argc, argv) ; else if (strcasecmp (argv [1], "readall" ) == 0) doReadall (argc, argv) ; else if (strcasecmp (argv [1], "nreadall" ) == 0) doReadall (argc, argv) ; - else if (strcasecmp (argv [1], "pins" ) == 0) doPins () ; else if (strcasecmp (argv [1], "i2cdetect") == 0) doI2Cdetect (argc, argv) ; else if (strcasecmp (argv [1], "i2cd" ) == 0) doI2Cdetect (argc, argv) ; - else if (strcasecmp (argv [1], "reset" ) == 0) doReset (argv [0]) ; else if (strcasecmp (argv [1], "wb" ) == 0) doWriteByte (argc, argv) ; else if (strcasecmp (argv [1], "rbx" ) == 0) doReadByte (argc, argv, TRUE) ; else if (strcasecmp (argv [1], "rbd" ) == 0) doReadByte (argc, argv, FALSE) ; - else if (strcasecmp (argv [1], "clock" ) == 0) doNothing (argc, argv) ; else if (strcasecmp (argv [1], "wfi" ) == 0) doWfi (argc, argv) ; else { fprintf (stderr, "%s: Unknown command: %s.\n", argv [0], argv [1]) ; diff --git a/gpio/pins.c b/gpio/pins.c deleted file mode 100644 index 3a4dc15..0000000 --- a/gpio/pins.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * pins.c: - * Just display a handy Pi pinnout diagram. - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - - -#include - -void doPins (void) -{ - printf ("The pins command has been deprecated - sorry. Please use the\n") ; - printf (" gpio readall\n") ; - printf ("command to get a list of the pinnouts for your Pi.\n") ; -} - diff --git a/gpio/pintest b/gpio/pintest deleted file mode 100644 index b574361..0000000 --- a/gpio/pintest +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash -# -# pintest -# Test the Pi's GPIO port -# Copyright (c) 2013-2015 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - - -# logErr pin, expected got -################################################################################ - -logErr () -{ - if [ $errs = 0 ]; then - echo "" - fi - echo " --> Pin $1 failure. Expected $2, got $3" - let errs+=1 -} - - -# printErrorCount -################################################################################ - -printErrCount() -{ - if [ $errs = 0 ]; then - echo "No faults detected." - elif [ $errs = 1 ]; then - echo "One fault detected." - else - echo "$errs faults detected" - fi -} - - -# testPins start end -################################################################################ - -testPins() -{ - start=$1 - end=$2 - errs=0 - - printf "%30s %2d:%2d: " "$3" $1 $2 - -# Set range to inputs - - for i in `seq $start $end`; do - gpio mode $i in - done - -# Enable internal pull-ups and expect to read high - - for i in `seq $start $end`; do - gpio mode $i up - if [ `gpio read $i` = 0 ]; then - logErr $i 1 0 - fi - done - -# Enable internal pull-downs and expect to read low - - for i in `seq $start $end`; do - gpio mode $i down - if [ `gpio read $i` = 1 ]; then - echo "Pin $i failure - expected 0, got 1" - let errs+=1 - fi - done - -# Remove the internal pull up/downs - - for i in `seq $start $end`; do - gpio mode $i tri - done - - if [ $errs = 0 ]; then - echo " OK" - else - printErrCount - fi - - let totErrs+=errs -} - - -intro() -{ - cat <pinBase ; pin <= wiringPiNodes->pinMax ; ++pin) - printf ("| %4d | %4d | %4d |\n", pin, digitalRead (pin), analogRead (pin)) ; - - printf ("+------+---------+--------+\n") ; -} - /*----------------------------------------------------------------------------*/ static const char *alts [] = { @@ -716,12 +694,6 @@ void doReadall(int argc, char *argv[]) { int model, rev, mem, maker, overVolted, isAll; char *headerName, *physNames; - // External readall - if (wiringPiNodes != NULL) { - doReadallExternal(); - return; - } - if (argc <= 2) { isAll = FALSE; } else if (argc == 3 && (strcasecmp(argv[2], "-a") == 0 || strcasecmp(argv[2], "--all") == 0)) { diff --git a/gpio/test.sh b/gpio/test.sh deleted file mode 100755 index 708f1d3..0000000 --- a/gpio/test.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# -# test.sh: -# Simple test: Assumes LEDs on Pins 0-7 and lights them -# in-turn. -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -# Simple test - assumes LEDs on Pins 0-7. - -for i in `seq 0 7`; -do - gpio mode $i out -done - -while true; -do - for i in `seq 0 7`; - do - gpio write $i 1 - sleep 0.1 - done - - for i in `seq 0 7`; - do - gpio write $i 0 - sleep 0.1 - done -done diff --git a/newVersion b/newVersion old mode 100755 new mode 100644 diff --git a/pins/Makefile b/pins/Makefile old mode 100755 new mode 100644 index 665f769..f1daf3e --- a/pins/Makefile +++ b/pins/Makefile @@ -3,8 +3,7 @@ ifneq ($V,1) Q ?= @ endif -SRC = pins.tex \ - odroid_xu3.tex \ +SRC = odroid_xu3.tex \ odroid_c1.tex \ odroid_c2.tex \ odroid_n1.tex \ diff --git a/pins/odroid_c1.tex b/pins/odroid_c1.tex old mode 100755 new mode 100644 diff --git a/pins/odroid_c2.tex b/pins/odroid_c2.tex old mode 100755 new mode 100644 diff --git a/pins/odroid_n1.tex b/pins/odroid_n1.tex old mode 100755 new mode 100644 diff --git a/pins/odroid_n2.tex b/pins/odroid_n2.tex old mode 100755 new mode 100644 diff --git a/pins/odroid_xu3.tex b/pins/odroid_xu3.tex old mode 100755 new mode 100644 diff --git a/pins/pins.pdf b/pins/pins.pdf deleted file mode 100755 index 4b0f655a89964d29454a4a081c7b5b42a69e6818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18249 zcmb`v1wfQb7dH+_E{%lr0@AT84HDAb-MMt`E-8W_B_Jt?bVzp^bc2*Mh=eo>A|Yvf zyQuei?|t9*d%yqx-R0q#IWy!)AQ8I}ua)9;hR1jfVH z%0Jh~u+vJR=A3%u+;AycSv)wkD;$FX)r)58< zOAkzz8tW7xi_4Kd0v$ON*hUfRSKZIa6z<=8#-Oe-wsXdAwpPC&V0q zc6uZ=0h~OP_nXtCS`G4E~Oh+nSE8F9V)wPmh7Vr;*A>$Ky$ zM9p`UoOZMvkFmX>ty^bb0AJeMR-{74wyc72bC!?2H$%?1&qtO$xJEYKVZ}{JEuu@% zhfa7MZhqSA^QSMen>)PNG(O3#!NbbQFS-Y;c4h!co%imP-J9*x>Con^&o;w9(Dn*N z+r%(wIe9TBExj>($tCW2=-AYn4DlzcDJZc<32jdEt}c5(^)gP(QTUcRve4E`=A;o#C z=!Qw2lIw7!Z~`mn*0oYt=2_HXnf&?&PP&<6X7q+i@dq*IZ55b+o91^EiC(TAi*_Ta zORLX=t?UlP1yU=hyplK4B@;%-6Ws#&lAW`nAe7Lj1y*a0#@O@bP@bS^=6RnG+jaKXBMw z47Xn;B)0voH+OCnPy>SF6}?ogYXi(?#UT;+ek!y)ZJ*O6nj`1XXyw7-)KPBK@!^}! zSDCU+ZJ*k`xc5)<@&=4HvmiAXc4qU>^YVwwo4giXT5MFQs>vNQUtn1DhB67hsC^;~ zCbIG_pK;R!7eq7HV%!9?_LQ4+#PG+r&Y@YTmid{%MTJXUYo@hcTX&P}wW!)qsoOGYdor&y7E_|oh!maoSfu`rXn|SgsqBjz6xp_qhqWJe^ z7XlzP8z0yT=tB5fGp&m}EkkbEQ`kn4aFjJoj!B~Q1}_DmT$e!0O=jivwEnV-ORRwJ z>|jPP&wH{2tpkdAXY=;A@4 z@w4Hb(Y#5tqQix6cAU9I`Ocs2OkRYeb_6t zj=nYW>rcJ%(1k~dP(YX%cOWx_iPD-ul9X&_&%foo&6a$mpA1u}5n1W`=+q#jcI2eT zVYFIPckITy5oQh`Ik~T+nJSWBdRas_lX8i8F(PSo`XrP`*mhH?XQzQWzx*7#D(y+))-yz3F4uvkF=*!&3z zW2s3*@#7a>%2CU!n7G!s*v8Mn3j*g6)V-l^J)Mf2o(~vxFw=1E4QPrinaW8oNLzOb;*LP=13+E-Y_*LfM>}xGeH% zmz*}o+qY7)DM_si7AvH}Y&c1283nMtlCtO-3sR_pf|HpM`$Gr5q{vrCJa!eS5wV@~ zpNqMgv_@|2)I`QIsC&(ffN1XWLDyUF^$Yd@G52wGGjQ`*qy+@OQFwLo7yQQhPt zyk=^3;{-;jxc-f6w`$vvCuYJKwQv}MP;Hac<@4A@X&QI#ikO>Cc#2f8^Q44IeIFtn zZeZ98Jd0kaP-wTR)x(ciJRuK&P4|E-`F{F{)#WA9aE-Z~A`;=4=DicSLt{aUoEW?r z#WkSe8#a<2Fx?Rkp}SGFcpX$jH@Nm|ym}^P#@rauJ3`lLuQQeG1jWK1?{W&rmEH?a z;S=bH>8!gGM9DNqJG@jW4@*S1qRe#Z8(?NIb=d~Wb#%$xpjzp*nx`i=TQa90UQ8)d zxo!aHnU|O~Tk@W8V&5M&@Mldz_qY!m*`Ni~nr_ev6HKl5Q7GuN3cvG6?0ro%A$C!v zAan7AXd`2T?*Q#-Ek%7;>pfv;Wv!{sqUCythl*6+31b3#P2#9t!aa)ah*qBhjDUhs zmkvo|BjTC}GW?{C(74KQzt;>U*0iz2pKPX9&i2r8vDW)?XDWQ$ecQO_oe?L<;TINlAz}0guC6UpYCO z@t}^8Hwfj>8)MbD>M3%!@@#MO80wSM5#%y|VB5JJOgLqc?F?Fu>Y`wo;mT#e>vy1^ zHH;g5!gd&z#1)T&ZK0;T+at-6P57ZJztWOYj#vxo8Svym?zNn;XF+x-v@*&wo#^PG zqV>VEhf?(+yOEN0wRHCwK3JbcJw}Ocy>WdPgUz}cgC=ZsP+)~E6_X}<6(qRATc5GJ zjR_BW=2)RbVwQZQXbe8Yr!T?uOVW=@B^!BtXU~agumJc zl?1d8fMt!?J?&4;VA9i+t9ODc(Us8}J6~)@1H#WLlcK4y44`YclqoT~(Mo+bP6HyG z67Tvjq50t2I~*Jn?_{tdTSxTq+RJ3mL@Ejl^d7^HNzz1(ys`b*EpZL&y zhqq;zg@KvmZyaf6axhYVzPuMTktmyiyP}^+1ch5XiF^!qtqQIuzmt70o(g0!JN4(_RDS)rnEea|hWXxbIt1tW|#4>;p&CFRSETwL$1hn18S zvPx`Xd;Tx=ch~vrFWKZ*( zj^jz_-bEP?$J^F_=fx3_N%qivc)U{IJ@Mu-k+N;gb2dAd6zVWuNjatPYXSN}0!+^d zDT=0-R`PwZ%Hc%DXbE4hH-B2Sv$)gFZ76mRfH|;jHdAS)zBUlEgc%o&Ma+o)D*M&{;}C0Bw=cadoCBEeo~H$lAnGGw#VVPp^T`Z)aH>>-SKdU-qdv#-#dk61DIP zcE~!fwZSe!cG(MuT{7R&&+@O@04gVAj{GdD;Io=xo6YS>Q_h+hx=t$NY5BQ+?Oa=t z=QOAq^Rn;3C@c-1ndA;^!x4d>EAWp@D+NHVf!L5j_4{UtH6H-}7As@lR0m ztw;{~9?V{TlPSu6=<=jIIo~^_gbLN~eAY#BqfzH2p}={=Nzh1)9nJ2#QFmS77LIz_ zkVkk+!sCxz=9d*?LTc%o)el}}f8&2!4-Sj+?RP#l1RO4dwr(M|n>HV{3Ioxl2 zrdviwbQoklQY#)1qik*SE`iK1tFkte^~OWeZaOEzmX}Oayk*aisGVPHZxC(Izp6x4 zzLv}xL6Q)2|4CE^T$pT$F^M`eh$roDjNgW;+C$ zr_SN6KRZ}j6(5Ylbf-8UE@n#E;LYF{ zg*SJun?_vfEx&NOXlPA^_hlTV+>|K(5^xV2GE}4Gc6jR>t4!o<(xLX)o4gKZ)Q~B+ z6wB8#)iy8Qe0VjwDM(GdFe-Th)v<`cPGfLIUF=JGv_e&FL-{dlu>D!_v52mdLq^WR zZJ=ochKYRPUTMcyPL-ax!8>{;+-oWYqs&V5%2Go~Ivc{iDny_x6Tiy)S!%ijh)#=? z#hS!VPY{`p=w%4W&1!5J4j*hO9FRCiQ>;a`q8qOY2Hr?-@;7kAJ}gM~e{JkIOt0M& zi?*1;wW7as?Il)l8Xs)wzAM%IBCUzamh%n08Vo(N=6iIdeNd5FAz-5Q4^|hq_PWKf1-wSV3QO@QA~SB**SVP$sT>aE~B)_xYjCt zXMOucn=-#3sCZVYPjZaL`JAj(HIg1KEcD>!05la|NRT5KVY&)3cl7A8?Tu7&ki_=&^N|If@PA)o!+~OUdMn@1%VxoldjgBB>-$ zIYCIIJ&w(n%JekrLMwz#3?;pSi7823X8uf%$e0_S@#w)jB_-&qXA!j2k~{tZbw%C1 zl?5`!SoffMik&tE*G`svH3zM^3}`!)XTTcrdxQ2S%7hXR)(vZ!uB z_DEkK0e1S&nStk`s1v>gnpiW0rm+H>C(v3rv@{_5 zD_HM8w&j|6b@GL=G1?LV=lo79*I(f}WhOE{lA3&b46T2J&~VfB62=PGIT%q3<_l zp68bC=NY$HcN0b*Rt5>12UJXZ%&;F*O&e3RQ)k_wXqTt&Ryzil^pw`^sub6z>=zYF zjlU8eB3F3ex*0E`FZb}Ivg(f1D=xmcGD(J+lD3z-i$f7#hn5&0<%x1NR0Q}cAH%8w zU^(aq6U7*_l-e&ly=(2_+n2x4t1cLzLfq|s;$(;v5?ezeYRJ2Qh^PSICr#i_+)dBl z69Uq*c7TA?A$CsIG9G?FQ(i=|pr{~FM1ap60MhY*BTzUXFQOI{;tmJ$BOy8j83Ob0 zhT1}42=Gn|>S3!3ft!L5@E#DP2l0a=_~iZIin>>QOT9!M6E zM@WPL{~-PBAF_!bxFA9rqJzMz9>RbiRVOdsFA!haR;=P&>uO)YgGSW@y=OTTGRM;L(Q)A_9* zzhRp?U_Jnt4_OY<0rLXDS51O+L;xax<3ZN>iHFKq!yrg~f%H{1q&0LoHJsdRykWZ5 z?rPjR5C`uoUCKdVwooTexCaynz8crnkgtjm%65Xn;IfX^P#_;j&H85&%m)S;I@!S; zVWvPqUSvQ1%^UD<=)da!t(=b!srMgmK4B3cKR-VZdFKTP3JL-Lo9n9fFBu5wLPEk< zmoOh65P2cOMjaE${m04fsm8nkBp&{yR5sgelf69z;gJXzGzIX1?41Do zq98AC4+L`V**vQ^xJ#_i~c#E z5N<9A7WmuD_@Q$I9U<`N`(M`hqZBb`eoO!2`ThR0{7;$4)UWFY@2?!<4nU?67WwV} zRqi+YAcpW))&3hpA>H-wYSh%zlF|N)d&+pY+WlRhKkR>HT%=R~?wta>zp3*#_e8o7 z^7^HWt0|8d`mf1}q$AV6%73r>cNHSt=Ep?+QTzXo!ysJ>+3v49!c`Fzb)L%?B0% zit>p9g$2Oo$O9(_7*GfRl7`tL_c{a-u}xWfDnXDg^&^XH2U&*X1b~zgyNi>pw7Y{V zVv7WTbm0&;10a}J002^Vg252Zf3@5qbprqy{S+g}FN%C{Uy#5V~vd>b@3JrlRaeYGY0 z_EYyCs4Hy2seA<9kaZ(V!)C;wc-W)B853 z^0xZ`X{Un4m&~Ag<0QZNf=1@~p)m&6PDt&Vy%JfugM66fD1?zo$ItZeQFE z3}}}W)eHST-oF5TzaeaY);E~SqSUkOe51RRW3D>XjU$GR``EF&(ZHsypF|Ii^)g^L zP=Yf^SGV}N&m^W(lBt=q5jgn!@QWEmp_0N}hR?3=Upxn0BZ|pz09@uQd6yh2=YcEjZcC!**lVCm$tzpdTAK^Sj!zY*avDel4*RKn&+icDkE@esQ#A(mDeR??`iyd20Od;A4t6BYT#vJVYD+&m*}!37OKpe zc^7Qk8*e;DjGq4(6eo*!D`Sc5^jn`B)L3p#!7?=9C1*_y4WmFu$0O6(7(Pwa^167t zKswud(Hj7xqIKF7@=DB;>axln*-E2PiIC*u!nC4HpPtY?6l^Qhvpb>0sVco5U$mz- zAMrNz$A?try#+nH`^nFhnwqeBfv`~Q zn_4L6b2n~^s6~%Wys0HG0uVz$axdk1LATZ|U%W;!3x78+oEydpxR_Im}!_Bba+m54!!)(b#<|{T#Kt7TcPWe5=cD7t^c# z^VG=~V5ukRB4b15;N5{+O}H1AVV?JRS8*m=J_&r!r9bw8yFRQ?&zn0PWLIXbUn|&S z-e(lr`&wthzET{^-~w>el`iPY*Zgo8ORu^v&?8K8;ni-y3hUg9J$tx>{>I$#;C0O| z`EzN#mse~-n!z(ZdW^>--mF`xnJa`T~HdN>i=si0->G-#)Oo zZ!Hmy)AhVsmVoL2d~djE@o$ocZx%jPh1M-S-ZSr&%p(l6G^~_!HN0z|DG)EcbG{(s z^R9LwTJmj+g!nC6e1J{XN5wDx?S=WDQ`aZwl0_@G*~D6^-=oAh+$M_T^K}~;T}-R} zw&>TxqbV^7Z9SRlurA$vZFs3kYp)nk#Bf2UvljD?pFnLu^GQ$zcC6#uu1i^dfq3{> z@U}do#X29?B;R+2Ej~Ty3Skb_c5R3D99q7dh5%PLL)O6;vLdA1q~7zvNO zEjN*23gM@OL;5dqZi-%4K6tki!0IYXvZ^6_ug#`@_5?q? zcW2;2La(LTQK~sj^ySfZWWP39nWW#Bq2&HJn(uXV(cbpgzjKfB%RR|>M|S#dns%8~ zuUIhL0K|Nlxf=cOKxg-sBbKgppeBVHTk>de%vQDPp<=~{S3G{W6(%WCz7{6!4Y2}` z6bsaRozAXNG32=8D2qoO=Z+8Z_OBdU!!q;uDXe84L|{=ReFk25jB1p^gZ(&jdhnObZYxngv*|RO{gl&zH~jI- z@sW}#P3M78x2k|l7XG|Pm4)hu{v(rdyzY6bbo%1isHIrD3hK~>&H~ep$DKX|pMzdM z-}};6j9WFr$U5f9@($D&6P%64-`P-2yA34?a$iYrup*6_F|fDb5NW-H4+{EN-tx8D zo@r%`(qF_qd>eC;x|2M2?^BkT;y(Ty)wqXT&Dq`>6N%VN0yH z{C=)pLoL^7c^6Z2+Z-$+OOYPF9fuBkDo3c1S=s*DZ(R}%mTEb=(#7ju10ineTC*h| z@irCZ>-J#7diotI6tTLq%habZC(8I-(#9DtwW!Q_ODOy))WulnO-Gywwfgqw9o3o5 zHd;`~WN_mu=KUAMj*Tr~YbKf~#d-D9X_m3XR4zpqDOGWq~hgyxbMW zeg@v}GRjNhF=E1L=PW|86dddLSw@-T(=sNTIRF~#^h;qR#$!FCSPv-euBTNm8NCf& zm2WY`5+SK;Io`P2@Z6G>KU?ZEj{2cY^hS!#>(UL3r$!B57^={B9X`Jc57QvT@(>?y zWw?-UB9$@to}}B3DsNoy=*xPnxW9B)oKgc(FO6#T*u_OFtnl&Rb1rI-;IX2x~o&pR->B59Xzo)6yAP5 zyU03e-qN|x>^JAx{pmnMT_x%rlhhM`a+sUJZJi*ymYZt|IuIhjZ5-2?h`QC7_#5@@ zm+^FE3-&nHJ?n2K=M<#w-91AcSECwZ8XB~7(v(H_YHOe5%?U=u{S1<`uaRdB;6Ah9 z{E~gU(Zf!~kkp}Y-&*&{LQWtI<8xj0H|K-SJ6?SYnx6*0SKh>S`_36D zdo$8P_YyA-rIozI5_a+|<_78WR;v*UsMXesAPz*(>hT0xg*u*IM9x^@o+=dm;knr75ocjFX2ryyx^jw`P8=G2Im}+*;3Z__ zGzotsu{i2e;KLl@VHRBuhED&~p>#_IavSPwDf;OLC9yFJEu-?FU~YPF1EP{ zRyT+&{x`JJ^MDETR;=(Z{mvRv5t3(%vyJb|L8h$VW&%Dll;)d?&L+Q4dT(%-EOs+@ zWrUr0zVsH!DUYq-asR^{1NyR(=YAV@xHfk@6uG098pH(D-@gRh8n&cp!EH7^q726G zS6n1-f%AI4R(VTkdVBD$#%yYI53TITgQK^GeJ@8XCeQk@bXHIEUkTAHnq8lIA}JTK z8SCI&L#gJGZOBb_x-50Benco_wRuFeU~?(o=69ko6cVLG^P8;=rzgVDOuZ!Lv?*1GfLRW;LIp(;Hy)Oy8)FtXlhAmUDe zF3yySr#|i(1|mEl3A2@$w)`3CSGnK?_z9cn=K0=+Zn0v-$cZVeO*rSCWJ5kzec(`d z8a;mij^pLy>Q3TaGm8~vufYY#hr(i@1^UAR@eW#MxkMVNNU^$eIvu!ai1}0q`+5wT zPO{APYq;V>n?yqA&f0e!&8HUe3g4M_y;e==>Jc^JA~1T=$f0inP<3zd3;&oO!)}RQ zYey0Q{mPxF@sW7wZcF!@;F-5=1>edQzbUMWI7dl;?2K{Rjgi9cA*g+xc2^-MG8EMa zgRUl#w)f;S(}1?g6af!?7|CJ3$`>q;q4;+_vV zlq>qBZMDpqj$wH``zpXEZzty6BS2B^f3b)1du=!HgA$IV7i+r zsoT#f!{0@Un_oaNrppx@8*9+wF$KNAd#IdP^3L0&AcD}Wj!bzIuQl}cEfZ+I5zU3V9Y6Z7+qzgw!)K z`r+LXcr4k&%c$x_LUSEK5tozw9*#WouQ6|l`E&#d(e@^{pX7+KPEqUOEv4{$-{RoQ zHRQ;p$B_BNqOdb&(ye5&=+*#XNgHm>f#HgKL5i)Y_ML}l zmsm}6B+1sZiT)Lk1K|FD2aEf+j8EF{^E_jkv!f4?w|#=FV%8bo^$*$`c&PM<1Ck zzOoGlABLirwiV${eR`Yss;o?GCTqEIOXR6Lp;_w&_ulZ1%>tDPr#YG6JnbkzY5LBG zIGQ($DR!FN!j49=F>RxGr33oleWUWmNd9@V`fhC8+^Rt{!$+G)z&!OpB zH(!vLXiDa7!pdv2KxxtlL6(zj(T6hpFpzklq6rfSj+;#n)cUm98dz0|IU zCW%<-p&iL_R{Y1hhV(iSo}sy>H6=rrJN;3Y%-PmU>Sja^sy*u6)e|X=DUCI$hwIb( zqwJ%cT(+N1gIPpWXqap46f|^0hID8BYSJmMF^!0rWuEcTTBf#D7-@kxP75|Z-)x$F z75?Cx@~~X#B8|8-Ho*y2J6eZjB`+xTpF7px55fK&r2iidT>gagMS-IHh;zd~A$@+t z2J_!x`u}dj0t+JG{r`aJ3;d4hDQfU1E&9p&?8UTT_N^xkS8*A zb(Z%Fv_~TK2z>r0GVlMFJ?-yj$-f;|{r7ts;+TT(w>>S(z)A1=7F9OG;BXWdW1NdR zW=c&-l(%eUaVXbn=oCJgHrmabLK(`pZKlzxK6g7Wu0)gc(vsFbUkjaiMT}9~-_&F< zwzpR~`^Ke_qb)gTr}dP2b*BBaKl5mB|44GI8BcxiE?auht->2>#{MTxR7X!kyvS|i z8pzpC@_T&)dzSdZxPyD1X92W#6d9x_50m%r^p8!>O9&~!v7(=e`O_OKHgC%ww|6_J zsmE+D2X~0XOgr(fzo+e5Nn}z47;C)Sh$E_Qq=t@!rsEwpD#T1b6}*)n=44X2^4bL> ztFwfxPhB}HD>Lb47;E7$QBs3_rMfMt&QV=#gsXKDBE-1Kg$X^Ym*qz5b%q6-QLqRe zdA)>6R3k1`r~9-$^#HS*bkhun8y-=GNyebnv*cQ<8r&B`59jknh-t_>twx15HjtF?`8}T_;XC#_|Db4VV27R$#vJRx89%)cqm)vBAnpXna{)uZgpvZE&=ct2fPUdKs~Mldd2wpUkM z4^1#iC{9D;Hry-glird+Wh(P$Ttf!}s_Z|Z>hAr^(2-YWgz zt6-z;w7_fiUa$(?x|B}va_u?}7Tb!j)@#A_4h14RPi^s$wM1vNHT29gbX{J6O*R^S zEid>B23-M1C*a%3iyk6xldic_hsD5)<1Zr~`lvR9p@pm^Ek-XfX50F-`!S1`Bz$&1 zHgUVm>apb!Hn-T3nLK34ccRjzp`ck*&=L^oz{&>?olp23hga6bi*40& z|J?(l)aGfU#OgA(Ig3DRaID4$3tc0VsKe(NqA@J%>B6aEDXL9XZ(kmwh>leBw|!5; z18-BqU$j)ctO__4ox11#UbA<<2WP8!>k+w|O!M>m(^d7{k-IRJN2nhGSn!Z{MCiDA zxOZt7As^ufv~)RL(!9~eS^9QErfIi=FS-b^$-n2h5#ikTkP2JDWqq7RSn4D8jE83u zO4KF7K!PRSbFlu1;I#MtC&m_{i+9$%m)fwAMUdXD3(g>Wv=v1~>IRA2egFBTq4*Fj zu9eq4B?e!7?a$ap+RIJ?UpmDf5;q?wZ@9z|6>~0`REP3|HV~1+TlwwB@42tX`;fT| zZd~s6_@_T*FM9t$#V-~ko<8Q55G(4P54&xBVjFToC}jylSu6P&Q65&F8Gbb9#W;+V zT@u9Z4`U*V%^Bn?^jADFC+WyO0?VF)16NA*8*tb0lfU+SBHiY`?(4qgmcrST_mxJV zW`+L*x1#U;DeGFU4fC;$P>}YE0x~a(Q&Ct}FFm($6$hIPTdk*wwr}SXAzJzTSiU_v zm+43cz?X=mE=ln1bpJMZK6p?8hTDwfTf59+-)G6EX- zU!#6Z_9%&ILwtHAA+I6|juP%-KKV4v-$WgC?He(ASCpy0<(7rk4pkB%Yrz5AqJ3JY zG&^qF8O?Hl5CfNuhK$XZx73>S)6bS}62HC2t+|+G)=+XYFJ>cq>3PANX-L71flp@I z6_DAQ`UX)L;PGQuPmar)TeFX<7UP^>A3SV+7HHAdT6ah__qKC!IsbjlQ%#JwTQRwp z3Hx3k60&a0h!tg#18K_}fW?pBQ39U;PVF*r$Uorq^g3AF2?|pEdg82q-dT1i2B+Ms zPwj`Heynbt5R|<+=);(!-7+dGJm!rtPUv^=vI|DbxX6+@w#t*e@Vwd2G=vs3eK(`( z8fb@v>1F8cQQYT`#w|0O9mJ*k6jwC-FEN`8Pm-q!*rJTxL&Dxg1Iit{h8-v! zbBiGd#4b<$S^@5L{sN*1qsMOzb+QS5jl$JGD01?c=mz$;c$0-PJ)=Rc(c#(=nfdMR zy%+)>Smm3qgZ}P|*Mg1~(`^lLK2OJ(r`E~mYy_9BwNP@o1LsW@E6SMVBo;L!Ngwj6 z(Md5#Q$$Bms?DA>XU{!?`*!jl<1I=|!3#<^j)aa$Q422bc8xr!EGWAKR-ya8WBAm} z`-La&MqyvjT=4OAH0PBp))h?}`Y^MaP(1)H`uH-*{xhYdby-S6-5cBIYqHo_-ov!w zx5L|=W^b==tXFg_l}^V$oZeAPR=Vc;?fiuy1-ptB<#ED;Yf4kSHR&#tm#o(%Umo{M z`w0Z?vvNh!sVj0;nQ8UbUfO)FjYuF!fQ`-DXO#d*|DSew^@1j#3+pcfdO90w#Z zQr)D%M>1wcJrxIDgOuFyK~i6*@uxpnF!V~}f<=>iq=$wY7%EramnN%Y`BH4AaH?i~ zc+4mfx!)*^H?>+Zt5114x*$ZzoIjtMsYhVu+I&$Hlfavj;2D{q#hO@iBkqVd^+j8- z^(z&<2A?O+Zm7_FnMVzh)iPt9HFskRD*UL+Eb!^8mPqt{pIyw69cvzMhzGOy$A!uszLJ8b&i><2tezi9cUU{m3Gl+3Hg*>HU_oFsy6n{z1Sr@_=k5(epCWJ9(;wMhSXWXx}~s zFOE@5hwICQ)Gk$1%A$i zXW3(a65v!ig^u|o-o$;>8HjT$#&)un{OzY>&O_b*+AF zn`gG(gW=N_6UBHn%`x5C^|%h}?ugZa6i0vMJdywdzUA5MHlNRq_Fryf5G&d~A-Q}w zrEU_^>}3;l$M~Am9Dd!FoZGl%KtSmop?w@X7Jog!_ONStX_ZLG^J2#0%$fk3{#zC6DCJRVR75Li@H6vWF1;^X5+ z)Zm8syTh&hxZPn)i1w~J;$-v(n>&o>s!u$Kz$B295eUq~3;Na2ub3<+4|gE4VQU)? zZ@2`jx3`m>7+6rmR>)qIpBv04BESs>+w*htB3|6Qb~XY6Lbf8JHlhN*n)Cdvn}2B! zQGjTWAE5_CN(>Q)Z0BtYfl9C{YN-Jg9X(+19}%)ZggQi6K|hE8zv>mjHvd`+2!sAq zgE*p&m^vZ~)ZSkX5k)P@#|sul449i&NRL-kj8906PuN5p^tVa~yCb+{5x;hT`1OPT z%=KHP-?%)WdWeZ2Y3JkQ31f3%2MY3tBEq?4Jv{xdzD^>7o)J;lI@Wehw$`pdd4C8{ z*TWv}i}!Jiv7N1$y$96I8ZqCkJv|XYg4S?^8-Nh= zlvPq3Q3!W}yFw(d{88E!{v+Y)g!C^lS8I0%306ODJBYotw=0}g($fhs>k;PsVGUO& z$sdU;KG2`C{)MfsNC5a307a^0{M^QjNby}fB8Dw zzjAeU#0de?eGm#qIuM(j7}D{;e7r)uqI^OKpX23aMf@SEA$;@yQsbvLuw8kR8JmmQ z|ARjv8qh@5c)$Bq+!)2($?z(4Bo3JL#Ho*+Np-`nLyDCr+GgmwQu4lq~% z8TI|wzVL&E{;5Av-hc24@%}Ck4z)(ay+RScR09O*It4%wb^{`wjPXD`e1eFq)&YW) z-R(Vq$mxlA&P7=cXeuruBqS&=2$tuSl>>_kh|0;!3ku2$i^>T}3o3vG<-wBw_ZsHN a=UQNJYbg9`vVet!gb}}-!z{0<0Qf%)Ilwgl diff --git a/pins/pins.tex b/pins/pins.tex deleted file mode 100644 index c3753e9..0000000 --- a/pins/pins.tex +++ /dev/null @@ -1,116 +0,0 @@ -\documentclass[12pt,a4paper]{article} -\parskip 1ex -\parindent 0em -\thispagestyle{empty} -\pagestyle{plain} -\pagenumbering{arabic} -\setlength{\topmargin}{0pt} -\setlength{\headheight}{0pt} -\setlength{\headsep}{0pt} -\setlength{\topskip}{0pt} -\setlength{\textheight}{240mm} -\setlength{\footskip}{5ex} -\setlength{\oddsidemargin}{0pt} -\setlength{\evensidemargin}{0pt} -\setlength{\textwidth}{160mm} -\usepackage[dvips]{graphics,color} -\usepackage{helvet} -\renewcommand{\familydefault}{\sfdefault} -\begin{document} -\begin{sffamily} -\definecolor{rtb-black}{rgb} {0.0, 0.0, 0.0} -\definecolor{rtb-navy}{rgb} {0.0, 0.0, 0.5} -\definecolor{rtb-green}{rgb} {0.0, 0.5, 0.0} -\definecolor{rtb-teal}{rgb} {0.0, 0.5, 0.5} -\definecolor{rtb-maroon}{rgb} {0.5, 0.0, 0.0} -\definecolor{rtb-purple}{rgb} {0.5, 0.0, 0.5} -\definecolor{rtb-olive}{rgb} {0.5, 0.5, 0.0} -\definecolor{rtb-silver}{rgb} {0.7, 0.7, 0.7} -\definecolor{rtb-grey}{rgb} {0.5, 0.5, 0.5} -\definecolor{rtb-blue}{rgb} {0.0, 0.0, 1.0} -\definecolor{rtb-lime}{rgb} {0.0, 1.0, 0.0} -\definecolor{rtb-aqua}{rgb} {0.0, 1.0, 1.0} -\definecolor{rtb-red}{rgb} {1.0, 0.0, 0.0} -\definecolor{rtb-fuchsia}{rgb}{1.0, 0.0, 1.0} -\definecolor{rtb-yellow}{rgb} {1.0, 1.0, 0.0} -\definecolor{rtb-white}{rgb} {1.0, 1.0, 1.0} - -\begin{center} -\bfseries{WiringPi: GPIO Pin Numbering Tables}\\ -\tt{http://wiringpi.com/} -\end{center} - -\begin{center} -\begin{tabular}{|c|c|c||p{8mm}|p{8mm}||c|c|c|c|} -\hline -\multicolumn{8}{|c|}{\bfseries{P1: The Main GPIO connector}}\\ -\hline -\hline -WiringPi Pin & BCM GPIO & Name & \multicolumn{2}{|c||}{Header} & Name & BCM GPIO & WiringPi Pin\\ -\hline -\hline - & & \textcolor{rtb-red}{3.3v} & \raggedleft{1} & 2 & \textcolor{rtb-maroon}{5v} & & \\ -\hline -8 & Rv1:0 - Rv2:2 & \textcolor{rtb-aqua}{SDA} & \raggedleft{3} & 4 & \textcolor{rtb-maroon}{5v} & & \\ -\hline -9 & Rv1:1 - Rv2:3 & \textcolor{rtb-aqua}{SCL} & \raggedleft{5} & 6 & \textcolor{rtb-black}{0v} & & \\ -\hline -7 & 4 & \textcolor{rtb-green}{GPIO7} & \raggedleft{7} & 8 & \textcolor{rtb-yellow}{TxD} & 14 & 15\\ -\hline - & & \textcolor{rtb-black}{0v} & \raggedleft{9} & 10 & \textcolor{rtb-yellow}{RxD} & 15 & 16\\ -\hline -0 & 17 & \textcolor{rtb-green}{GPIO0} & \raggedleft{11} & 12 & \textcolor{rtb-green}{GPIO1} & 18 & 1\\ -\hline -2 & Rv1:21 - Rv2:27 & \textcolor{rtb-green}{GPIO2} & \raggedleft{13} & 14 & \textcolor{rtb-black}{0v} & & \\ -\hline -3 & 22 & \textcolor{rtb-green}{GPIO3} & \raggedleft{15} & 16 & \textcolor{rtb-green}{GPIO4} & 23 & 4\\ -\hline - & & \textcolor{rtb-red}{3.3v} & \raggedleft{17} & 18 & \textcolor{rtb-green}{GPIO5} & 24 & 5\\ -\hline -12 & 10 & \textcolor{rtb-teal}{MOSI} & \raggedleft{19} & 20 & \textcolor{rtb-black}{0v} & & \\ -\hline -13 & 9 & \textcolor{rtb-teal}{MISO} & \raggedleft{21} & 22 & \textcolor{rtb-green}{GPIO6} & 25 & 6\\ -\hline -14 & 11 & \textcolor{rtb-teal}{SCLK} & \raggedleft{23} & 24 & \textcolor{rtb-teal}{CE0} & 8 & 10\\ -\hline - & & \textcolor{rtb-black}{0v} & \raggedleft{25} & 26 & \textcolor{rtb-teal}{CE1} & 7 & 11\\ -\hline -\hline -WiringPi Pin & BCM GPIO & Name & \multicolumn{2}{|c||}{Header} & Name & BCM GPIO & WiringPi Pin\\ -\hline -\end{tabular} -\end{center} - -Note the differences between Revision 1 and Revision 2 Raspberry -Pi's. The Revision 2 is readily identifiable by the presence of the 2 -mounting holes. - -The revision 2 Raspberry Pi has an additional GPIO connector, P5, which is next to the main P1 GPIO -connector: - -\begin{center} -\begin{tabular}{|c|c|c||p{8mm}|p{8mm}||c|c|c|c|} -\hline -\multicolumn{8}{|c|}{\bfseries{P5: Secondary GPIO connector (Rev. 2 Pi only)}}\\ -\hline -\hline -WiringPi Pin & BCM GPIO & Name & \multicolumn{2}{|c||}{Header} & Name & BCM GPIO & WiringPi Pin\\ -\hline -\hline - & & \textcolor{rtb-maroon}{5v} & \raggedleft{1} & 2 & \textcolor{rtb-red}{3.3v} & & \\ -\hline -17 & 28 & \textcolor{rtb-green}{GPIO8} & \raggedleft{3} & 4 & \textcolor{rtb-green}{GPIO9} & 29 & 18 \\ -\hline -19 & 30 & \textcolor{rtb-green}{GPIO10} & \raggedleft{5} & 6 & \textcolor{rtb-green}{GPIO11} & 31 & 20 \\ -\hline - & & \textcolor{rtb-black}{0v} & \raggedleft{7} & 8 & \textcolor{rtb-black}{0v} & & \\ -\hline -\hline -WiringPi Pin & BCM GPIO & Name & \multicolumn{2}{|c||}{Header} & Name & BCM GPIO & WiringPi Pin\\ -\hline -\end{tabular} -\end{center} - - -\end{sffamily} -\end{document} diff --git a/update b/update old mode 100755 new mode 100644 diff --git a/wiringPi/Makefile b/wiringPi/Makefile old mode 100755 new mode 100644 index 47ddf3a..dae51cf --- a/wiringPi/Makefile +++ b/wiringPi/Makefile @@ -49,21 +49,9 @@ LIBS = -lm -lpthread -lrt -lcrypt SRC = wiringPi.c \ wiringSerial.c wiringShift.c \ + wiringPiSPI.c wiringPiI2C.c \ piHiPri.c piThread.c \ - wiringPiSPI.c \ - wiringPiI2C.c \ - softPwm.c softTone.c \ - mcp23008.c mcp23016.c mcp23017.c \ - mcp23s08.c mcp23s17.c \ - sr595.c \ - pcf8574.c pcf8591.c \ - mcp3002.c mcp3004.c mcp4802.c mcp3422.c \ - max31855.c max5322.c ads1115.c \ - sn3218.c \ - bmp180.c htu21d.c ds18b20.c \ - drcSerial.c drcNet.c \ - pseudoPins.c \ - wpiExtensions.c \ + softPwm.c softTone.c softServo.c \ odroidc1.c \ odroidc2.c \ odroidxu3.c \ @@ -124,17 +112,7 @@ install-static: $(STATIC) $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 -install-deb: $(DYNAMIC) - $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 + $Q install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib .PHONY: uninstall uninstall: @@ -149,6 +127,16 @@ depend: makedepend -Y $(SRC) $(SRC_I2C) # DO NOT DELETE +wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h +wiringSerial.o: wiringSerial.h +wiringShift.o: wiringPi.h wiringShift.h +wiringPiSPI.o: wiringPi.h wiringPiSPI.h +wiringPiI2C.o: wiringPi.h wiringPiI2C.h +piHiPri.o: wiringPi.h +piThread.o: wiringPi.h +softPwm.o: wiringPi.h softPwm.h +softTone.o: wiringPi.h softTone.h +softServo.o: wiringPi.h softServo.h # ODROID Boards odroidc1.o : wiringPi.h odroidc1.h @@ -157,39 +145,3 @@ odroidxu3.o : wiringPi.h odroidxu3.h odroidn1.o : wiringPi.h odroidn1.h odroidn2.o : wiringPi.h odroidn2.h odroidc4.o : wiringPi.h odroidc4.h - -wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h -wiringSerial.o: wiringSerial.h -wiringShift.o: wiringPi.h wiringShift.h -piHiPri.o: wiringPi.h -piThread.o: wiringPi.h -wiringPiSPI.o: wiringPi.h wiringPiSPI.h -wiringPiI2C.o: wiringPi.h wiringPiI2C.h -softPwm.o: wiringPi.h softPwm.h -softTone.o: wiringPi.h softTone.h -mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h -mcp23016.o: wiringPi.h wiringPiI2C.h mcp23016.h mcp23016reg.h -mcp23017.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23017.h -mcp23s08.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s08.h -mcp23s17.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s17.h -sr595.o: wiringPi.h sr595.h -pcf8574.o: wiringPi.h wiringPiI2C.h pcf8574.h -pcf8591.o: wiringPi.h wiringPiI2C.h pcf8591.h -mcp3002.o: wiringPi.h wiringPiSPI.h mcp3002.h -mcp3004.o: wiringPi.h wiringPiSPI.h mcp3004.h -mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h -mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h -max31855.o: wiringPi.h wiringPiSPI.h max31855.h -max5322.o: wiringPi.h wiringPiSPI.h max5322.h -ads1115.o: wiringPi.h wiringPiI2C.h ads1115.h -sn3218.o: wiringPi.h wiringPiI2C.h sn3218.h -bmp180.o: wiringPi.h wiringPiI2C.h bmp180.h -htu21d.o: wiringPi.h wiringPiI2C.h htu21d.h -ds18b20.o: wiringPi.h ds18b20.h -drcSerial.o: wiringPi.h wiringSerial.h drcSerial.h -pseudoPins.o: wiringPi.h pseudoPins.h -wpiExtensions.o: wiringPi.h mcp23008.h mcp23016.h mcp23017.h mcp23s08.h -wpiExtensions.o: mcp23s17.h sr595.h pcf8574.h pcf8591.h mcp3002.h mcp3004.h -wpiExtensions.o: mcp4802.h mcp3422.h max31855.h max5322.h ads1115.h sn3218.h -wpiExtensions.o: drcSerial.h pseudoPins.h bmp180.h htu21d.h ds18b20.h -wpiExtensions.o: wpiExtensions.h diff --git a/wiringPi/ads1115.c b/wiringPi/ads1115.c deleted file mode 100644 index 99753b6..0000000 --- a/wiringPi/ads1115.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - * ads1115.c: - * Extend wiringPi with the ADS1115 I2C 16-bit ADC - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -/* - ********************************************************************************* - * We're going to work in a hybrid mode to fit in with the wiringPi way of - * doing things, so there will be 4 analog pin which read the 4 single-ended - * channels as usual, also some fake digitalOutputs - these are the control - * registers that allow the user to put it into single/diff mode, set the - * gain and data rates. - ********************************************************************************* - */ - -#include -#include -#include - -#include -#include - -#include "ads1115.h" - -// Bits in the config register (it's a 16-bit register) - -#define CONFIG_OS_MASK (0x8000) // Operational Status Register -#define CONFIG_OS_SINGLE (0x8000) // Write - Starts a single-conversion - // Read 1 = Conversion complete - -// The multiplexor - -#define CONFIG_MUX_MASK (0x7000) - -// Differential modes - -#define CONFIG_MUX_DIFF_0_1 (0x0000) // Pos = AIN0, Neg = AIN1 (default) -#define CONFIG_MUX_DIFF_0_3 (0x1000) // Pos = AIN0, Neg = AIN3 -#define CONFIG_MUX_DIFF_1_3 (0x2000) // Pos = AIN1, Neg = AIN3 -#define CONFIG_MUX_DIFF_2_3 (0x3000) // Pos = AIN2, Neg = AIN3 (2nd differential channel) - -// Single-ended modes - -#define CONFIG_MUX_SINGLE_0 (0x4000) // AIN0 -#define CONFIG_MUX_SINGLE_1 (0x5000) // AIN1 -#define CONFIG_MUX_SINGLE_2 (0x6000) // AIN2 -#define CONFIG_MUX_SINGLE_3 (0x7000) // AIN3 - -// Programmable Gain Amplifier - -#define CONFIG_PGA_MASK (0x0E00) -#define CONFIG_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3 -#define CONFIG_PGA_4_096V (0x0200) // +/-4.096V range = Gain 1 -#define CONFIG_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 (default) -#define CONFIG_PGA_1_024V (0x0600) // +/-1.024V range = Gain 4 -#define CONFIG_PGA_0_512V (0x0800) // +/-0.512V range = Gain 8 -#define CONFIG_PGA_0_256V (0x0A00) // +/-0.256V range = Gain 16 - -#define CONFIG_MODE (0x0100) // 0 is continuous, 1 is single-shot (default) - -// Data Rate - -#define CONFIG_DR_MASK (0x00E0) -#define CONFIG_DR_8SPS (0x0000) // 8 samples per second -#define CONFIG_DR_16SPS (0x0020) // 16 samples per second -#define CONFIG_DR_32SPS (0x0040) // 32 samples per second -#define CONFIG_DR_64SPS (0x0060) // 64 samples per second -#define CONFIG_DR_128SPS (0x0080) // 128 samples per second (default) -#define CONFIG_DR_475SPS (0x00A0) // 475 samples per second -#define CONFIG_DR_860SPS (0x00C0) // 860 samples per second - -// Comparator mode - -#define CONFIG_CMODE_MASK (0x0010) -#define CONFIG_CMODE_TRAD (0x0000) // Traditional comparator with hysteresis (default) -#define CONFIG_CMODE_WINDOW (0x0010) // Window comparator - -// Comparator polarity - the polarity of the output alert/rdy pin - -#define CONFIG_CPOL_MASK (0x0008) -#define CONFIG_CPOL_ACTVLOW (0x0000) // Active low (default) -#define CONFIG_CPOL_ACTVHI (0x0008) // Active high - -// Latching comparator - does the alert/rdy pin latch - -#define CONFIG_CLAT_MASK (0x0004) -#define CONFIG_CLAT_NONLAT (0x0000) // Non-latching comparator (default) -#define CONFIG_CLAT_LATCH (0x0004) // Latching comparator - -// Comparitor queue - -#define CONFIG_CQUE_MASK (0x0003) -#define CONFIG_CQUE_1CONV (0x0000) // Assert after one conversions -#define CONFIG_CQUE_2CONV (0x0001) // Assert after two conversions -#define CONFIG_CQUE_4CONV (0x0002) // Assert after four conversions -#define CONFIG_CQUE_NONE (0x0003) // Disable the comparator (default) - -#define CONFIG_DEFAULT (0x8583) // From the datasheet - -#if defined ANDROID -#define __bswap_16(x) bswap_16(x) -#define __bswap_32(x) bswap_32(x) -#endif - -static const uint16_t dataRates [8] = -{ - CONFIG_DR_8SPS, CONFIG_DR_16SPS, CONFIG_DR_32SPS, CONFIG_DR_64SPS, CONFIG_DR_128SPS, CONFIG_DR_475SPS, CONFIG_DR_860SPS -} ; - -static const uint16_t gains [6] = -{ - CONFIG_PGA_6_144V, CONFIG_PGA_4_096V, CONFIG_PGA_2_048V, CONFIG_PGA_1_024V, CONFIG_PGA_0_512V, CONFIG_PGA_0_256V -} ; - - -/* - * analogRead: - * Pin is the channel to sample on the device. - * Channels 0-3 are single ended inputs, - * channels 4-7 are the various differential combinations. - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int chan = pin - node->pinBase ; - int16_t result ; - uint16_t config = CONFIG_DEFAULT ; - - chan &= 7 ; - -// Setup the configuration register - -// Set PGA/voltage range - - config &= ~CONFIG_PGA_MASK ; - config |= node->data0 ; - -// Set sample speed - - config &= ~CONFIG_DR_MASK ; - config |= node->data1 ; - -// Set single-ended channel or differential mode - - config &= ~CONFIG_MUX_MASK ; - - switch (chan) - { - case 0: config |= CONFIG_MUX_SINGLE_0 ; break ; - case 1: config |= CONFIG_MUX_SINGLE_1 ; break ; - case 2: config |= CONFIG_MUX_SINGLE_2 ; break ; - case 3: config |= CONFIG_MUX_SINGLE_3 ; break ; - - case 4: config |= CONFIG_MUX_DIFF_0_1 ; break ; - case 5: config |= CONFIG_MUX_DIFF_2_3 ; break ; - case 6: config |= CONFIG_MUX_DIFF_0_3 ; break ; - case 7: config |= CONFIG_MUX_DIFF_1_3 ; break ; - } - -// Start a single conversion - - config |= CONFIG_OS_SINGLE ; - config = __bswap_16 (config) ; - wiringPiI2CWriteReg16 (node->fd, 1, config) ; - -// Wait for the conversion to complete - - for (;;) - { - result = wiringPiI2CReadReg16 (node->fd, 1) ; - result = __bswap_16 (result) ; - if ((result & CONFIG_OS_MASK) != 0) - break ; - delayMicroseconds (100) ; - } - - result = wiringPiI2CReadReg16 (node->fd, 0) ; - result = __bswap_16 (result) ; - -// Sometimes with a 0v input on a single-ended channel the internal 0v reference -// can be higher than the input, so you get a negative result... - - if ( (chan < 4) && (result < 0) ) - return 0 ; - else - return (int)result ; -} - - -/* - * digitalWrite: - * It may seem odd to have a digital write here, but it's the best way - * to pass paramters into the chip in the wiringPi way of things. - * We have 2 digital registers: - * 0 is the gain control - * 1 is the data rate control - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int data) -{ - int chan = pin - node->pinBase ; - chan &= 3 ; - - if (chan == 0) // Gain Control - { - if ( (data < 0) || (data > 6) ) // Use default if out of range - data = 2 ; - node->data0 = gains [data] ; - } - else // Data rate control - { - if ( (data < 0) || (data > 7) ) // Use default if out of range - data = 4 ; - node->data1 = dataRates [data] ; // Bugfix 0-1 by "Eric de jong (gm)" - Thanks. - } - -} - - -/* - * analogWrite: - * We're using this to write to the 2 comparitor threshold registers. - * We could use a digitalWrite here but as it's an analog comparison - * then it feels better to do it this way. - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int data) -{ - int chan = pin - node->pinBase ; - int reg ; - int16_t ndata ; - - chan &= 3 ; - - reg = chan + 2 ; - - /**/ if (data < -32767) - ndata = -32767 ; - else if (data > 32767) - ndata = 32767 ; - else - ndata = (int16_t)data ; - - ndata = __bswap_16 (ndata) ; - wiringPiI2CWriteReg16 (node->fd, reg, data) ; -} - - - -/* - * ads1115Setup: - * Create a new wiringPi device node for an ads1115 on the Pi's - * I2C interface. - ********************************************************************************* - */ - -int ads1115Setup (const int pinBase, int i2cAddr) -{ - struct wiringPiNodeStruct *node ; - int fd ; - - if ((fd = wiringPiI2CSetup (i2cAddr)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 8) ; - - node->fd = fd ; - node->data0 = CONFIG_PGA_4_096V ; // Gain in data0 - node->data1 = CONFIG_DR_128SPS ; // Samples/sec in data1 - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - node->digitalWrite = myDigitalWrite ; - - return TRUE ; -} diff --git a/wiringPi/ads1115.h b/wiringPi/ads1115.h deleted file mode 100644 index 5c91735..0000000 --- a/wiringPi/ads1115.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ads1115.c: - * Extend wiringPi with the ADS1115 I2C 16-bit ADC - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -// Constants for some of the internal functions - -// Gain - -#define ADS1115_GAIN_6 0 -#define ADS1115_GAIN_4 1 -#define ADS1115_GAIN_2 2 -#define ADS1115_GAIN_1 3 -#define ADS1115_GAIN_HALF 4 -#define ADS1115_GAIN_QUARTER 5 - -// Data rate - -#define ADS1115_DR_8 0 -#define ADS1115_DR_16 1 -#define ADS1115_DR_32 2 -#define ADS1115_DR_64 3 -#define ADS1115_DR_128 4 -#define ADS1115_DR_250 5 -#define ADS1115_DR_475 6 -#define ADS1115_DR_860 7 - -#ifdef __cplusplus -extern "C" { -#endif - -extern int ads1115Setup (int pinBase, int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/bmp180.c b/wiringPi/bmp180.c deleted file mode 100644 index bad4bb3..0000000 --- a/wiringPi/bmp180.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * bmp180.c: - * Extend wiringPi with the BMP180 I2C Pressure and Temperature - * sensor. This is used in the Pi Weather Station - * Copyright (c) 2016 Gordon Henderson - * - * Information from the document held at: - * http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf - * was very useful when building this code. - * - *********************************************************************** - * 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" - -#include "bmp180.h" - -#undef DEBUG - -#define I2C_ADDRESS 0x77 -#define BMP180_OSS 0 - - -// Static calibration data -// The down-side of this is that there can only be one BMP180 in -// a system - which is practice isn't an issue as it's I2C -// address is fixed. - -static int16_t AC1, AC2, AC3 ; -static uint16_t AC4, AC5, AC6 ; -static int16_t VB1, VB2 ; -static int16_t MB, MC, MD ; - -static double c5, c6, mc, md, x0, x1, x2, yy0, yy1, yy2, p0, p1, p2 ; - -// Pressure & Temp variables - -uint32_t cPress, cTemp ; - -static int altitude ; - -/* - * read16: - * Quick hack to read the 16-bit data with the correct endian - ********************************************************************************* - */ - -uint16_t read16 (int fd, int reg) -{ - return (wiringPiI2CReadReg8 (fd, reg) << 8) | wiringPiI2CReadReg8 (fd, reg + 1) ; - -} - - -/* - * bmp180ReadTempPress: - * Does the hard work of reading the sensor - ********************************************************************************* - */ - -static void bmp180ReadTempPress (int fd) -{ - double fTemp, fPress ; - double tu, a ; - double pu, s, x, y, z ; - - uint8_t data [4] ; - -// Start a temperature sensor reading - - wiringPiI2CWriteReg8 (fd, 0xF4, 0x2E) ; - delay (5) ; - -// Read the raw data - - data [0] = wiringPiI2CReadReg8 (fd, 0xF6) ; - data [1] = wiringPiI2CReadReg8 (fd, 0xF7) ; - -// And calculate... - - tu = (data [0] * 256.0) + data [1] ; - - a = c5 * (tu - c6) ; - fTemp = a + (mc / (a + md)) ; - cTemp = (int)rint (((100.0 * fTemp) + 0.5) / 10.0) ; - -#ifdef DEBUG - printf ("fTemp: %f, cTemp: %6d\n", fTemp, cTemp) ; -#endif - -// Start a pressure snsor reading - - wiringPiI2CWriteReg8 (fd, 0xF4, 0x34 | (BMP180_OSS << 6)) ; - delay (5) ; - -// Read the raw data - - data [0] = wiringPiI2CReadReg8 (fd, 0xF6) ; - data [1] = wiringPiI2CReadReg8 (fd, 0xF7) ; - data [2] = wiringPiI2CReadReg8 (fd, 0xF8) ; - -// And calculate... - - pu = ((double)data [0] * 256.0) + (double)data [1] + ((double)data [2] / 256.0) ; - s = fTemp - 25.0 ; - x = (x2 * pow (s, 2.0)) + (x1 * s) + x0 ; - y = (yy2 * pow (s, 2.0)) + (yy1 * s) + yy0 ; - z = (pu - x) / y ; - fPress = (p2 * pow (z, 2.0)) + (p1 * z) + p0 ; - cPress = (int)rint (((100.0 * fPress) + 0.5) / 10.0) ; - -#ifdef DEBUG - printf ("fPress: %f, cPress: %6d\n", fPress, cPress) ; -#endif -} - - -/* - * myAnalogWrite: - * Write to a fake register to represent the height above sea level - * so that the peudo millibar register can read the pressure in mB - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int chan = pin - node->pinBase ; - - if (chan == 0) - altitude = value ; -} - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int chan = pin - node->pinBase ; - - bmp180ReadTempPress (node->fd) ; - - /**/ if (chan == 0) // Read Temperature - return cTemp ; - else if (chan == 1) // Pressure - return cPress ; - else if (chan == 2) // Pressure in mB - return cPress / pow (1 - ((double)altitude / 44330.0), 5.255) ; - else - return -9999 ; - -} - - -/* - * bmp180Setup: - * Create a new instance of a PCF8591 I2C GPIO interface. We know it - * has 4 pins, (4 analog inputs and 1 analog output which we'll shadow - * input 0) so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int bmp180Setup (const int pinBase) -{ - double c3, c4, b1 ; - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (I2C_ADDRESS)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 4) ; - - node->fd = fd ; - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - -// Read calibration data - - AC1 = read16 (fd, 0xAA) ; - AC2 = read16 (fd, 0xAC) ; - AC3 = read16 (fd, 0xAE) ; - AC4 = read16 (fd, 0xB0) ; - AC5 = read16 (fd, 0xB2) ; - AC6 = read16 (fd, 0xB4) ; - VB1 = read16 (fd, 0xB6) ; - VB2 = read16 (fd, 0xB8) ; - MB = read16 (fd, 0xBA) ; - MC = read16 (fd, 0xBC) ; - MD = read16 (fd, 0xBE) ; - -// Calculate coefficients - - c3 = 160.0 * pow (2.0, -15.0) * AC3 ; - c4 = pow (10.0, -3.0) * pow(2.0,-15.0) * AC4 ; - b1 = pow (160.0, 2.0) * pow(2.0,-30.0) * VB1 ; - c5 = (pow (2.0, -15.0) / 160.0) * AC5 ; - c6 = AC6 ; - mc = (pow (2.0, 11.0) / pow(160.0,2.0)) * MC ; - md = MD / 160.0 ; - x0 = AC1 ; - x1 = 160.0 * pow (2.0, -13.0) * AC2 ; - x2 = pow (160.0, 2.0) * pow(2.0,-25.0) * VB2 ; - yy0 = c4 * pow (2.0, 15.0) ; - yy1 = c4 * c3 ; - yy2 = c4 * b1 ; - p0 = (3791.0 - 8.0) / 1600.0 ; - p1 = 1.0 - 7357.0 * pow (2.0, -20.0) ; - p2 = 3038.0 * 100.0 * pow (2.0, -36.0) ; - - return TRUE ; -} diff --git a/wiringPi/bmp180.h b/wiringPi/bmp180.h deleted file mode 100644 index 4a6d13a..0000000 --- a/wiringPi/bmp180.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * bmp180.h: - * Extend wiringPi with the BMP180 I2C Pressure and Temperature - * sensor. - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int bmp180Setup (const int pinBase) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/drcNet.c b/wiringPi/drcNet.c deleted file mode 100644 index 0964ff7..0000000 --- a/wiringPi/drcNet.c +++ /dev/null @@ -1,405 +0,0 @@ -/* - * drcNet.h: - * Extend wiringPi with the DRC Network protocol (e.g. to another Pi) - * Copyright (c) 2016-2017 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include "wiringPi.h" -#include "drcNet.h" -#include "../wiringPiD/drcNetCmd.h" - - -/* - * remoteReadline: - * Read in a line of data from the remote server, ending with a newline - * character which is not stored. Returns the length or < 0 on - * any sort of failure. - ********************************************************************************* - */ - -static int remoteReadline (int fd, char *buf, int max) -{ - int len = 0 ; - char c ; - - for (;;) - { - if (read (fd, &c, 1) < 1) - return -1 ; - - if (c == '\n') - return len ; - - *buf++ = c ; - if (++len == max) - return len ; - } -} - - -/* - * getChallenge: - * Read in lines from the remote site until we get one identified - * as the challenge. This line contains the password salt. - ********************************************************************************* - */ - -static char *getChallenge (int fd) -{ - static char buf [1024] ; - int num ; - - for (;;) - { - if ((num = remoteReadline (fd, buf, 1023)) < 0) - return NULL ; - buf [num] = 0 ; - - if (strncmp (buf, "Challenge ", 10) == 0) - return &buf [10] ; - } -} - - -/* - * authenticate: - * Read in the challenge from the server, use it to encrypt our password - * and send it back to the server. Wait for a reply back from the server - * to say that we're good to go. - * The server will simply disconnect on a bad response. No 3 chances here. - ********************************************************************************* - */ - -static int authenticate (int fd, const char *pass) -{ - char *challenge ; - char *encrypted ; - char salted [1024] ; - - if ((challenge = getChallenge (fd)) == NULL) - return -1 ; - - sprintf (salted, "$6$%s$", challenge) ; - encrypted = crypt (pass, salted) ; - -// This is an assertion, or sanity check on my part... -// The '20' comes from the $6$ then the 16 characters of the salt, -// then the terminating $. - - if (strncmp (encrypted, salted, 20) != 0) - { - errno = EBADE ; - return -1 ; - } - -// 86 characters is the length of the SHA-256 hash - - if (write (fd, encrypted + 20, 86) == 86) - return 0 ; - else - return -1 ; -} - - -/* - * _drcSetupNet: - * Do the hard work of establishing a network connection and authenticating - * the password. - ********************************************************************************* - */ - -int _drcSetupNet (const char *ipAddress, const char *port, const char *password) -{ - struct addrinfo hints; - struct addrinfo *result, *rp ; - struct in6_addr serveraddr ; - int remoteFd ; - -// Start by seeing if we've been given a (textual) numeric IP address -// which will save lookups in getaddrinfo() - - memset (&hints, 0, sizeof (hints)) ; - hints.ai_flags = AI_NUMERICSERV ; - hints.ai_family = AF_UNSPEC ; - hints.ai_socktype = SOCK_STREAM ; - hints.ai_protocol = 0 ; - - if (inet_pton (AF_INET, ipAddress, &serveraddr) == 1) // Valid IPv4 - { - hints.ai_family = AF_INET ; - hints.ai_flags |= AI_NUMERICHOST ; - } - else - { - if (inet_pton (AF_INET6, ipAddress, &serveraddr) == 1) // Valid IPv6 - { - hints.ai_family = AF_INET6 ; - hints.ai_flags |= AI_NUMERICHOST ; - } - } - -// Now use getaddrinfo() with the newly supplied hints - - if (getaddrinfo (ipAddress, port, &hints, &result) != 0) - return -1 ; - -// Now try each address in-turn until we get one that connects... - - for (rp = result; rp != NULL; rp = rp->ai_next) - { - if ((remoteFd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol)) < 0) - continue ; - - if (connect (remoteFd, rp->ai_addr, rp->ai_addrlen) < 0) - continue ; - - if (authenticate (remoteFd, password) < 0) - { - close (remoteFd) ; - errno = EACCES ; // Permission denied - return -1 ; - } - else - return remoteFd ; - } - - errno = EHOSTUNREACH ; // Host unreachable - may not be right, but good enough - return -1 ; // Nothing connected -} - - -/* - * myPinMode: - * Change the pin mode on the remote DRC device - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_PIN_MODE ; - cmd.data = mode ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - - -/* - * myPullUpDnControl: - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_PULL_UP_DN ; - cmd.data = mode ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_DIGITAL_WRITE ; - cmd.data = value ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - - -/* - * myDigitalWrite8: - ********************************************************************************* - -static void myDigitalWrite8 (struct wiringPiNodeStruct *node, int pin, int value) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_DIGITAL_WRITE8 ; - cmd.data = value ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - */ - - -/* - * myAnalogWrite: - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_ANALOG_WRITE ; - cmd.data = value ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - - -/* - * myPwmWrite: - ********************************************************************************* - */ - -static void myPwmWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_PWM_WRITE ; - cmd.data = value ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; -} - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_ANALOG_READ ; - cmd.data = 0 ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; - - return cmd.data ; -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_DIGITAL_READ ; - cmd.data = 0 ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; - - return cmd.data ; -} - - -/* - * myDigitalRead8: - ********************************************************************************* - -static unsigned int myDigitalRead8 (struct wiringPiNodeStruct *node, int pin) -{ - struct drcNetComStruct cmd ; - - cmd.pin = pin - node->pinBase ; - cmd.cmd = DRCN_DIGITAL_READ8 ; - cmd.data = 0 ; - - (void)send (node->fd, &cmd, sizeof (cmd), 0) ; - (void)recv (node->fd, &cmd, sizeof (cmd), 0) ; - - return cmd.data ; -} - */ - - -/* - * drcNet: - * Create a new instance of an DRC GPIO interface. - * Could be a variable nunber of pins here - we might not know in advance. - ********************************************************************************* - */ - -int drcSetupNet (const int pinBase, const int numPins, const char *ipAddress, const char *port, const char *password) -{ - int fd, len ; - struct wiringPiNodeStruct *node ; - - if ((fd = _drcSetupNet (ipAddress, port, password)) < 0) - return FALSE ; - - len = sizeof (struct drcNetComStruct) ; - - if (setsockopt (fd, SOL_SOCKET, SO_RCVLOWAT, (void *)&len, sizeof (len)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, numPins) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->analogRead = myAnalogRead ; - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; -//node->digitalRead8 = myDigitalRead8 ; -//node->digitalWrite8 = myDigitalWrite8 ; - node->pwmWrite = myPwmWrite ; - - return TRUE ; -} diff --git a/wiringPi/drcNet.h b/wiringPi/drcNet.h deleted file mode 100644 index 00f9b05..0000000 --- a/wiringPi/drcNet.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * drcNet.h: - * Extend wiringPi with the DRC Network protocol (e.g. to another Pi) - * Copyright (c) 2016-2017 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 . - *********************************************************************** - */ - -/********* -struct drcNetStruct -{ - uint32_t pin ; - uint32_t cmd ; - uint32_t data ; -} ; -**************/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int drcSetupNet (const int pinBase, const int numPins, const char *ipAddress, const char *port, const char *password) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/drcSerial.c b/wiringPi/drcSerial.c deleted file mode 100644 index db7cc09..0000000 --- a/wiringPi/drcSerial.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * drcSerial.c: - * Extend wiringPi with the DRC Serial protocol (e.g. to Arduino) - * Copyright (c) 2013-2016 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include "wiringPi.h" -#include "wiringSerial.h" - -#include "drcSerial.h" - - -/* - * myPinMode: - * Change the pin mode on the remote DRC device - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - /**/ if (mode == OUTPUT) - serialPutchar (node->fd, 'o') ; // Input - else if (mode == PWM_OUTPUT) - serialPutchar (node->fd, 'p') ; // PWM - else - serialPutchar (node->fd, 'i') ; // Default to input - - serialPutchar (node->fd, pin - node->pinBase) ; -} - - -/* - * myPullUpDnControl: - * ATmegas only have pull-up's on of off. No pull-downs. - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - -// Force pin into input mode - - serialPutchar (node->fd, 'i' ) ; - serialPutchar (node->fd, pin - node->pinBase) ; - - /**/ if (mode == PUD_UP) - { - serialPutchar (node->fd, '1') ; - serialPutchar (node->fd, pin - node->pinBase) ; - } - else if (mode == PUD_OFF) - { - serialPutchar (node->fd, '0') ; - serialPutchar (node->fd, pin - node->pinBase) ; - } -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - serialPutchar (node->fd, value == 0 ? '0' : '1') ; - serialPutchar (node->fd, pin - node->pinBase) ; -} - - -/* - * myPwmWrite: - ********************************************************************************* - */ - -static void myPwmWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - serialPutchar (node->fd, 'v') ; - serialPutchar (node->fd, pin - node->pinBase) ; - serialPutchar (node->fd, value & 0xFF) ; -} - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int vHi, vLo ; - - serialPutchar (node->fd, 'a') ; - serialPutchar (node->fd, pin - node->pinBase) ; - vHi = serialGetchar (node->fd) ; - vLo = serialGetchar (node->fd) ; - - return (vHi << 8) | vLo ; -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - serialPutchar (node->fd, 'r') ; // Send read command - serialPutchar (node->fd, pin - node->pinBase) ; - return (serialGetchar (node->fd) == '0') ? 0 : 1 ; -} - - -/* - * drcSetup: - * Create a new instance of an DRC GPIO interface. - * Could be a variable nunber of pins here - we might not know in advance - * if it's an ATmega with 14 pins, or something with less or more! - ********************************************************************************* - */ - -int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud) -{ - int fd ; - int ok, tries ; - time_t then ; - struct wiringPiNodeStruct *node ; - - if ((fd = serialOpen (device, baud)) < 0) - return FALSE ; - - delay (10) ; // May need longer if it's an Uno that reboots on the open... - -// Flush any pending input - - while (serialDataAvail (fd)) - (void)serialGetchar (fd) ; - - ok = FALSE ; - for (tries = 1 ; (tries < 5) && (!ok) ; ++tries) - { - serialPutchar (fd, '@') ; // Ping - then = time (NULL) + 2 ; - while (time (NULL) < then) - if (serialDataAvail (fd)) - { - if (serialGetchar (fd) == '@') - { - ok = TRUE ; - break ; - } - } - } - - if (!ok) - { - serialClose (fd) ; - return FALSE ; - } - - node = wiringPiNewNode (pinBase, numPins) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->analogRead = myAnalogRead ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->pwmWrite = myPwmWrite ; - - return TRUE ; -} diff --git a/wiringPi/drcSerial.h b/wiringPi/drcSerial.h deleted file mode 100644 index 29e988e..0000000 --- a/wiringPi/drcSerial.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * drcSerial.h: - * Extend wiringPi with the DRC Serial protocol (e.g. to Arduino) - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int drcSetupSerial (const int pinBase, const int numPins, const char *device, const int baud) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/ds18b20.c b/wiringPi/ds18b20.c deleted file mode 100644 index 533398e..0000000 --- a/wiringPi/ds18b20.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * ds18b20.c: - * Extend wiringPi with the DS18B20 1-Wire temperature sensor. - * This is used in the Pi Weather Station and many other places. - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "wiringPi.h" - -#include "ds18b20.h" - -#define W1_PREFIX "/sys/bus/w1/devices/28-" -#define W1_POSTFIX "/w1_slave" - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int chan = pin - node->pinBase ; - int fd = node->fd ; - char buffer [4096] ; - char *p ; - int temp, sign ; - - if (chan != 0) - return -9999 ; - -// Rewind the file - we're keeping it open to keep things going -// smoothly - - lseek (fd, 0, SEEK_SET) ; - -// Read the file - we know it's only a couple of lines, so this ought to be -// more than enough - - if (read (fd, buffer, 4096) <= 0) // Read nothing, or it failed in some odd way - return -9998 ; - -// Look for YES, then t= - - if (strstr (buffer, "YES") == NULL) - return -9997 ; - - if ((p = strstr (buffer, "t=")) == NULL) - return -9996 ; - -// p points to the 't', so we skip over it... - - p += 2 ; - -// and extract the number -// (without caring about overflow) - - - if (*p == '-') // Negative number? - { - sign = -1 ; - ++p ; - } - else - sign = 1 ; - - temp = 0 ; - while (isdigit (*p)) - { - temp = temp * 10 + (*p - '0') ; - ++p ; - } - -// We know it returns temp * 1000, but we only really want temp * 10, so -// do a bit of rounding... - - temp = (temp + 50) / 100 ; - return temp * sign ; -} - - -/* - * ds18b20Setup: - * Create a new instance of a DS18B20 temperature sensor. - ********************************************************************************* - */ - -int ds18b20Setup (const int pinBase, const char *deviceId) -{ - int fd ; - struct wiringPiNodeStruct *node ; - char *fileName ; - -// Allocate space for the filename - - if ((fileName = malloc (strlen (W1_PREFIX) + strlen (W1_POSTFIX) + strlen (deviceId) + 1)) == NULL) - return FALSE ; - - sprintf (fileName, "%s%s%s", W1_PREFIX, deviceId, W1_POSTFIX) ; - - fd = open (fileName, O_RDONLY) ; - - free (fileName) ; - - if (fd < 0) - return FALSE ; - -// We'll keep the file open, to make access a little faster -// although it's very slow reading these things anyway )-: - - node = wiringPiNewNode (pinBase, 1) ; - - node->fd = fd ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/ds18b20.h b/wiringPi/ds18b20.h deleted file mode 100644 index a9ea291..0000000 --- a/wiringPi/ds18b20.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * bmp180.h: - * Extend wiringPi with the BMP180 I2C Pressure and Temperature - * sensor. - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int ds18b20Setup (const int pinBase, const char *serialNum) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/htu21d.c b/wiringPi/htu21d.c deleted file mode 100644 index 46c0fcb..0000000 --- a/wiringPi/htu21d.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * htu21d.c: - * Extend wiringPi with the HTU21D I2C humidity and Temperature - * sensor. This is used in the Pi Weather station. - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" - -#include "htu21d.h" - -#define DEBUG -#undef FAKE_SENSOR - -#define I2C_ADDRESS 0x40 - -int checksum (UNU uint8_t data [4]) -{ - return TRUE ; -} - - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int chan = pin - node->pinBase ; - int fd = node->fd ; - uint8_t data [4] ; - uint32_t sTemp, sHumid ; - double fTemp, fHumid ; - int cTemp, cHumid ; - - /**/ if (chan == 0) // Read Temperature - { - -// Send read temperature command: - - data [0] = 0xF3 ; - if (write (fd, data, 1) != 1) - return -9999 ; - -// Wait then read the data - - delay (50) ; - if (read (fd, data, 3) != 3) - return -9998 ; - - if (!checksum (data)) - return -9997 ; - -// Do the calculation - - sTemp = (data [0] << 8) | data [1] ; - fTemp = -48.85 + 175.72 * (double)sTemp / 63356.0 ; - cTemp = (int)rint (((100.0 * fTemp) + 0.5) / 10.0) ; - return cTemp ; - } - else if (chan == 1) // humidity - { -// Send read humidity command: - - data [0] = 0xF5 ; - if (write (fd, data, 1) != 1) - return -9999 ; - -// Wait then read the data - - delay (50) ; - if (read (fd, data, 3) != 3) - return -9998 ; - - if (!checksum (data)) - return -9997 ; - - sHumid = (data [0] << 8) | data [1] ; - fHumid = -6.0 + 125.0 * (double)sHumid / 65536.0 ; - cHumid = (int)rint (((100.0 * fHumid) + 0.5) / 10.0) ; - return cHumid ; - } - else - return -9999 ; -} - - -/* - * htu21dSetup: - * Create a new instance of a HTU21D I2C GPIO interface. - * This chip has a fixed I2C address, so we are not providing any - * allowance to change this. - ********************************************************************************* - */ - -int htu21dSetup (const int pinBase) -{ - int fd ; - struct wiringPiNodeStruct *node ; - uint8_t data ; - int status ; - - if ((fd = wiringPiI2CSetup (I2C_ADDRESS)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 2) ; - - node->fd = fd ; - node->analogRead = myAnalogRead ; - -// Send a reset code to it: - - data = 0xFE ; - if (write (fd, &data, 1) != 1) - return FALSE ; - - delay (15) ; - -// Read the status register to check it's really there - - status = wiringPiI2CReadReg8 (fd, 0xE7) ; - - return (status == 0x02) ? TRUE : FALSE ; -} diff --git a/wiringPi/htu21d.h b/wiringPi/htu21d.h deleted file mode 100644 index 3965c54..0000000 --- a/wiringPi/htu21d.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * htu21d.h: - * Extend wiringPi with the HTU21D I2C Humidity and Temperature - * sensor. - * Copyright (c) 2016 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int htu21dSetup (const int pinBase) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/max31855.c b/wiringPi/max31855.c deleted file mode 100644 index b85bb45..0000000 --- a/wiringPi/max31855.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * max31855.c: - * Extend wiringPi with the max31855 SPI Analog to Digital convertor - * Copyright (c) 2012-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 . - *********************************************************************** - */ - -#include -#include - -#include -#include - -#include "max31855.h" - -#if defined ANDROID -#define __bswap_16(x) bswap_16(x) -#define __bswap_32(x) bswap_32(x) -#endif - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - uint32_t spiData ; - int temp ; - int chan = pin - node->pinBase ; - - wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ; - - spiData = __bswap_32(spiData) ; - - switch (chan) - { - 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 ; - - } -} - - -/* - * max31855Setup: - * Create a new wiringPi device node for an max31855 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int max31855Setup (const int pinBase, int spiChannel) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiChannel, 5000000) < 0) // 5MHz - prob 4 on the Pi - return FALSE ; - - node = wiringPiNewNode (pinBase, 4) ; - - node->fd = spiChannel ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/max31855.h b/wiringPi/max31855.h deleted file mode 100644 index 385c4bd..0000000 --- a/wiringPi/max31855.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * max31855.c: - * Extend wiringPi with the MAX31855 SPI Thermocouple driver - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int max31855Setup (int pinBase, int spiChannel) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/max5322.c b/wiringPi/max5322.c deleted file mode 100644 index e56b085..0000000 --- a/wiringPi/max5322.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * max5322.c: - * Extend wiringPi with the MAX5322 SPI Digital to Analog convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "max5322.h" - -/* - * myAnalogWrite: - * Write analog value on the given pin - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - unsigned char spiData [2] ; - unsigned char chanBits, dataBits ; - int chan = pin - node->pinBase ; - - if (chan == 0) - chanBits = 0b01000000 ; - else - chanBits = 0b01010000 ; - - chanBits |= ((value >> 12) & 0x0F) ; - dataBits = ((value ) & 0xFF) ; - - spiData [0] = chanBits ; - spiData [1] = dataBits ; - - wiringPiSPIDataRW (node->fd, spiData, 2) ; -} - -/* - * max5322Setup: - * Create a new wiringPi device node for an max5322 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int max5322Setup (const int pinBase, int spiChannel) -{ - struct wiringPiNodeStruct *node ; - unsigned char spiData [2] ; - - if (wiringPiSPISetup (spiChannel, 8000000) < 0) // 10MHz Max - return FALSE ; - - node = wiringPiNewNode (pinBase, 2) ; - - node->fd = spiChannel ; - node->analogWrite = myAnalogWrite ; - -// Enable both DACs - - spiData [0] = 0b11100000 ; - spiData [1] = 0 ; - - wiringPiSPIDataRW (node->fd, spiData, 2) ; - - return TRUE ; -} diff --git a/wiringPi/max5322.h b/wiringPi/max5322.h deleted file mode 100644 index a217cf8..0000000 --- a/wiringPi/max5322.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * max5322.h: - * Extend wiringPi with the MAX5322 SPI Digital to Analog convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int max5322Setup (int pinBase, int spiChannel) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23008.c b/wiringPi/mcp23008.c deleted file mode 100644 index 71757a8..0000000 --- a/wiringPi/mcp23008.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - * mcp23008.c: - * Extend wiringPi with the MCP 23008 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" -#include "mcp23x0817.h" - -#include "mcp23008.h" - - -/* - * myPinMode: - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - reg = MCP23x08_IODIR ; - mask = 1 << (pin - node->pinBase) ; - old = wiringPiI2CReadReg8 (node->fd, reg) ; - - if (mode == OUTPUT) - old &= (~mask) ; - else - old |= mask ; - - wiringPiI2CWriteReg8 (node->fd, reg, old) ; -} - - -/* - * myPullUpDnControl: - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - reg = MCP23x08_GPPU ; - mask = 1 << (pin - node->pinBase) ; - - old = wiringPiI2CReadReg8 (node->fd, reg) ; - - if (mode == PUD_UP) - old |= mask ; - else - old &= (~mask) ; - - wiringPiI2CWriteReg8 (node->fd, reg, old) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - bit = 1 << ((pin - node->pinBase) & 7) ; - - old = node->data2 ; - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWriteReg8 (node->fd, MCP23x08_GPIO, old) ; - node->data2 = old ; -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value ; - - mask = 1 << ((pin - node->pinBase) & 7) ; - value = wiringPiI2CReadReg8 (node->fd, MCP23x08_GPIO) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * mcp23008Setup: - * Create a new instance of an MCP23008 I2C GPIO interface. We know it - * has 8 pins, so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int mcp23008Setup (const int pinBase, const int i2cAddress) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - wiringPiI2CWriteReg8 (fd, MCP23x08_IOCON, IOCON_INIT) ; - - node = wiringPiNewNode (pinBase, 8) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = wiringPiI2CReadReg8 (fd, MCP23x08_OLAT) ; - - return TRUE ; -} diff --git a/wiringPi/mcp23008.h b/wiringPi/mcp23008.h deleted file mode 100644 index e9299a8..0000000 --- a/wiringPi/mcp23008.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 23008.h: - * Extend wiringPi with the MCP 23008 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp23008Setup (const int pinBase, const int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23016.c b/wiringPi/mcp23016.c deleted file mode 100644 index 928d9e5..0000000 --- a/wiringPi/mcp23016.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * mcp23016.c: - * Extend wiringPi with the MCP 23016 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" -#include "mcp23016.h" - -#include "mcp23016reg.h" - - -/* - * myPinMode: - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - reg = MCP23016_IODIR0 ; - else - { - reg = MCP23016_IODIR1 ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - old = wiringPiI2CReadReg8 (node->fd, reg) ; - - if (mode == OUTPUT) - old &= (~mask) ; - else - old |= mask ; - - wiringPiI2CWriteReg8 (node->fd, reg, old) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - pin -= node->pinBase ; // Pin now 0-15 - - bit = 1 << (pin & 7) ; - - if (pin < 8) // Bank A - { - old = node->data2 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWriteReg8 (node->fd, MCP23016_GP0, old) ; - node->data2 = old ; - } - else // Bank B - { - old = node->data3 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWriteReg8 (node->fd, MCP23016_GP1, old) ; - node->data3 = old ; - } -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value, gpio ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - gpio = MCP23016_GP0 ; - else - { - gpio = MCP23016_GP1 ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - value = wiringPiI2CReadReg8 (node->fd, gpio) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * mcp23016Setup: - * Create a new instance of an MCP23016 I2C GPIO interface. We know it - * has 16 pins, so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int mcp23016Setup (const int pinBase, const int i2cAddress) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - wiringPiI2CWriteReg8 (fd, MCP23016_IOCON0, IOCON_INIT) ; - wiringPiI2CWriteReg8 (fd, MCP23016_IOCON1, IOCON_INIT) ; - - node = wiringPiNewNode (pinBase, 16) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = wiringPiI2CReadReg8 (fd, MCP23016_OLAT0) ; - node->data3 = wiringPiI2CReadReg8 (fd, MCP23016_OLAT1) ; - - return TRUE ; -} diff --git a/wiringPi/mcp23016.h b/wiringPi/mcp23016.h deleted file mode 100644 index f9b5cc5..0000000 --- a/wiringPi/mcp23016.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * mcp23016.h: - * Extend wiringPi with the MCP 23016 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp23016Setup (const int pinBase, const int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23016reg.h b/wiringPi/mcp23016reg.h deleted file mode 100644 index 9aea92d..0000000 --- a/wiringPi/mcp23016reg.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * mcp23016: - * Copyright (c) 2012-2013 Gordon Henderson - * - * Header file for code using the MCP23016 GPIO expander - * chip. - *********************************************************************** - * 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 . - *********************************************************************** - */ - -// MCP23016 Registers - -#define MCP23016_GP0 0x00 -#define MCP23016_GP1 0x01 -#define MCP23016_OLAT0 0x02 -#define MCP23016_OLAT1 0x03 -#define MCP23016_IPOL0 0x04 -#define MCP23016_IPOL1 0x05 -#define MCP23016_IODIR0 0x06 -#define MCP23016_IODIR1 0x07 -#define MCP23016_INTCAP0 0x08 -#define MCP23016_INTCAP1 0x09 -#define MCP23016_IOCON0 0x0A -#define MCP23016_IOCON1 0x0B - -// Bits in the IOCON register - -#define IOCON_IARES 0x01 - -// Default initialisation mode - -#define IOCON_INIT 0 diff --git a/wiringPi/mcp23017.c b/wiringPi/mcp23017.c deleted file mode 100644 index 4c3952d..0000000 --- a/wiringPi/mcp23017.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * mcp23017.c: - * Extend wiringPi with the MCP 23017 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" -#include "mcp23x0817.h" - -#include "mcp23017.h" - - -/* - * myPinMode: - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - reg = MCP23x17_IODIRA ; - else - { - reg = MCP23x17_IODIRB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - old = wiringPiI2CReadReg8 (node->fd, reg) ; - - if (mode == OUTPUT) - old &= (~mask) ; - else - old |= mask ; - - wiringPiI2CWriteReg8 (node->fd, reg, old) ; -} - - -/* - * myPullUpDnControl: - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - reg = MCP23x17_GPPUA ; - else - { - reg = MCP23x17_GPPUB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - old = wiringPiI2CReadReg8 (node->fd, reg) ; - - if (mode == PUD_UP) - old |= mask ; - else - old &= (~mask) ; - - wiringPiI2CWriteReg8 (node->fd, reg, old) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - pin -= node->pinBase ; // Pin now 0-15 - - bit = 1 << (pin & 7) ; - - if (pin < 8) // Bank A - { - old = node->data2 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWriteReg8 (node->fd, MCP23x17_GPIOA, old) ; - node->data2 = old ; - } - else // Bank B - { - old = node->data3 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWriteReg8 (node->fd, MCP23x17_GPIOB, old) ; - node->data3 = old ; - } -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value, gpio ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - gpio = MCP23x17_GPIOA ; - else - { - gpio = MCP23x17_GPIOB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - value = wiringPiI2CReadReg8 (node->fd, gpio) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * mcp23017Setup: - * Create a new instance of an MCP23017 I2C GPIO interface. We know it - * has 16 pins, so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int mcp23017Setup (const int pinBase, const int i2cAddress) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - wiringPiI2CWriteReg8 (fd, MCP23x17_IOCON, IOCON_INIT) ; - - node = wiringPiNewNode (pinBase, 16) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = wiringPiI2CReadReg8 (fd, MCP23x17_OLATA) ; - node->data3 = wiringPiI2CReadReg8 (fd, MCP23x17_OLATB) ; - - return TRUE ; -} diff --git a/wiringPi/mcp23017.h b/wiringPi/mcp23017.h deleted file mode 100644 index 79b4d7b..0000000 --- a/wiringPi/mcp23017.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 23017.h: - * Extend wiringPi with the MCP 23017 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp23017Setup (const int pinBase, const int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23s08.c b/wiringPi/mcp23s08.c deleted file mode 100644 index f293f3a..0000000 --- a/wiringPi/mcp23s08.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * mcp23s08.c: - * Extend wiringPi with the MCP 23s08 SPI GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiSPI.h" -#include "mcp23x0817.h" - -#include "mcp23s08.h" - -#define MCP_SPEED 4000000 - - - -/* - * writeByte: - * Write a byte to a register on the MCP23s08 on the SPI bus. - ********************************************************************************* - */ - -static void writeByte (uint8_t spiPort, uint8_t devId, uint8_t reg, uint8_t data) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_WRITE | ((devId & 7) << 1) ; - spiData [1] = reg ; - spiData [2] = data ; - - wiringPiSPIDataRW (spiPort, spiData, 3) ; -} - -/* - * readByte: - * Read a byte from a register on the MCP23s08 on the SPI bus. - ********************************************************************************* - */ - -static uint8_t readByte (uint8_t spiPort, uint8_t devId, uint8_t reg) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_READ | ((devId & 7) << 1) ; - spiData [1] = reg ; - - wiringPiSPIDataRW (spiPort, spiData, 3) ; - - return spiData [2] ; -} - - -/* - * myPinMode: - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - reg = MCP23x08_IODIR ; - mask = 1 << (pin - node->pinBase) ; - old = readByte (node->data0, node->data1, reg) ; - - if (mode == OUTPUT) - old &= (~mask) ; - else - old |= mask ; - - writeByte (node->data0, node->data1, reg, old) ; -} - - -/* - * myPullUpDnControl: - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - reg = MCP23x08_GPPU ; - mask = 1 << (pin - node->pinBase) ; - - old = readByte (node->data0, node->data1, reg) ; - - if (mode == PUD_UP) - old |= mask ; - else - old &= (~mask) ; - - writeByte (node->data0, node->data1, reg, old) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - bit = 1 << ((pin - node->pinBase) & 7) ; - - old = node->data2 ; - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - writeByte (node->data0, node->data1, MCP23x08_GPIO, old) ; - node->data2 = old ; -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value ; - - mask = 1 << ((pin - node->pinBase) & 7) ; - value = readByte (node->data0, node->data1, MCP23x08_GPIO) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * mcp23s08Setup: - * Create a new instance of an MCP23s08 SPI GPIO interface. We know it - * has 8 pins, so all we need to know here is the SPI address and the - * user-defined pin base. - ********************************************************************************* - */ - -int mcp23s08Setup (const int pinBase, const int spiPort, const int devId) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiPort, MCP_SPEED) < 0) - return FALSE ; - - writeByte (spiPort, devId, MCP23x08_IOCON, IOCON_INIT) ; - - node = wiringPiNewNode (pinBase, 8) ; - - node->data0 = spiPort ; - node->data1 = devId ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = readByte (spiPort, devId, MCP23x08_OLAT) ; - - return TRUE ; -} diff --git a/wiringPi/mcp23s08.h b/wiringPi/mcp23s08.h deleted file mode 100644 index ebf93d1..0000000 --- a/wiringPi/mcp23s08.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 23s08.h: - * Extend wiringPi with the MCP 23s08 SPI GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp23s08Setup (const int pinBase, const int spiPort, const int devId) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23s17.c b/wiringPi/mcp23s17.c deleted file mode 100644 index 42b0358..0000000 --- a/wiringPi/mcp23s17.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * mcp23s17.c: - * Extend wiringPi with the MCP 23s17 SPI GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiSPI.h" -#include "mcp23x0817.h" - -#include "mcp23s17.h" - -#define MCP_SPEED 4000000 - - - -/* - * writeByte: - * Write a byte to a register on the MCP23s17 on the SPI bus. - ********************************************************************************* - */ - -static void writeByte (uint8_t spiPort, uint8_t devId, uint8_t reg, uint8_t data) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_WRITE | ((devId & 7) << 1) ; - spiData [1] = reg ; - spiData [2] = data ; - - wiringPiSPIDataRW (spiPort, spiData, 3) ; -} - -/* - * readByte: - * Read a byte from a register on the MCP23s17 on the SPI bus. - ********************************************************************************* - */ - -static uint8_t readByte (uint8_t spiPort, uint8_t devId, uint8_t reg) -{ - uint8_t spiData [4] ; - - spiData [0] = CMD_READ | ((devId & 7) << 1) ; - spiData [1] = reg ; - - wiringPiSPIDataRW (spiPort, spiData, 3) ; - - return spiData [2] ; -} - - -/* - * myPinMode: - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - reg = MCP23x17_IODIRA ; - else - { - reg = MCP23x17_IODIRB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - old = readByte (node->data0, node->data1, reg) ; - - if (mode == OUTPUT) - old &= (~mask) ; - else - old |= mask ; - - writeByte (node->data0, node->data1, reg, old) ; -} - - -/* - * myPullUpDnControl: - ********************************************************************************* - */ - -static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int mask, old, reg ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - reg = MCP23x17_GPPUA ; - else - { - reg = MCP23x17_GPPUB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - old = readByte (node->data0, node->data1, reg) ; - - if (mode == PUD_UP) - old |= mask ; - else - old &= (~mask) ; - - writeByte (node->data0, node->data1, reg, old) ; -} - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - pin -= node->pinBase ; // Pin now 0-15 - - bit = 1 << (pin & 7) ; - - if (pin < 8) // Bank A - { - old = node->data2 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - writeByte (node->data0, node->data1, MCP23x17_GPIOA, old) ; - node->data2 = old ; - } - else // Bank B - { - old = node->data3 ; - - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - writeByte (node->data0, node->data1, MCP23x17_GPIOB, old) ; - node->data3 = old ; - } -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value, gpio ; - - pin -= node->pinBase ; - - if (pin < 8) // Bank A - gpio = MCP23x17_GPIOA ; - else - { - gpio = MCP23x17_GPIOB ; - pin &= 0x07 ; - } - - mask = 1 << pin ; - value = readByte (node->data0, node->data1, gpio) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * mcp23s17Setup: - * Create a new instance of an MCP23s17 SPI GPIO interface. We know it - * has 16 pins, so all we need to know here is the SPI address and the - * user-defined pin base. - ********************************************************************************* - */ - -int mcp23s17Setup (const int pinBase, const int spiPort, const int devId) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiPort, MCP_SPEED) < 0) - return FALSE ; - - writeByte (spiPort, devId, MCP23x17_IOCON, IOCON_INIT | IOCON_HAEN) ; - writeByte (spiPort, devId, MCP23x17_IOCONB, IOCON_INIT | IOCON_HAEN) ; - - node = wiringPiNewNode (pinBase, 16) ; - - node->data0 = spiPort ; - node->data1 = devId ; - node->pinMode = myPinMode ; - node->pullUpDnControl = myPullUpDnControl ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = readByte (spiPort, devId, MCP23x17_OLATA) ; - node->data3 = readByte (spiPort, devId, MCP23x17_OLATB) ; - - return TRUE ; -} diff --git a/wiringPi/mcp23s17.h b/wiringPi/mcp23s17.h deleted file mode 100644 index 3b2a808..0000000 --- a/wiringPi/mcp23s17.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 23s17.h: - * Extend wiringPi with the MCP 23s17 SPI GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp23s17Setup (int pinBase, int spiPort, int devId) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp23x08.h b/wiringPi/mcp23x08.h deleted file mode 100644 index c4e6b27..0000000 --- a/wiringPi/mcp23x08.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * mcp23x17: - * Copyright (c) 2012-2013 Gordon Henderson - * - * Header file for code using the MCP23x17 GPIO expander chip. - * This comes in 2 flavours: MCP23017 which has an I2C interface, - * an the MXP23S17 which has an SPI interface. - *********************************************************************** - * 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 . - *********************************************************************** - */ - - -// MCP23x17 Registers - -#define IODIRA 0x00 -#define IPOLA 0x02 -#define GPINTENA 0x04 -#define DEFVALA 0x06 -#define INTCONA 0x08 -#define IOCON 0x0A -#define GPPUA 0x0C -#define INTFA 0x0E -#define INTCAPA 0x10 -#define GPIOA 0x12 -#define OLATA 0x14 - -#define IODIRB 0x01 -#define IPOLB 0x03 -#define GPINTENB 0x05 -#define DEFVALB 0x07 -#define INTCONB 0x09 -#define IOCONB 0x0B -#define GPPUB 0x0D -#define INTFB 0x0F -#define INTCAPB 0x11 -#define GPIOB 0x13 -#define OLATB 0x15 - -// Bits in the IOCON register - -#define IOCON_UNUSED 0x01 -#define IOCON_INTPOL 0x02 -#define IOCON_ODR 0x04 -#define IOCON_HAEN 0x08 -#define IOCON_DISSLW 0x10 -#define IOCON_SEQOP 0x20 -#define IOCON_MIRROR 0x40 -#define IOCON_BANK_MODE 0x80 - -// Default initialisation mode - -#define IOCON_INIT (IOCON_SEQOP) - -// SPI Command codes - -#define CMD_WRITE 0x40 -#define CMD_READ 0x41 diff --git a/wiringPi/mcp23x0817.h b/wiringPi/mcp23x0817.h deleted file mode 100644 index 58bc038..0000000 --- a/wiringPi/mcp23x0817.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * mcp23xxx: - * Copyright (c) 2012-2013 Gordon Henderson - * - * Header file for code using the MCP23x08 and 17 GPIO expander - * chips. - * This comes in 2 flavours: MCP230xx (08/17) which has an I2C - * interface, and the MXP23Sxx (08/17) which has an SPI interface. - *********************************************************************** - * 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 . - *********************************************************************** - */ - -// MCP23x08 Registers - -#define MCP23x08_IODIR 0x00 -#define MCP23x08_IPOL 0x01 -#define MCP23x08_GPINTEN 0x02 -#define MCP23x08_DEFVAL 0x03 -#define MCP23x08_INTCON 0x04 -#define MCP23x08_IOCON 0x05 -#define MCP23x08_GPPU 0x06 -#define MCP23x08_INTF 0x07 -#define MCP23x08_INTCAP 0x08 -#define MCP23x08_GPIO 0x09 -#define MCP23x08_OLAT 0x0A - -// MCP23x17 Registers - -#define MCP23x17_IODIRA 0x00 -#define MCP23x17_IPOLA 0x02 -#define MCP23x17_GPINTENA 0x04 -#define MCP23x17_DEFVALA 0x06 -#define MCP23x17_INTCONA 0x08 -#define MCP23x17_IOCON 0x0A -#define MCP23x17_GPPUA 0x0C -#define MCP23x17_INTFA 0x0E -#define MCP23x17_INTCAPA 0x10 -#define MCP23x17_GPIOA 0x12 -#define MCP23x17_OLATA 0x14 - -#define MCP23x17_IODIRB 0x01 -#define MCP23x17_IPOLB 0x03 -#define MCP23x17_GPINTENB 0x05 -#define MCP23x17_DEFVALB 0x07 -#define MCP23x17_INTCONB 0x09 -#define MCP23x17_IOCONB 0x0B -#define MCP23x17_GPPUB 0x0D -#define MCP23x17_INTFB 0x0F -#define MCP23x17_INTCAPB 0x11 -#define MCP23x17_GPIOB 0x13 -#define MCP23x17_OLATB 0x15 - -// Bits in the IOCON register - -#define IOCON_UNUSED 0x01 -#define IOCON_INTPOL 0x02 -#define IOCON_ODR 0x04 -#define IOCON_HAEN 0x08 -#define IOCON_DISSLW 0x10 -#define IOCON_SEQOP 0x20 -#define IOCON_MIRROR 0x40 -#define IOCON_BANK_MODE 0x80 - -// Default initialisation mode - -#define IOCON_INIT (IOCON_SEQOP) - -// SPI Command codes - -#define CMD_WRITE 0x40 -#define CMD_READ 0x41 diff --git a/wiringPi/mcp3002.c b/wiringPi/mcp3002.c deleted file mode 100644 index 9ebf3e4..0000000 --- a/wiringPi/mcp3002.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * mcp3002.c: - * Extend wiringPi with the MCP3002 SPI Analog to Digital convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "mcp3002.h" - -/* - * myAnalogRead: - * Return the analog value of the given pin - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - unsigned char spiData [2] ; - unsigned char chanBits ; - int chan = pin - node->pinBase ; - - if (chan == 0) - chanBits = 0b11010000 ; - else - chanBits = 0b11110000 ; - - spiData [0] = chanBits ; - spiData [1] = 0 ; - - wiringPiSPIDataRW (node->fd, spiData, 2) ; - - return ((spiData [0] << 8) | (spiData [1] >> 1)) & 0x3FF ; -} - - -/* - * mcp3002Setup: - * Create a new wiringPi device node for an mcp3002 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int mcp3002Setup (const int pinBase, int spiChannel) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiChannel, 1000000) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 2) ; - - node->fd = spiChannel ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/mcp3002.h b/wiringPi/mcp3002.h deleted file mode 100644 index 0cd727f..0000000 --- a/wiringPi/mcp3002.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * mcp3002.c: - * Extend wiringPi with the MCP3002 SPI Analog to Digital convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp3002Setup (int pinBase, int spiChannel) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp3004.c b/wiringPi/mcp3004.c deleted file mode 100644 index be8383e..0000000 --- a/wiringPi/mcp3004.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * mcp3004.c: - * Extend wiringPi with the MCP3004 SPI Analog to Digital convertor - * Copyright (c) 2012-2013 Gordon Henderson - * - * Thanks also to "ShorTie" on IRC for some remote debugging help! - *********************************************************************** - * 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 . - *********************************************************************** - */ - -#include -#include - -#include "mcp3004.h" - -/* - * myAnalogRead: - * Return the analog value of the given pin - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - unsigned char spiData [3] ; - unsigned char chanBits ; - int chan = pin - node->pinBase ; - - chanBits = 0b10000000 | (chan << 4) ; - - spiData [0] = 1 ; // Start bit - spiData [1] = chanBits ; - spiData [2] = 0 ; - - wiringPiSPIDataRW (node->fd, spiData, 3) ; - - return ((spiData [1] << 8) | spiData [2]) & 0x3FF ; -} - - -/* - * mcp3004Setup: - * Create a new wiringPi device node for an mcp3004 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int mcp3004Setup (const int pinBase, int spiChannel) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiChannel, 1000000) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 8) ; - - node->fd = spiChannel ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/mcp3004.h b/wiringPi/mcp3004.h deleted file mode 100644 index a07c0bf..0000000 --- a/wiringPi/mcp3004.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * mcp3004.c: - * Extend wiringPi with the MCP3004 SPI Analog to Digital convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp3004Setup (int pinBase, int spiChannel) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp3422.c b/wiringPi/mcp3422.c deleted file mode 100644 index 7395f6b..0000000 --- a/wiringPi/mcp3422.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * mcp3422.c: - * Extend wiringPi with the MCP3422/3/4 I2C ADC chip - * This code assumes single-ended mode only. - * Tested on actual hardware: 20th Feb 2016. - * Copyright (c) 2013-2016 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 . - *********************************************************************** - */ - - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "mcp3422.h" - - -/* - * waitForConversion: - * Common code to wait for the ADC to finish conversion - ********************************************************************************* - */ - -void waitForConversion (int fd, unsigned char *buffer, int n) -{ - for (;;) - { - if (read(fd, buffer, n) < 0) { - fprintf(stderr, "Unable to read from the file descriptor: %s \n", strerror(errno)); - } - if ((buffer [n-1] & 0x80) == 0) - break ; - delay (1) ; - } -} - -/* - * myAnalogRead: - * Read a channel from the device - ********************************************************************************* - */ - -int myAnalogRead (struct wiringPiNodeStruct *node, int chan) -{ - unsigned char config ; - unsigned char buffer [4] ; - int value = 0 ; - int realChan = (chan & 3) - node->pinBase ; - -// One-shot mode, trigger plus the other configs. - - config = 0x80 | (realChan << 5) | (node->data0 << 2) | (node->data1) ; - - wiringPiI2CWrite (node->fd, config) ; - - switch (node->data0) // Sample rate - { - case MCP3422_SR_3_75: // 18 bits - waitForConversion (node->fd, &buffer [0], 4) ; - value = ((buffer [0] & 3) << 16) | (buffer [1] << 8) | buffer [2] ; - break ; - - case MCP3422_SR_15: // 16 bits - waitForConversion (node->fd, buffer, 3) ; - value = (buffer [0] << 8) | buffer [1] ; - break ; - - case MCP3422_SR_60: // 14 bits - waitForConversion (node->fd, buffer, 3) ; - value = ((buffer [0] & 0x3F) << 8) | buffer [1] ; - break ; - - case MCP3422_SR_240: // 12 bits - default - waitForConversion (node->fd, buffer, 3) ; - value = ((buffer [0] & 0x0F) << 8) | buffer [1] ; - break ; - } - - return value ; -} - - -/* - * mcp3422Setup: - * Create a new wiringPi device node for the mcp3422 - ********************************************************************************* - */ - -int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 4) ; - - node->fd = fd ; - node->data0 = sampleRate ; - node->data1 = gain ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/mcp3422.h b/wiringPi/mcp3422.h deleted file mode 100644 index 72647d4..0000000 --- a/wiringPi/mcp3422.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * mcp3422.h: - * Extend wiringPi with the MCP3422/3/4 I2C ADC chip - *********************************************************************** - * 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 . - *********************************************************************** - */ - -#define MCP3422_SR_240 0 -#define MCP3422_SR_60 1 -#define MCP3422_SR_15 2 -#define MCP3422_SR_3_75 3 - -#define MCP3422_GAIN_1 0 -#define MCP3422_GAIN_2 1 -#define MCP3422_GAIN_4 2 -#define MCP3422_GAIN_8 3 - - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/mcp4802.c b/wiringPi/mcp4802.c deleted file mode 100644 index ef104ed..0000000 --- a/wiringPi/mcp4802.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * mcp4802.c: - * Extend wiringPi with the MCP4802 SPI Digital to Analog convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "mcp4802.h" - -/* - * myAnalogWrite: - * Write analog value on the given pin - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - unsigned char spiData [2] ; - unsigned char chanBits, dataBits ; - int chan = pin - node->pinBase ; - - if (chan == 0) - chanBits = 0x30 ; - else - chanBits = 0xB0 ; - - chanBits |= ((value >> 4) & 0x0F) ; - dataBits = ((value << 4) & 0xF0) ; - - spiData [0] = chanBits ; - spiData [1] = dataBits ; - - wiringPiSPIDataRW (node->fd, spiData, 2) ; -} - -/* - * mcp4802Setup: - * Create a new wiringPi device node for an mcp4802 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int mcp4802Setup (const int pinBase, int spiChannel) -{ - struct wiringPiNodeStruct *node ; - - if (wiringPiSPISetup (spiChannel, 1000000) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 2) ; - - node->fd = spiChannel ; - node->analogWrite = myAnalogWrite ; - - return TRUE ; -} diff --git a/wiringPi/mcp4802.h b/wiringPi/mcp4802.h deleted file mode 100644 index effa024..0000000 --- a/wiringPi/mcp4802.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * mcp4802.c: - * Extend wiringPi with the MCP4802 SPI Digital to Analog convertor - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int mcp4802Setup (int pinBase, int spiChannel) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/odroid_template.c b/wiringPi/odroid_template.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroid_template.h b/wiringPi/odroid_template.h old mode 100755 new mode 100644 diff --git a/wiringPi/odroidc1.c b/wiringPi/odroidc1.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroidc1.h b/wiringPi/odroidc1.h old mode 100755 new mode 100644 diff --git a/wiringPi/odroidc2.c b/wiringPi/odroidc2.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroidc2.h b/wiringPi/odroidc2.h old mode 100755 new mode 100644 diff --git a/wiringPi/odroidn1.c b/wiringPi/odroidn1.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroidn1.h b/wiringPi/odroidn1.h old mode 100755 new mode 100644 diff --git a/wiringPi/odroidn2.c b/wiringPi/odroidn2.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroidn2.h b/wiringPi/odroidn2.h old mode 100755 new mode 100644 diff --git a/wiringPi/odroidxu3.c b/wiringPi/odroidxu3.c old mode 100755 new mode 100644 diff --git a/wiringPi/odroidxu3.h b/wiringPi/odroidxu3.h old mode 100755 new mode 100644 diff --git a/wiringPi/pcf8574.c b/wiringPi/pcf8574.c deleted file mode 100644 index e0b686a..0000000 --- a/wiringPi/pcf8574.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * pcf8574.c: - * Extend wiringPi with the PCF8574 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" - -#include "pcf8574.h" - - -/* - * myPinMode: - * The PCF8574 is an odd chip - the pins are effectively bi-directional, - * however the pins should be drven high when used as an input pin... - * So, we're effectively copying digitalWrite... - ********************************************************************************* - */ - -static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode) -{ - int bit, old ; - - bit = 1 << ((pin - node->pinBase) & 7) ; - - old = node->data2 ; - if (mode == OUTPUT) - old &= (~bit) ; // Write bit to 0 - else - old |= bit ; // Write bit to 1 - - wiringPiI2CWrite (node->fd, old) ; - node->data2 = old ; -} - - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int bit, old ; - - bit = 1 << ((pin - node->pinBase) & 7) ; - - old = node->data2 ; - if (value == LOW) - old &= (~bit) ; - else - old |= bit ; - - wiringPiI2CWrite (node->fd, old) ; - node->data2 = old ; -} - - -/* - * myDigitalRead: - ********************************************************************************* - */ - -static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) -{ - int mask, value ; - - mask = 1 << ((pin - node->pinBase) & 7) ; - value = wiringPiI2CRead (node->fd) ; - - if ((value & mask) == 0) - return LOW ; - else - return HIGH ; -} - - -/* - * pcf8574Setup: - * Create a new instance of a PCF8574 I2C GPIO interface. We know it - * has 8 pins, so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int pcf8574Setup (const int pinBase, const int i2cAddress) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 8) ; - - node->fd = fd ; - node->pinMode = myPinMode ; - node->digitalRead = myDigitalRead ; - node->digitalWrite = myDigitalWrite ; - node->data2 = wiringPiI2CRead (fd) ; - - return TRUE ; -} diff --git a/wiringPi/pcf8574.h b/wiringPi/pcf8574.h deleted file mode 100644 index 8e2d818..0000000 --- a/wiringPi/pcf8574.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * pcf8574.h: - * Extend wiringPi with the PCF8574 I2C GPIO expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int pcf8574Setup (const int pinBase, const int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/pcf8591.c b/wiringPi/pcf8591.c deleted file mode 100644 index cfb094a..0000000 --- a/wiringPi/pcf8591.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * pcf8591.c: - * Extend wiringPi with the PCF8591 I2C GPIO Analog expander chip - * The chip has 1 8-bit DAC and 4 x 8-bit ADCs - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include -#include - -#include "wiringPi.h" -#include "wiringPiI2C.h" - -#include "pcf8591.h" - - -/* - * myAnalogWrite: - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, UNU int pin, int value) -{ - unsigned char b [2] ; - b [0] = 0x40 ; - b [1] = value & 0xFF ; - if (write(node->fd, b, 2) < 0) { - fprintf(stderr, "Unable to write to the file descriptor: %s \n", strerror(errno)); - } -} - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int x ; - - wiringPiI2CWrite (node->fd, 0x40 | ((pin - node->pinBase) & 3)) ; - - x = wiringPiI2CRead (node->fd) ; // Throw away the first read - x = wiringPiI2CRead (node->fd) ; - - return x ; -} - - -/* - * pcf8591Setup: - * Create a new instance of a PCF8591 I2C GPIO interface. We know it - * has 4 pins, (4 analog inputs and 1 analog output which we'll shadow - * input 0) so all we need to know here is the I2C address and the - * user-defined pin base. - ********************************************************************************* - */ - -int pcf8591Setup (const int pinBase, const int i2cAddress) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (i2cAddress)) < 0) - return FALSE ; - - node = wiringPiNewNode (pinBase, 4) ; - - node->fd = fd ; - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - - return TRUE ; -} diff --git a/wiringPi/pcf8591.h b/wiringPi/pcf8591.h deleted file mode 100644 index 6b44ccf..0000000 --- a/wiringPi/pcf8591.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * pcf8591.h: - * Extend wiringPi with the PCF8591 I2C GPIO Analog expander chip - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int pcf8591Setup (const int pinBase, const int i2cAddress) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/pseudoPins.c b/wiringPi/pseudoPins.c deleted file mode 100644 index 3036dbf..0000000 --- a/wiringPi/pseudoPins.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * pseudoPins.c: - * Extend wiringPi with a number of pseudo pins which can be - * digitally or analog written/read. - * - * Note: - * Just one set of pseudo pins can exist per Raspberry Pi. - * These pins are shared between all programs running on - * that Raspberry Pi. The values are also persistant as - * they live in shared RAM. This gives you a means for - * temporary variable storing/sharing between programs, - * or for other cunning things I've not thought of yet.. - * - * Copyright (c) 2012-2016 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 . - *********************************************************************** - */ - -#define SHARED_NAME "wiringPiPseudoPins" -#define PSEUDO_PINS 64 - -#include -#include -#include -#include -#include -#include - -#include - -#include "pseudoPins.h" - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int *ptr = (int *)(uintptr_t) node->data0 ; - int myPin = pin - node->pinBase ; - - return *(ptr + myPin) ; -} - - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int *ptr = (int *)(uintptr_t) node->data0 ; - int myPin = pin - node->pinBase ; - - *(ptr + myPin) = value ; -} - - -/* - * pseudoPinsSetup: - * Create a new wiringPi device node for the pseudoPins driver - ********************************************************************************* - */ - -int pseudoPinsSetup (const int pinBase) -{ - struct wiringPiNodeStruct *node ; - void *ptr ; - - node = wiringPiNewNode (pinBase, PSEUDO_PINS) ; - - node->fd = shm_open (SHARED_NAME, O_CREAT | O_RDWR, 0666) ; - - if (node->fd < 0) - return FALSE ; - - if (ftruncate (node->fd, PSEUDO_PINS * sizeof (int)) < 0) - return FALSE ; - - ptr = mmap (NULL, PSEUDO_PINS * sizeof (int), PROT_READ | PROT_WRITE, MAP_SHARED, node->fd, 0) ; - - node->data0 = (unsigned int)(uintptr_t) ptr ; - - node->analogRead = myAnalogRead ; - node->analogWrite = myAnalogWrite ; - - return TRUE ; -} diff --git a/wiringPi/pseudoPins.h b/wiringPi/pseudoPins.h deleted file mode 100644 index bef4660..0000000 --- a/wiringPi/pseudoPins.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * pseudoPins.h: - * Extend wiringPi with a number of pseudo pins which can be - * digitally or analog written/read. - * Copyright (c) 2012-2016 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 . - *********************************************************************** - */ - -extern int pseudoPinsSetup (const int pinBase) ; diff --git a/wiringPi/rht03.c b/wiringPi/rht03.c deleted file mode 100644 index 1129cfd..0000000 --- a/wiringPi/rht03.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * rht03.c: - * Extend wiringPi with the rht03 Maxdetect 1-Wire sensor. - * Copyright (c) 2016-2017 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 . - *********************************************************************** - */ - -#include -#include -#include -#include - -#include "wiringPi.h" -#include "rht03.h" - -/* - * maxDetectLowHighWait: - * Wait for a transition from low to high on the bus - ********************************************************************************* - */ - -static int maxDetectLowHighWait (const int pin) -{ - struct timeval now, timeOut, timeUp ; - -// If already high then wait for pin to go low - - gettimeofday (&now, NULL) ; - timerclear (&timeOut) ; - timeOut.tv_usec = 1000 ; - timeradd (&now, &timeOut, &timeUp) ; - - while (digitalRead (pin) == HIGH) - { - gettimeofday (&now, NULL) ; - if (timercmp (&now, &timeUp, >)) - return FALSE ; - } - -// Wait for it to go HIGH - - gettimeofday (&now, NULL) ; - timerclear (&timeOut) ; - timeOut.tv_usec = 1000 ; - timeradd (&now, &timeOut, &timeUp) ; - - while (digitalRead (pin) == LOW) - { - gettimeofday (&now, NULL) ; - if (timercmp (&now, &timeUp, >)) - return FALSE ; - } - - return TRUE ; -} - - -/* - * maxDetectClockByte: - * Read in a single byte from the MaxDetect bus - ********************************************************************************* - */ - -static unsigned int maxDetectClockByte (const int pin) -{ - unsigned int byte = 0 ; - int bit ; - - for (bit = 0 ; bit < 8 ; ++bit) - { - if (!maxDetectLowHighWait (pin)) - return 0 ; - -// bit starting now - we need to time it. - - delayMicroseconds (30) ; - byte <<= 1 ; - if (digitalRead (pin) == HIGH) // It's a 1 - byte |= 1 ; - } - - return byte ; -} - - -/* - * maxDetectRead: - * Read in and return the 4 data bytes from the MaxDetect sensor. - * Return TRUE/FALSE depending on the checksum validity - ********************************************************************************* - */ - -static int maxDetectRead (const int pin, unsigned char buffer [4]) -{ - int i ; - unsigned int checksum ; - unsigned char localBuf [5] ; - struct timeval now, then, took ; - -// See how long we took - - gettimeofday (&then, NULL) ; - -// Wake up the RHT03 by pulling the data line low, then high -// Low for 10mS, high for 40uS. - - pinMode (pin, OUTPUT) ; - digitalWrite (pin, 0) ; delay (10) ; - digitalWrite (pin, 1) ; delayMicroseconds (40) ; - pinMode (pin, INPUT) ; - -// Now wait for sensor to pull pin low - - if (!maxDetectLowHighWait (pin)) - return FALSE ; - -// and read in 5 bytes (40 bits) - - for (i = 0 ; i < 5 ; ++i) - localBuf [i] = maxDetectClockByte (pin) ; - - checksum = 0 ; - for (i = 0 ; i < 4 ; ++i) - { - buffer [i] = localBuf [i] ; - checksum += localBuf [i] ; - } - checksum &= 0xFF ; - -// See how long we took - - gettimeofday (&now, NULL) ; - timersub (&now, &then, &took) ; - -// Total time to do this should be: -// 10mS + 40µS - reset -// + 80µS + 80µS - sensor doing its low -> high thing -// + 40 * (50µS + 27µS (0) or 70µS (1) ) -// = 15010µS -// so if we take more than that, we've had a scheduling interruption and the -// reading is probably bogus. - - if ((took.tv_sec != 0) || (took.tv_usec > 16000)) - return FALSE ; - - return checksum == localBuf [4] ; -} - - -/* - * myReadRHT03: - * Read the Temperature & Humidity from an RHT03 sensor - * Values returned are *10, so 123 is 12.3. - ********************************************************************************* - */ - -static int myReadRHT03 (const int pin, int *temp, int *rh) -{ - int result ; - unsigned char buffer [4] ; - -// Read ... - - result = maxDetectRead (pin, buffer) ; - - if (!result) - return FALSE ; - - *rh = (buffer [0] * 256 + buffer [1]) ; - *temp = (buffer [2] * 256 + buffer [3]) ; - - if ((*temp & 0x8000) != 0) // Negative - { - *temp &= 0x7FFF ; - *temp = -*temp ; - } - -// Discard obviously bogus readings - the checksum can't detect a 2-bit error -// (which does seem to happen - no realtime here) - - if ((*rh > 999) || (*temp > 800) || (*temp < -400)) - return FALSE ; - - return TRUE ; -} - - -/* - * myAnalogRead: - ********************************************************************************* - */ - -static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) -{ - int piPin = node->fd ; - int chan = pin - node->pinBase ; - int temp = -9997 ; - int rh = -9997 ; - int try ; - - if (chan > 1) - return -9999 ; // Bad parameters - - for (try = 0 ; try < 10 ; ++try) - { - if (myReadRHT03 (piPin, &temp, &rh)) - return chan == 0 ? temp : rh ; - } - - return -9998 ; -} - - -/* - * rht03Setup: - * Create a new instance of an RHT03 temperature sensor. - ********************************************************************************* - */ - -int rht03Setup (const int pinBase, const int piPin) -{ - struct wiringPiNodeStruct *node ; - - if ((piPin & PI_GPIO_MASK) != 0) // Must be an on-board pin - return FALSE ; - -// 2 pins - temperature and humidity - - node = wiringPiNewNode (pinBase, 2) ; - - node->fd = piPin ; - node->analogRead = myAnalogRead ; - - return TRUE ; -} diff --git a/wiringPi/rht03.h b/wiringPi/rht03.h deleted file mode 100644 index 9523fbf..0000000 --- a/wiringPi/rht03.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * rht03.h: - * Extend wiringPi with the rht03 Maxdetect 1-Wire sensor. - * Copyright (c) 2016-2017 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 . - *********************************************************************** - */ - -extern int rht03Setup (const int pinBase, const int devicePin) ; diff --git a/wiringPi/sn3218.c b/wiringPi/sn3218.c deleted file mode 100644 index d9b9113..0000000 --- a/wiringPi/sn3218.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * sn3218.c: - * Extend wiringPi with the SN3218 I2C LEd Driver - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "sn3218.h" - -/* - * myAnalogWrite: - * Write analog value on the given pin - ********************************************************************************* - */ - -static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - int fd = node->fd ; - int chan = 0x01 + (pin - node->pinBase) ; - - wiringPiI2CWriteReg8 (fd, chan, value & 0xFF) ; // Value - wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update -} - -/* - * sn3218Setup: - * Create a new wiringPi device node for an sn3218 on the Pi's - * SPI interface. - ********************************************************************************* - */ - -int sn3218Setup (const int pinBase) -{ - int fd ; - struct wiringPiNodeStruct *node ; - - if ((fd = wiringPiI2CSetup (0x54)) < 0) - return FALSE ; - -// Setup the chip - initialise all 18 LEDs to off - -//wiringPiI2CWriteReg8 (fd, 0x17, 0) ; // Reset - wiringPiI2CWriteReg8 (fd, 0x00, 1) ; // Not Shutdown - wiringPiI2CWriteReg8 (fd, 0x13, 0x3F) ; // Enable LEDs 0- 5 - wiringPiI2CWriteReg8 (fd, 0x14, 0x3F) ; // Enable LEDs 6-11 - wiringPiI2CWriteReg8 (fd, 0x15, 0x3F) ; // Enable LEDs 12-17 - wiringPiI2CWriteReg8 (fd, 0x16, 0x00) ; // Update - - node = wiringPiNewNode (pinBase, 18) ; - - node->fd = fd ; - node->analogWrite = myAnalogWrite ; - - return TRUE ; -} diff --git a/wiringPi/sn3218.h b/wiringPi/sn3218.h deleted file mode 100644 index 580d5f9..0000000 --- a/wiringPi/sn3218.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * sn3218.c: - * Extend wiringPi with the SN3218 I2C LED driver board. - * Copyright (c) 2012-2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int sn3218Setup (int pinBase) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/sr595.c b/wiringPi/sr595.c deleted file mode 100644 index 8280618..0000000 --- a/wiringPi/sr595.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * sr595.c: - * Extend wiringPi with the 74x595 shift register as a GPIO - * expander chip. - * Note that the code can cope with a number of 595's - * daisy-chained together - up to 4 for now as we're storing - * the output "register" in a single unsigned int. - * - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#include -#include - -#include "wiringPi.h" - -#include "sr595.h" - - -/* - * myDigitalWrite: - ********************************************************************************* - */ - -static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value) -{ - unsigned int mask ; - int dataPin, clockPin, latchPin ; - int bit, bits, output ; - - pin -= node->pinBase ; // Normalise pin number - bits = node->pinMax - node->pinBase + 1 ; // ie. number of clock pulses - dataPin = node->data0 ; - clockPin = node->data1 ; - latchPin = node->data2 ; - output = node->data3 ; - - mask = 1 << pin ; - - if (value == LOW) - output &= (~mask) ; - else - output |= mask ; - - node->data3 = output ; - -// A low -> high latch transition copies the latch to the output pins - - digitalWrite (latchPin, LOW) ; delayMicroseconds (1) ; - for (bit = bits - 1 ; bit >= 0 ; --bit) - { - digitalWrite (dataPin, output & (1 << bit)) ; - - digitalWrite (clockPin, HIGH) ; delayMicroseconds (1) ; - digitalWrite (clockPin, LOW) ; delayMicroseconds (1) ; - } - digitalWrite (latchPin, HIGH) ; delayMicroseconds (1) ; -} - - -/* - * sr595Setup: - * Create a new instance of a 74x595 shift register GPIO expander. - ********************************************************************************* - */ - -int sr595Setup (const int pinBase, const int numPins, - const int dataPin, const int clockPin, const int latchPin) -{ - struct wiringPiNodeStruct *node ; - - node = wiringPiNewNode (pinBase, numPins) ; - - node->data0 = dataPin ; - node->data1 = clockPin ; - node->data2 = latchPin ; - node->data3 = 0 ; // Output register - node->digitalWrite = myDigitalWrite ; - -// Initialise the underlying hardware - - digitalWrite (dataPin, LOW) ; - digitalWrite (clockPin, LOW) ; - digitalWrite (latchPin, HIGH) ; - - pinMode (dataPin, OUTPUT) ; - pinMode (clockPin, OUTPUT) ; - pinMode (latchPin, OUTPUT) ; - - return TRUE ; -} diff --git a/wiringPi/sr595.h b/wiringPi/sr595.h deleted file mode 100644 index 4a26dc7..0000000 --- a/wiringPi/sr595.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * sr595.h: - * Extend wiringPi with the 74x595 shift registers. - * Copyright (c) 2013 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 . - *********************************************************************** - */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int sr595Setup (const int pinBase, const int numPins, - const int dataPin, const int clockPin, const int latchPin) ; - -#ifdef __cplusplus -} -#endif diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c old mode 100755 new mode 100644 index bbb80ed..d1e5f01 --- a/wiringPi/wiringPi.c +++ b/wiringPi/wiringPi.c @@ -32,6 +32,7 @@ #include "wiringPi.h" #include "../version.h" +/*----------------------------------------------------------------------------*/ #include "odroidc1.h" #include "odroidc2.h" #include "odroidxu3.h" @@ -80,10 +81,10 @@ const char *piMakerNames [16] = { "Unknown", // 0 "AMLogic", // 1 - "SAMSUNG", // 2 - "ROCKCHIP", // 3 - "INTEL", // 4 - "AMD", // 5 + "Samsung", // 2 + "Rockchip", // 3 + "Unknown04", // 4 + "Unknown05", // 5 "Unknown06", // 6 "Unknown07", // 7 "Unknown08", // 8 @@ -118,19 +119,18 @@ int pthread_cancel(pthread_t h) { return pthread_kill(h, 0); } #endif /* __ANDROID__ */ + /*----------------------------------------------------------------------------*/ // Debugging & Return codes int wiringPiDebug = FALSE ; int wiringPiReturnCodes = FALSE ; -extern void delay (unsigned int howLong) ; - // ODROID Wiring Library struct libodroid libwiring; -unsigned int usingGpioMem = FALSE; -int wiringPiSetuped = FALSE; +unsigned int usingGpioMem = FALSE; +int wiringPiSetuped = FALSE; /*----------------------------------------------------------------------------*/ // @@ -188,72 +188,6 @@ static void warn_msg(const char *func) { msg(MSG_WARN, "(%s) : This function is not supported by ODROID Board.\n", func); } -/*----------------------------------------------------------------------------*/ -// -// Unsupport Function list on ODROIDs -// -/*----------------------------------------------------------------------------*/ -static void UNU piGpioLayoutOops (const char UNU *why) { warn_msg(__func__); return; } - void gpioClockSet (int UNU pin, int UNU freq) { warn_msg(__func__); return; } - - /* core unsupport function */ - void pinModeAlt (int UNU pin, int UNU mode) { warn_msg(__func__); return; } - void analogWrite (int UNU pin, int UNU value) { warn_msg(__func__); return; } - void pwmToneWrite (int UNU pin, int UNU freq) { warn_msg(__func__); return; } - void digitalWriteByte2 (const int UNU value) { warn_msg(__func__); return; } - unsigned int digitalReadByte2 (void) { warn_msg(__func__); return -1; } -/*----------------------------------------------------------------------------*/ -// Extend wiringPi with other pin-based devices and keep track of -// them in this structure -/*----------------------------------------------------------------------------*/ -struct wiringPiNodeStruct *wiringPiNodes = NULL ; - -struct wiringPiNodeStruct *wiringPiFindNode (int UNU pin) { return NULL; } - -static void pinModeDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int mode) { return ; } -static void pullUpDnControlDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int pud) { return ; } -static unsigned int UNU digitalRead8Dummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return 0 ; } -static void UNU digitalWrite8Dummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; } -static int digitalReadDummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return LOW ; } -static void digitalWriteDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; } -static void pwmWriteDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; } -static int analogReadDummy (UNU struct wiringPiNodeStruct *node, UNU int pin) { return 0 ; } -static void analogWriteDummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; } - -struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins) -{ - int pin ; - struct wiringPiNodeStruct *node ; - - // Minimum pin base is 64 - if (pinBase < 64) - (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: pinBase of %d is < 64\n", pinBase) ; - - // Check all pins in-case there is overlap: - for (pin = pinBase ; pin < (pinBase + numPins) ; ++pin) - if (wiringPiFindNode (pin) != NULL) - (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: Pin %d overlaps with existing definition\n", pin) ; - - node = (struct wiringPiNodeStruct *)calloc (sizeof (struct wiringPiNodeStruct), 1) ; // calloc zeros - if (node == NULL) - (void)wiringPiFailure (WPI_FATAL, "wiringPiNewNode: Unable to allocate memory: %s\n", strerror (errno)) ; - - node->pinBase = pinBase ; - node->pinMax = pinBase + numPins - 1 ; - node->pinMode = pinModeDummy ; - node->pullUpDnControl = pullUpDnControlDummy ; - node->digitalRead = digitalReadDummy ; - //node->digitalRead8 = digitalRead8Dummy ; - node->digitalWrite = digitalWriteDummy ; - //node->digitalWrite8 = digitalWrite8Dummy ; - node->pwmWrite = pwmWriteDummy ; - node->analogRead = analogReadDummy ; - node->analogWrite = analogWriteDummy ; - node->next = wiringPiNodes ; - wiringPiNodes = node ; - - return node ; -} /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ @@ -464,12 +398,6 @@ int piGpioLayout (void) { return libwiring.rev; } -/*----------------------------------------------------------------------------*/ -int piBoardRev (void) -{ - return piGpioLayout (); -} - /*----------------------------------------------------------------------------*/ /* * piBoardId: @@ -675,6 +603,7 @@ void digitalWrite (int pin, int value) msg(MSG_WARN, "%s: Not available for pin %d. \n", __func__, pin); } +/*----------------------------------------------------------------------------*/ void pwmWrite(int pin, int value) { if (libwiring.pwmWrite) { diff --git a/wiringPi/wiringPi.h b/wiringPi/wiringPi.h old mode 100755 new mode 100644 index a00dc9d..a7b0bf1 --- a/wiringPi/wiringPi.h +++ b/wiringPi/wiringPi.h @@ -26,9 +26,7 @@ /*----------------------------------------------------------------------------*/ #include -#include #include -#include #include /*----------------------------------------------------------------------------*/ @@ -85,6 +83,10 @@ #define PUD_DOWN 1 #define PUD_UP 2 +// PWM +#define PWM_MODE_MS 0 +#define PWM_MODE_BAL 1 + // Interrupt levels #define INT_EDGE_SETUP 0 #define INT_EDGE_FALLING 1 @@ -197,41 +199,6 @@ union reg_bitfield { } bits; }; -/*----------------------------------------------------------------------------*/ -// wiringPiNodeStruct: -// This describes additional device nodes in the extended wiringPi -// 2.0 scheme of things. -// It's a simple linked list for now, but will hopefully migrate to -// a binary tree for efficiency reasons - but then again, the chances -// of more than 1 or 2 devices being added are fairly slim, so who -// knows.... -/*----------------------------------------------------------------------------*/ -struct wiringPiNodeStruct -{ - int pinBase; - int pinMax; - - int fd; // Node specific - unsigned int data0; // ditto - unsigned int data1; // ditto - unsigned int data2; // ditto - unsigned int data3; // ditto - - void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode); - void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode); - int (*digitalRead) (struct wiringPiNodeStruct *node, int pin); - // unsigned int (*digitalRead8) (struct wiringPiNodeStruct *node, int pin); - void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value); - // void (*digitalWrite8) (struct wiringPiNodeStruct *node, int pin, int value); - void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value); - int (*analogRead) (struct wiringPiNodeStruct *node, int pin); - void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value); - - struct wiringPiNodeStruct *next; -}; - -extern struct wiringPiNodeStruct *wiringPiNodes; - /*----------------------------------------------------------------------------*/ // Function prototypes // c++ wrappers thanks to a comment by Nick Lott @@ -241,16 +208,13 @@ extern struct wiringPiNodeStruct *wiringPiNodes; extern "C" { #endif -extern struct wiringPiNodeStruct *wiringPiFindNode (int pin); -extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins); - // Internal WiringPi functions extern int wiringPiFailure (int fatal, const char *message, ...); extern int msg (int type, const char *message, ...); extern int moduleLoaded (char *); extern void setupCheck (const char *fName); extern void usingGpioMemCheck (const char *what); -extern void setUsingGpioMem ( const unsigned int value ); +extern void setUsingGpioMem (const unsigned int value); // Core WiringPi functions extern void wiringPiVersion (int *major, char **minor); @@ -271,26 +235,16 @@ extern unsigned int digitalReadByte (void); extern void digitalWriteByte (const int value); extern void pwmWrite (int pin, int value); extern int analogRead (int pin); -extern void pwmSetMode (int mode); -extern void pwmSetRange (unsigned int range); -extern void pwmSetClock (int divisor); // Hardware specific stuffs extern int piGpioLayout (void); -extern int piBoardRev (void); // Deprecated extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty); extern int wpiPinToGpio (int wpiPin); extern int physPinToGpio (int physPin); -// Unsupported -extern void pinModeAlt (int pin, int mode) UNU; -extern void analogWrite (int pin, int value) UNU; -extern void pwmToneWrite (int pin, int freq) UNU; -extern void gpioClockSet (int pin, int freq) UNU; -extern unsigned int digitalReadByte (void) UNU; -extern unsigned int digitalReadByte2 (void) UNU; -extern void digitalWriteByte (int value) UNU; -extern void digitalWriteByte2 (int value) UNU; +extern void pwmSetMode (int mode); +extern void pwmSetRange (unsigned int range); +extern void pwmSetClock (int divisor); // Interrupt extern int waitForInterrupt (int pin, int mS); diff --git a/wiringPi/wpiExtensions.c b/wiringPi/wpiExtensions.c deleted file mode 100644 index 76f60e7..0000000 --- a/wiringPi/wpiExtensions.c +++ /dev/null @@ -1,911 +0,0 @@ -/* - * extensions.c: - * Originally part of the GPIO program to test, peek, poke and otherwise - * noodle with the GPIO hardware on the Raspberry Pi. - * Now used as a general purpose library to allow systems to dynamically - * add in new devices into wiringPi at program run-time. - * Copyright (c) 2012-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 . - *********************************************************************** - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "mcp23008.h" -#include "mcp23016.h" -#include "mcp23017.h" -#include "mcp23s08.h" -#include "mcp23s17.h" -#include "sr595.h" -#include "pcf8574.h" -#include "pcf8591.h" -#include "mcp3002.h" -#include "mcp3004.h" -#include "mcp4802.h" -#include "mcp3422.h" -#include "max31855.h" -#include "max5322.h" -#include "ads1115.h" -#include "sn3218.h" -#include "drcSerial.h" -#include "drcNet.h" -#include "../wiringPiD/drcNetCmd.h" -#include "pseudoPins.h" -#include "bmp180.h" -#include "htu21d.h" -#include "ds18b20.h" - -#include "wpiExtensions.h" - -extern int wiringPiDebug ; - -static int verbose ; -static char errorMessage [1024] ; - - -// Local structure to hold details - -struct extensionFunctionStruct -{ - const char *name ; - int (*function)(char *progName, int pinBase, char *params) ; -} ; - - -/* - * verbError: - * Convenient error handling - ********************************************************************************* - */ - -static void verbError (const char *message, ...) -{ - va_list argp ; - va_start (argp, message) ; - vsnprintf (errorMessage, 1023, message, argp) ; - va_end (argp) ; - - if (verbose) - fprintf (stderr, "%s\n", errorMessage) ; -} - - -/* - * extractInt: - * Check & return an integer at the given location (prefixed by a :) - ********************************************************************************* - */ - -static char *extractInt (char *progName, char *p, int *num) -{ - if (*p != ':') - { - verbError ("%s: colon expected", progName) ; - return NULL ; - } - - ++p ; - - if (!isdigit (*p)) - { - verbError ("%s: digit expected", progName) ; - return NULL ; - } - - *num = strtol (p, NULL, 0) ; - -// Increment p, but we need to check for hex 0x - - if ((*p == '0') && (*(p + 1) == 'x')) - p +=2 ; - - while (isxdigit (*p)) - ++p ; - - return p ; -} - - -/* - * extractStr: - * Check & return a string at the given location (prefixed by a :) - * Note: The string can be enclosed in []'s to escape colons. This is - * so we can handle IPv6 addresses which contain colons and the []'s is - * a common way to prepresent them. - ********************************************************************************* - */ - -static char *extractStr (char *progName, char *p, char **str) -{ - char *q, *r ; - int quoted = FALSE ; - - if (*p != ':') - { - verbError ("%s: colon expected", progName) ; - return NULL ; - } - - ++p ; - - if (*p == '[') - { - quoted = TRUE ; - ++p ; - } - - if (!isprint (*p)) // Is this needed? - { - verbError ("%s: character expected", progName) ; - return NULL ; - } - - q = p ; - if (quoted) - { - while ((*q != 0) && (*q != ']')) - ++q ; - } - else - { - while ((*q != 0) && (*q != ':')) - ++q ; - } - - *str = r = calloc (q - p + 2, 1) ; // Zeros it - - while (p != q) - *r++ = *p++ ; - - if (quoted) // Skip over the ] to the : - ++p ; - - return p ; -} - - - -/* - * doExtensionMcp23008: - * MCP23008 - 8-bit I2C GPIO expansion chip - * mcp23002:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionMcp23008 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x01) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - mcp23008Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionMcp23016: - * MCP230016- 16-bit I2C GPIO expansion chip - * mcp23016:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionMcp23016 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - mcp23016Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionMcp23017: - * MCP230017- 16-bit I2C GPIO expansion chip - * mcp23017:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionMcp23017 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - mcp23017Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionMcp23s08: - * MCP23s08 - 8-bit SPI GPIO expansion chip - * mcp23s08:base:spi:port - ********************************************************************************* - */ - -static int doExtensionMcp23s08 (char *progName, int pinBase, char *params) -{ - int spi, port ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI address (%d) out of range", progName, spi) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &port)) == NULL) - return FALSE ; - - if ((port < 0) || (port > 7)) - { - verbError ("%s: port address (%d) out of range", progName, port) ; - return FALSE ; - } - - mcp23s08Setup (pinBase, spi, port) ; - - return TRUE ; -} - - -/* - * doExtensionMcp23s17: - * MCP23s17 - 16-bit SPI GPIO expansion chip - * mcp23s17:base:spi:port - ********************************************************************************* - */ - -static int doExtensionMcp23s17 (char *progName, int pinBase, char *params) -{ - int spi, port ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI address (%d) out of range", progName, spi) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &port)) == NULL) - return FALSE ; - - if ((port < 0) || (port > 7)) - { - verbError ("%s: port address (%d) out of range", progName, port) ; - return FALSE ; - } - - mcp23s17Setup (pinBase, spi, port) ; - - return TRUE ; -} - - -/* - * doExtensionSr595: - * Shift Register 74x595 - * sr595:base:pins:data:clock:latch - ********************************************************************************* - */ - -static int doExtensionSr595 (char *progName, int pinBase, char *params) -{ - int pins, data, clock, latch ; - -// Extract pins - - if ((params = extractInt (progName, params, &pins)) == NULL) - return FALSE ; - - if ((pins < 8) || (pins > 32)) - { - verbError ("%s: pin count (%d) out of range - 8-32 expected.", progName, pins) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &data)) == NULL) - return FALSE ; - - if ((params = extractInt (progName, params, &clock)) == NULL) - return FALSE ; - - if ((params = extractInt (progName, params, &latch)) == NULL) - return FALSE ; - - sr595Setup (pinBase, pins, data, clock, latch) ; - - return TRUE ; -} - - -/* - * doExtensionPcf8574: - * Digital IO (Crude!) - * pcf8574:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionPcf8574 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - pcf8574Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionAds1115: - * Analog Input - * ads1115:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionAds1115 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - ads1115Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionPcf8591: - * Analog IO - * pcf8591:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionPcf8591 (char *progName, int pinBase, char *params) -{ - int i2c ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - pcf8591Setup (pinBase, i2c) ; - - return TRUE ; -} - - -/* - * doExtensionPseudoPins: - * 64 Memory resident pseudo pins - * pseudoPins:base - ********************************************************************************* - */ - -static int UNU doExtensionPseudoPins (UNU char *progName, int pinBase, UNU char *params) -{ - pseudoPinsSetup (pinBase) ; - - return TRUE ; -} - - -/* - * doExtensionBmp180: - * Analog Temp + Pressure - * bmp180:base - ********************************************************************************* - */ - -static int doExtensionBmp180 (UNU char *progName, int pinBase, UNU char *params) -{ - bmp180Setup (pinBase) ; - - return TRUE ; -} - - -/* - * doExtensionHtu21d: - * Analog humidity + Pressure - * htu21d:base - ********************************************************************************* - */ - -static int doExtensionHtu21d (UNU char *progName, int pinBase, UNU char *params) -{ - htu21dSetup (pinBase) ; - - return TRUE ; -} - - -/* - * doExtensionDs18b20: - * 1-Wire Temperature - * htu21d:base:serialNum - ********************************************************************************* - */ - -static int doExtensionDs18b20 (char *progName, int pinBase, char *params) -{ - char *serialNum ; - - if ((params = extractStr (progName, params, &serialNum)) == NULL) - return FALSE ; - - return ds18b20Setup (pinBase, serialNum) ; -} - -/* - * doExtensionMax31855: - * Analog IO - * max31855:base:spiChan - ********************************************************************************* - */ - -static int doExtensionMax31855 (char *progName, int pinBase, char *params) -{ - int spi ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI channel (%d) out of range", progName, spi) ; - return FALSE ; - } - - max31855Setup (pinBase, spi) ; - - return TRUE ; -} - - -/* - * doExtensionMcp3002: - * Analog IO - * mcp3002:base:spiChan - ********************************************************************************* - */ - -static int doExtensionMcp3002 (char *progName, int pinBase, char *params) -{ - int spi ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI channel (%d) out of range", progName, spi) ; - return FALSE ; - } - - mcp3002Setup (pinBase, spi) ; - - return TRUE ; -} - - -/* - * doExtensionMcp3004: - * Analog IO - * mcp3004:base:spiChan - ********************************************************************************* - */ - -static int doExtensionMcp3004 (char *progName, int pinBase, char *params) -{ - int spi ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI channel (%d) out of range", progName, spi) ; - return FALSE ; - } - - mcp3004Setup (pinBase, spi) ; - - return TRUE ; -} - - -/* - * doExtensionMax5322: - * Analog O - * max5322:base:spiChan - ********************************************************************************* - */ - -static int doExtensionMax5322 (char *progName, int pinBase, char *params) -{ - int spi ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI channel (%d) out of range", progName, spi) ; - return FALSE ; - } - - max5322Setup (pinBase, spi) ; - - return TRUE ; -} - - -/* - * doExtensionMcp4802: - * Analog IO - * mcp4802:base:spiChan - ********************************************************************************* - */ - -static int doExtensionMcp4802 (char *progName, int pinBase, char *params) -{ - int spi ; - - if ((params = extractInt (progName, params, &spi)) == NULL) - return FALSE ; - - if ((spi < 0) || (spi > 1)) - { - verbError ("%s: SPI channel (%d) out of range", progName, spi) ; - return FALSE ; - } - - mcp4802Setup (pinBase, spi) ; - - return TRUE ; -} - - -/* - * doExtensionSn3218: - * Analog Output (LED Driver) - * sn3218:base - ********************************************************************************* - */ - -static int doExtensionSn3218 (UNU char *progName, int pinBase, UNU char *params) -{ - sn3218Setup (pinBase) ; - return TRUE ; -} - - -/* - * doExtensionMcp3422: - * Analog IO - * mcp3422:base:i2cAddr - ********************************************************************************* - */ - -static int doExtensionMcp3422 (char *progName, int pinBase, char *params) -{ - int i2c, sampleRate, gain ; - - if ((params = extractInt (progName, params, &i2c)) == NULL) - return FALSE ; - - if ((i2c < 0x03) || (i2c > 0x77)) - { - verbError ("%s: i2c address (0x%X) out of range", progName, i2c) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &sampleRate)) == NULL) - return FALSE ; - - if ((sampleRate < 0) || (sampleRate > 3)) - { - verbError ("%s: sample rate (%d) out of range", progName, sampleRate) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &gain)) == NULL) - return FALSE ; - - if ((gain < 0) || (gain > 3)) - { - verbError ("%s: gain (%d) out of range", progName, gain) ; - return FALSE ; - } - - mcp3422Setup (pinBase, i2c, sampleRate, gain) ; - - return TRUE ; -} - - -/* - * doExtensionDrcS: - * Interface to a DRC Serial system - * drcs:base:pins:serialPort:baud - ********************************************************************************* - */ - -static int doExtensionDrcS (char *progName, int pinBase, char *params) -{ - char *port ; - int pins, baud ; - - if ((params = extractInt (progName, params, &pins)) == NULL) - return FALSE ; - - if ((pins < 1) || (pins > 1000)) - { - verbError ("%s: pins (%d) out of range (2-1000)", progName, pins) ; - return FALSE ; - } - - if ((params = extractStr (progName, params, &port)) == NULL) - return FALSE ; - - if (strlen (port) == 0) - { - verbError ("%s: serial port device name required", progName) ; - return FALSE ; - } - - if ((params = extractInt (progName, params, &baud)) == NULL) - return FALSE ; - - if ((baud < 1) || (baud > 4000000)) - { - verbError ("%s: baud rate (%d) out of range", progName, baud) ; - return FALSE ; - } - - drcSetupSerial (pinBase, pins, port, baud) ; - - return TRUE ; -} - -#if !defined ANDROID -/* - * doExtensionDrcNet: - * Interface to a DRC Network system - * drcn:base:pins:ipAddress:port:password - ********************************************************************************* - */ - -static int doExtensionDrcNet (char *progName, int pinBase, char *params) -{ - int pins ; - char *ipAddress, *port, *password ; - char pPort [1024] ; - - if ((params = extractInt (progName, params, &pins)) == NULL) - return FALSE ; - - if ((pins < 1) || (pins > 1000)) - { - verbError ("%s: pins (%d) out of range (2-1000)", progName, pins) ; - return FALSE ; - } - - if ((params = extractStr (progName, params, &ipAddress)) == NULL) - return FALSE ; - - if (strlen (ipAddress) == 0) - { - verbError ("%s: ipAddress required", progName) ; - return FALSE ; - } - - if ((params = extractStr (progName, params, &port)) == NULL) - return FALSE ; - - if (strlen (port) == 0) - { - sprintf (pPort, "%d", DEFAULT_SERVER_PORT) ; - port = pPort ; - } - - if ((params = extractStr (progName, params, &password)) == NULL) - return FALSE ; - - if (strlen (password) == 0) - { - verbError ("%s: password required", progName) ; - return FALSE ; - } - - return drcSetupNet (pinBase, pins, ipAddress, port, password) ; -} - -#endif - -/* - * Function list - ********************************************************************************* - */ - -static struct extensionFunctionStruct extensionFunctions [] = -{ - { "mcp23008", &doExtensionMcp23008 }, - { "mcp23016", &doExtensionMcp23016 }, - { "mcp23017", &doExtensionMcp23017 }, - { "mcp23s08", &doExtensionMcp23s08 }, - { "mcp23s17", &doExtensionMcp23s17 }, - { "sr595", &doExtensionSr595 }, - { "pcf8574", &doExtensionPcf8574 }, - { "pcf8591", &doExtensionPcf8591 }, - { "bmp180", &doExtensionBmp180 }, -#if !defined ANDROID - { "pseudoPins", &doExtensionPseudoPins }, -#endif - { "htu21d", &doExtensionHtu21d }, - { "ds18b20", &doExtensionDs18b20 }, - { "mcp3002", &doExtensionMcp3002 }, - { "mcp3004", &doExtensionMcp3004 }, - { "mcp4802", &doExtensionMcp4802 }, - { "mcp3422", &doExtensionMcp3422 }, - { "max31855", &doExtensionMax31855 }, - { "ads1115", &doExtensionAds1115 }, - { "max5322", &doExtensionMax5322 }, - { "sn3218", &doExtensionSn3218 }, - { "drcs", &doExtensionDrcS }, -#if !defined ANDROID - { "drcn", &doExtensionDrcNet }, -#endif - { NULL, NULL }, -} ; - - -/* - * loadWPiExtension: - * Load in a wiringPi extension - * The extensionData always starts with the name, a colon then the pinBase - * number. Other parameters after that are decoded by the module in question. - ********************************************************************************* - */ - -int loadWPiExtension (char *progName, char *extensionData, int printErrors) -{ - char *p ; - char *extension = extensionData ; - struct extensionFunctionStruct *extensionFn ; - unsigned pinBase = 0 ; - - verbose = printErrors ; - -// Get the extension name by finding the first colon - - p = extension ; - while (*p != ':') - { - if (!*p) // ran out of characters - { - verbError ("%s: extension name not terminated by a colon", progName) ; - return FALSE ; - } - ++p ; - } - *p++ = 0 ; - -// Simple ATOI code - - if (!isdigit (*p)) - { - verbError ("%s: decimal pinBase number expected after extension name", progName) ; - return FALSE ; - } - - while (isdigit (*p)) - { - if (pinBase > 2147483647) // 2^31-1 ... Lets be realistic here... - { - verbError ("%s: pinBase too large", progName) ; - return FALSE ; - } - - pinBase = pinBase * 10 + (*p - '0') ; - ++p ; - } - - if (pinBase < 64) - { - verbError ("%s: pinBase (%d) too small. Minimum is 64.", progName, pinBase) ; - return FALSE ; - } - -// Search for extensions: - - for (extensionFn = extensionFunctions ; extensionFn->name != NULL ; ++extensionFn) - { - if (strcmp (extensionFn->name, extension) == 0) - return extensionFn->function (progName, pinBase, p) ; - } - - fprintf (stderr, "%s: extension %s not found", progName, extension) ; - return FALSE ; -} diff --git a/wiringPi/wpiExtensions.h b/wiringPi/wpiExtensions.h deleted file mode 100644 index fcaec96..0000000 --- a/wiringPi/wpiExtensions.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * extensions.h: - * Part of the GPIO program to test, peek, poke and otherwise - * noodle with the GPIO hardware on the Raspberry Pi. - * Copyright (c) 2012-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 . - *********************************************************************** - */ - - -extern int loadWPiExtension (char *progName, char *extensionData, int verbose) ; diff --git a/wiringPiD/Makefile b/wiringPiD/Makefile deleted file mode 100644 index 6b2cc9e..0000000 --- a/wiringPiD/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -# -# Makefile: -# The wiringPiD utility: -# https://projects.drogon.net/wiring-pi -# -# Copyright (c) 2012-2017 Gordon Henderson -################################################################################# -# This file is part of wiringPi: -# A "wiring" library for the Raspberry Pi -# -# 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 . -################################################################################# - -DESTDIR?=/usr -PREFIX?=/local - -ifneq ($V,1) -Q ?= @ -endif - -#DEBUG = -g -O0 -DEBUG = -O2 -CC = gcc -INCLUDE = -I$(DESTDIR)$(PREFIX)/include -CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe - -LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib -LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt - -# May not need to alter anything below this line -############################################################################### - -SRC = wiringpid.c network.c runRemote.c daemonise.c - -OBJ = $(SRC:.c=.o) - -all: wiringpid - -wiringpid: $(OBJ) - $Q echo [Link] - $Q $(CC) -o $@ $(OBJ) $(LDFLAGS) $(LIBS) - -.c.o: - $Q echo [Compile] $< - $Q $(CC) -c $(CFLAGS) $< -o $@ - -.PHONY: clean -clean: - $Q echo "[Clean]" - $Q rm -f $(OBJ) wiringpid *~ core tags *.bak - -.PHONY: tags -tags: $(SRC) - $Q echo [ctags] - $Q ctags $(SRC) - -.PHONY: install -install: wiringpid - $Q echo "[Install]" - $Q mkdir -p $(DESTDIR)$(PREFIX)/sbin - $Q cp wiringpid $(DESTDIR)$(PREFIX)/sbin - $Q chown root.root $(DESTDIR)$(PREFIX)/sbin/wiringpid - -# $Q mkdir -p $(DESTDIR)$(PREFIX)/man/man8 -# $Q cp gpio.1 $(DESTDIR)$(PREFIX)/man/man8 - -.PHONY: install-deb -install-deb: gpio - $Q echo "[Install: deb]" - $Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/usr/bin - $Q install -m 0755 gpio ~/wiringPi/debian-template/wiringPi/usr/bin - $Q install -m 0755 -d ~/wiringPi/debian-template/wiringPi/man/man1 - $Q install -m 0644 gpio.1 ~/wiringPi/debian-template/wiringPi/man/man1 - -.PHONY: uninstall -uninstall: - $Q echo "[UnInstall]" - $Q rm -f $(DESTDIR)$(PREFIX)/sbin/wiringpid - $Q rm -f $(DESTDIR)$(PREFIX)/man/man8/wiringpid.8 - -.PHONY: depend -depend: - makedepend -Y $(SRC) -# DO NOT DELETE - -wiringpid.o: drcNetCmd.h network.h runRemote.h daemonise.h -network.o: network.h -runRemote.o: drcNetCmd.h network.h runRemote.h -daemonise.o: daemonise.h diff --git a/wiringPiD/daemonise.c b/wiringPiD/daemonise.c deleted file mode 100644 index 134a6bb..0000000 --- a/wiringPiD/daemonise.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * daemonise.c: - * Fairly generic "Turn the current process into a daemon" code. - * - * Copyright (c) 2016-2017 Gordon Henderson. - ********************************************************************************* - */ - -#include -#include -#include -#include -#include -#include - -#include "daemonise.h" - -void daemonise (const char *pidFile) -{ - pid_t pid ; - int i ; - FILE *fd ; - - syslog (LOG_DAEMON | LOG_INFO, "Becoming daemon") ; - -// Fork from the parent - - if ((pid = fork ()) < 0) - { - syslog (LOG_DAEMON | LOG_ALERT, "Fork no. 1 failed: %m") ; - exit (EXIT_FAILURE) ; - } - - if (pid > 0) // Parent - terminate - exit (EXIT_SUCCESS) ; - -// Now running on the child - become session leader - - if (setsid() < 0) - { - syslog (LOG_DAEMON | LOG_ALERT, "setsid failed: %m") ; - exit (EXIT_FAILURE) ; - } - -// Ignore a few signals - - signal (SIGCHLD, SIG_IGN) ; - signal (SIGHUP, SIG_IGN) ; - -// Fork again - - if ((pid = fork ()) < 0) - { - syslog (LOG_DAEMON | LOG_ALERT, "Fork no. 2 failed: %m") ; - exit (EXIT_FAILURE) ; - } - - if (pid > 0) // parent - terminate - exit (EXIT_SUCCESS) ; - -// Tidying up - reset umask, change to / and close all files - - umask (0) ; - chdir ("/") ; - - for (i = 0 ; i < sysconf (_SC_OPEN_MAX) ; ++i) - close (i) ; - -// Write PID into /var/run - - if (pidFile != NULL) - { - if ((fd = fopen (pidFile, "w")) == NULL) - { - syslog (LOG_DAEMON | LOG_ALERT, "Unable to write PID file: %m") ; - exit (EXIT_FAILURE) ; - } - - fprintf (fd, "%d\n", getpid ()) ; - fclose (fd) ; - } -} diff --git a/wiringPiD/daemonise.h b/wiringPiD/daemonise.h deleted file mode 100644 index 8d13319..0000000 --- a/wiringPiD/daemonise.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * daemonise.h: - * Fairly generic "Turn the current process into a daemon" code. - * - * Copyright (c) 2016-2017 Gordon Henderson. - ********************************************************************************* - */ - -extern void daemonise (const char *pidFile) ; diff --git a/wiringPiD/drcNetCmd.h b/wiringPiD/drcNetCmd.h deleted file mode 100644 index 23f7dc1..0000000 --- a/wiringPiD/drcNetCmd.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * drcNetCmd.c: - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - -#define DEFAULT_SERVER_PORT 6124 - -#define DRCN_PIN_MODE 1 -#define DRCN_PULL_UP_DN 2 - -#define DRCN_DIGITAL_WRITE 3 -#define DRCN_DIGITAL_WRITE8 4 -#define DRCN_ANALOG_WRITE 5 -#define DRCN_PWM_WRITE 6 - -#define DRCN_DIGITAL_READ 7 -#define DRCN_DIGITAL_READ8 8 -#define DRCN_ANALOG_READ 9 - - -struct drcNetComStruct -{ - uint32_t pin ; - uint32_t cmd ; - uint32_t data ; -} comDat ; - diff --git a/wiringPiD/network.c b/wiringPiD/network.c deleted file mode 100644 index 9f6bb88..0000000 --- a/wiringPiD/network.c +++ /dev/null @@ -1,330 +0,0 @@ -/* - * network.c: - * Part of wiringPiD - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "network.h" - -#define TRUE (1==1) -#define FALSE (!TRUE) - -// Local data - -#define SALT_LEN 16 - -static char salt [SALT_LEN + 1] ; -static char *returnedHash = NULL ; -static int serverFd = -1 ; - -// Union for the server Socket Address - -static union -{ - struct sockaddr_in sin ; - struct sockaddr_in6 sin6 ; -} serverSockAddr ; - -// and client address - -static union -{ - struct sockaddr_in sin ; - struct sockaddr_in6 sin6 ; -} clientSockAddr ; - - -/* - * getClientIP: - * Returns a pointer to a static string containing the clients IP address - ********************************************************************************* - */ - -char *getClientIP (void) -{ - char buf [INET6_ADDRSTRLEN] ; - static char ipAddress [1024] ; - - if (clientSockAddr.sin.sin_family == AF_INET) // IPv4 - { - if (snprintf (ipAddress, 1024, "IPv4: %s", - inet_ntop (clientSockAddr.sin.sin_family, (void *)&clientSockAddr.sin.sin_addr, buf, sizeof (buf))) == 1024) - strcpy (ipAddress, "Too long") ; - } - else // IPv6 - { - if (clientSockAddr.sin.sin_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED (&clientSockAddr.sin6.sin6_addr)) - { - if (snprintf (ipAddress, 1024, "IPv4in6: %s", - inet_ntop (clientSockAddr.sin.sin_family, (char *)&clientSockAddr.sin6.sin6_addr, buf, sizeof(buf))) == 1024) - strcpy (ipAddress, "Too long") ; - } - else - { - if (snprintf (ipAddress, 1024, "IPv6: %s", - inet_ntop (clientSockAddr.sin.sin_family, (char *)&clientSockAddr.sin6.sin6_addr, buf, sizeof(buf))) == 1024) - strcpy (ipAddress, "Too long") ; - } - } - - return ipAddress ; -} - - - -/* - * clientPstr: clientPrintf: - * Print over a network socket - ********************************************************************************* - */ - -static int clientPstr (int fd, char *s) -{ - int len = strlen (s) ; - return (write (fd, s, len) == len) ? 0 : -1 ; -} - -static int clientPrintf (const int fd, const char *message, ...) -{ - va_list argp ; - char buffer [1024] ; - - va_start (argp, message) ; - vsnprintf (buffer, 1023, message, argp) ; - va_end (argp) ; - - return clientPstr (fd, buffer) ; -} - - -/* - * sendGreeting: - * Send some text to the client device - ********************************************************************************* - */ - -int sendGreeting (int clientFd) -{ - if (clientPrintf (clientFd, "200 Welcome to wiringPiD - http://wiringpi.com/\n") < 0) - return -1 ; - - return clientPrintf (clientFd, "200 Connecting from: %s\n", getClientIP ()) ; -} - - -/* - * getSalt: - * Create a random 'salt' value for the password encryption process - ********************************************************************************* - */ - -static int getSalt (char drySalt []) -{ - static const char *seaDog = "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789/." ; - - unsigned char wetSalt [SALT_LEN] ; - int i, fd ; - - if ((fd = open ("/dev/urandom", O_RDONLY)) < 0) - return fd ; - - if (read (fd, wetSalt, SALT_LEN) != SALT_LEN) - return -1 ; - - close (fd) ; - - for (i = 0 ; i < SALT_LEN ; ++i) - drySalt [i] = seaDog [wetSalt [i] & 63] ; - - drySalt [SALT_LEN] = 0 ; - - return 0 ; -} - - -/* - * sendChallenge: - * Create and send our salt (aka nonce) to the remote device - ********************************************************************************* - */ - -int sendChallenge (int clientFd) -{ - if (getSalt (salt) < 0) - return -1 ; - - return clientPrintf (clientFd, "Challenge %s\n", salt) ; -} - - -/* - * getResponse: - * Read the encrypted password from the remote device. - ********************************************************************************* - */ - - -int getResponse (int clientFd) -{ - char reply [1024] ; - int len ; - -// Being sort of lazy about this. I'm expecting an SHA-512 hash back and these -// are exactly 86 characters long, so no reason not to, I guess... - - len = 86 ; - - if (setsockopt (clientFd, SOL_SOCKET, SO_RCVLOWAT, (void *)&len, sizeof (len)) < 0) - return -1 ; - - len = recv (clientFd, reply, 86, 0) ; - if (len != 86) - return -1 ; - - reply [len] = 0 ; - - if ((returnedHash = malloc (len + 1)) == NULL) - return -1 ; - - strcpy (returnedHash, reply) ; - - return 0 ; -} - - -/* - * passwordMatch: - * See if there's a match. If not, we simply dump them. - ********************************************************************************* - */ - -int passwordMatch (const char *password) -{ - char *encrypted ; - char salted [1024] ; - - sprintf (salted, "$6$%s$", salt) ; - - encrypted = crypt (password, salted) ; - -// 20: $6$ then 16 characters of salt, then $ -// 86 is the length of an SHA-512 hash - - return strncmp (encrypted + 20, returnedHash, 86) == 0 ; -} - - -/* - * setupServer: - * Do what's needed to create a local server socket instance that can listen - * on both IPv4 and IPv6 interfaces. - ********************************************************************************* - */ - -int setupServer (int serverPort) -{ - socklen_t clientSockAddrSize = sizeof (clientSockAddr) ; - - int on = 1 ; - int family ; - socklen_t serverSockAddrSize ; - int clientFd ; - -// Try to create an IPv6 socket - - serverFd = socket (PF_INET6, SOCK_STREAM, 0) ; - -// If it didn't work, then fall-back to IPv4. - - if (serverFd < 0) - { - if ((serverFd = socket (PF_INET, SOCK_STREAM, 0)) < 0) - return -1 ; - - family = AF_INET ; - serverSockAddrSize = sizeof (struct sockaddr_in) ; - } - else // We got an IPv6 socket - { - family = AF_INET6 ; - serverSockAddrSize = sizeof (struct sockaddr_in6) ; - } - - if (setsockopt (serverFd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) < 0) - return -1 ; - -// Setup the servers socket address - cope with IPv4 and v6. - - memset (&serverSockAddr, 0, sizeof (serverSockAddr)) ; - switch (family) - { - case AF_INET: - serverSockAddr.sin.sin_family = AF_INET ; - serverSockAddr.sin.sin_addr.s_addr = htonl (INADDR_ANY) ; - serverSockAddr.sin.sin_port = htons (serverPort) ; - break; - - case AF_INET6: - serverSockAddr.sin6.sin6_family = AF_INET6 ; - serverSockAddr.sin6.sin6_addr = in6addr_any ; - serverSockAddr.sin6.sin6_port = htons (serverPort) ; - } - -// Bind, listen and accept - - if (bind (serverFd, (struct sockaddr *)&serverSockAddr, serverSockAddrSize) < 0) - return -1 ; - - if (listen (serverFd, 4) < 0) // Really only going to talk to one client at a time... - return -1 ; - - if ((clientFd = accept (serverFd, (struct sockaddr *)&clientSockAddr, &clientSockAddrSize)) < 0) - return -1 ; - - return clientFd ; -} - - -/* - * closeServer: - ********************************************************************************* - */ - -void closeServer (int clientFd) -{ - if (serverFd != -1) close (serverFd) ; - if (clientFd != -1) close (clientFd) ; - serverFd = clientFd = -1 ; -} diff --git a/wiringPiD/network.h b/wiringPiD/network.h deleted file mode 100644 index 94c3380..0000000 --- a/wiringPiD/network.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * network.h: - * Part of wiringPiD - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - -extern char *getClientIP (void) ; -extern int getResponce (int clientFd) ; -extern int setupServer (int serverPort) ; -extern int sendGreeting (int clientFd) ; -extern int sendChallenge (int clientFd) ; -extern int getResponse (int clientFd) ; -extern int passwordMatch (const char *password) ; -extern void closeServer (int clientFd) ; diff --git a/wiringPiD/runRemote.c b/wiringPiD/runRemote.c deleted file mode 100644 index cd7432b..0000000 --- a/wiringPiD/runRemote.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * runRemote.c: - * Run the remote commands passed over the network link. - * - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - -#include -#include -#include -#include -#include -#include -#include -//#include - -#include -#include - -#include "drcNetCmd.h" -#include "network.h" -#include "runRemote.h" - - - -int noLocalPins = FALSE ; - - -void runRemoteCommands (int fd) -{ - register uint32_t pin ; - int len ; - struct drcNetComStruct cmd ; - - len = sizeof (struct drcNetComStruct) ; - - if (setsockopt (fd, SOL_SOCKET, SO_RCVLOWAT, (void *)&len, sizeof (len)) < 0) - return ; - - for (;;) - { - if (recv (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) // Probably remote hangup - return ; - - pin = cmd.pin ; - if (noLocalPins && ((pin & PI_GPIO_MASK) == 0)) - { - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - continue ; - } - - switch (cmd.cmd) - { - case DRCN_PIN_MODE: - pinMode (pin, cmd.data) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_PULL_UP_DN: - pullUpDnControl (pin, cmd.data) ; - break ; - - case DRCN_PWM_WRITE: - pwmWrite (pin, cmd.data) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_DIGITAL_WRITE: - digitalWrite (pin, cmd.data) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_DIGITAL_WRITE8: - //digitalWrite8 (pin, cmd.data) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_DIGITAL_READ: - cmd.data = digitalRead (pin) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_DIGITAL_READ8: - //cmd.data = digitalRead8 (pin) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_ANALOG_WRITE: - analogWrite (pin, cmd.data) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - - case DRCN_ANALOG_READ: - cmd.data = analogRead (pin) ; - if (send (fd, &cmd, sizeof (cmd), 0) != sizeof (cmd)) - return ; - break ; - } - } - -} diff --git a/wiringPiD/runRemote.h b/wiringPiD/runRemote.h deleted file mode 100644 index 57d5018..0000000 --- a/wiringPiD/runRemote.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * runRemote.h: - * Run the remote commands passed over the network link. - * - * Copyright (c) 2012-2017 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 . - *********************************************************************** - */ - -// Globals - -extern int noLocalPins ; - -extern void runRemoteCommands (int fd) ; diff --git a/wiringPiD/wiringpid b/wiringPiD/wiringpid deleted file mode 100755 index b21232e76adc76f7666d6af737b36fadbc79a170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18654 zcmeHOeSB2anLbG-I6|64MH`js)ebhcNk}jvP^<|FA!vXI5wLs=!^|Wzbuu%Zxf24- zwxN??(tw-VuFJaC4XbtOF5AUj7PHlLN5cZHtV=ERXIJa8^`kc>ZQ~clYRNv&IrkVFMX|V6 z%n>t?L|J7gbU-o#GUX!814Ul{G!m5mm_`%a!^UO z5F;p*0eL{|ngyT=5W{B_lYg%^<1F6_^rsd? zKRyp)c?_Qd-3BTnK)6;haWi-kNHZ~6HE0otby^I%5yUV@F>wQUK4__lEw<2%%mXh0 zU2Nhj!9NGO1#~&+3m`Y>_YGBM26Vd&pD;O@99Jf0Kg=@Y7Gs~}S-|8MIq)^W*Mm5Y ztuWJ!6k7@4p9W!QO$!*_;#Lrbinzj*E;Bh9#}31Fipjs9w8iHlUSPxYnf9zP*25X_ zX5;6WRt2K%rOSRiQn^%5J^A|m9Sh&-n{)7v*E27FdBdE+y>I9L(W=+ao&C|T*;P}* zdKxqX$6VL~;Kb{#1~#$fH`O%IHyrt04*eAld7}gWJq?+G<(+oqKWhoWDPQEs{|^ql z%Yn~3?ETPzH#zVV4xHz(_d|z2+Z^%_9r^b;e&~7bQ~58&s@V;E z2KKmqGXEa%0ptfm|6|3%vvPYl5stPrhViHr-W5$Ny@6mN*b+|a!9>%_nn)}fZ1Qc3 z1clez(i)3;le#aVd%ePYdz*KSsaF&6C6mFV%6`Gjk(e*AzA?P4T@OZ+;aF7oqP|G1 zWlhi*5dK(etxp%;=5RDDy!fMwcsRN;76=NsGf*LEQ`_=TXWO~+t?yViR+;R{Nz@mTqMISKEKWy zc)h_yA{z5XVt$`YXpSZB5y@aQAgC^Uet$5oi|x|WM9|+xTM3Fp+HLmYSqVR2D)X*OagcG7I88u694YtywW`87>45ATqdKyFZTYV8UkVv)ql4u>{E zo-J=!v9!iJA6;d|51* z!LpkJE$-G`plp!+UmEk6b6x`#hQrtn<%%CMBLelVpC-?-$+N|unsVx2BJ;b%Pm!NC zmA&i<{gTIB?itu9avjO7QtM4FHgZdlei7_ckt1&{IVw?4o-0HHIX0+`amX;8`Fo#vC$nM$AugXGv49wNu4`7pUA#31=~ zSVzgP7a~KBjp0#pY}`+f&lTb%IX29v$gz1pO^(gv%jDQtzekk24anPK;lN?V&Z;@n}|_+ zG2AKf24d7o496wjL|jF@RpPD0^~8-52Z$Sqt0WE)Zy+w0I6}OYSd%zT%nA(`N~{yd ziG{@N#O=hR=aDeCgSeCUjKrP9J;bLZ?jr6d&Pd!typQ;h#CwPbhzBI@Cq6*jFY&jD z4-t1typMR0I4MwDI*iC#&;-kcc#2JZC5El_2lK3RCMm!+#DdJ+{eu+;L zmlJnN{4()E;<&`G5?2v#mG}%XKMxEyO8f?KBXO0)2Jr^sa*0QXw-Rd-j}nK73nhM! zI8H1i9wTli9_1XF`!R7R@fnFZ8$&(BrzGaA4D}OdBKJ0<4q4Gj{w>JI8XnI8J+wAU3<)uH$D!A`+Scdz) z>N;NQah=ERt#^sXxE{UPohj&g4O>H|XFaCUXPW7FpfFv&_=6XXUd)(O1~p_;EVpT67}yUK(my>9bjI z2E#lbPmkpm?7jqPdmFQQXM1{^JhP3%sB0f0-I?B@g0Al% zCz9R09UfP&%VQk*2+}%N=R%=hviAtasyHUJbS4W4srQX~Jd5@R&}{UTQaDh=Z2yIa z4-6hF=y@2AF{2;PsN*ir7yb$jgBlxK*@(BwjN=7eUq>Z-D?P@8c!I%D&wapspODh$ z3cCK?l%6!DKcVz;DSfe^>jP7|3Qs-e%|UU!b3Dec6z+~fj*{<3$;K~GahCHAo`{y$ z-M3@pL80RS6#fa79bSY4wlllt8nbJv&_>;v)Do+Gi_t|B-BNI03LV`)rC(&1$le+D zLulDsWZD}=L9n;UvKO=4`|2hA)B0K3JDz(Q?+;KF%JL7;qs{$r{vwz)@=!bDI2;{* zUZunTHD-C8vb=(BE~Xq8_r1?XtaBr8j4JGtlWO$3(af^$U{qmmJ`StUDM}kzx1Jxz z=aqYN(ahV~g`BlPb&`WJzHV>$hM7A*q5QRttW{+;=a z8v6IcE$QDau&?}k*z&K$^pEwYU&!7!gWmmUOlIzSS!OnUD(GrA`;q$ZSJx9sm4^df+l03H@QN0ON!uT2->=P{QyAVTl0OLhA+n;d2LH#=zaB>}k z@DbYSFa<{;ph5=~{zH`~Qve@4*J!?#iQFDGQiU2ntzwxY1_7Y`S3n6=f`5v>$egIh?rUhha$YfjWw#gra z98Tq#Ert@zCYyBcI8{tH?on~U+TCU|vli*bdHhlR=}~HjtrBP3REw3Yn6>yAoo1OX zM0&+9xAguu9%qeBYeMB{|4r)Me5<#t-K2v0SEQJ@@WVbN_xf4lq#sHI^TjPxwIz{21PWEW6KakJ60|q!Z$1)ISMd4q{rAVmcO9jHjYDcY z_HOdHne9{G!`O9s_?g=<&P{4z<6qRb$)hoMA#y{Xqb7q^mPJJ17chsuapt|rZr7p9 z^&b8nfX%%aQ1Eaz2k+f5FU`P3HW9L;v&Hc)&ptu~IK=)J#`mYI@{quIV0t><FJnI(w_DpJlrx}j^+|Z-Sl*{kub`pr{ftfj4P(6vns}UtA!@3hILICZ%t3f(^?oW zOi$+*dE?0RbiCgRA4_5k_=+I^K(gv2J=g4~2{`Oi#x$E{q$HzUwGE za^ujH>D0dt9Xy-Eugg;mW)4V>&Aqy9K)#E$S&o;37$bd`rH5R5zdnBc{P_=FyzbQ8 zP6YiI-|OteEBq}YV-D!_D>*m5%i-Cpt4-UkcgM#U4HbMlv+F2JEI5+ElY8S9HBX;0 z3e!W`XP-%rG!#6M+ll$roF2%IYi{8S zQ%!t+FM+=mndbh2BeQeTKfA5q$o-GPLQnqy_K4V^Q}2zwT2DFKjA<-tBQ%cX9s-hk znJ{)7>7yQujJ<7WCy#W|8YdjDm2j@_Ax{+;ny&;V3hA!d@os*`r&+E*Xbwb6)*)(C zz|ZbX`(_Mm7S9PrJvW7NjH2mU-(g+W!Bk1A64hT1*|9FqZt5D^C=EPv7>??nv_|zS zu)6CgUE)q-NJTA|nCF5AN#wt&Ud056dX_4}%7#Ta=7JpxIXZIcb# zBxjV{T#8l0qT|o}lI>B@!}pGg%<;}a_8u!U~Cg(ClM=nqSjN@{LBe=^CLf?fX;C}VO?m1V{fJG(}JGw zq7p&SelW=vrZgcvBr9RCwaTw-Wp)~`6)DmQMy=HNHiUVO@27huQPaB@DLlr|rs zFYPxySqRHdGky3ZrWL29a$40gTTFUCd@JWI$8)7MIOP6>^H=)Rhlg}}Y+RR4okJ<< zj|ea(hXIb~vP8~RId>=5aL(6CBNLWxaUZ^Ct#IHQRwr zn?ciZCjBnknzF5@W&5k=0L+viFJAUt#^_lrP0yP9Zd>{w#@+B8sy*%cok%}>zqv0$ z`JKo={FUi?gG_Iko?eb78D6c@f0xe@4wtdKg0AP~I*M^K^?}O%n2pS?Li{+TPe-4a zo3gcV&dA4~^q45vGY?Zn_J2Wl5u(Oi*&FDGf*u2HN&`sd0xX~R=YF9Uax;z0_!-iS ze?~rOkmq`G{B@sD`S4d%ykc~qL|EAZZ;VsOan}4^f`OGD$};vUF=veN48)6uI^OI) zr&rT~t;oYA{X;aD`V8}DRQnCokeeD`qXx#9@c>jXHMR87*&DYE7ehnFhNx5zC3wIe ziWsZlF5=SvOOc221vYt^P5ut7Ko{At|6&}vnoT#`rhCkkZ?nmNM*C)2k3p{H40h+6 zhiuPJV0=$AR-=?%LvLcUmmZm8Ja1sGK6#o`I(-U%Z#@3Ycy{-=?x{G}x2%vg?pu}z z=IUF<={o-Hf1pT|7VKQkSGm^(iX9_W~Fy| zo^T8tq@EtZLGh0ty8p9tcqzD$`co*aji9+OwzBQbsnq5V+md0 zm{qz56EZFA@%*)I?h_A@z`s!rMgy4t1wkkr^h=cr_mSYR$fIB&aHFnTq=o zzE&LkC8Yj(^ZfZj-l7h194&8;CE!3R9*=}k?bRt=i#2OFa*QQ*h`XXZorbsY5QoI3 zpVIQG;C2mXg;BH?4s5mNM68wRWvFLVI=(y+46?$LDK#OSR|cak!7{Plr}_@Zx>_Qb zjK`u$q&8aauwJP|a57=_9a^cjmZ#&ei2mPL8rrOFEDi8ai`Jo)R`AbGz>THtlP$j( zXWffsizGK|Wo2cXCu$5EbCZj;m8qnzZ3}9NSd5*bVbo~8q~_BCKD0ozj5`7toZh8T zH1c8|k}eMFew*hywynt!ySP;I=~^V{Ljemkf5?|emS|Cwg6@UQTT5r!+rXzqr?e-0 zoznQxfYxHRC;BF7jbx_|icu{*MG58MJl^Uld5Rp+wqKwJWXG;(Y^$7z;DFnTtH}KF za?LV^F>ZDHOffGIY@3%#_@aSWtC;9%In_K1JadyC!K~|p5&R-Sj;M*riIxiKdVKLb zbH2vIWzd<&rWd|#{y?y~B^3VBJ(1REEdJ$0QctyQZ{M-AdTCAVvbyEi-gZt4FYigP#ID3aSDw1{Hyb_korM zQ7osN>U&X#pB$ja%Cw5fdDbe_A-X+fLT|o3b)ML6>mB(+1+8&Kt=5bgizaOqa|5Vh z*3~(m?}U$h#Xb4@`1nKMk)Mx`b8A_GXM6_uA@C9KSHbyt?I~ds#JiQEdCP}j{8+xL4i6U%DtRb-5c+fJLrs2TcJoZuAp0v|%S@ee$c~~9mP1AP zi8|;LwUxhLZGz4ybpG7bG0UyVFVF5qv1k`rZ0)R?{Jc67EQBuma|8PI`&0APsc~2s*-^^?F!}@%8ExG~ihV&8W6k(kF4Y+C#*h%Nq=U3(2 zm}PTp)vWA|_5$QMz?j*Cv9(~rKI$D;okQCkYy8H+<1SlU*W_1a57|uD&B{JB*#b~y z-Y(=7__Fk%Gq0BYu`TbiSv59PjSl%k_(Kc)KU<*l&s^@UAZF*Vv#1ae#`!xT@~Fvo zn4IIA>HM8g9yos!$WNLB-*vgURp;;a@sk;TGn2m+cL8($5R>-cclqz1ACC>D@tYyw ztv&b+5xD5$+r1D!$6VmZ<{L6U`7&_%Eyrm(rwQjd*KEGt;NV$o+T(IFUJK3-I7J}- zR+|;W-a2-=Prm-fXah@ItR5KA-#hTWft9Hlb#4Rg20Z|J40Hr^4D=G{Ezmj8j6Zg{ zuK?WuS^%m8tphcK+CaNO4}cy69RVE!y##s-bPhD5ANfHyfEIx2K8H4jH7S^C?3F7YmX*T6NzxaQyU7@{kq7FAIZ-xG2M> zFj!W-bVaG|YcWwvG*z}O6~;viytkAQg?!17C=2X}!k*%KLP_xAAb<2J)lA@pED?-Q zUq#{(U6jdRf0pTZFA-((_n>8onEahzSuo^n=4*pD6hKZ3sT^KkBH`Pia#-;%`Jo2m zzSgiGUc_J!f68Pj$|8O^D7cMl4MugVA^#7Y^M-Sa<6PdM0kGdYpp47%lXqPp z&=9u*=NUr<$kGd8-i4s&krMUC(yIsLT%N0ErVHnDCIe+V6d=JvB za+!s64~TP~anAeG(Br<0<+2>sfq}o>#!on89Fn}^x<=zWq=`}*H5qbl3%nWQ3>hhb6rN{HkQ7mwWYy*LM z4EsQq9@pQ2xoS<6Lj1AHec04vy9`2a5PHvBLYv-WHa&Si>a*xRq*=krau^9Lm-gI$ z<8r${Cq#z843^&0z^I~ZdwHj;e9|YXT6+J6INt$eA05JP(0_*>zZ$Y!>hX}&{X6tt zft-CoJ$Y9QdKxlv95Aq4_U{`Y%U;RjxNn9DWBCM;j1v#r^!OYqhu$a^%s?H|J0Q!R zhR?3reD#bp)h29@A%W%7zbfdJK<}WfU=8UEzXj1A+?RoR3(YtgWh4v_X$wq-0Q6>1 zU_Fpp0ZzEbe}GY^m~dp7}Ff#vgOE><9R zw$~kyAN^ZZpDf&xxf|HtenDWX{(SPc0bBi_h5r8v893T_ zr;NXi;Y_*|?ePNeDYOsY?}`5tyl}wf=KC=5Ti{k;{ttj3M1H1Snw>B5ZHoux*VwQI zycpOTf10>bEVId}&pU=yW_$9^kn;{y%AtQRaArUDuEYQ)n+HUxFSfb;xgX;5!{S>cG1k_S|D20(wV0OsMYYLBbL^^}`|^}pGHZ+Bp?1AiHqKi67P|2ma83XWI5Wv^NLX+Ar`9q_@iwej+l1SZlXob+daD=b8Btu1 zv~EV)lDytP%-a%)ZSzIE0X>#TdVQ&OftS*F1P5e+vYT(YsT`Ispd_zLs+V2dd(&|e zre2Q&sn*sV$YMkCPURF;+ylg!+CA{vk0Z6H-l*;nDzFw;_o{JaP=w=TILaxzY2nTD zMbd{i^aKvs6479wo-h0AOt21@2Ib-4L`ED@t-;w8z8Uz1I;jZb?2JuRx2AgKGViig zwY)(p8_bIH&40qjfbiDdy{dZUiW+FyB=Yj9@Gfsyy|lW)ySlD!?Xo6sQ}xn@WnOve zp)MU(Rasa6*mm*)p+A{Y_e*i%utrvSMI&>h;%lYr=vc=ERg}A6;es;gd*gnu9!f>; zDcjaAuXawc|G(UrQGqq=Q5sZ?Rz zWmOkl)rs?@xP0;ste@96?Gn{E=G{uWz;=CfGP%OKw>gK zyd>+$gqx)H6m>Dxo}w-ft6HiHrgkZ&i>={t(bX=5Px5A|JfLMm?OhHG z>p&jYhH=%G7pmYlSbp_$u3+1ZOx%pNCr(_ywkN79-BVH~ThZ&q6?}8KMD5khbGxp* zux~wArd-#zU9h)~vGMZ`^A. - *********************************************************************** - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "drcNetCmd.h" -#include "network.h" -#include "runRemote.h" -#include "daemonise.h" - - -#define PIDFILE "/var/run/wiringPiD.pid" - - -// Globals - -static const char *usage = "[-h] [-d] [-g | -1 | -z] [[-x extension:pin:params] ...] password" ; -static int doDaemon = FALSE ; - -// - -static void logMsg (const char *message, ...) -{ - va_list argp ; - char buffer [1024] ; - - va_start (argp, message) ; - vsnprintf (buffer, 1023, message, argp) ; - va_end (argp) ; - - if (doDaemon) - syslog (LOG_DAEMON | LOG_INFO, "%s", buffer) ; - else - printf ("%s\n", buffer) ; -} - - -/* - * sigHandler: - * setupSigHandler: - * Somehing has happened that would normally terminate the program so try - * to close down nicely. - ********************************************************************************* - */ - -void sigHandler (int sig) -{ - logMsg ("Exiting on signal %d: %s", sig, strsignal (sig)) ; - (void)unlink (PIDFILE) ; - exit (EXIT_FAILURE) ; -} - -void setupSigHandler (void) -{ - struct sigaction action ; - - sigemptyset (&action.sa_mask) ; - action.sa_flags = 0 ; - -// Ignore what we can - - action.sa_handler = SIG_IGN ; - - sigaction (SIGHUP, &action, NULL) ; - sigaction (SIGTTIN, &action, NULL) ; - sigaction (SIGTTOU, &action, NULL) ; - -// Trap what we can to exit gracefully - - action.sa_handler = sigHandler ; - - sigaction (SIGINT, &action, NULL) ; - sigaction (SIGQUIT, &action, NULL) ; - sigaction (SIGILL, &action, NULL) ; - sigaction (SIGABRT, &action, NULL) ; - sigaction (SIGFPE, &action, NULL) ; - sigaction (SIGSEGV, &action, NULL) ; - sigaction (SIGPIPE, &action, NULL) ; - sigaction (SIGALRM, &action, NULL) ; - sigaction (SIGTERM, &action, NULL) ; - sigaction (SIGUSR1, &action, NULL) ; - sigaction (SIGUSR2, &action, NULL) ; - sigaction (SIGCHLD, &action, NULL) ; - sigaction (SIGTSTP, &action, NULL) ; - sigaction (SIGBUS, &action, NULL) ; -} - - -/* - * The works... - ********************************************************************************* - */ - -int main (int argc, char *argv []) -{ - int clientFd ; - char *p, *password ; - int i ; - int port = DEFAULT_SERVER_PORT ; - int wpiSetup = 0 ; - - if (argc < 2) - { - fprintf (stderr, "Usage: %s %s\n", argv [0], usage) ; - exit (EXIT_FAILURE) ; - } - -// Help? - - if (strcasecmp (argv [1], "-h") == 0) - { - printf ("Usage: %s %s\n", argv [0], usage) ; - return 0 ; - } - -// Daemonize? -// Must come before the other args as e.g. some extensions -// open files which get closed on daemonise... - - if (strcasecmp (argv [1], "-d") == 0) - { - if (geteuid () != 0) - { - fprintf (stderr, "%s: Must be root to run as a daemon.\n", argv [0]) ; - exit (EXIT_FAILURE) ; - } - - doDaemon = TRUE ; - daemonise (PIDFILE) ; - - for (i = 2 ; i < argc ; ++i) - argv [i - 1] = argv [i] ; - --argc ; - } - -// Scan all other arguments - - while (*argv [1] == '-') - { - -// Look for wiringPi setup arguments: -// Same as the gpio command and rtb. - -// -g - bcm_gpio - - if (strcasecmp (argv [1], "-g") == 0) - { - if (wpiSetup == 0) - { - logMsg ("BCM_GPIO mode selected") ; - wiringPiSetupGpio () ; - } - - for (i = 2 ; i < argc ; ++i) - argv [i - 1] = argv [i] ; - --argc ; - ++wpiSetup ; - continue ; - } - -// -1 - physical pins - - if (strcasecmp (argv [1], "-1") == 0) - { - if (wpiSetup == 0) - { - logMsg ("GPIO-PHYS mode selected") ; - wiringPiSetupPhys () ; - } - - for (i = 2 ; i < argc ; ++i) - argv [i - 1] = argv [i] ; - --argc ; - ++wpiSetup ; - continue ; - } - -// -z - no wiringPi - blocks remotes accessing local pins - - if (strcasecmp (argv [1], "-z") == 0) - { - if (wpiSetup == 0) - logMsg ("No GPIO mode selected") ; - - for (i = 2 ; i < argc ; ++i) - argv [i - 1] = argv [i] ; - --argc ; - noLocalPins = TRUE ; - ++wpiSetup ; - continue ; - } - -// -p to select the port - - if (strcasecmp (argv [1], "-p") == 0) - { - if (argc < 3) - { - logMsg ("-p missing extension port") ; - exit (EXIT_FAILURE) ; - } - - logMsg ("Setting port to: %s", argv [2]) ; - - port = atoi (argv [2]) ; - if ((port < 1) || (port > 65535)) - { - logMsg ("Invalid server port: %d", port) ; - exit (EXIT_FAILURE) ; - } - -// Shift args down by 2 - - for (i = 3 ; i < argc ; ++i) - argv [i - 2] = argv [i] ; - argc -= 2 ; - - continue ; - } - -// Check for -x argument to load in a new extension -// -x extension:base:args -// Can load many modules to extend the daemon. - - if (strcasecmp (argv [1], "-x") == 0) - { - if (argc < 3) - { - logMsg ("-x missing extension name:data:etc.") ; - exit (EXIT_FAILURE) ; - } - - logMsg ("Loading extension: %s", argv [2]) ; - - if (!loadWPiExtension (argv [0], argv [2], TRUE)) - { - logMsg ("Extension load failed: %s", strerror (errno)) ; - exit (EXIT_FAILURE) ; - } - -// Shift args down by 2 - - for (i = 3 ; i < argc ; ++i) - argv [i - 2] = argv [i] ; - argc -= 2 ; - - continue ; - } - - logMsg ("Invalid parameter: %s", argv [1]) ; - exit (EXIT_FAILURE) ; - } - -// Default to wiringPi mode - - if (wpiSetup == 0) - { - logMsg ("WiringPi GPIO mode selected") ; - wiringPiSetup () ; - } - -// Finally, should just be one arg left - the password... - - if (argc != 2) - { - logMsg ("No password supplied") ; - exit (EXIT_FAILURE) ; - } - - if (strlen (argv [1]) < 6) - { - logMsg ("Password too short - at least 6 chars, not %d", strlen (argv [1])) ; - exit (EXIT_FAILURE) ; - } - - if ((password = malloc (strlen (argv [1]) + 1)) == NULL) - { - logMsg ("Out of memory") ; - exit (EXIT_FAILURE) ; - } - strcpy (password, argv [1]) ; - -// Wipe out the password on the command-line in a vague attempt to try to -// hide it from snoopers - - for (p = argv [1] ; *p ; ++p) - *p = ' ' ; - - setupSigHandler () ; - -// Enter our big loop - - for (;;) - { - - if (!doDaemon) - printf ("-=-\nWaiting for a new connection...\n") ; - - if ((clientFd = setupServer (port)) < 0) - { - logMsg ("Unable to setup server: %s", strerror (errno)) ; - exit (EXIT_FAILURE) ; - } - - logMsg ("New connection from: %s.", getClientIP ()) ; - - if (!doDaemon) - printf ("Sending Greeting.\n") ; - - if (sendGreeting (clientFd) < 0) - { - logMsg ("Unable to send greeting message: %s", strerror (errno)) ; - closeServer (clientFd) ; - continue ; - } - - if (!doDaemon) - printf ("Sending Challenge.\n") ; - - if (sendChallenge (clientFd) < 0) - { - logMsg ("Unable to send challenge message: %s", strerror (errno)) ; - closeServer (clientFd) ; - continue ; - } - - if (!doDaemon) - printf ("Waiting for response.\n") ; - - if (getResponse (clientFd) < 0) - { - logMsg ("Connection closed waiting for response: %s", strerror (errno)) ; - closeServer (clientFd) ; - continue ; - } - - if (!passwordMatch (password)) - { - logMsg ("Password failure") ; - closeServer (clientFd) ; - continue ; - } - - logMsg ("Password OK - Starting") ; - - runRemoteCommands (clientFd) ; - closeServer (clientFd) ; - } - - return 0 ; -}