New timing methods
This commit is contained in:
committed by
Philip Howard
parent
43aa862e97
commit
d24a8fc4cb
165
gpio/COPYING.LESSER
Normal file
165
gpio/COPYING.LESSER
Normal file
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
@@ -9,16 +9,16 @@
|
||||
# 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 General Public License as published by
|
||||
# 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 General Public License for more details.
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
|
||||
#################################################################################
|
||||
|
||||
|
||||
76
gpio/gpio.1
76
gpio/gpio.1
@@ -1,15 +1,23 @@
|
||||
.TH "GPIO" "14 June 2012" "Command-Line access to Raspberry Pi GPIO"
|
||||
.TH "GPIO" "14 June 2012" "Command-Line access to Raspberry Pi and PiFace GPIO"
|
||||
|
||||
.SH NAME
|
||||
gpio \- Command-line access to Raspberry Pi GPIO
|
||||
gpio \- Command-line access to Raspberry Pi and PiFace GPIO
|
||||
|
||||
.SH SYNOPSIS
|
||||
.TP
|
||||
.B gpio
|
||||
.RB [ \-v ]
|
||||
.TP
|
||||
.B gpio
|
||||
.RB [ \-g ]
|
||||
.RB < read/write/pwm/mode ...>
|
||||
.TP
|
||||
.B gpio
|
||||
.RB < export/unexport/exports ...>
|
||||
.RB [ \-p ]
|
||||
.RB < read/write/mode ...>
|
||||
.TP
|
||||
.B gpio
|
||||
.RB < export/edge/unexport/unexportall/exports ...>
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
@@ -19,15 +27,23 @@ on the Raspberry Pi. It's designed for simple testing and diagnostic
|
||||
purposes, but can be used in shell scripts for general if somewhat slow
|
||||
control of the GPIO pins.
|
||||
|
||||
Additionally, it can be used to set the exports in the /sys/class/gpio
|
||||
system directory to allow subsequent programs to use the /sys/class/gpio
|
||||
Additionally, it can be used to set the exports in the \fI/sys/class/gpio\fR
|
||||
system directory to allow subsequent programs to use the \fR/sys/class/gpio\fR
|
||||
interface without needing to be run as root.
|
||||
|
||||
.SH OPTIONS
|
||||
|
||||
.TP
|
||||
.B \-v
|
||||
Output the current version
|
||||
|
||||
.TP
|
||||
.B \-g
|
||||
Use the BCM_GPIO pins numbers rather than WiringPi pin numbers.
|
||||
Use the BCM_GPIO pins numbers rather than wiringPi pin numbers.
|
||||
|
||||
.TP
|
||||
.B \-p
|
||||
Use the PiFace interface board and its corresponding pin numbers.
|
||||
|
||||
.TP
|
||||
.B read
|
||||
@@ -44,27 +60,45 @@ Write a PWM value (0-1023) to the given pin.
|
||||
|
||||
.TP
|
||||
.B mode
|
||||
Set a pin into input, output or pwm mode. Can also use the literals up, down or tri
|
||||
to set the internal pull-up, pull-down or tristate controls.
|
||||
Set a pin into \fIinput\fR, \fIoutput\fR or \fIpwm\fR mode. Can also
|
||||
use the literals \fIup\fR, \fIdown\fR or \fItri\fR to set the internal
|
||||
pull-up, pull-down or tristate (off) controls.
|
||||
|
||||
.TP
|
||||
.B export
|
||||
Export a GPIO pin in the /sys/class/gpio directory. Use like the mode command above
|
||||
however only in and out are supported at this time.
|
||||
Export a GPIO pin in the \fI/sys/class/gpio\fR directory. Use like the
|
||||
mode command above however only \fIin\fR and \fIout\fR are supported at
|
||||
this time. Note that the pin number is the \fBBCM_GPIO\fR number and
|
||||
not the wiringPi number.
|
||||
|
||||
Once a GPIO pin has been exported, the
|
||||
.B gpio
|
||||
program changes the ownership of the /sys/class/gpio/gpioX/value pseudo file to
|
||||
that of the user running the
|
||||
.B gpio
|
||||
program. This means that you can have a small script of gpio exports to setup
|
||||
the gpio pins as your program requires without the need to run anything as
|
||||
root, or with the sudo command.
|
||||
Once a GPIO pin has been exported, the \fBgpio\fR program changes the
|
||||
ownership of the \fI/sys/class/gpio/gpioX/value\fR and if present in
|
||||
later kernels, the \fI/sys/class/gpio/gpioX/edge\fR pseudo files to
|
||||
that of the user running the \fBgpio\fR program. This means that you
|
||||
can have a small script of gpio exports to setup the gpio pins as your
|
||||
program requires without the need to run anything as root, or with the
|
||||
sudo command.
|
||||
|
||||
.TP
|
||||
.B edge
|
||||
This exports a GPIO pin in the \fI/sys/class/gpio\fR directory, set
|
||||
the direction to input and set the edge interrupt method to \fInone\fR,
|
||||
\fIrising\fR, \fIfalling\fR or \fIboth\fR. Use like the export command
|
||||
above and note that \fBBCM_GPIO\fR pin number is used not not wiringPi pin
|
||||
numbering.
|
||||
|
||||
Like the export commands abovem ownership is set to that of the
|
||||
calling user, allowing subsequent access from user programs without
|
||||
requiring root/sudo.
|
||||
|
||||
.TP
|
||||
.B unexport
|
||||
Un-Export a GPIO pin in the /sys/class/gpio directory.
|
||||
|
||||
.TP
|
||||
.B unexportall
|
||||
Un-Export all the GPIO pins in the /sys/class/gpio directory.
|
||||
|
||||
.TP
|
||||
.B exports
|
||||
Print a list (if any) of all the exported GPIO pins and their current values.
|
||||
@@ -119,9 +153,9 @@ gpio -g read 0 # Read GPIO Pin 0 (SDA0)
|
||||
|
||||
.SH "NOTES"
|
||||
|
||||
When using the export or unexport commands, the pin numbers are
|
||||
.B always
|
||||
native GPIO numbers and never wiringPi pin numbers.
|
||||
When using the \fIexport\fR, \fIedge\fR or \fIunexport\fR commands, the
|
||||
pin numbers are \fBalways\fR native BCM_GPIO numbers and never wiringPi
|
||||
pin numbers.
|
||||
|
||||
.SH "SEE ALSO"
|
||||
|
||||
|
||||
232
gpio/gpio.c
232
gpio/gpio.c
@@ -7,16 +7,16 @@
|
||||
* 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 General Public License as published by
|
||||
* 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 General Public License for more details.
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
|
||||
***********************************************************************
|
||||
*/
|
||||
@@ -37,10 +37,10 @@
|
||||
|
||||
static int wpMode ;
|
||||
|
||||
|
||||
char *usage = "Usage: gpio -v\n"
|
||||
" gpio [-g] <read/write/pwm/mode/> ...\n"
|
||||
" gpio <export/unexport/exports> ..." ;
|
||||
" gpio [-g] <read/write/pwm/mode> ...\n"
|
||||
" gpio [-p] <read/write/mode> ...\n"
|
||||
" gpio <export/edge/unexport/unexportall/exports> ..." ;
|
||||
|
||||
|
||||
/*
|
||||
@@ -54,7 +54,7 @@ void doExports (void)
|
||||
int fd ;
|
||||
int i, l, first ;
|
||||
char fName [128] ;
|
||||
char dir, val ;
|
||||
char buf [16] ;
|
||||
|
||||
// Rather crude, but who knows what others are up to...
|
||||
|
||||
@@ -75,19 +75,14 @@ void doExports (void)
|
||||
|
||||
printf ("%4d: ", i) ;
|
||||
|
||||
if ((l = read (fd, &dir, 1)) == 0)
|
||||
{
|
||||
printf ("Empty direction file (why?)\n") ;
|
||||
close (fd) ;
|
||||
continue ;
|
||||
}
|
||||
if ((l = read (fd, buf, 16)) == 0)
|
||||
sprintf (buf, "%s", "?") ;
|
||||
|
||||
buf [l] = 0 ;
|
||||
if ((buf [strlen (buf) - 1]) == '\n')
|
||||
buf [strlen (buf) - 1] = 0 ;
|
||||
|
||||
/**/ if (dir == 'o')
|
||||
printf ("Output ") ;
|
||||
else if (dir == 'i')
|
||||
printf ("Input ") ;
|
||||
else
|
||||
printf ("Wrong ") ;
|
||||
printf ("%-3s", buf) ;
|
||||
|
||||
close (fd) ;
|
||||
|
||||
@@ -100,19 +95,32 @@ void doExports (void)
|
||||
continue ;
|
||||
}
|
||||
|
||||
if ((l = read (fd, &val, 1)) == 0)
|
||||
if ((l = read (fd, buf, 16)) == 0)
|
||||
sprintf (buf, "%s", "?") ;
|
||||
|
||||
buf [l] = 0 ;
|
||||
if ((buf [strlen (buf) - 1]) == '\n')
|
||||
buf [strlen (buf) - 1] = 0 ;
|
||||
|
||||
printf (" %s", buf) ;
|
||||
|
||||
// Read any edge trigger file
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/edge", i) ;
|
||||
if ((fd = open (fName, O_RDONLY)) == -1)
|
||||
{
|
||||
printf ("Empty Value file (why?)\n") ;
|
||||
close (fd) ;
|
||||
printf ("\n") ;
|
||||
continue ;
|
||||
}
|
||||
|
||||
/**/ if (val == '0' )
|
||||
printf ("(0)\n") ;
|
||||
else if (val == '1')
|
||||
printf ("(1)\n") ;
|
||||
else
|
||||
printf ("(?)\n") ;
|
||||
if ((l = read (fd, buf, 16)) == 0)
|
||||
sprintf (buf, "%s", "?") ;
|
||||
|
||||
buf [l] = 0 ;
|
||||
if ((buf [strlen (buf) - 1]) == '\n')
|
||||
buf [strlen (buf) - 1] = 0 ;
|
||||
|
||||
printf (" %-8s\n", buf) ;
|
||||
|
||||
close (fd) ;
|
||||
}
|
||||
@@ -161,9 +169,9 @@ void doExport (int argc, char *argv [])
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
/**/ if (strcasecmp (mode, "in") == 0)
|
||||
/**/ if ((strcasecmp (mode, "in") == 0) || (strcasecmp (mode, "input") == 0))
|
||||
fprintf (fd, "in\n") ;
|
||||
else if (strcasecmp (mode, "out") == 0)
|
||||
else if ((strcasecmp (mode, "out") == 0) || (strcasecmp (mode, "output") == 0))
|
||||
fprintf (fd, "out\n") ;
|
||||
else
|
||||
{
|
||||
@@ -184,7 +192,113 @@ void doExport (int argc, char *argv [])
|
||||
fprintf (stderr, "%s: Unable to change ownership of the value file: %s\n", argv [1], strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
|
||||
// Also change ownership of the edge file - if it exists
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin) ;
|
||||
if (chown (fName, uid, gid) != 0)
|
||||
{
|
||||
if (errno != ENOENT) // Silently ignore File not found - older kernel
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to change ownership of the value file: %s\n", argv [1], strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* doEdge:
|
||||
* gpio edge pin mode
|
||||
* Easy access to changing the edge trigger on a GPIO pin
|
||||
* This uses the /sys/class/gpio device interface.
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
void doEdge (int argc, char *argv [])
|
||||
{
|
||||
FILE *fd ;
|
||||
int pin ;
|
||||
char *mode ;
|
||||
char fName [128] ;
|
||||
uid_t uid ;
|
||||
gid_t gid ;
|
||||
|
||||
if (argc != 4)
|
||||
{
|
||||
fprintf (stderr, "Usage: %s edge pin mode\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
pin = atoi (argv [2]) ;
|
||||
|
||||
mode = argv [3] ;
|
||||
|
||||
// Export the pin and set direction to input
|
||||
|
||||
if ((fd = fopen ("/sys/class/gpio/export", "w")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to open GPIO export interface: %s\n", argv [0], strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
fprintf (fd, "%d\n", pin) ;
|
||||
fclose (fd) ;
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/direction", pin) ;
|
||||
if ((fd = fopen (fName, "w")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to open GPIO direction interface for pin %d: %s\n", argv [0], pin, strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
fprintf (fd, "in\n") ;
|
||||
fclose (fd) ;
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin) ;
|
||||
if ((fd = fopen (fName, "w")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to open GPIO edge interface for pin %d: %s\n", argv [0], pin, strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
/**/ if (strcasecmp (mode, "none") == 0)
|
||||
fprintf (fd, "none\n") ;
|
||||
else if (strcasecmp (mode, "rising") == 0)
|
||||
fprintf (fd, "rising\n") ;
|
||||
else if (strcasecmp (mode, "falling") == 0)
|
||||
fprintf (fd, "falling\n") ;
|
||||
else if (strcasecmp (mode, "both") == 0)
|
||||
fprintf (fd, "both\n") ;
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s: Invalid mode: %s. Should be none, rising, falling or both\n", argv [1], mode) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
// Change ownership so the current user can actually use it!
|
||||
|
||||
uid = getuid () ;
|
||||
gid = getgid () ;
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/value", pin) ;
|
||||
if (chown (fName, uid, gid) != 0)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to change ownership of the value file: %s\n", argv [1], strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
// Also change ownership of the edge file
|
||||
|
||||
sprintf (fName, "/sys/class/gpio/gpio%d/edge", pin) ;
|
||||
if (chown (fName, uid, gid) != 0)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to change ownership of the value file: %s\n", argv [1], strerror (errno)) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
fclose (fd) ;
|
||||
}
|
||||
|
||||
|
||||
@@ -218,6 +332,33 @@ void doUnexport (int argc, char *argv [])
|
||||
fclose (fd) ;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* doUnexportAll:
|
||||
* gpio unexportall
|
||||
* Un-Export all the GPIO pins.
|
||||
* This uses the /sys/class/gpio device interface.
|
||||
*********************************************************************************
|
||||
*/
|
||||
|
||||
void doUnexportall (int argc, char *argv [])
|
||||
{
|
||||
FILE *fd ;
|
||||
int pin ;
|
||||
|
||||
for (pin = 0 ; pin < 63 ; ++pin)
|
||||
{
|
||||
if ((fd = fopen ("/sys/class/gpio/unexport", "w")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to open GPIO export interface\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
fprintf (fd, "%d\n", pin) ;
|
||||
fclose (fd) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* doMode:
|
||||
* gpio mode pin mode ...
|
||||
@@ -381,11 +522,15 @@ int main (int argc, char *argv [])
|
||||
// Initial test for /sys/class/gpio operations:
|
||||
|
||||
/**/ if (strcasecmp (argv [1], "exports" ) == 0)
|
||||
{ doExports () ; return 0 ; }
|
||||
{ doExports () ; return 0 ; }
|
||||
else if (strcasecmp (argv [1], "export" ) == 0)
|
||||
{ doExport (argc, argv) ; return 0 ; }
|
||||
{ doExport (argc, argv) ; return 0 ; }
|
||||
else if (strcasecmp (argv [1], "edge" ) == 0)
|
||||
{ doEdge (argc, argv) ; return 0 ; }
|
||||
else if (strcasecmp (argv [1], "unexportall") == 0)
|
||||
{ doUnexportall (argc, argv) ; return 0 ; }
|
||||
else if (strcasecmp (argv [1], "unexport") == 0)
|
||||
{ doUnexport (argc, argv) ; return 0 ; }
|
||||
{ doUnexport (argc, argv) ; return 0 ; }
|
||||
|
||||
// Check for -g argument
|
||||
|
||||
@@ -402,6 +547,25 @@ int main (int argc, char *argv [])
|
||||
--argc ;
|
||||
wpMode = WPI_MODE_GPIO ;
|
||||
}
|
||||
|
||||
// Check for -p argument for PiFace
|
||||
|
||||
else if (strcasecmp (argv [1], "-p") == 0)
|
||||
{
|
||||
if (wiringPiSetupPiFaceForGpioProg () == -1)
|
||||
{
|
||||
fprintf (stderr, "%s: Unable to initialise PiFace.\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
for (i = 2 ; i < argc ; ++i)
|
||||
argv [i - 1] = argv [i] ;
|
||||
--argc ;
|
||||
wpMode = WPI_MODE_PIFACE ;
|
||||
}
|
||||
|
||||
// Default to wiringPi mode
|
||||
|
||||
else
|
||||
{
|
||||
if (wiringPiSetup () == -1)
|
||||
|
||||
Reference in New Issue
Block a user