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.
- checksums.yaml +4 -4
- data/ext/wiringpi/WiringPi/devLib/ds1302.c +240 -0
- data/ext/wiringpi/WiringPi/devLib/ds1302.h +44 -0
- data/ext/wiringpi/WiringPi/devLib/font.h +2577 -0
- data/ext/wiringpi/WiringPi/devLib/gertboard.c +164 -0
- data/ext/wiringpi/WiringPi/devLib/gertboard.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/lcd.c +495 -0
- data/ext/wiringpi/WiringPi/devLib/lcd.h +52 -0
- data/ext/wiringpi/WiringPi/devLib/lcd128x64.c +673 -0
- data/ext/wiringpi/WiringPi/devLib/lcd128x64.h +39 -0
- data/ext/wiringpi/WiringPi/devLib/maxdetect.c +238 -0
- data/ext/wiringpi/WiringPi/devLib/maxdetect.h +40 -0
- data/ext/wiringpi/WiringPi/devLib/piFace.c +112 -0
- data/ext/wiringpi/WiringPi/devLib/piFace.h +32 -0
- data/ext/wiringpi/WiringPi/devLib/piFaceOld.c +177 -0
- data/ext/wiringpi/WiringPi/devLib/piGlow.c +118 -0
- data/ext/wiringpi/WiringPi/devLib/piGlow.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/piNes.c +113 -0
- data/ext/wiringpi/WiringPi/devLib/piNes.h +45 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhat.c +430 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhat.h +39 -0
- data/ext/wiringpi/WiringPi/devLib/scrollPhatFont.h +544 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/7segments.c +221 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/buttons.c +83 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/gertboard.c +96 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/record.c +60 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/temperature.c +78 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/voltmeter.c +73 -0
- data/ext/wiringpi/WiringPi/examples/Gertboard/vumeter.c +152 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/blink.c +59 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/buttons.c +103 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/ladder.c +337 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/metro.c +111 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/motor.c +120 -0
- data/ext/wiringpi/WiringPi/examples/PiFace/reaction.c +194 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow0.c +51 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow1.c +258 -0
- data/ext/wiringpi/WiringPi/examples/PiGlow/piglow.c +176 -0
- data/ext/wiringpi/WiringPi/examples/blink-thread.c +61 -0
- data/ext/wiringpi/WiringPi/examples/blink.c +48 -0
- data/ext/wiringpi/WiringPi/examples/blink12.c +111 -0
- data/ext/wiringpi/WiringPi/examples/blink12drcs.c +125 -0
- data/ext/wiringpi/WiringPi/examples/blink6drcs.c +115 -0
- data/ext/wiringpi/WiringPi/examples/blink8-drcn.c +61 -0
- data/ext/wiringpi/WiringPi/examples/blink8.c +57 -0
- data/ext/wiringpi/WiringPi/examples/clock.c +201 -0
- data/ext/wiringpi/WiringPi/examples/delayTest.c +102 -0
- data/ext/wiringpi/WiringPi/examples/ds1302.c +238 -0
- data/ext/wiringpi/WiringPi/examples/header.h +23 -0
- data/ext/wiringpi/WiringPi/examples/isr-osc.c +118 -0
- data/ext/wiringpi/WiringPi/examples/isr.c +110 -0
- data/ext/wiringpi/WiringPi/examples/lcd-adafruit.c +347 -0
- data/ext/wiringpi/WiringPi/examples/lcd.c +286 -0
- data/ext/wiringpi/WiringPi/examples/lowPower.c +68 -0
- data/ext/wiringpi/WiringPi/examples/max31855.c +60 -0
- data/ext/wiringpi/WiringPi/examples/nes.c +67 -0
- data/ext/wiringpi/WiringPi/examples/okLed.c +82 -0
- data/ext/wiringpi/WiringPi/examples/pwm.c +58 -0
- data/ext/wiringpi/WiringPi/examples/q2w/binary.c +79 -0
- data/ext/wiringpi/WiringPi/examples/q2w/blink-io.c +61 -0
- data/ext/wiringpi/WiringPi/examples/q2w/blink.c +50 -0
- data/ext/wiringpi/WiringPi/examples/q2w/bright.c +59 -0
- data/ext/wiringpi/WiringPi/examples/q2w/button.c +63 -0
- data/ext/wiringpi/WiringPi/examples/q2w/volts.c +62 -0
- data/ext/wiringpi/WiringPi/examples/rht03.c +86 -0
- data/ext/wiringpi/WiringPi/examples/scrollPhat/scphat.c +230 -0
- data/ext/wiringpi/WiringPi/examples/scrollPhat/test.c +115 -0
- data/ext/wiringpi/WiringPi/examples/serialRead.c +48 -0
- data/ext/wiringpi/WiringPi/examples/serialTest.c +75 -0
- data/ext/wiringpi/WiringPi/examples/servo.c +57 -0
- data/ext/wiringpi/WiringPi/examples/softPwm.c +89 -0
- data/ext/wiringpi/WiringPi/examples/softTone.c +54 -0
- data/ext/wiringpi/WiringPi/examples/speed.c +95 -0
- data/ext/wiringpi/WiringPi/examples/spiSpeed.c +118 -0
- data/ext/wiringpi/WiringPi/examples/wfi.c +161 -0
- data/ext/wiringpi/WiringPi/gpio/gpio.c +1538 -0
- data/ext/wiringpi/WiringPi/gpio/readall.c +403 -0
- data/ext/wiringpi/WiringPi/version.h +3 -0
- data/ext/wiringpi/WiringPi/wiringPi/ads1115.c +293 -0
- data/ext/wiringpi/WiringPi/wiringPi/ads1115.h +55 -0
- data/ext/wiringpi/WiringPi/wiringPi/bmp180.c +237 -0
- data/ext/wiringpi/WiringPi/wiringPi/bmp180.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcNet.c +405 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcNet.h +42 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +196 -0
- data/ext/wiringpi/WiringPi/wiringPi/drcSerial.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/ds18b20.c +146 -0
- data/ext/wiringpi/WiringPi/wiringPi/ds18b20.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/htu21d.c +150 -0
- data/ext/wiringpi/WiringPi/wiringPi/htu21d.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/max31855.c +99 -0
- data/ext/wiringpi/WiringPi/wiringPi/max31855.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/max5322.c +84 -0
- data/ext/wiringpi/WiringPi/wiringPi/max5322.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +149 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23008.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +164 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23016reg.h +48 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +195 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23017.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +188 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +235 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23x08.h +73 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp23x0817.h +87 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3002.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3004.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +125 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +43 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +76 -0
- data/ext/wiringpi/WiringPi/wiringPi/mcp4802.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +126 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8574.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +90 -0
- data/ext/wiringpi/WiringPi/wiringPi/pcf8591.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/piHiPri.c +51 -0
- data/ext/wiringpi/WiringPi/wiringPi/piThread.c +63 -0
- data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.c +95 -0
- data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.h +26 -0
- data/ext/wiringpi/WiringPi/wiringPi/rht03.c +252 -0
- data/ext/wiringpi/WiringPi/wiringPi/rht03.h +25 -0
- data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +75 -0
- data/ext/wiringpi/WiringPi/wiringPi/sn3218.h +33 -0
- data/ext/wiringpi/WiringPi/wiringPi/softPwm.c +186 -0
- data/ext/wiringpi/WiringPi/wiringPi/softPwm.h +35 -0
- data/ext/wiringpi/WiringPi/wiringPi/softServo.c +211 -0
- data/ext/wiringpi/WiringPi/wiringPi/softServo.h +35 -0
- data/ext/wiringpi/WiringPi/wiringPi/softTone.c +150 -0
- data/ext/wiringpi/WiringPi/wiringPi/softTone.h +39 -0
- data/ext/wiringpi/WiringPi/wiringPi/sr595.c +109 -0
- data/ext/wiringpi/WiringPi/wiringPi/sr595.h +34 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +2507 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +269 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.c +233 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.h +42 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.c +144 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.h +36 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.c +225 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.h +38 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringShift.c +83 -0
- data/ext/wiringpi/WiringPi/wiringPi/wiringShift.h +41 -0
- data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.c +928 -0
- data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.h +26 -0
- data/ext/wiringpi/WiringPi/wiringPiD/daemonise.c +82 -0
- data/ext/wiringpi/WiringPi/wiringPiD/daemonise.h +9 -0
- data/ext/wiringpi/WiringPi/wiringPiD/drcNetCmd.h +43 -0
- data/ext/wiringpi/WiringPi/wiringPiD/network.c +330 -0
- data/ext/wiringpi/WiringPi/wiringPiD/network.h +31 -0
- data/ext/wiringpi/WiringPi/wiringPiD/runRemote.c +126 -0
- data/ext/wiringpi/WiringPi/wiringPiD/runRemote.h +29 -0
- data/ext/wiringpi/WiringPi/wiringPiD/wiringpid.c +382 -0
- data/ext/wiringpi/wiringpi_wrap.c +636 -219
- data/lib/wiringpi.rb +25 -12
- data/lib/wiringpi/gpio.rb +90 -83
- data/lib/wiringpi/i2c.rb +29 -22
- data/lib/wiringpi/modules/mcp23017.rb +15 -0
- data/lib/wiringpi/modules/mcp23s17.rb +16 -0
- data/lib/wiringpi/scrollphat.rb +14 -14
- data/lib/wiringpi/serial.rb +8 -18
- data/lib/wiringpi/spi.rb +14 -11
- data/lib/wiringpi/watch.rb +24 -0
- metadata +160 -4
- data/lib/wiringpi/event.rb +0 -21
- 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
|
+
}
|