Added the Quick 2 Wire codes, etc. Minor typo/bug fixes. Added more modules into gpio -xpull/22/head
@@ -25,3 +25,6 @@ CHARLES Thibaut: | |||||
Xian Stannard | Xian Stannard | ||||
Fixing some typos in the man page! | Fixing some typos in the man page! | ||||
Andre Crone | |||||
Suggested the __WIRING_PI.H__ round wiringPi.h |
@@ -15,17 +15,19 @@ check-make-ok() | |||||
if [ x$1 = "xclean" ]; then | if [ x$1 = "xclean" ]; then | ||||
cd wiringPi | cd wiringPi | ||||
echo -n "wiringPi: " ; make clean | |||||
echo -n "wiringPi: " ; make clean | |||||
cd ../devLib | cd ../devLib | ||||
echo -n "DevLib: " ; make clean | |||||
echo -n "DevLib: " ; make clean | |||||
cd ../gpio | cd ../gpio | ||||
echo -n "gpio: " ; make clean | |||||
echo -n "gpio: " ; make clean | |||||
cd ../examples | cd ../examples | ||||
echo -n "Examples: " ; make clean | |||||
echo -n "Examples: " ; make clean | |||||
cd Gertboard | cd Gertboard | ||||
echo -n "Gertboard: " ; make clean | |||||
echo -n "Gertboard: " ; make clean | |||||
cd ../PiFace | cd ../PiFace | ||||
echo -n "PiFace: " ; make clean | |||||
echo -n "PiFace: " ; make clean | |||||
cd ../q2w | |||||
echo -n "Quick2Wire: " ; make clean | |||||
exit | exit | ||||
fi | fi | ||||
@@ -78,3 +80,8 @@ fi | |||||
echo | echo | ||||
echo All Done. | echo All Done. | ||||
echo "" | |||||
echo "NOTE: This is wiringPi v2, and if you need to use the lcd, Piface," | |||||
echo " Gertboard, MaxDetext, etc. routines then you must change your" | |||||
echo " compile scripts to add -lwiringPiDev" | |||||
echo "" |
@@ -38,7 +38,7 @@ LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm | |||||
SRC = blink.c blink8.c blink12.c \ | SRC = blink.c blink8.c blink12.c \ | ||||
pwm.c \ | pwm.c \ | ||||
speed.c wfi.c isr.c isr-osc.c \ | speed.c wfi.c isr.c isr-osc.c \ | ||||
lcd.c clock.c \ | |||||
lcd.c lcd-adafruit.c clock.c \ | |||||
nes.c \ | nes.c \ | ||||
softPwm.c softTone.c \ | softPwm.c softTone.c \ | ||||
delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \ | delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \ | ||||
@@ -75,6 +75,10 @@ lcd: lcd.o | |||||
@echo [link] | @echo [link] | ||||
@$(CC) -o $@ lcd.o $(LDFLAGS) $(LDLIBS) | @$(CC) -o $@ lcd.o $(LDFLAGS) $(LDLIBS) | ||||
lcd-adafruit: lcd-adafruit.o | |||||
@echo [link] | |||||
@$(CC) -o $@ lcd-adafruit.o $(LDFLAGS) $(LDLIBS) | |||||
clock: clock.o | clock: clock.o | ||||
@echo [link] | @echo [link] | ||||
@$(CC) -o $@ clock.o $(LDFLAGS) $(LDLIBS) | @$(CC) -o $@ clock.o $(LDFLAGS) $(LDLIBS) | ||||
@@ -0,0 +1,347 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <unistd.h> | |||||
#include <string.h> | |||||
#include <time.h> | |||||
#include <wiringPi.h> | |||||
#include <mcp23017.h> | |||||
#include <lcd.h> | |||||
#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 ; | |||||
} |
@@ -65,31 +65,59 @@ static unsigned char newChar [8] = | |||||
} ; | } ; | ||||
// Global lcd handle: | |||||
static int lcdHandle ; | |||||
/* | |||||
* usage: | |||||
********************************************************************************* | |||||
*/ | |||||
int usage (const char *progName) | int usage (const char *progName) | ||||
{ | { | ||||
fprintf (stderr, "Usage: %s bits cols rows\n", progName) ; | fprintf (stderr, "Usage: %s bits cols rows\n", progName) ; | ||||
return EXIT_FAILURE ; | return EXIT_FAILURE ; | ||||
} | } | ||||
/* | |||||
* scrollMessage: | |||||
********************************************************************************* | |||||
*/ | |||||
static const char *message = | static const char *message = | ||||
" " | " " | ||||
"Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/" | "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/" | ||||
" " ; | " " ; | ||||
void scrollMessage (int lcd, int line, int width) | |||||
void scrollMessage (int line, int width) | |||||
{ | { | ||||
char buf [32] ; | char buf [32] ; | ||||
static int position = 0 ; | static int position = 0 ; | ||||
static int timer = 0 ; | |||||
if (millis () < timer) | |||||
return ; | |||||
timer = millis () + 200 ; | |||||
strncpy (buf, &message [position], width) ; | strncpy (buf, &message [position], width) ; | ||||
buf [width] = 0 ; | buf [width] = 0 ; | ||||
lcdPosition (lcd, 0, line) ; | |||||
lcdPuts (lcd, buf) ; | |||||
lcdPosition (lcdHandle, 0, line) ; | |||||
lcdPuts (lcdHandle, buf) ; | |||||
if (++position == (strlen (message) - width)) | if (++position == (strlen (message) - width)) | ||||
position = 0 ; | position = 0 ; | ||||
} | } | ||||
/* | |||||
* pingPong: | |||||
* Bounce a character - only on 4-line displays | |||||
********************************************************************************* | |||||
*/ | |||||
static void pingPong (int lcd, int cols) | static void pingPong (int lcd, int cols) | ||||
{ | { | ||||
static int position = 0 ; | static int position = 0 ; | ||||
@@ -98,13 +126,13 @@ static void pingPong (int lcd, int cols) | |||||
if (dir == 0) // Setup | if (dir == 0) // Setup | ||||
{ | { | ||||
dir = 1 ; | dir = 1 ; | ||||
lcdPosition (lcd, 0, 3) ; | |||||
lcdPutchar (lcd, '*') ; | |||||
lcdPosition (lcdHandle, 0, 3) ; | |||||
lcdPutchar (lcdHandle, '*') ; | |||||
return ; | return ; | ||||
} | } | ||||
lcdPosition (lcd, position, 3) ; | |||||
lcdPutchar (lcd, ' ') ; | |||||
lcdPosition (lcdHandle, position, 3) ; | |||||
lcdPutchar (lcdHandle, ' ') ; | |||||
position += dir ; | position += dir ; | ||||
if (position == cols) | if (position == cols) | ||||
@@ -119,11 +147,15 @@ static void pingPong (int lcd, int cols) | |||||
++position ; | ++position ; | ||||
} | } | ||||
lcdPosition (lcd, position, 3) ; | |||||
lcdPutchar (lcd, '#') ; | |||||
lcdPosition (lcdHandle, position, 3) ; | |||||
lcdPutchar (lcdHandle, '#') ; | |||||
} | } | ||||
/* | |||||
* waitForEnter: | |||||
********************************************************************************* | |||||
*/ | |||||
static void waitForEnter (void) | static void waitForEnter (void) | ||||
{ | { | ||||
@@ -131,6 +163,12 @@ static void waitForEnter (void) | |||||
(void)fgetc (stdin) ; | (void)fgetc (stdin) ; | ||||
} | } | ||||
/* | |||||
* The works | |||||
********************************************************************************* | |||||
*/ | |||||
int main (int argc, char *argv[]) | int main (int argc, char *argv[]) | ||||
{ | { | ||||
int i ; | int i ; | ||||
@@ -167,67 +205,60 @@ int main (int argc, char *argv[]) | |||||
wiringPiSetup () ; | wiringPiSetup () ; | ||||
if (bits == 4) | if (bits == 4) | ||||
lcd = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ; | |||||
lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ; | |||||
else | else | ||||
lcd = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ; | |||||
lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ; | |||||
if (lcd < 0) | |||||
if (lcdHandle < 0) | |||||
{ | { | ||||
fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ; | fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ; | ||||
return -1 ; | return -1 ; | ||||
} | } | ||||
lcdPosition (lcd, 0, 0) ; lcdPuts (lcd, "Gordon Henderson") ; | |||||
lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ; | |||||
lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; | |||||
waitForEnter () ; | |||||
if (rows > 1) | if (rows > 1) | ||||
{ | { | ||||
lcdPosition (lcd, 0, 1) ; | |||||
for (i = 0 ; i < (cols - 1) ; ++i) | |||||
lcdPutchar (lcd, '*') ; | |||||
lcdPutchar (lcd, '2') ; | |||||
lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ; | |||||
if (rows == 4) | if (rows == 4) | ||||
{ | { | ||||
lcdPosition (lcd, 0, 2) ; | |||||
lcdPosition (lcdHandle, 0, 2) ; | |||||
for (i = 0 ; i < ((cols - 1) / 2) ; ++i) | for (i = 0 ; i < ((cols - 1) / 2) ; ++i) | ||||
lcdPuts (lcd, "=-") ; | |||||
lcdPuts (lcd, "=3") ; | |||||
lcdPuts (lcdHandle, "=-") ; | |||||
lcdPuts (lcdHandle, "=3") ; | |||||
lcdPosition (lcd, 0, 3) ; | |||||
lcdPosition (lcdHandle, 0, 3) ; | |||||
for (i = 0 ; i < ((cols - 1) / 2) ; ++i) | for (i = 0 ; i < ((cols - 1) / 2) ; ++i) | ||||
lcdPuts (lcd, "-=") ; | |||||
lcdPuts (lcd, "-4") ; | |||||
lcdPuts (lcdHandle, "-=") ; | |||||
lcdPuts (lcdHandle, "-4") ; | |||||
} | } | ||||
} | } | ||||
sleep (2) ; | |||||
lcdPosition (lcd, 0, 0) ; lcdPuts (lcd, " wiringpi.com ") ; | |||||
waitForEnter () ; | waitForEnter () ; | ||||
lcdCharDef (lcd, 2, newChar) ; | |||||
lcdCharDef (lcdHandle, 2, newChar) ; | |||||
lcdClear (lcd) ; | |||||
lcdPosition (lcd, 0, 0) ; | |||||
lcdPuts (lcd, "User Char: ") ; | |||||
lcdPutchar (lcd, 2) ; | |||||
lcdClear (lcdHandle) ; | |||||
lcdPosition (lcdHandle, 0, 0) ; | |||||
lcdPuts (lcdHandle, "User Char: ") ; | |||||
lcdPutchar (lcdHandle, 2) ; | |||||
lcdCursor (lcd, TRUE) ; | |||||
lcdCursorBlink (lcd, TRUE) ; | |||||
lcdCursor (lcdHandle, TRUE) ; | |||||
lcdCursorBlink (lcdHandle, TRUE) ; | |||||
waitForEnter () ; | waitForEnter () ; | ||||
lcdCursor (lcd, FALSE) ; | |||||
lcdCursorBlink (lcd, FALSE) ; | |||||
lcdCursor (lcdHandle, FALSE) ; | |||||
lcdCursorBlink (lcdHandle, FALSE) ; | |||||
lcdClear (lcdHandle) ; | |||||
for (;;) | for (;;) | ||||
{ | { | ||||
delay (250) ; | |||||
scrollMessage (lcd, 0, cols) ; | |||||
scrollMessage (0, cols) ; | |||||
if (rows == 1) | if (rows == 1) | ||||
continue ; | continue ; | ||||
@@ -237,16 +268,16 @@ int main (int argc, char *argv[]) | |||||
sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ; | sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ; | ||||
lcdPosition (lcd, (cols - 8) / 2, 1) ; | |||||
lcdPuts (lcd, buf) ; | |||||
lcdPosition (lcdHandle, (cols - 8) / 2, 1) ; | |||||
lcdPuts (lcdHandle, buf) ; | |||||
if (rows == 2) | if (rows == 2) | ||||
continue ; | continue ; | ||||
sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ; | sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ; | ||||
lcdPosition (lcd, (cols - 10) / 2, 2) ; | |||||
lcdPuts (lcd, buf) ; | |||||
lcdPosition (lcdHandle, (cols - 10) / 2, 2) ; | |||||
lcdPuts (lcdHandle, buf) ; | |||||
pingPong (lcd, cols) ; | pingPong (lcd, cols) ; | ||||
} | } | ||||
@@ -0,0 +1,81 @@ | |||||
# | |||||
# Makefile: | |||||
# wiringPi - Wiring Compatable library for the Raspberry Pi | |||||
# https://projects.drogon.net/wiring-pi | |||||
# | |||||
# Copyright (c) 2012-2013 Gordon Henderson | |||||
################################################################################# | |||||
# This file is part of wiringPi: | |||||
# Wiring Compatable 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 <http://www.gnu.org/licenses/>. | |||||
################################################################################# | |||||
#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 | |||||
@echo [link] | |||||
@$(CC) -o $@ blink.o $(LDFLAGS) $(LDLIBS) | |||||
blink-io: blink-io.o | |||||
@echo [link] | |||||
@$(CC) -o $@ blink-io.o $(LDFLAGS) $(LDLIBS) | |||||
button: button.o | |||||
@echo [link] | |||||
@$(CC) -o $@ button.o $(LDFLAGS) $(LDLIBS) | |||||
volts: volts.o | |||||
@echo [link] | |||||
@$(CC) -o $@ volts.o $(LDFLAGS) $(LDLIBS) | |||||
bright: bright.o | |||||
@echo [link] | |||||
@$(CC) -o $@ bright.o $(LDFLAGS) $(LDLIBS) | |||||
.c.o: | |||||
@echo [CC] $< | |||||
@$(CC) -c $(CFLAGS) $< -o $@ | |||||
clean: | |||||
@echo "[Clean]" | |||||
@rm -f $(OBJ) *~ core tags $(BINS) | |||||
tags: $(SRC) | |||||
@echo [ctags] | |||||
@ctags $(SRC) | |||||
depend: | |||||
makedepend -Y $(SRC) | |||||
# DO NOT DELETE |
@@ -0,0 +1,79 @@ | |||||
/* | |||||
* binary.c: | |||||
* Using the Quick 2 wire 16-bit GPIO expansion board to output | |||||
* a binary counter. | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#include <mcp23017.h> | |||||
#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 ; | |||||
} |
@@ -0,0 +1,61 @@ | |||||
/* | |||||
* blink-io.c: | |||||
* Simple "blink" test for the Quick2Wire 16-pin IO board. | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#include <mcp23017.h> | |||||
#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 ; | |||||
} |
@@ -0,0 +1,50 @@ | |||||
/* | |||||
* blink.c: | |||||
* Simple "blink" test for the Quick2Wire interface board. | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#define LED 1 | |||||
int main (void) | |||||
{ | |||||
// Enable the on-goard GPIO | |||||
wiringPiSetup () ; | |||||
printf ("Raspberry Pi - Quick2Wire Mainboard LED Blink Test\n") ; | |||||
pinMode (LED, OUTPUT) ; | |||||
for (;;) | |||||
{ | |||||
digitalWrite (LED, HIGH) ; | |||||
delay (500) ; | |||||
digitalWrite (LED, LOW) ; | |||||
delay (500) ; | |||||
} | |||||
return 0 ; | |||||
} |
@@ -0,0 +1,37 @@ | |||||
#!/bin/sh | |||||
# | |||||
# blink.sh: | |||||
# Standard "blink" program in wiringPi. Blinks an LED connected | |||||
# to the LED on the Quick2Wire board | |||||
# | |||||
# Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
####################################################################### | |||||
# This file is part of wiringPi: | |||||
# https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
# | |||||
# wiringPi is free software: you can redistribute it and/or modify | |||||
# it under the terms of the GNU Lesser General Public License as published by | |||||
# the Free Software Foundation, either version 3 of the License, or | |||||
# (at your option) any later version. | |||||
# | |||||
# wiringPi is distributed in the hope that it will be useful, | |||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
# GNU Lesser General Public License for more details. | |||||
# | |||||
# You should have received a copy of the GNU Lesser General Public License | |||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
####################################################################### | |||||
# 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 |
@@ -0,0 +1,59 @@ | |||||
/* | |||||
* bright.c: | |||||
* Vary the Q2W LED brightness with the analog card | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#include <pcf8591.h> | |||||
#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 ; | |||||
} |
@@ -0,0 +1,63 @@ | |||||
/* | |||||
* button.c: | |||||
* Simple button test for the Quick2Wire interface board. | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#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 ; | |||||
} |
@@ -0,0 +1,62 @@ | |||||
/* | |||||
* volts.c: | |||||
* Read in all 4 analogs on the Q2W analog board. | |||||
* | |||||
* Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net> | |||||
*********************************************************************** | |||||
* This file is part of wiringPi: | |||||
* https://projects.drogon.net/raspberry-pi/wiringpi/ | |||||
* | |||||
* wiringPi is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Lesser General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* wiringPi is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public License | |||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <wiringPi.h> | |||||
#include <pcf8591.h> | |||||
#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 ; | |||||
} |
@@ -36,10 +36,13 @@ | |||||
#include <wiringPi.h> | #include <wiringPi.h> | ||||
#include <mcp23008.h> | #include <mcp23008.h> | ||||
#include <mcp23016.h> | |||||
#include <mcp23017.h> | #include <mcp23017.h> | ||||
#include <mcp23s08.h> | #include <mcp23s08.h> | ||||
#include <mcp23s17.h> | #include <mcp23s17.h> | ||||
#include <sr595.h> | #include <sr595.h> | ||||
#include <pcf8591.h> | |||||
#include <pcf8574.h> | |||||
#include "extensions.h" | #include "extensions.h" | ||||
@@ -117,9 +120,35 @@ static int doExtensionMcp23008 (char *progName, int pinBase, char *params) | |||||
/* | /* | ||||
* 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)) | |||||
{ | |||||
fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ; | |||||
return FALSE ; | |||||
} | |||||
mcp23016Setup (pinBase, i2c) ; | |||||
return TRUE ; | |||||
} | |||||
/* | |||||
* doExtensionMcp23017: | * doExtensionMcp23017: | ||||
* MCP23008 - 16-bit I2C GPIO expansion chip | |||||
* mcp23002:base:i2cAddr | |||||
* MCP230017- 16-bit I2C GPIO expansion chip | |||||
* mcp23017:base:i2cAddr | |||||
********************************************************************************* | ********************************************************************************* | ||||
*/ | */ | ||||
@@ -211,6 +240,7 @@ static int doExtensionMcp23s17 (char *progName, int pinBase, char *params) | |||||
return TRUE ; | return TRUE ; | ||||
} | } | ||||
/* | /* | ||||
* doExtensionSr595: | * doExtensionSr595: | ||||
* Shift Register 74x595 | * Shift Register 74x595 | ||||
@@ -249,6 +279,58 @@ static int doExtensionSr595 (char *progName, int pinBase, char *params) | |||||
/* | /* | ||||
* 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)) | |||||
{ | |||||
fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ; | |||||
return FALSE ; | |||||
} | |||||
pcf8574Setup (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)) | |||||
{ | |||||
fprintf (stderr, "%s: i2c address (0x%X) out of range\n", progName, i2c) ; | |||||
return FALSE ; | |||||
} | |||||
pcf8591Setup (pinBase, i2c) ; | |||||
return TRUE ; | |||||
} | |||||
/* | |||||
* Function list | * Function list | ||||
********************************************************************************* | ********************************************************************************* | ||||
*/ | */ | ||||
@@ -256,10 +338,13 @@ static int doExtensionSr595 (char *progName, int pinBase, char *params) | |||||
struct extensionFunctionStruct extensionFunctions [] = | struct extensionFunctionStruct extensionFunctions [] = | ||||
{ | { | ||||
{ "mcp23008", &doExtensionMcp23008 }, | { "mcp23008", &doExtensionMcp23008 }, | ||||
{ "mcp23016", &doExtensionMcp23016 }, | |||||
{ "mcp23017", &doExtensionMcp23017 }, | { "mcp23017", &doExtensionMcp23017 }, | ||||
{ "mcp23s08", &doExtensionMcp23s08 }, | { "mcp23s08", &doExtensionMcp23s08 }, | ||||
{ "mcp23s17", &doExtensionMcp23s17 }, | { "mcp23s17", &doExtensionMcp23s17 }, | ||||
{ "sr595", &doExtensionSr595 }, | |||||
{ "sr595", &doExtensionSr595 }, | |||||
{ "pcf8574", &doExtensionPcf8574 }, | |||||
{ "pcf8591", &doExtensionPcf8591 }, | |||||
{ NULL, NULL }, | { NULL, NULL }, | ||||
} ; | } ; | ||||
@@ -895,19 +895,13 @@ void doRead (int argc, char *argv []) | |||||
void doAread (int argc, char *argv []) | void doAread (int argc, char *argv []) | ||||
{ | { | ||||
int pin, val ; | |||||
if (argc != 3) | if (argc != 3) | ||||
{ | { | ||||
fprintf (stderr, "Usage: %s aread pin\n", argv [0]) ; | fprintf (stderr, "Usage: %s aread pin\n", argv [0]) ; | ||||
exit (1) ; | exit (1) ; | ||||
} | } | ||||
pin = atoi (argv [2]) ; | |||||
val = analogRead (pin) ; | |||||
printf ("%s\n", val == 0 ? "0" : "1") ; | |||||
printf ("%d\n", analogRead (atoi (argv [2]))) ; | |||||
} | } | ||||
@@ -47,8 +47,10 @@ SRC = wiringPi.c \ | |||||
piHiPri.c piThread.c \ | piHiPri.c piThread.c \ | ||||
wiringPiSPI.c wiringPiI2C.c \ | wiringPiSPI.c wiringPiI2C.c \ | ||||
softPwm.c softTone.c \ | softPwm.c softTone.c \ | ||||
mcp23s08.c mcp23008.c \ | |||||
mcp23s17.c mcp23017.c sr595.c pcf8574.c \ | |||||
mcp23008.c mcp23016.c mcp23017.c \ | |||||
mcp23s08.c mcp23s17.c \ | |||||
sr595.c \ | |||||
pcf8574.c pcf8591.c \ | |||||
mcp3002.c mcp4802.c mcp3422.c \ | mcp3002.c mcp4802.c mcp3422.c \ | ||||
drc.c | drc.c | ||||
@@ -95,6 +97,7 @@ install-headers: | |||||
@install -m 0644 wiringPiSPI.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 wiringPiSPI.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 wiringPiI2C.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 wiringPiI2C.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 mcp23008.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 mcp23008.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 mcp23016.h $(DESTDIR)$(PREFIX)/include | |||||
@install -m 0644 mcp23017.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 mcp23017.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 mcp23s08.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 mcp23s08.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 mcp23s17.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 mcp23s17.h $(DESTDIR)$(PREFIX)/include | ||||
@@ -103,6 +106,7 @@ install-headers: | |||||
@install -m 0644 mcp3422.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 mcp3422.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 sr595.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 sr595.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 pcf8574.h $(DESTDIR)$(PREFIX)/include | @install -m 0644 pcf8574.h $(DESTDIR)$(PREFIX)/include | ||||
@install -m 0644 pcf8591.h $(DESTDIR)$(PREFIX)/include | |||||
.PHONEY: install | .PHONEY: install | ||||
install: $(DYNAMIC) install-headers | install: $(DYNAMIC) install-headers | ||||
@@ -129,6 +133,7 @@ uninstall: | |||||
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiSPI.h | @rm -f $(DESTDIR)$(PREFIX)/include/wiringPiSPI.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiI2C.h | @rm -f $(DESTDIR)$(PREFIX)/include/wiringPiI2C.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23008.h | @rm -f $(DESTDIR)$(PREFIX)/include/mcp23008.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23016.h | |||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23017.h | @rm -f $(DESTDIR)$(PREFIX)/include/mcp23017.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s08.h | @rm -f $(DESTDIR)$(PREFIX)/include/mcp23s08.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s17.h | @rm -f $(DESTDIR)$(PREFIX)/include/mcp23s17.h | ||||
@@ -137,6 +142,7 @@ uninstall: | |||||
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3422.h | @rm -f $(DESTDIR)$(PREFIX)/include/mcp3422.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/sr595.h | @rm -f $(DESTDIR)$(PREFIX)/include/sr595.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h | @rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h | ||||
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8591.h | |||||
@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.* | @rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.* | ||||
@ldconfig | @ldconfig | ||||
@@ -156,12 +162,14 @@ wiringPiSPI.o: wiringPi.h wiringPiSPI.h | |||||
wiringPiI2C.o: wiringPi.h wiringPiI2C.h | wiringPiI2C.o: wiringPi.h wiringPiI2C.h | ||||
softPwm.o: wiringPi.h softPwm.h | softPwm.o: wiringPi.h softPwm.h | ||||
softTone.o: wiringPi.h softTone.h | softTone.o: wiringPi.h softTone.h | ||||
mcp23s08.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s08.h | |||||
mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h | mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h | ||||
mcp23s17.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s17.h | |||||
mcp23016.o: wiringPi.h wiringPiI2C.h mcp23016.h mcp23016reg.h | |||||
mcp23017.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23017.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 | sr595.o: wiringPi.h sr595.h | ||||
pcf8574.o: wiringPi.h wiringPiI2C.h pcf8574.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 | mcp3002.o: wiringPi.h wiringPiSPI.h mcp3002.h | ||||
mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h | mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h | ||||
mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h | mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h | ||||
@@ -0,0 +1,164 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <stdio.h> | |||||
#include <pthread.h> | |||||
#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 fd ; | |||||
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 0 ; | |||||
} |
@@ -0,0 +1,33 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#ifdef __cplusplus | |||||
extern "C" { | |||||
#endif | |||||
extern int mcp23016Setup (const int pinBase, const int i2cAddress) ; | |||||
#ifdef __cplusplus | |||||
} | |||||
#endif |
@@ -0,0 +1,48 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
// 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 |
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* pcf8574.c: | * pcf8574.c: | ||||
* Extend wiringPi with the PFC8574 I2C GPIO expander chip | |||||
* Extend wiringPi with the PCF8574 I2C GPIO expander chip | |||||
* Copyright (c) 2013 Gordon Henderson | * Copyright (c) 2013 Gordon Henderson | ||||
*********************************************************************** | *********************************************************************** | ||||
* This file is part of wiringPi: | * This file is part of wiringPi: | ||||
@@ -33,7 +33,7 @@ | |||||
/* | /* | ||||
* myPinMode: | * myPinMode: | ||||
* The PFC8574 is an odd chip - the pins are effectively bi-directional, | |||||
* 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... | * however the pins should be drven high when used as an input pin... | ||||
* So, we're effectively copying digitalWrite... | * So, we're effectively copying digitalWrite... | ||||
********************************************************************************* | ********************************************************************************* | ||||
@@ -100,7 +100,7 @@ static int myDigitalRead (struct wiringPiNodeStruct *node, int pin) | |||||
/* | /* | ||||
* pcf8574Setup: | * pcf8574Setup: | ||||
* Create a new instance of a PFC8574 I2C GPIO interface. We know it | |||||
* 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 | * has 8 pins, so all we need to know here is the I2C address and the | ||||
* user-defined pin base. | * user-defined pin base. | ||||
********************************************************************************* | ********************************************************************************* | ||||
@@ -116,11 +116,11 @@ int pcf8574Setup (const int pinBase, const int i2cAddress) | |||||
node = wiringPiNewNode (pinBase, 8) ; | node = wiringPiNewNode (pinBase, 8) ; | ||||
node->fd = fd ; | |||||
node->pinMode = myPinMode ; | |||||
node->digitalRead = myDigitalRead ; | |||||
node->digitalWrite = myDigitalWrite ; | |||||
node->data2 = wiringPiI2CRead (fd) ; | |||||
node->fd = fd ; | |||||
node->pinMode = myPinMode ; | |||||
node->digitalRead = myDigitalRead ; | |||||
node->digitalWrite = myDigitalWrite ; | |||||
node->data2 = wiringPiI2CRead (fd) ; | |||||
return 0 ; | return 0 ; | ||||
} | } |
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* pfc8574.h: | |||||
* Extend wiringPi with the PFC8574 I2C GPIO expander chip | |||||
* pcf8574.h: | |||||
* Extend wiringPi with the PCF8574 I2C GPIO expander chip | |||||
* Copyright (c) 2013 Gordon Henderson | * Copyright (c) 2013 Gordon Henderson | ||||
*********************************************************************** | *********************************************************************** | ||||
* This file is part of wiringPi: | * This file is part of wiringPi: | ||||
@@ -26,7 +26,7 @@ | |||||
extern "C" { | extern "C" { | ||||
#endif | #endif | ||||
extern int pfc8574Setup (const int pinBase, const int i2cAddress) ; | |||||
extern int pcf8574Setup (const int pinBase, const int i2cAddress) ; | |||||
#ifdef __cplusplus | #ifdef __cplusplus | ||||
} | } | ||||
@@ -0,0 +1,90 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#include <unistd.h> | |||||
#include "wiringPi.h" | |||||
#include "wiringPiI2C.h" | |||||
#include "pcf8591.h" | |||||
/* | |||||
* myAnalogWrite: | |||||
********************************************************************************* | |||||
*/ | |||||
static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value) | |||||
{ | |||||
unsigned char b [2] ; | |||||
b [0] = 0x40 ; | |||||
b [1] = value & 0xFF ; | |||||
write (node->fd, b, 2) ; | |||||
} | |||||
/* | |||||
* 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 fd ; | |||||
node = wiringPiNewNode (pinBase, 4) ; | |||||
node->fd = fd ; | |||||
node->analogRead = myAnalogRead ; | |||||
node->analogWrite = myAnalogWrite ; | |||||
return 0 ; | |||||
} |
@@ -0,0 +1,33 @@ | |||||
/* | |||||
* 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 <http://www.gnu.org/licenses/>. | |||||
*********************************************************************** | |||||
*/ | |||||
#ifdef __cplusplus | |||||
extern "C" { | |||||
#endif | |||||
extern int pcf8591Setup (const int pinBase, const int i2cAddress) ; | |||||
#ifdef __cplusplus | |||||
} | |||||
#endif |
@@ -21,6 +21,9 @@ | |||||
*********************************************************************** | *********************************************************************** | ||||
*/ | */ | ||||
#ifndef __WIRING_PI_H__ | |||||
#define __WIRING_PI_H__ | |||||
// Handy defines | // Handy defines | ||||
// Deprecated | // Deprecated | ||||
@@ -176,3 +179,5 @@ extern unsigned int micros (void) ; | |||||
#ifdef __cplusplus | #ifdef __cplusplus | ||||
} | } | ||||
#endif | #endif | ||||
#endif |
@@ -150,7 +150,7 @@ int wiringPiI2CReadReg16 (int fd, int reg) | |||||
if (i2c_smbus_access (fd, I2C_SMBUS_READ, reg, I2C_SMBUS_WORD_DATA, &data)) | if (i2c_smbus_access (fd, I2C_SMBUS_READ, reg, I2C_SMBUS_WORD_DATA, &data)) | ||||
return -1 ; | return -1 ; | ||||
else | else | ||||
return data.byte & 0xFF ; | |||||
return data.byte & 0xFFFF ; | |||||
} | } | ||||