Gordons Projects

--> Projects Top-Level GIT

7926296b412e1e9c21a875964726ffdbab4acc6a
[wiringPi] / wiringPi / wiringPi.h
1 /*
2  * wiringPi.h:
3  *      Arduino like Wiring library for the Raspberry Pi.
4  *      Copyright (c) 2012-2016 Gordon Henderson
5  ***********************************************************************
6  * This file is part of wiringPi:
7  *      https://projects.drogon.net/raspberry-pi/wiringpi/
8  *
9  *    wiringPi is free software: you can redistribute it and/or modify
10  *    it under the terms of the GNU Lesser General Public License as published by
11  *    the Free Software Foundation, either version 3 of the License, or
12  *    (at your option) any later version.
13  *
14  *    wiringPi is distributed in the hope that it will be useful,
15  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *    GNU Lesser General Public License for more details.
18  *
19  *    You should have received a copy of the GNU Lesser General Public License
20  *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
21  ***********************************************************************
22  */
23
24 #ifndef __WIRING_PI_H__
25 #define __WIRING_PI_H__
26
27 // C doesn't have true/false by default and I can never remember which
28 //      way round they are, so ...
29
30 #ifndef TRUE
31 #  define       TRUE    (1==1)
32 #  define       FALSE   (!TRUE)
33 #endif
34
35 // Handy defines
36
37 // wiringPi modes
38
39 #define WPI_MODE_PINS            0
40 #define WPI_MODE_GPIO            1
41 #define WPI_MODE_GPIO_SYS        2
42 #define WPI_MODE_PHYS            3
43 #define WPI_MODE_PIFACE          4
44 #define WPI_MODE_UNINITIALISED  -1
45
46 // Pin modes
47
48 #define INPUT                    0
49 #define OUTPUT                   1
50 #define PWM_OUTPUT               2
51 #define GPIO_CLOCK               3
52 #define SOFT_PWM_OUTPUT          4
53 #define SOFT_TONE_OUTPUT         5
54 #define PWM_TONE_OUTPUT          6
55
56 #define LOW                      0
57 #define HIGH                     1
58
59 // Pull up/down/none
60
61 #define PUD_OFF                  0
62 #define PUD_DOWN                 1
63 #define PUD_UP                   2
64
65 // PWM
66
67 #define PWM_MODE_MS             0
68 #define PWM_MODE_BAL            1
69
70 // Interrupt levels
71
72 #define INT_EDGE_SETUP          0
73 #define INT_EDGE_FALLING        1
74 #define INT_EDGE_RISING         2
75 #define INT_EDGE_BOTH           3
76
77 // Pi model types and version numbers
78 //      Intended for the GPIO program Use at your own risk.
79
80 #define PI_MODEL_A              0
81 #define PI_MODEL_B              1
82 #define PI_MODEL_AP             2
83 #define PI_MODEL_BP             3
84 #define PI_MODEL_2              4
85 #define PI_ALPHA                5
86 #define PI_MODEL_CM             6
87 #define PI_MODEL_07             7
88 #define PI_MODEL_3              8
89 #define PI_MODEL_ZERO           9
90
91 #define PI_VERSION_1            0
92 #define PI_VERSION_1_1          1
93 #define PI_VERSION_1_2          2
94 #define PI_VERSION_2            3
95
96 #define PI_MAKER_SONY           0
97 #define PI_MAKER_EGOMAN         1
98 #define PI_MAKER_EMBEST         2
99 #define PI_MAKER_UNKNOWN        3
100
101 extern const char *piModelNames    [16] ;
102 extern const char *piRevisionNames [16] ;
103 extern const char *piMakerNames    [16] ;
104 extern const int   piMemorySize    [ 8] ;
105
106
107 //      Intended for the GPIO program Use at your own risk.
108
109 // Threads
110
111 #define PI_THREAD(X)    void *X (void *dummy)
112
113 // Failure modes
114
115 #define WPI_FATAL       (1==1)
116 #define WPI_ALMOST      (1==2)
117
118
119 // wiringPiNodeStruct:
120 //      This describes additional device nodes in the extended wiringPi
121 //      2.0 scheme of things.
122 //      It's a simple linked list for now, but will hopefully migrate to 
123 //      a binary tree for efficiency reasons - but then again, the chances
124 //      of more than 1 or 2 devices being added are fairly slim, so who
125 //      knows....
126
127 struct wiringPiNodeStruct
128 {
129   int     pinBase ;
130   int     pinMax ;
131
132   int          fd ;     // Node specific
133   unsigned int data0 ;  //  ditto
134   unsigned int data1 ;  //  ditto
135   unsigned int data2 ;  //  ditto
136   unsigned int data3 ;  //  ditto
137
138   void   (*pinMode)         (struct wiringPiNodeStruct *node, int pin, int mode) ;
139   void   (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode) ;
140   int    (*digitalRead)     (struct wiringPiNodeStruct *node, int pin) ;
141   void   (*digitalWrite)    (struct wiringPiNodeStruct *node, int pin, int value) ;
142   void   (*pwmWrite)        (struct wiringPiNodeStruct *node, int pin, int value) ;
143   int    (*analogRead)      (struct wiringPiNodeStruct *node, int pin) ;
144   void   (*analogWrite)     (struct wiringPiNodeStruct *node, int pin, int value) ;
145
146   struct wiringPiNodeStruct *next ;
147 } ;
148
149 extern struct wiringPiNodeStruct *wiringPiNodes ;
150
151
152 // Function prototypes
153 //      c++ wrappers thanks to a comment by Nick Lott
154 //      (and others on the Raspberry Pi forums)
155
156 #ifdef __cplusplus
157 extern "C" {
158 #endif
159
160 // Data
161
162 // Internal
163
164 extern int wiringPiFailure (int fatal, const char *message, ...) ;
165
166 // Core wiringPi functions
167
168 extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ;
169 extern struct wiringPiNodeStruct *wiringPiNewNode  (int pinBase, int numPins) ;
170
171 extern int  wiringPiSetup       (void) ;
172 extern int  wiringPiSetupSys    (void) ;
173 extern int  wiringPiSetupGpio   (void) ;
174 extern int  wiringPiSetupPhys   (void) ;
175
176 extern void pinModeAlt          (int pin, int mode) ;
177 extern void pinMode             (int pin, int mode) ;
178 extern void pullUpDnControl     (int pin, int pud) ;
179 extern int  digitalRead         (int pin) ;
180 extern void digitalWrite        (int pin, int value) ;
181 extern void pwmWrite            (int pin, int value) ;
182 extern int  analogRead          (int pin) ;
183 extern void analogWrite         (int pin, int value) ;
184
185 // PiFace specifics 
186 //      (Deprecated)
187
188 extern int  wiringPiSetupPiFace (void) ;
189 extern int  wiringPiSetupPiFaceForGpioProg (void) ;     // Don't use this - for gpio program only
190
191 // On-Board Raspberry Pi hardware specific stuff
192
193 extern          int  piGpioLayout        (void) ;
194 extern          void piBoardId           (int *model, int *rev, int *mem, int *maker, int *overVolted) ;
195 extern          int  wpiPinToGpio        (int wpiPin) ;
196 extern          int  physPinToGpio       (int physPin) ;
197 extern          void setPadDrive         (int group, int value) ;
198 extern          int  getAlt              (int pin) ;
199 extern          void pwmToneWrite        (int pin, int freq) ;
200 extern          void digitalWriteByte    (int value) ;
201 extern unsigned int  digitalReadByte     (void) ;
202 extern          void pwmSetMode          (int mode) ;
203 extern          void pwmSetRange         (unsigned int range) ;
204 extern          void pwmSetClock         (int divisor) ;
205 extern          void gpioClockSet        (int pin, int freq) ;
206
207 // Interrupts
208 //      (Also Pi hardware specific)
209
210 extern int  waitForInterrupt    (int pin, int mS) ;
211 extern int  wiringPiISR         (int pin, int mode, void (*function)(void)) ;
212
213 // Threads
214
215 extern int  piThreadCreate      (void *(*fn)(void *)) ;
216 extern void piLock              (int key) ;
217 extern void piUnlock            (int key) ;
218
219 // Schedulling priority
220
221 extern int piHiPri (const int pri) ;
222
223 // Extras from arduino land
224
225 extern void         delay             (unsigned int howLong) ;
226 extern void         delayMicroseconds (unsigned int howLong) ;
227 extern unsigned int millis            (void) ;
228 extern unsigned int micros            (void) ;
229
230 #ifdef __cplusplus
231 }
232 #endif
233
234 #endif