Gordons Projects

--> Projects Top-Level GIT

7b9605ff63eed3c043905bdebf9aa89e460a2ef0
[wiringPi] / wiringPi / wiringPi.h
1 /*
2  * wiringPi:
3  *      Arduino compatable (ish) Wiring library for the Raspberry Pi
4  *      Copyright (c) 2012 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 // Handy defines
28
29 // wiringPi modes
30
31 #define WPI_MODE_PINS            0
32 #define WPI_MODE_GPIO            1
33 #define WPI_MODE_GPIO_SYS        2
34 #define WPI_MODE_PHYS            3
35 #define WPI_MODE_PIFACE          4
36 #define WPI_MODE_UNINITIALISED  -1
37
38 // Pin modes
39
40 #define INPUT                    0
41 #define OUTPUT                   1
42 #define PWM_OUTPUT               2
43 #define GPIO_CLOCK               3
44 #define SOFT_PWM_OUTPUT          4
45 #define SOFT_TONE_OUTPUT         5
46 #define PWM_TONE_OUTPUT          6
47
48 #define LOW                      0
49 #define HIGH                     1
50
51 // Pull up/down/none
52
53 #define PUD_OFF                  0
54 #define PUD_DOWN                 1
55 #define PUD_UP                   2
56
57 // PWM
58
59 #define PWM_MODE_MS             0
60 #define PWM_MODE_BAL            1
61
62 // Interrupt levels
63
64 #define INT_EDGE_SETUP          0
65 #define INT_EDGE_FALLING        1
66 #define INT_EDGE_RISING         2
67 #define INT_EDGE_BOTH           3
68
69 // Pi model types and version numbers
70 //      Intended for the GPIO program Use at your own risk.
71
72 #define PI_MODEL_A              0
73 #define PI_MODEL_B              1
74 #define PI_MODEL_AP             2
75 #define PI_MODEL_BP             3
76 #define PI_MODEL_2              4
77 #define PI_ALPHA                5
78 #define PI_MODEL_CM             6
79 #define PI_MODEL_07             7
80 #define PI_MODEL_08             8
81 #define PI_MODEL_ZERO           9
82
83 #define PI_VERSION_1            0
84 #define PI_VERSION_1_1          1
85 #define PI_VERSION_1_2          2
86 #define PI_VERSION_2            3
87
88 #define PI_MAKER_SONY           0
89 #define PI_MAKER_EGOMAN         1
90 #define PI_MAKER_MBEST          2
91 #define PI_MAKER_UNKNOWN        3
92
93 extern const char *piModelNames    [16] ;
94 extern const char *piRevisionNames [16] ;
95 extern const char *piMakerNames    [16] ;
96 extern const int   piMemorySize    [ 8] ;
97
98
99 //      Intended for the GPIO program Use at your own risk.
100
101 // Threads
102
103 #define PI_THREAD(X)    void *X (void *dummy)
104
105 // Failure modes
106
107 #define WPI_FATAL       (1==1)
108 #define WPI_ALMOST      (1==2)
109
110
111 // wiringPiNodeStruct:
112 //      This describes additional device nodes in the extended wiringPi
113 //      2.0 scheme of things.
114 //      It's a simple linked list for now, but will hopefully migrate to 
115 //      a binary tree for efficiency reasons - but then again, the chances
116 //      of more than 1 or 2 devices being added are fairly slim, so who
117 //      knows....
118
119 struct wiringPiNodeStruct
120 {
121   int     pinBase ;
122   int     pinMax ;
123
124   int          fd ;     // Node specific
125   unsigned int data0 ;  //  ditto
126   unsigned int data1 ;  //  ditto
127   unsigned int data2 ;  //  ditto
128   unsigned int data3 ;  //  ditto
129
130   void   (*pinMode)         (struct wiringPiNodeStruct *node, int pin, int mode) ;
131   void   (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode) ;
132   int    (*digitalRead)     (struct wiringPiNodeStruct *node, int pin) ;
133   void   (*digitalWrite)    (struct wiringPiNodeStruct *node, int pin, int value) ;
134   void   (*pwmWrite)        (struct wiringPiNodeStruct *node, int pin, int value) ;
135   int    (*analogRead)      (struct wiringPiNodeStruct *node, int pin) ;
136   void   (*analogWrite)     (struct wiringPiNodeStruct *node, int pin, int value) ;
137
138   struct wiringPiNodeStruct *next ;
139 } ;
140
141 extern struct wiringPiNodeStruct *wiringPiNodes ;
142
143
144 // Function prototypes
145 //      c++ wrappers thanks to a comment by Nick Lott
146 //      (and others on the Raspberry Pi forums)
147
148 #ifdef __cplusplus
149 extern "C" {
150 #endif
151
152 // Data
153
154 // Internal
155
156 extern int wiringPiFailure (int fatal, const char *message, ...) ;
157
158 // Core wiringPi functions
159
160 extern struct wiringPiNodeStruct *wiringPiFindNode (int pin) ;
161 extern struct wiringPiNodeStruct *wiringPiNewNode  (int pinBase, int numPins) ;
162
163 extern int  wiringPiSetup       (void) ;
164 extern int  wiringPiSetupSys    (void) ;
165 extern int  wiringPiSetupGpio   (void) ;
166 extern int  wiringPiSetupPhys   (void) ;
167
168 extern void pinModeAlt          (int pin, int mode) ;
169 extern void pinMode             (int pin, int mode) ;
170 extern void pullUpDnControl     (int pin, int pud) ;
171 extern int  digitalRead         (int pin) ;
172 extern void digitalWrite        (int pin, int value) ;
173 extern void pwmWrite            (int pin, int value) ;
174 extern int  analogRead          (int pin) ;
175 extern void analogWrite         (int pin, int value) ;
176
177 // PiFace specifics 
178 //      (Deprecated)
179
180 extern int  wiringPiSetupPiFace (void) ;
181 extern int  wiringPiSetupPiFaceForGpioProg (void) ;     // Don't use this - for gpio program only
182
183 // On-Board Raspberry Pi hardware specific stuff
184
185 extern int  piBoardRev          (void) ;
186 extern void piBoardId           (int *model, int *rev, int *mem, int *maker, int *overVolted) ;
187 extern int  wpiPinToGpio        (int wpiPin) ;
188 extern int  physPinToGpio       (int physPin) ;
189 extern void setPadDrive         (int group, int value) ;
190 extern int  getAlt              (int pin) ;
191 extern void pwmToneWrite        (int pin, int freq) ;
192 extern void digitalWriteByte    (int value) ;
193 extern void pwmSetMode          (int mode) ;
194 extern void pwmSetRange         (unsigned int range) ;
195 extern void pwmSetClock         (int divisor) ;
196 extern void gpioClockSet        (int pin, int freq) ;
197
198 // Interrupts
199 //      (Also Pi hardware specific)
200
201 extern int  waitForInterrupt    (int pin, int mS) ;
202 extern int  wiringPiISR         (int pin, int mode, void (*function)(void)) ;
203
204 // Threads
205
206 extern int  piThreadCreate      (void *(*fn)(void *)) ;
207 extern void piLock              (int key) ;
208 extern void piUnlock            (int key) ;
209
210 // Schedulling priority
211
212 extern int piHiPri (const int pri) ;
213
214 // Extras from arduino land
215
216 extern void         delay             (unsigned int howLong) ;
217 extern void         delayMicroseconds (unsigned int howLong) ;
218 extern unsigned int millis            (void) ;
219 extern unsigned int micros            (void) ;
220
221 #ifdef __cplusplus
222 }
223 #endif
224
225 #endif