wiringpi-ruby 2.0.0 → 2.1.3

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/ext/wiringpi/WiringPi/devLib/ds1302.c +240 -0
  3. data/ext/wiringpi/WiringPi/devLib/ds1302.h +44 -0
  4. data/ext/wiringpi/WiringPi/devLib/font.h +2577 -0
  5. data/ext/wiringpi/WiringPi/devLib/gertboard.c +164 -0
  6. data/ext/wiringpi/WiringPi/devLib/gertboard.h +45 -0
  7. data/ext/wiringpi/WiringPi/devLib/lcd.c +495 -0
  8. data/ext/wiringpi/WiringPi/devLib/lcd.h +52 -0
  9. data/ext/wiringpi/WiringPi/devLib/lcd128x64.c +673 -0
  10. data/ext/wiringpi/WiringPi/devLib/lcd128x64.h +39 -0
  11. data/ext/wiringpi/WiringPi/devLib/maxdetect.c +238 -0
  12. data/ext/wiringpi/WiringPi/devLib/maxdetect.h +40 -0
  13. data/ext/wiringpi/WiringPi/devLib/piFace.c +112 -0
  14. data/ext/wiringpi/WiringPi/devLib/piFace.h +32 -0
  15. data/ext/wiringpi/WiringPi/devLib/piFaceOld.c +177 -0
  16. data/ext/wiringpi/WiringPi/devLib/piGlow.c +118 -0
  17. data/ext/wiringpi/WiringPi/devLib/piGlow.h +45 -0
  18. data/ext/wiringpi/WiringPi/devLib/piNes.c +113 -0
  19. data/ext/wiringpi/WiringPi/devLib/piNes.h +45 -0
  20. data/ext/wiringpi/WiringPi/devLib/scrollPhat.c +430 -0
  21. data/ext/wiringpi/WiringPi/devLib/scrollPhat.h +39 -0
  22. data/ext/wiringpi/WiringPi/devLib/scrollPhatFont.h +544 -0
  23. data/ext/wiringpi/WiringPi/examples/Gertboard/7segments.c +221 -0
  24. data/ext/wiringpi/WiringPi/examples/Gertboard/buttons.c +83 -0
  25. data/ext/wiringpi/WiringPi/examples/Gertboard/gertboard.c +96 -0
  26. data/ext/wiringpi/WiringPi/examples/Gertboard/record.c +60 -0
  27. data/ext/wiringpi/WiringPi/examples/Gertboard/temperature.c +78 -0
  28. data/ext/wiringpi/WiringPi/examples/Gertboard/voltmeter.c +73 -0
  29. data/ext/wiringpi/WiringPi/examples/Gertboard/vumeter.c +152 -0
  30. data/ext/wiringpi/WiringPi/examples/PiFace/blink.c +59 -0
  31. data/ext/wiringpi/WiringPi/examples/PiFace/buttons.c +103 -0
  32. data/ext/wiringpi/WiringPi/examples/PiFace/ladder.c +337 -0
  33. data/ext/wiringpi/WiringPi/examples/PiFace/metro.c +111 -0
  34. data/ext/wiringpi/WiringPi/examples/PiFace/motor.c +120 -0
  35. data/ext/wiringpi/WiringPi/examples/PiFace/reaction.c +194 -0
  36. data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow0.c +51 -0
  37. data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow1.c +258 -0
  38. data/ext/wiringpi/WiringPi/examples/PiGlow/piglow.c +176 -0
  39. data/ext/wiringpi/WiringPi/examples/blink-thread.c +61 -0
  40. data/ext/wiringpi/WiringPi/examples/blink.c +48 -0
  41. data/ext/wiringpi/WiringPi/examples/blink12.c +111 -0
  42. data/ext/wiringpi/WiringPi/examples/blink12drcs.c +125 -0
  43. data/ext/wiringpi/WiringPi/examples/blink6drcs.c +115 -0
  44. data/ext/wiringpi/WiringPi/examples/blink8-drcn.c +61 -0
  45. data/ext/wiringpi/WiringPi/examples/blink8.c +57 -0
  46. data/ext/wiringpi/WiringPi/examples/clock.c +201 -0
  47. data/ext/wiringpi/WiringPi/examples/delayTest.c +102 -0
  48. data/ext/wiringpi/WiringPi/examples/ds1302.c +238 -0
  49. data/ext/wiringpi/WiringPi/examples/header.h +23 -0
  50. data/ext/wiringpi/WiringPi/examples/isr-osc.c +118 -0
  51. data/ext/wiringpi/WiringPi/examples/isr.c +110 -0
  52. data/ext/wiringpi/WiringPi/examples/lcd-adafruit.c +347 -0
  53. data/ext/wiringpi/WiringPi/examples/lcd.c +286 -0
  54. data/ext/wiringpi/WiringPi/examples/lowPower.c +68 -0
  55. data/ext/wiringpi/WiringPi/examples/max31855.c +60 -0
  56. data/ext/wiringpi/WiringPi/examples/nes.c +67 -0
  57. data/ext/wiringpi/WiringPi/examples/okLed.c +82 -0
  58. data/ext/wiringpi/WiringPi/examples/pwm.c +58 -0
  59. data/ext/wiringpi/WiringPi/examples/q2w/binary.c +79 -0
  60. data/ext/wiringpi/WiringPi/examples/q2w/blink-io.c +61 -0
  61. data/ext/wiringpi/WiringPi/examples/q2w/blink.c +50 -0
  62. data/ext/wiringpi/WiringPi/examples/q2w/bright.c +59 -0
  63. data/ext/wiringpi/WiringPi/examples/q2w/button.c +63 -0
  64. data/ext/wiringpi/WiringPi/examples/q2w/volts.c +62 -0
  65. data/ext/wiringpi/WiringPi/examples/rht03.c +86 -0
  66. data/ext/wiringpi/WiringPi/examples/scrollPhat/scphat.c +230 -0
  67. data/ext/wiringpi/WiringPi/examples/scrollPhat/test.c +115 -0
  68. data/ext/wiringpi/WiringPi/examples/serialRead.c +48 -0
  69. data/ext/wiringpi/WiringPi/examples/serialTest.c +75 -0
  70. data/ext/wiringpi/WiringPi/examples/servo.c +57 -0
  71. data/ext/wiringpi/WiringPi/examples/softPwm.c +89 -0
  72. data/ext/wiringpi/WiringPi/examples/softTone.c +54 -0
  73. data/ext/wiringpi/WiringPi/examples/speed.c +95 -0
  74. data/ext/wiringpi/WiringPi/examples/spiSpeed.c +118 -0
  75. data/ext/wiringpi/WiringPi/examples/wfi.c +161 -0
  76. data/ext/wiringpi/WiringPi/gpio/gpio.c +1538 -0
  77. data/ext/wiringpi/WiringPi/gpio/readall.c +403 -0
  78. data/ext/wiringpi/WiringPi/version.h +3 -0
  79. data/ext/wiringpi/WiringPi/wiringPi/ads1115.c +293 -0
  80. data/ext/wiringpi/WiringPi/wiringPi/ads1115.h +55 -0
  81. data/ext/wiringpi/WiringPi/wiringPi/bmp180.c +237 -0
  82. data/ext/wiringpi/WiringPi/wiringPi/bmp180.h +34 -0
  83. data/ext/wiringpi/WiringPi/wiringPi/drcNet.c +405 -0
  84. data/ext/wiringpi/WiringPi/wiringPi/drcNet.h +42 -0
  85. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +196 -0
  86. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.h +33 -0
  87. data/ext/wiringpi/WiringPi/wiringPi/ds18b20.c +146 -0
  88. data/ext/wiringpi/WiringPi/wiringPi/ds18b20.h +34 -0
  89. data/ext/wiringpi/WiringPi/wiringPi/htu21d.c +150 -0
  90. data/ext/wiringpi/WiringPi/wiringPi/htu21d.h +34 -0
  91. data/ext/wiringpi/WiringPi/wiringPi/max31855.c +99 -0
  92. data/ext/wiringpi/WiringPi/wiringPi/max31855.h +33 -0
  93. data/ext/wiringpi/WiringPi/wiringPi/max5322.c +84 -0
  94. data/ext/wiringpi/WiringPi/wiringPi/max5322.h +33 -0
  95. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +149 -0
  96. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.h +33 -0
  97. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +164 -0
  98. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.h +33 -0
  99. data/ext/wiringpi/WiringPi/wiringPi/mcp23016reg.h +48 -0
  100. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +195 -0
  101. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.h +33 -0
  102. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +188 -0
  103. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.h +33 -0
  104. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +235 -0
  105. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.h +33 -0
  106. data/ext/wiringpi/WiringPi/wiringPi/mcp23x08.h +73 -0
  107. data/ext/wiringpi/WiringPi/wiringPi/mcp23x0817.h +87 -0
  108. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +76 -0
  109. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.h +33 -0
  110. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +76 -0
  111. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.h +33 -0
  112. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +125 -0
  113. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +43 -0
  114. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +76 -0
  115. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.h +33 -0
  116. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +126 -0
  117. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.h +33 -0
  118. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +90 -0
  119. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.h +33 -0
  120. data/ext/wiringpi/WiringPi/wiringPi/piHiPri.c +51 -0
  121. data/ext/wiringpi/WiringPi/wiringPi/piThread.c +63 -0
  122. data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.c +95 -0
  123. data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.h +26 -0
  124. data/ext/wiringpi/WiringPi/wiringPi/rht03.c +252 -0
  125. data/ext/wiringpi/WiringPi/wiringPi/rht03.h +25 -0
  126. data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +75 -0
  127. data/ext/wiringpi/WiringPi/wiringPi/sn3218.h +33 -0
  128. data/ext/wiringpi/WiringPi/wiringPi/softPwm.c +186 -0
  129. data/ext/wiringpi/WiringPi/wiringPi/softPwm.h +35 -0
  130. data/ext/wiringpi/WiringPi/wiringPi/softServo.c +211 -0
  131. data/ext/wiringpi/WiringPi/wiringPi/softServo.h +35 -0
  132. data/ext/wiringpi/WiringPi/wiringPi/softTone.c +150 -0
  133. data/ext/wiringpi/WiringPi/wiringPi/softTone.h +39 -0
  134. data/ext/wiringpi/WiringPi/wiringPi/sr595.c +109 -0
  135. data/ext/wiringpi/WiringPi/wiringPi/sr595.h +34 -0
  136. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +2507 -0
  137. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +269 -0
  138. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.c +233 -0
  139. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.h +42 -0
  140. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.c +144 -0
  141. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.h +36 -0
  142. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.c +225 -0
  143. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.h +38 -0
  144. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.c +83 -0
  145. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.h +41 -0
  146. data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.c +928 -0
  147. data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.h +26 -0
  148. data/ext/wiringpi/WiringPi/wiringPiD/daemonise.c +82 -0
  149. data/ext/wiringpi/WiringPi/wiringPiD/daemonise.h +9 -0
  150. data/ext/wiringpi/WiringPi/wiringPiD/drcNetCmd.h +43 -0
  151. data/ext/wiringpi/WiringPi/wiringPiD/network.c +330 -0
  152. data/ext/wiringpi/WiringPi/wiringPiD/network.h +31 -0
  153. data/ext/wiringpi/WiringPi/wiringPiD/runRemote.c +126 -0
  154. data/ext/wiringpi/WiringPi/wiringPiD/runRemote.h +29 -0
  155. data/ext/wiringpi/WiringPi/wiringPiD/wiringpid.c +382 -0
  156. data/ext/wiringpi/wiringpi_wrap.c +636 -219
  157. data/lib/wiringpi.rb +25 -12
  158. data/lib/wiringpi/gpio.rb +90 -83
  159. data/lib/wiringpi/i2c.rb +29 -22
  160. data/lib/wiringpi/modules/mcp23017.rb +15 -0
  161. data/lib/wiringpi/modules/mcp23s17.rb +16 -0
  162. data/lib/wiringpi/scrollphat.rb +14 -14
  163. data/lib/wiringpi/serial.rb +8 -18
  164. data/lib/wiringpi/spi.rb +14 -11
  165. data/lib/wiringpi/watch.rb +24 -0
  166. metadata +160 -4
  167. data/lib/wiringpi/event.rb +0 -21
  168. data/lib/wiringpi/mcp23x17.rb +0 -31
@@ -0,0 +1,150 @@
1
+ /*
2
+ * htu21d.c:
3
+ * Extend wiringPi with the HTU21D I2C humidity and Temperature
4
+ * sensor. This is used in the Pi Weather station.
5
+ * Copyright (c) 2016 Gordon Henderson
6
+ ***********************************************************************
7
+ * This file is part of wiringPi:
8
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
9
+ *
10
+ * wiringPi is free software: you can redistribute it and/or modify
11
+ * it under the terms of the GNU Lesser General Public License as
12
+ * published by the Free Software Foundation, either version 3 of the
13
+ * License, or (at your option) any later version.
14
+ *
15
+ * wiringPi is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU Lesser General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU Lesser General Public
21
+ * License along with wiringPi.
22
+ * If not, see <http://www.gnu.org/licenses/>.
23
+ ***********************************************************************
24
+ */
25
+
26
+ #include <unistd.h>
27
+ #include <stdint.h>
28
+ #include <stdio.h>
29
+ #include <math.h>
30
+
31
+ #include "wiringPi.h"
32
+ #include "wiringPiI2C.h"
33
+
34
+ #include "htu21d.h"
35
+
36
+ #define DEBUG
37
+ #undef FAKE_SENSOR
38
+
39
+ #define I2C_ADDRESS 0x40
40
+
41
+ int checksum (UNU uint8_t data [4])
42
+ {
43
+ return TRUE ;
44
+ }
45
+
46
+
47
+
48
+ /*
49
+ * myAnalogRead:
50
+ *********************************************************************************
51
+ */
52
+
53
+ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
54
+ {
55
+ int chan = pin - node->pinBase ;
56
+ int fd = node->fd ;
57
+ uint8_t data [4] ;
58
+ uint32_t sTemp, sHumid ;
59
+ double fTemp, fHumid ;
60
+ int cTemp, cHumid ;
61
+
62
+ /**/ if (chan == 0) // Read Temperature
63
+ {
64
+
65
+ // Send read temperature command:
66
+
67
+ data [0] = 0xF3 ;
68
+ if (write (fd, data, 1) != 1)
69
+ return -9999 ;
70
+
71
+ // Wait then read the data
72
+
73
+ delay (50) ;
74
+ if (read (fd, data, 3) != 3)
75
+ return -9998 ;
76
+
77
+ if (!checksum (data))
78
+ return -9997 ;
79
+
80
+ // Do the calculation
81
+
82
+ sTemp = (data [0] << 8) | data [1] ;
83
+ fTemp = -48.85 + 175.72 * (double)sTemp / 63356.0 ;
84
+ cTemp = (int)rint (((100.0 * fTemp) + 0.5) / 10.0) ;
85
+ return cTemp ;
86
+ }
87
+ else if (chan == 1) // humidity
88
+ {
89
+ // Send read humidity command:
90
+
91
+ data [0] = 0xF5 ;
92
+ if (write (fd, data, 1) != 1)
93
+ return -9999 ;
94
+
95
+ // Wait then read the data
96
+
97
+ delay (50) ;
98
+ if (read (fd, data, 3) != 3)
99
+ return -9998 ;
100
+
101
+ if (!checksum (data))
102
+ return -9997 ;
103
+
104
+ sHumid = (data [0] << 8) | data [1] ;
105
+ fHumid = -6.0 + 125.0 * (double)sHumid / 65536.0 ;
106
+ cHumid = (int)rint (((100.0 * fHumid) + 0.5) / 10.0) ;
107
+ return cHumid ;
108
+ }
109
+ else
110
+ return -9999 ;
111
+ }
112
+
113
+
114
+ /*
115
+ * htu21dSetup:
116
+ * Create a new instance of a HTU21D I2C GPIO interface.
117
+ * This chip has a fixed I2C address, so we are not providing any
118
+ * allowance to change this.
119
+ *********************************************************************************
120
+ */
121
+
122
+ int htu21dSetup (const int pinBase)
123
+ {
124
+ int fd ;
125
+ struct wiringPiNodeStruct *node ;
126
+ uint8_t data ;
127
+ int status ;
128
+
129
+ if ((fd = wiringPiI2CSetup (I2C_ADDRESS)) < 0)
130
+ return FALSE ;
131
+
132
+ node = wiringPiNewNode (pinBase, 2) ;
133
+
134
+ node->fd = fd ;
135
+ node->analogRead = myAnalogRead ;
136
+
137
+ // Send a reset code to it:
138
+
139
+ data = 0xFE ;
140
+ if (write (fd, &data, 1) != 1)
141
+ return FALSE ;
142
+
143
+ delay (15) ;
144
+
145
+ // Read the status register to check it's really there
146
+
147
+ status = wiringPiI2CReadReg8 (fd, 0xE7) ;
148
+
149
+ return (status == 0x02) ? TRUE : FALSE ;
150
+ }
@@ -0,0 +1,34 @@
1
+ /*
2
+ * htu21d.h:
3
+ * Extend wiringPi with the HTU21D I2C Humidity and Temperature
4
+ * sensor.
5
+ * Copyright (c) 2016 Gordon Henderson
6
+ ***********************************************************************
7
+ * This file is part of wiringPi:
8
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
9
+ *
10
+ * wiringPi is free software: you can redistribute it and/or modify
11
+ * it under the terms of the GNU Lesser General Public License as
12
+ * published by the Free Software Foundation, either version 3 of the
13
+ * License, or (at your option) any later version.
14
+ *
15
+ * wiringPi is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU Lesser General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU Lesser General Public
21
+ * License along with wiringPi.
22
+ * If not, see <http://www.gnu.org/licenses/>.
23
+ ***********************************************************************
24
+ */
25
+
26
+ #ifdef __cplusplus
27
+ extern "C" {
28
+ #endif
29
+
30
+ extern int htu21dSetup (const int pinBase) ;
31
+
32
+ #ifdef __cplusplus
33
+ }
34
+ #endif
@@ -0,0 +1,99 @@
1
+ /*
2
+ * max31855.c:
3
+ * Extend wiringPi with the max31855 SPI Analog to Digital convertor
4
+ * Copyright (c) 2012-2015 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
+ #include <byteswap.h>
26
+ #include <stdint.h>
27
+
28
+ #include <wiringPi.h>
29
+ #include <wiringPiSPI.h>
30
+
31
+ #include "max31855.h"
32
+
33
+ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
34
+ {
35
+ uint32_t spiData ;
36
+ int temp ;
37
+ int chan = pin - node->pinBase ;
38
+
39
+ wiringPiSPIDataRW (node->fd, (unsigned char *)&spiData, 4) ;
40
+
41
+ spiData = __bswap_32(spiData) ;
42
+
43
+ switch (chan)
44
+ {
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
+
75
+ }
76
+ }
77
+
78
+
79
+ /*
80
+ * max31855Setup:
81
+ * Create a new wiringPi device node for an max31855 on the Pi's
82
+ * SPI interface.
83
+ *********************************************************************************
84
+ */
85
+
86
+ int max31855Setup (const int pinBase, int spiChannel)
87
+ {
88
+ struct wiringPiNodeStruct *node ;
89
+
90
+ if (wiringPiSPISetup (spiChannel, 5000000) < 0) // 5MHz - prob 4 on the Pi
91
+ return FALSE ;
92
+
93
+ node = wiringPiNewNode (pinBase, 4) ;
94
+
95
+ node->fd = spiChannel ;
96
+ node->analogRead = myAnalogRead ;
97
+
98
+ return TRUE ;
99
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * max31855.c:
3
+ * Extend wiringPi with the MAX31855 SPI Thermocouple driver
4
+ * Copyright (c) 2012-2013 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
+ #ifdef __cplusplus
26
+ extern "C" {
27
+ #endif
28
+
29
+ extern int max31855Setup (int pinBase, int spiChannel) ;
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
@@ -0,0 +1,84 @@
1
+ /*
2
+ * max5322.c:
3
+ * Extend wiringPi with the MAX5322 SPI Digital to Analog convertor
4
+ * Copyright (c) 2012-2013 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
+ #include <wiringPi.h>
26
+ #include <wiringPiSPI.h>
27
+
28
+ #include "max5322.h"
29
+
30
+ /*
31
+ * myAnalogWrite:
32
+ * Write analog value on the given pin
33
+ *********************************************************************************
34
+ */
35
+
36
+ static void myAnalogWrite (struct wiringPiNodeStruct *node, int pin, int value)
37
+ {
38
+ unsigned char spiData [2] ;
39
+ unsigned char chanBits, dataBits ;
40
+ int chan = pin - node->pinBase ;
41
+
42
+ if (chan == 0)
43
+ chanBits = 0b01000000 ;
44
+ else
45
+ chanBits = 0b01010000 ;
46
+
47
+ chanBits |= ((value >> 12) & 0x0F) ;
48
+ dataBits = ((value ) & 0xFF) ;
49
+
50
+ spiData [0] = chanBits ;
51
+ spiData [1] = dataBits ;
52
+
53
+ wiringPiSPIDataRW (node->fd, spiData, 2) ;
54
+ }
55
+
56
+ /*
57
+ * max5322Setup:
58
+ * Create a new wiringPi device node for an max5322 on the Pi's
59
+ * SPI interface.
60
+ *********************************************************************************
61
+ */
62
+
63
+ int max5322Setup (const int pinBase, int spiChannel)
64
+ {
65
+ struct wiringPiNodeStruct *node ;
66
+ unsigned char spiData [2] ;
67
+
68
+ if (wiringPiSPISetup (spiChannel, 8000000) < 0) // 10MHz Max
69
+ return FALSE ;
70
+
71
+ node = wiringPiNewNode (pinBase, 2) ;
72
+
73
+ node->fd = spiChannel ;
74
+ node->analogWrite = myAnalogWrite ;
75
+
76
+ // Enable both DACs
77
+
78
+ spiData [0] = 0b11100000 ;
79
+ spiData [1] = 0 ;
80
+
81
+ wiringPiSPIDataRW (node->fd, spiData, 2) ;
82
+
83
+ return TRUE ;
84
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * max5322.h:
3
+ * Extend wiringPi with the MAX5322 SPI Digital to Analog convertor
4
+ * Copyright (c) 2012-2013 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
+ #ifdef __cplusplus
26
+ extern "C" {
27
+ #endif
28
+
29
+ extern int max5322Setup (int pinBase, int spiChannel) ;
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
@@ -0,0 +1,149 @@
1
+ /*
2
+ * mcp23008.c:
3
+ * Extend wiringPi with the MCP 23008 I2C GPIO expander chip
4
+ * Copyright (c) 2013 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
+ #include <stdio.h>
26
+ #include <pthread.h>
27
+
28
+ #include "wiringPi.h"
29
+ #include "wiringPiI2C.h"
30
+ #include "mcp23x0817.h"
31
+
32
+ #include "mcp23008.h"
33
+
34
+
35
+ /*
36
+ * myPinMode:
37
+ *********************************************************************************
38
+ */
39
+
40
+ static void myPinMode (struct wiringPiNodeStruct *node, int pin, int mode)
41
+ {
42
+ int mask, old, reg ;
43
+
44
+ reg = MCP23x08_IODIR ;
45
+ mask = 1 << (pin - node->pinBase) ;
46
+ old = wiringPiI2CReadReg8 (node->fd, reg) ;
47
+
48
+ if (mode == OUTPUT)
49
+ old &= (~mask) ;
50
+ else
51
+ old |= mask ;
52
+
53
+ wiringPiI2CWriteReg8 (node->fd, reg, old) ;
54
+ }
55
+
56
+
57
+ /*
58
+ * myPullUpDnControl:
59
+ *********************************************************************************
60
+ */
61
+
62
+ static void myPullUpDnControl (struct wiringPiNodeStruct *node, int pin, int mode)
63
+ {
64
+ int mask, old, reg ;
65
+
66
+ reg = MCP23x08_GPPU ;
67
+ mask = 1 << (pin - node->pinBase) ;
68
+
69
+ old = wiringPiI2CReadReg8 (node->fd, reg) ;
70
+
71
+ if (mode == PUD_UP)
72
+ old |= mask ;
73
+ else
74
+ old &= (~mask) ;
75
+
76
+ wiringPiI2CWriteReg8 (node->fd, reg, old) ;
77
+ }
78
+
79
+
80
+ /*
81
+ * myDigitalWrite:
82
+ *********************************************************************************
83
+ */
84
+
85
+ static void myDigitalWrite (struct wiringPiNodeStruct *node, int pin, int value)
86
+ {
87
+ int bit, old ;
88
+
89
+ bit = 1 << ((pin - node->pinBase) & 7) ;
90
+
91
+ old = node->data2 ;
92
+ if (value == LOW)
93
+ old &= (~bit) ;
94
+ else
95
+ old |= bit ;
96
+
97
+ wiringPiI2CWriteReg8 (node->fd, MCP23x08_GPIO, old) ;
98
+ node->data2 = old ;
99
+ }
100
+
101
+
102
+ /*
103
+ * myDigitalRead:
104
+ *********************************************************************************
105
+ */
106
+
107
+ static int myDigitalRead (struct wiringPiNodeStruct *node, int pin)
108
+ {
109
+ int mask, value ;
110
+
111
+ mask = 1 << ((pin - node->pinBase) & 7) ;
112
+ value = wiringPiI2CReadReg8 (node->fd, MCP23x08_GPIO) ;
113
+
114
+ if ((value & mask) == 0)
115
+ return LOW ;
116
+ else
117
+ return HIGH ;
118
+ }
119
+
120
+
121
+ /*
122
+ * mcp23008Setup:
123
+ * Create a new instance of an MCP23008 I2C GPIO interface. We know it
124
+ * has 8 pins, so all we need to know here is the I2C address and the
125
+ * user-defined pin base.
126
+ *********************************************************************************
127
+ */
128
+
129
+ int mcp23008Setup (const int pinBase, const int i2cAddress)
130
+ {
131
+ int fd ;
132
+ struct wiringPiNodeStruct *node ;
133
+
134
+ if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
135
+ return FALSE ;
136
+
137
+ wiringPiI2CWriteReg8 (fd, MCP23x08_IOCON, IOCON_INIT) ;
138
+
139
+ node = wiringPiNewNode (pinBase, 8) ;
140
+
141
+ node->fd = fd ;
142
+ node->pinMode = myPinMode ;
143
+ node->pullUpDnControl = myPullUpDnControl ;
144
+ node->digitalRead = myDigitalRead ;
145
+ node->digitalWrite = myDigitalWrite ;
146
+ node->data2 = wiringPiI2CReadReg8 (fd, MCP23x08_OLAT) ;
147
+
148
+ return TRUE ;
149
+ }