wiringpi 2.0.0 → 2.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/ext/wiringpi/WiringPi/devLib/maxdetect.c +100 -27
  3. data/ext/wiringpi/WiringPi/devLib/maxdetect.h +0 -0
  4. data/ext/wiringpi/WiringPi/devLib/scrollPhat.c +430 -0
  5. data/ext/wiringpi/WiringPi/devLib/scrollPhat.h +39 -0
  6. data/ext/wiringpi/WiringPi/devLib/scrollPhatFont.h +544 -0
  7. data/ext/wiringpi/WiringPi/examples/PiFace/ladder.c +0 -0
  8. data/ext/wiringpi/WiringPi/examples/max31855.c +60 -0
  9. data/ext/wiringpi/WiringPi/examples/rht03.c +32 -15
  10. data/ext/wiringpi/WiringPi/examples/scrollPhat/scphat.c +230 -0
  11. data/ext/wiringpi/WiringPi/examples/scrollPhat/test.c +115 -0
  12. data/ext/wiringpi/WiringPi/gpio/gpio.c +88 -37
  13. data/ext/wiringpi/WiringPi/gpio/readall.c +41 -9
  14. data/ext/wiringpi/WiringPi/gpio/version.h +1 -1
  15. data/ext/wiringpi/WiringPi/wiringPi/ads1115.c +293 -0
  16. data/ext/wiringpi/WiringPi/wiringPi/ads1115.h +55 -0
  17. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +4 -9
  18. data/ext/wiringpi/WiringPi/wiringPi/max31855.c +41 -23
  19. data/ext/wiringpi/WiringPi/wiringPi/max5322.c +2 -2
  20. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +2 -2
  21. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +2 -2
  22. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +2 -2
  23. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +3 -4
  24. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +3 -4
  25. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +2 -2
  26. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +2 -2
  27. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +33 -18
  28. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +6 -6
  29. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +2 -2
  30. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +2 -2
  31. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +2 -2
  32. data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +2 -2
  33. data/ext/wiringpi/WiringPi/wiringPi/sr595.c +1 -1
  34. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +418 -132
  35. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +47 -37
  36. data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.c +38 -9
  37. data/ext/wiringpi/extconf.rb +26 -2
  38. data/ext/wiringpi/wiringpi_wrap.c +3456 -981
  39. metadata +9 -1
@@ -0,0 +1,55 @@
1
+ /*
2
+ * ads1115.c:
3
+ * Extend wiringPi with the ADS1115 I2C 16-bit ADC
4
+ * Copyright (c) 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
11
+ * published by the Free Software Foundation, either version 3 of the
12
+ * License, or (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
20
+ * License along with wiringPi.
21
+ * If not, see <http://www.gnu.org/licenses/>.
22
+ ***********************************************************************
23
+ */
24
+
25
+ // Constants for some of the internal functions
26
+
27
+ // Gain
28
+
29
+ #define ADS1115_GAIN_6 0
30
+ #define ADS1115_GAIN_4 1
31
+ #define ADS1115_GAIN_2 2
32
+ #define ADS1115_GAIN_1 3
33
+ #define ADS1115_GAIN_HALF 4
34
+ #define ADS1115_GAIN_QUARTER 5
35
+
36
+ // Data rate
37
+
38
+ #define ADS1115_DR_8 0
39
+ #define ADS1115_DR_16 1
40
+ #define ADS1115_DR_32 2
41
+ #define ADS1115_DR_64 3
42
+ #define ADS1115_DR_128 4
43
+ #define ADS1115_DR_250 5
44
+ #define ADS1115_DR_475 6
45
+ #define ADS1115_DR_860 7
46
+
47
+ #ifdef __cplusplus
48
+ extern "C" {
49
+ #endif
50
+
51
+ extern int ads1115Setup (int pinBase, int i2cAddress) ;
52
+
53
+ #ifdef __cplusplus
54
+ }
55
+ #endif
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * drcSerial.c:
3
3
  * Extend wiringPi with the DRC Serial protocol (e.g. to Arduino)
4
- * Copyright (c) 2013 Gordon Henderson
4
+ * Copyright (c) 2013-2016 Gordon Henderson
5
5
  ***********************************************************************
6
6
  * This file is part of wiringPi:
7
7
  * https://projects.drogon.net/raspberry-pi/wiringpi/
@@ -32,11 +32,6 @@
32
32
 
33
33
  #include "drcSerial.h"
34
34
 
35
- #ifndef TRUE
36
- # define TRUE (1==1)
37
- # define FALSE (1==2)
38
- #endif
39
-
40
35
 
41
36
  /*
42
37
  * myPinMode:
@@ -156,7 +151,7 @@ int drcSetupSerial (const int pinBase, const int numPins, const char *device, co
156
151
  struct wiringPiNodeStruct *node ;
157
152
 
158
153
  if ((fd = serialOpen (device, baud)) < 0)
159
- return wiringPiFailure (WPI_ALMOST, "Unable to open DRC device (%s): %s", device, strerror (errno)) ;
154
+ return FALSE ;
160
155
 
161
156
  delay (10) ; // May need longer if it's an Uno that reboots on the open...
162
157
 
@@ -184,7 +179,7 @@ int drcSetupSerial (const int pinBase, const int numPins, const char *device, co
184
179
  if (!ok)
185
180
  {
186
181
  serialClose (fd) ;
187
- return wiringPiFailure (WPI_FATAL, "Unable to communicate with DRC serial device") ;
182
+ return FALSE ;
188
183
  }
189
184
 
190
185
  node = wiringPiNewNode (pinBase, numPins) ;
@@ -197,5 +192,5 @@ int drcSetupSerial (const int pinBase, const int numPins, const char *device, co
197
192
  node->digitalWrite = myDigitalWrite ;
198
193
  node->pwmWrite = myPwmWrite ;
199
194
 
200
- return 0 ;
195
+ return TRUE ;
201
196
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * max31855.c:
3
3
  * Extend wiringPi with the max31855 SPI Analog to Digital convertor
4
- * Copyright (c) 2012-2013 Gordon Henderson
4
+ * Copyright (c) 2012-2015 Gordon Henderson
5
5
  ***********************************************************************
6
6
  * This file is part of wiringPi:
7
7
  * https://projects.drogon.net/raspberry-pi/wiringpi/
@@ -22,39 +22,57 @@
22
22
  ***********************************************************************
23
23
  */
24
24
 
25
+ #include <byteswap.h>
26
+ #include <stdint.h>
27
+
25
28
  #include <wiringPi.h>
26
29
  #include <wiringPiSPI.h>
27
30
 
28
31
  #include "max31855.h"
29
32
 
30
- /*
31
- * myAnalogRead:
32
- * Return the analog value of the given pin
33
- * Note: The chip really only has one read "channel", but we're faking it
34
- * here so we can read the error registers. Channel 0 will be the data
35
- * channel, and 1 is the error register code.
36
- * Note: Temperature returned is temp in C * 4, so divide result by 4
37
- *********************************************************************************
38
- */
39
-
40
33
  static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
41
34
  {
42
- unsigned int spiData ;
35
+ uint32_t spiData ;
43
36
  int temp ;
44
37
  int chan = pin - node->pinBase ;
45
38
 
46
39
  wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ;
47
40
 
48
- if (chan == 0) // Read temp in C
41
+ spiData = __bswap_32(spiData) ;
42
+
43
+ switch (chan)
49
44
  {
50
- spiData >>= 18 ;
51
- temp = spiData & 0x3FFF ; // Bottom 13 bits
52
- if ((spiData & 0x2000) != 0) // Negative
53
- temp = -temp ;
54
- return temp ;
45
+ case 0: // Existing read - return raw value * 4
46
+ spiData >>= 18 ;
47
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
48
+ if ((spiData & 0x2000) != 0) // Negative
49
+ temp = -temp ;
50
+
51
+ return temp ;
52
+
53
+ case 1: // Return error bits
54
+ return spiData & 0x7 ;
55
+
56
+ case 2: // Return temp in C * 10
57
+ spiData >>= 18 ;
58
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
59
+ if ((spiData & 0x2000) != 0) // Negative
60
+ temp = -temp ;
61
+
62
+ return (int)((((double)temp * 25) + 0.5) / 10.0) ;
63
+
64
+ case 3: // Return temp in F * 10
65
+ spiData >>= 18 ;
66
+ temp = spiData & 0x1FFF ; // Bottom 13 bits
67
+ if ((spiData & 0x2000) != 0) // Negative
68
+ temp = -temp ;
69
+
70
+ return (int)((((((double)temp * 0.25 * 9.0 / 5.0) + 32.0) * 100.0) + 0.5) / 10.0) ;
71
+
72
+ default: // Who knows...
73
+ return 0 ;
74
+
55
75
  }
56
- else // Return error bits
57
- return spiData & 0x7 ;
58
76
  }
59
77
 
60
78
 
@@ -70,12 +88,12 @@ int max31855Setup (const int pinBase, int spiChannel)
70
88
  struct wiringPiNodeStruct *node ;
71
89
 
72
90
  if (wiringPiSPISetup (spiChannel, 5000000) < 0) // 5MHz - prob 4 on the Pi
73
- return -1 ;
91
+ return FALSE ;
74
92
 
75
- node = wiringPiNewNode (pinBase, 2) ;
93
+ node = wiringPiNewNode (pinBase, 4) ;
76
94
 
77
95
  node->fd = spiChannel ;
78
96
  node->analogRead = myAnalogRead ;
79
97
 
80
- return 0 ;
98
+ return TRUE ;
81
99
  }
@@ -66,7 +66,7 @@ int max5322Setup (const int pinBase, int spiChannel)
66
66
  unsigned char spiData [2] ;
67
67
 
68
68
  if (wiringPiSPISetup (spiChannel, 8000000) < 0) // 10MHz Max
69
- return -1 ;
69
+ return FALSE ;
70
70
 
71
71
  node = wiringPiNewNode (pinBase, 2) ;
72
72
 
@@ -80,5 +80,5 @@ int max5322Setup (const int pinBase, int spiChannel)
80
80
 
81
81
  wiringPiSPIDataRW (node->fd, spiData, 2) ;
82
82
 
83
- return 0 ;
83
+ return TRUE ;
84
84
  }
@@ -132,7 +132,7 @@ int mcp23008Setup (const int pinBase, const int i2cAddress)
132
132
  struct wiringPiNodeStruct *node ;
133
133
 
134
134
  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
135
- return fd ;
135
+ return FALSE ;
136
136
 
137
137
  wiringPiI2CWriteReg8 (fd, MCP23x08_IOCON, IOCON_INIT) ;
138
138
 
@@ -145,5 +145,5 @@ int mcp23008Setup (const int pinBase, const int i2cAddress)
145
145
  node->digitalWrite = myDigitalWrite ;
146
146
  node->data2 = wiringPiI2CReadReg8 (fd, MCP23x08_OLAT) ;
147
147
 
148
- return 0 ;
148
+ return TRUE ;
149
149
  }
@@ -146,7 +146,7 @@ int mcp23016Setup (const int pinBase, const int i2cAddress)
146
146
  struct wiringPiNodeStruct *node ;
147
147
 
148
148
  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
149
- return fd ;
149
+ return FALSE ;
150
150
 
151
151
  wiringPiI2CWriteReg8 (fd, MCP23016_IOCON0, IOCON_INIT) ;
152
152
  wiringPiI2CWriteReg8 (fd, MCP23016_IOCON1, IOCON_INIT) ;
@@ -160,5 +160,5 @@ int mcp23016Setup (const int pinBase, const int i2cAddress)
160
160
  node->data2 = wiringPiI2CReadReg8 (fd, MCP23016_OLAT0) ;
161
161
  node->data3 = wiringPiI2CReadReg8 (fd, MCP23016_OLAT1) ;
162
162
 
163
- return 0 ;
163
+ return TRUE ;
164
164
  }
@@ -177,7 +177,7 @@ int mcp23017Setup (const int pinBase, const int i2cAddress)
177
177
  struct wiringPiNodeStruct *node ;
178
178
 
179
179
  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
180
- return fd ;
180
+ return FALSE ;
181
181
 
182
182
  wiringPiI2CWriteReg8 (fd, MCP23x17_IOCON, IOCON_INIT) ;
183
183
 
@@ -191,5 +191,5 @@ int mcp23017Setup (const int pinBase, const int i2cAddress)
191
191
  node->data2 = wiringPiI2CReadReg8 (fd, MCP23x17_OLATA) ;
192
192
  node->data3 = wiringPiI2CReadReg8 (fd, MCP23x17_OLATB) ;
193
193
 
194
- return 0 ;
194
+ return TRUE ;
195
195
  }
@@ -167,11 +167,10 @@ static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
167
167
 
168
168
  int mcp23s08Setup (const int pinBase, const int spiPort, const int devId)
169
169
  {
170
- int x ;
171
170
  struct wiringPiNodeStruct *node ;
172
171
 
173
- if ((x = wiringPiSPISetup (spiPort, MCP_SPEED)) < 0)
174
- return x ;
172
+ if (wiringPiSPISetup (spiPort, MCP_SPEED) < 0)
173
+ return FALSE ;
175
174
 
176
175
  writeByte (spiPort, devId, MCP23x08_IOCON, IOCON_INIT) ;
177
176
 
@@ -185,5 +184,5 @@ int mcp23s08Setup (const int pinBase, const int spiPort, const int devId)
185
184
  node->digitalWrite = myDigitalWrite ;
186
185
  node->data2 = readByte (spiPort, devId, MCP23x08_OLAT) ;
187
186
 
188
- return 0 ;
187
+ return TRUE ;
189
188
  }
@@ -212,11 +212,10 @@ static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
212
212
 
213
213
  int mcp23s17Setup (const int pinBase, const int spiPort, const int devId)
214
214
  {
215
- int x ;
216
215
  struct wiringPiNodeStruct *node ;
217
216
 
218
- if ((x = wiringPiSPISetup (spiPort, MCP_SPEED)) < 0)
219
- return x ;
217
+ if (wiringPiSPISetup (spiPort, MCP_SPEED) < 0)
218
+ return FALSE ;
220
219
 
221
220
  writeByte (spiPort, devId, MCP23x17_IOCON, IOCON_INIT | IOCON_HAEN) ;
222
221
  writeByte (spiPort, devId, MCP23x17_IOCONB, IOCON_INIT | IOCON_HAEN) ;
@@ -232,5 +231,5 @@ int mcp23s17Setup (const int pinBase, const int spiPort, const int devId)
232
231
  node->data2 = readByte (spiPort, devId, MCP23x17_OLATA) ;
233
232
  node->data3 = readByte (spiPort, devId, MCP23x17_OLATB) ;
234
233
 
235
- return 0 ;
234
+ return TRUE ;
236
235
  }
@@ -65,12 +65,12 @@ int mcp3002Setup (const int pinBase, int spiChannel)
65
65
  struct wiringPiNodeStruct *node ;
66
66
 
67
67
  if (wiringPiSPISetup (spiChannel, 1000000) < 0)
68
- return -1 ;
68
+ return FALSE ;
69
69
 
70
70
  node = wiringPiNewNode (pinBase, 2) ;
71
71
 
72
72
  node->fd = spiChannel ;
73
73
  node->analogRead = myAnalogRead ;
74
74
 
75
- return 0 ;
75
+ return TRUE ;
76
76
  }
@@ -65,12 +65,12 @@ int mcp3004Setup (const int pinBase, int spiChannel)
65
65
  struct wiringPiNodeStruct *node ;
66
66
 
67
67
  if (wiringPiSPISetup (spiChannel, 1000000) < 0)
68
- return -1 ;
68
+ return FALSE ;
69
69
 
70
70
  node = wiringPiNewNode (pinBase, 8) ;
71
71
 
72
72
  node->fd = spiChannel ;
73
73
  node->analogRead = myAnalogRead ;
74
74
 
75
- return 0 ;
75
+ return TRUE ;
76
76
  }
@@ -1,8 +1,9 @@
1
1
  /*
2
2
  * mcp3422.c:
3
- * Extend wiringPi with the MCP3422 I2C ADC chip
4
- * Also works for the MCP3423 and MCP3224 (4 channel) chips
5
- * Copyright (c) 2013 Gordon Henderson
3
+ * Extend wiringPi with the MCP3422/3/4 I2C ADC chip
4
+ * This code assumes single-ended mode only.
5
+ * Tested on actual hardware: 20th Feb 2016.
6
+ * Copyright (c) 2013-2016 Gordon Henderson
6
7
  ***********************************************************************
7
8
  * This file is part of wiringPi:
8
9
  * https://projects.drogon.net/raspberry-pi/wiringpi/
@@ -29,7 +30,6 @@
29
30
  #include <stdint.h>
30
31
  #include <fcntl.h>
31
32
  #include <sys/ioctl.h>
32
- #include <linux/spi/spidev.h>
33
33
 
34
34
  #include <wiringPi.h>
35
35
  #include <wiringPiI2C.h>
@@ -37,6 +37,23 @@
37
37
  #include "mcp3422.h"
38
38
 
39
39
 
40
+ /*
41
+ * waitForConversion:
42
+ * Common code to wait for the ADC to finish conversion
43
+ *********************************************************************************
44
+ */
45
+
46
+ void waitForConversion (int fd, unsigned char *buffer, int n)
47
+ {
48
+ for (;;)
49
+ {
50
+ read (fd, buffer, n) ;
51
+ if ((buffer [n-1] & 0x80) == 0)
52
+ break ;
53
+ delay (1) ;
54
+ }
55
+ }
56
+
40
57
  /*
41
58
  * myAnalogRead:
42
59
  * Read a channel from the device
@@ -48,37 +65,34 @@ int myAnalogRead (struct wiringPiNodeStruct *node, int chan)
48
65
  unsigned char config ;
49
66
  unsigned char buffer [4] ;
50
67
  int value = 0 ;
68
+ int realChan = (chan & 3) - node->pinBase ;
51
69
 
52
70
  // One-shot mode, trigger plus the other configs.
53
71
 
54
- config = 0x80 | ((chan - node->pinBase) << 5) | (node->data0 << 2) | (node->data1) ;
72
+ config = 0x80 | (realChan << 5) | (node->data0 << 2) | (node->data1) ;
55
73
 
56
74
  wiringPiI2CWrite (node->fd, config) ;
57
75
 
58
76
  switch (node->data0) // Sample rate
59
77
  {
60
78
  case MCP3422_SR_3_75: // 18 bits
61
- delay (270) ;
62
- read (node->fd, buffer, 4) ;
63
- value = ((buffer [0] & 3) << 16) | (buffer [1] << 8) | buffer [0] ;
79
+ waitForConversion (node->fd, &buffer [0], 4) ;
80
+ value = ((buffer [0] & 3) << 16) | (buffer [1] << 8) | buffer [2] ;
64
81
  break ;
65
82
 
66
83
  case MCP3422_SR_15: // 16 bits
67
- delay ( 70) ;
68
- read (node->fd, buffer, 3) ;
84
+ waitForConversion (node->fd, buffer, 3) ;
69
85
  value = (buffer [0] << 8) | buffer [1] ;
70
86
  break ;
71
87
 
72
88
  case MCP3422_SR_60: // 14 bits
73
- delay ( 17) ;
74
- read (node->fd, buffer, 3) ;
89
+ waitForConversion (node->fd, buffer, 3) ;
75
90
  value = ((buffer [0] & 0x3F) << 8) | buffer [1] ;
76
91
  break ;
77
92
 
78
- case MCP3422_SR_240: // 12 bits
79
- delay ( 5) ;
80
- read (node->fd, buffer, 3) ;
81
- value = ((buffer [0] & 0x0F) << 8) | buffer [0] ;
93
+ case MCP3422_SR_240: // 12 bits - default
94
+ waitForConversion (node->fd, buffer, 3) ;
95
+ value = ((buffer [0] & 0x0F) << 8) | buffer [1] ;
82
96
  break ;
83
97
  }
84
98
 
@@ -98,13 +112,14 @@ int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain)
98
112
  struct wiringPiNodeStruct *node ;
99
113
 
100
114
  if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
101
- return fd ;
115
+ return FALSE ;
102
116
 
103
117
  node = wiringPiNewNode (pinBase, 4) ;
104
118
 
119
+ node->fd = fd ;
105
120
  node->data0 = sampleRate ;
106
121
  node->data1 = gain ;
107
122
  node->analogRead = myAnalogRead ;
108
123
 
109
- return 0 ;
124
+ return TRUE ;
110
125
  }