From f6c40cb2a69a43de97903c9fdd6f24a4f32f8eae Mon Sep 17 00:00:00 2001 From: Gordon Henderson Date: Thu, 24 Sep 2015 22:35:31 +0100 Subject: [PATCH] Fixed the requirement for -lm Updated the gpio program to be device tree aware. --- VERSION | 2 +- debian-template/wiringPi/DEBIAN/control | 2 +- examples/Makefile | 10 +++---- examples/PiGlow/Makefile | 2 +- examples/max31855.c | 49 +++++++++++++++++++++++++++++++++ gpio/gpio.1 | 20 +++++--------- gpio/gpio.c | 38 +++++++++++++++++++------ gpio/version.h | 2 +- wiringPi/max31855.c | 7 ++--- 9 files changed, 98 insertions(+), 34 deletions(-) create mode 100644 examples/max31855.c diff --git a/VERSION b/VERSION index 7dba3a2..410158a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.27 +2.28 diff --git a/debian-template/wiringPi/DEBIAN/control b/debian-template/wiringPi/DEBIAN/control index 2a65ff5..9def8c5 100644 --- a/debian-template/wiringPi/DEBIAN/control +++ b/debian-template/wiringPi/DEBIAN/control @@ -1,5 +1,5 @@ Package: wiringpi -Version: 2.27 +Version: 2.28 Section: libraries Priority: optional Architecture: armhf diff --git a/examples/Makefile b/examples/Makefile index 60659f5..04bcaec 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -3,7 +3,7 @@ # wiringPi - Wiring Compatable library for the Raspberry Pi # https://projects.drogon.net/wiring-pi # -# Copyright (c) 2012 Gordon Henderson +# Copyright (c) 2012-2015 Gordon Henderson ################################################################################# # This file is part of wiringPi: # Wiring Compatable library for the Raspberry Pi @@ -47,7 +47,8 @@ SRC = blink.c blink8.c blink12.c \ softPwm.c softTone.c \ delayTest.c serialRead.c serialTest.c okLed.c ds1302.c \ lowPower.c \ - rht03.c piglow.c + max31855.c \ + rht03.c OBJ = $(SRC:.c=.o) @@ -148,10 +149,9 @@ ds1302: ds1302.o $Q echo [link] $Q $(CC) -o $@ ds1302.o $(LDFLAGS) $(LDLIBS) -piglow: piglow.o +max31855: max31855.o $Q echo [link] - $Q $(CC) -o $@ piglow.o $(LDFLAGS) $(LDLIBS) - + $Q $(CC) -o $@ max31855.c.o $(LDFLAGS) $(LDLIBS) .c.o: $Q echo [CC] $< diff --git a/examples/PiGlow/Makefile b/examples/PiGlow/Makefile index b7a8595..acd4818 100644 --- a/examples/PiGlow/Makefile +++ b/examples/PiGlow/Makefile @@ -3,7 +3,7 @@ # wiringPi - Wiring Compatable library for the Raspberry Pi # https://projects.drogon.net/wiring-pi # -# Copyright (c) 2012-2013 Gordon Henderson +# Copyright (c) 2012-2015 Gordon Henderson ################################################################################# # This file is part of wiringPi: # Wiring Compatable library for the Raspberry Pi diff --git a/examples/max31855.c b/examples/max31855.c new file mode 100644 index 0000000..2060a55 --- /dev/null +++ b/examples/max31855.c @@ -0,0 +1,49 @@ +/* + * 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 ; + + wiringPiSetup () ; + max31855Setup (200, 0) ; + max31855Setup (400, 1) ; + + for (;;) + { + printf ("%6d, %6d, %6d, %6d ::::", analogRead (200), analogRead (201), analogRead (202), analogRead (203)) ; + printf ("%6d, %6d, %6d, %6d\n", analogRead (400), analogRead (401), analogRead (402), analogRead (403)) ; + delay (500) ; + } + +} diff --git a/gpio/gpio.1 b/gpio/gpio.1 index 8949442..673ebbe 100644 --- a/gpio/gpio.1 +++ b/gpio/gpio.1 @@ -1,4 +1,4 @@ -.TH gpio 1 "January 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO" +.TH GPIO 1 "September 2015" wiringPi "Command-Line access to Raspberry Pi's GPIO" .SH NAME gpio \- Command-line access to Raspberry Pi's GPIO @@ -251,12 +251,9 @@ on the associated /dev/ entries so that the current user has access to them. Optionally it will set the I2C baudrate to that supplied in Kb/sec (or as close as the Pi can manage) The default speed is 100Kb/sec. -Note that on a Pi with a recent 3.18 kernel with the device-tree structure -enable, the load may fail until you add: - -.I dtparam=i2c=on - -into \fB/boot/config.txt\fR to allow user use of the I2C bus. +Note: On recent kernels with the device tree enabled you should use the +raspi-config program to load/unload the I2C device at boot time. +(or disable the device tree to continue to use this method) .TP .B load spi @@ -269,12 +266,9 @@ this has fixed the buffer size. The way to change it now is to edit the /boot/cmdline.txt file and add on spdev.bufsiz=8192 to set it to e.g. 8192 bytes then reboot. -Note that on a Pi with a recent 3.18 kernel with the device-tree structure -enable, the load may fail until you add: - -.I dtparam=spi=on - -into \fB/boot/config.txt\fR to allow user use of the I2C bus. +Note: On recent kernels with the device tree enabled you should use the +raspi-config program to load/unload the SPI device at boot time. +(or disable the device tree to continue to use this method) .TP .B gbr diff --git a/gpio/gpio.c b/gpio/gpio.c index a25f454..5c87a7e 100644 --- a/gpio/gpio.c +++ b/gpio/gpio.c @@ -116,7 +116,7 @@ static void changeOwner (char *cmd, char *file) if (chown (file, uid, gid) != 0) { if (errno == ENOENT) // Warn that it's not there - fprintf (stderr, "%s: Warning (not an error): File not present: %s\n", cmd, file) ; + fprintf (stderr, "%s: Warning (not an error, do not report): File not present: %s\n", cmd, file) ; else fprintf (stderr, "%s: Warning (not an error): Unable to change ownership of %s: %s\n", cmd, file, strerror (errno)) ; } @@ -163,6 +163,22 @@ static int moduleLoaded (char *modName) ********************************************************************************* */ +static void checkDevTree (char *argv []) +{ + struct stat statBuf ; + + if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ... + { + fprintf (stderr, +"%s: Unable to load/unload modules as this Pi has the device tree enabled.\n" +" You need to run the raspi-config program (as root) and select the\n" +" modules (SPI or I2C) that you wish to load/unload there and reboot.\n" +" There is more information here:\n" +" https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314\n", argv [0]) ; + exit (1) ; + } +} + static void _doLoadUsage (char *argv []) { fprintf (stderr, "Usage: %s load [I2C baudrate in Kb/sec]\n", argv [0]) ; @@ -176,6 +192,8 @@ static void doLoad (int argc, char *argv []) char *file1, *file2 ; char args1 [32], args2 [32] ; + checkDevTree (argv) ; + if (argc < 3) _doLoadUsage (argv) ; @@ -251,6 +269,8 @@ static void doUnLoad (int argc, char *argv []) char *module1, *module2 ; char cmd [80] ; + checkDevTree (argv) ; + if (argc != 3) _doUnLoadUsage (argv) ; @@ -1138,6 +1158,8 @@ int main (int argc, char *argv []) { int i ; int model, rev, mem, maker, overVolted ; + struct stat statBuf ; + if (getenv ("WIRINGPI_DEBUG") != NULL) { @@ -1195,15 +1217,15 @@ int main (int argc, char *argv []) printf (" Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n", piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker], overVolted ? "[OV]" : "") ; -// Quick check for /dev/gpiomem +// Check for device tree + + if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ... + printf (" Device tree is enabled.\n") ; - if ((i = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) >= 0) - printf (" This Raspberry Pi supports user-level GPIO access via /dev/gpiomem.\n") ; + if (stat ("/dev/gpiomem", &statBuf) == 0) // User level GPIO is GO + printf (" This Raspberry Pi supports user-level GPIO access.\n") ; else - { - printf (" You need to run your programs as root for GPIO access\n") ; - printf (" (Old /dev/mem method - consider upgrading)\n") ; - } + printf (" * Root or sudo required for GPIO access.\n") ; } return 0 ; diff --git a/gpio/version.h b/gpio/version.h index ac80bc5..704c10d 100644 --- a/gpio/version.h +++ b/gpio/version.h @@ -1 +1 @@ -#define VERSION "2.27" +#define VERSION "2.28" diff --git a/wiringPi/max31855.c b/wiringPi/max31855.c index 702d7c0..ea184d8 100644 --- a/wiringPi/max31855.c +++ b/wiringPi/max31855.c @@ -1,7 +1,7 @@ /* * max31855.c: * Extend wiringPi with the max31855 SPI Analog to Digital convertor - * Copyright (c) 2012-2013 Gordon Henderson + * Copyright (c) 2012-2015 Gordon Henderson *********************************************************************** * This file is part of wiringPi: * https://projects.drogon.net/raspberry-pi/wiringpi/ @@ -24,7 +24,6 @@ #include #include -#include #include #include @@ -60,7 +59,7 @@ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) if ((spiData & 0x2000) != 0) // Negative temp = -temp ; - return (int)rint ((double)temp * 2.5) ; + return (int)((((double)temp * 25) + 0.5) / 10.0) ; case 3: // Return temp in F * 10 spiData >>= 18 ; @@ -68,7 +67,7 @@ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin) if ((spiData & 0x2000) != 0) // Negative temp = -temp ; - return (int)rint ((((double)temp * 0.25 * 9.0 / 5.0) + 32.0) * 10.0) ; + return (int)((((((double)temp * 0.25 * 9.0 / 5.0) + 32.0) * 100.0) + 0.5) / 10.0) ; default: // Who knows... return 0 ;