wiring_lmk 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/ext/wiringpi/WiringPi/devLib/ds1302.c +254 -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 +507 -0
  8. data/ext/wiringpi/WiringPi/devLib/lcd.h +52 -0
  9. data/ext/wiringpi/WiringPi/devLib/lcd128x64.c +684 -0
  10. data/ext/wiringpi/WiringPi/devLib/lcd128x64.h +39 -0
  11. data/ext/wiringpi/WiringPi/devLib/maxdetect.c +167 -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 +178 -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 +117 -0
  19. data/ext/wiringpi/WiringPi/devLib/piNes.h +45 -0
  20. data/ext/wiringpi/WiringPi/gpio/extensions.c +700 -0
  21. data/ext/wiringpi/WiringPi/gpio/extensions.h +26 -0
  22. data/ext/wiringpi/WiringPi/gpio/gpio.c +1280 -0
  23. data/ext/wiringpi/WiringPi/gpio/pins.c +33 -0
  24. data/ext/wiringpi/WiringPi/gpio/readall.c +337 -0
  25. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +201 -0
  26. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.h +33 -0
  27. data/ext/wiringpi/WiringPi/wiringPi/max31855.c +99 -0
  28. data/ext/wiringpi/WiringPi/wiringPi/max31855.h +33 -0
  29. data/ext/wiringpi/WiringPi/wiringPi/max5322.c +84 -0
  30. data/ext/wiringpi/WiringPi/wiringPi/max5322.h +33 -0
  31. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +149 -0
  32. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.h +33 -0
  33. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +164 -0
  34. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.h +33 -0
  35. data/ext/wiringpi/WiringPi/wiringPi/mcp23016reg.h +48 -0
  36. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +195 -0
  37. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.h +33 -0
  38. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +189 -0
  39. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.h +33 -0
  40. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +234 -0
  41. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.h +33 -0
  42. data/ext/wiringpi/WiringPi/wiringPi/mcp23x08.h +73 -0
  43. data/ext/wiringpi/WiringPi/wiringPi/mcp23x0817.h +87 -0
  44. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +76 -0
  45. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.h +33 -0
  46. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +76 -0
  47. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.h +33 -0
  48. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +113 -0
  49. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +43 -0
  50. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +76 -0
  51. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.h +33 -0
  52. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +126 -0
  53. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.h +33 -0
  54. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +92 -0
  55. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.h +33 -0
  56. data/ext/wiringpi/WiringPi/wiringPi/piHiPri.c +51 -0
  57. data/ext/wiringpi/WiringPi/wiringPi/piThread.c +63 -0
  58. data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +75 -0
  59. data/ext/wiringpi/WiringPi/wiringPi/sn3218.h +33 -0
  60. data/ext/wiringpi/WiringPi/wiringPi/softPwm.c +168 -0
  61. data/ext/wiringpi/WiringPi/wiringPi/softPwm.h +35 -0
  62. data/ext/wiringpi/WiringPi/wiringPi/softServo.c +247 -0
  63. data/ext/wiringpi/WiringPi/wiringPi/softServo.h +35 -0
  64. data/ext/wiringpi/WiringPi/wiringPi/softTone.c +150 -0
  65. data/ext/wiringpi/WiringPi/wiringPi/softTone.h +39 -0
  66. data/ext/wiringpi/WiringPi/wiringPi/sr595.c +113 -0
  67. data/ext/wiringpi/WiringPi/wiringPi/sr595.h +34 -0
  68. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +3688 -0
  69. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +229 -0
  70. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.c +236 -0
  71. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.h +42 -0
  72. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.c +121 -0
  73. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.h +35 -0
  74. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.c +253 -0
  75. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.h +38 -0
  76. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.c +83 -0
  77. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.h +41 -0
  78. data/ext/wiringpi/extconf.rb +8 -0
  79. data/ext/wiringpi/wiringpi_wrap.c +4396 -0
  80. data/lib/wiring_lmk.rb +42 -0
  81. data/lib/wiring_lmk/event.rb +21 -0
  82. data/lib/wiring_lmk/gpio.rb +139 -0
  83. data/lib/wiring_lmk/i2c.rb +26 -0
  84. data/lib/wiring_lmk/mcp23x17.rb +31 -0
  85. data/lib/wiring_lmk/serial.rb +49 -0
  86. data/lib/wiring_lmk/spi.rb +15 -0
  87. metadata +136 -0
@@ -0,0 +1,33 @@
1
+ /*
2
+ * 23s17.h:
3
+ * Extend wiringPi with the MCP 23s17 SPI 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
+ #ifdef __cplusplus
26
+ extern "C" {
27
+ #endif
28
+
29
+ extern int mcp23s17Setup (int pinBase, int spiPort, int devId) ;
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
@@ -0,0 +1,73 @@
1
+ /*
2
+ * mcp23x17:
3
+ * Copyright (c) 2012-2013 Gordon Henderson
4
+ *
5
+ * Header file for code using the MCP23x17 GPIO expander chip.
6
+ * This comes in 2 flavours: MCP23017 which has an I2C interface,
7
+ * an the MXP23S17 which has an SPI interface.
8
+ ***********************************************************************
9
+ * This file is part of wiringPi:
10
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
11
+ *
12
+ * wiringPi is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as
14
+ * published by the Free Software Foundation, either version 3 of the
15
+ * License, or (at your option) any later version.
16
+ *
17
+ * wiringPi is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public
23
+ * License along with wiringPi.
24
+ * If not, see <http://www.gnu.org/licenses/>.
25
+ ***********************************************************************
26
+ */
27
+
28
+
29
+ // MCP23x17 Registers
30
+
31
+ #define IODIRA 0x00
32
+ #define IPOLA 0x02
33
+ #define GPINTENA 0x04
34
+ #define DEFVALA 0x06
35
+ #define INTCONA 0x08
36
+ #define IOCON 0x0A
37
+ #define GPPUA 0x0C
38
+ #define INTFA 0x0E
39
+ #define INTCAPA 0x10
40
+ #define GPIOA 0x12
41
+ #define OLATA 0x14
42
+
43
+ #define IODIRB 0x01
44
+ #define IPOLB 0x03
45
+ #define GPINTENB 0x05
46
+ #define DEFVALB 0x07
47
+ #define INTCONB 0x09
48
+ #define IOCONB 0x0B
49
+ #define GPPUB 0x0D
50
+ #define INTFB 0x0F
51
+ #define INTCAPB 0x11
52
+ #define GPIOB 0x13
53
+ #define OLATB 0x15
54
+
55
+ // Bits in the IOCON register
56
+
57
+ #define IOCON_UNUSED 0x01
58
+ #define IOCON_INTPOL 0x02
59
+ #define IOCON_ODR 0x04
60
+ #define IOCON_HAEN 0x08
61
+ #define IOCON_DISSLW 0x10
62
+ #define IOCON_SEQOP 0x20
63
+ #define IOCON_MIRROR 0x40
64
+ #define IOCON_BANK_MODE 0x80
65
+
66
+ // Default initialisation mode
67
+
68
+ #define IOCON_INIT (IOCON_SEQOP)
69
+
70
+ // SPI Command codes
71
+
72
+ #define CMD_WRITE 0x40
73
+ #define CMD_READ 0x41
@@ -0,0 +1,87 @@
1
+ /*
2
+ * mcp23xxx:
3
+ * Copyright (c) 2012-2013 Gordon Henderson
4
+ *
5
+ * Header file for code using the MCP23x08 and 17 GPIO expander
6
+ * chips.
7
+ * This comes in 2 flavours: MCP230xx (08/17) which has an I2C
8
+ * interface, and the MXP23Sxx (08/17) which has an SPI interface.
9
+ ***********************************************************************
10
+ * This file is part of wiringPi:
11
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
12
+ *
13
+ * wiringPi is free software: you can redistribute it and/or modify
14
+ * it under the terms of the GNU Lesser General Public License as
15
+ * published by the Free Software Foundation, either version 3 of the
16
+ * License, or (at your option) any later version.
17
+ *
18
+ * wiringPi is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ * GNU Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with wiringPi.
25
+ * If not, see <http://www.gnu.org/licenses/>.
26
+ ***********************************************************************
27
+ */
28
+
29
+ // MCP23x08 Registers
30
+
31
+ #define MCP23x08_IODIR 0x00
32
+ #define MCP23x08_IPOL 0x01
33
+ #define MCP23x08_GPINTEN 0x02
34
+ #define MCP23x08_DEFVAL 0x03
35
+ #define MCP23x08_INTCON 0x04
36
+ #define MCP23x08_IOCON 0x05
37
+ #define MCP23x08_GPPU 0x06
38
+ #define MCP23x08_INTF 0x07
39
+ #define MCP23x08_INTCAP 0x08
40
+ #define MCP23x08_GPIO 0x09
41
+ #define MCP23x08_OLAT 0x0A
42
+
43
+ // MCP23x17 Registers
44
+
45
+ #define MCP23x17_IODIRA 0x00
46
+ #define MCP23x17_IPOLA 0x02
47
+ #define MCP23x17_GPINTENA 0x04
48
+ #define MCP23x17_DEFVALA 0x06
49
+ #define MCP23x17_INTCONA 0x08
50
+ #define MCP23x17_IOCON 0x0A
51
+ #define MCP23x17_GPPUA 0x0C
52
+ #define MCP23x17_INTFA 0x0E
53
+ #define MCP23x17_INTCAPA 0x10
54
+ #define MCP23x17_GPIOA 0x12
55
+ #define MCP23x17_OLATA 0x14
56
+
57
+ #define MCP23x17_IODIRB 0x01
58
+ #define MCP23x17_IPOLB 0x03
59
+ #define MCP23x17_GPINTENB 0x05
60
+ #define MCP23x17_DEFVALB 0x07
61
+ #define MCP23x17_INTCONB 0x09
62
+ #define MCP23x17_IOCONB 0x0B
63
+ #define MCP23x17_GPPUB 0x0D
64
+ #define MCP23x17_INTFB 0x0F
65
+ #define MCP23x17_INTCAPB 0x11
66
+ #define MCP23x17_GPIOB 0x13
67
+ #define MCP23x17_OLATB 0x15
68
+
69
+ // Bits in the IOCON register
70
+
71
+ #define IOCON_UNUSED 0x01
72
+ #define IOCON_INTPOL 0x02
73
+ #define IOCON_ODR 0x04
74
+ #define IOCON_HAEN 0x08
75
+ #define IOCON_DISSLW 0x10
76
+ #define IOCON_SEQOP 0x20
77
+ #define IOCON_MIRROR 0x40
78
+ #define IOCON_BANK_MODE 0x80
79
+
80
+ // Default initialisation mode
81
+
82
+ #define IOCON_INIT (IOCON_SEQOP)
83
+
84
+ // SPI Command codes
85
+
86
+ #define CMD_WRITE 0x40
87
+ #define CMD_READ 0x41
@@ -0,0 +1,76 @@
1
+ /*
2
+ * mcp3002.c:
3
+ * Extend wiringPi with the MCP3002 SPI Analog to Digital 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 "mcp3002.h"
29
+
30
+ /*
31
+ * myAnalogRead:
32
+ * Return the analog value of the given pin
33
+ *********************************************************************************
34
+ */
35
+
36
+ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
37
+ {
38
+ unsigned char spiData [2] ;
39
+ unsigned char chanBits ;
40
+ int chan = pin - node->pinBase ;
41
+
42
+ if (chan == 0)
43
+ chanBits = 0b11010000 ;
44
+ else
45
+ chanBits = 0b11110000 ;
46
+
47
+ spiData [0] = chanBits ;
48
+ spiData [1] = 0 ;
49
+
50
+ wiringPiSPIDataRW (node->fd, spiData, 2) ;
51
+
52
+ return ((spiData [0] << 7) | (spiData [1] >> 1)) & 0x3FF ;
53
+ }
54
+
55
+
56
+ /*
57
+ * mcp3002Setup:
58
+ * Create a new wiringPi device node for an mcp3002 on the Pi's
59
+ * SPI interface.
60
+ *********************************************************************************
61
+ */
62
+
63
+ int mcp3002Setup (const int pinBase, int spiChannel)
64
+ {
65
+ struct wiringPiNodeStruct *node ;
66
+
67
+ if (wiringPiSPISetup (spiChannel, 1000000) < 0)
68
+ return -1 ;
69
+
70
+ node = wiringPiNewNode (pinBase, 2) ;
71
+
72
+ node->fd = spiChannel ;
73
+ node->analogRead = myAnalogRead ;
74
+
75
+ return 0 ;
76
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * mcp3002.c:
3
+ * Extend wiringPi with the MCP3002 SPI Analog to Digital 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 mcp3002Setup (int pinBase, int spiChannel) ;
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
@@ -0,0 +1,76 @@
1
+ /*
2
+ * mcp3004.c:
3
+ * Extend wiringPi with the MCP3004 SPI Analog to Digital convertor
4
+ * Copyright (c) 2012-2013 Gordon Henderson
5
+ *
6
+ * Thanks also to "ShorTie" on IRC for some remote debugging help!
7
+ ***********************************************************************
8
+ * This file is part of wiringPi:
9
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
10
+ *
11
+ * wiringPi is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as
13
+ * published by the Free Software Foundation, either version 3 of the
14
+ * License, or (at your option) any later version.
15
+ *
16
+ * wiringPi is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public
22
+ * License along with wiringPi.
23
+ * If not, see <http://www.gnu.org/licenses/>.
24
+ ***********************************************************************
25
+ */
26
+
27
+ #include "wiringPi.h"
28
+ #include "wiringPiSPI.h"
29
+
30
+ #include "mcp3004.h"
31
+
32
+ /*
33
+ * myAnalogRead:
34
+ * Return the analog value of the given pin
35
+ *********************************************************************************
36
+ */
37
+
38
+ static int myAnalogRead (struct wiringPiNodeStruct *node, int pin)
39
+ {
40
+ unsigned char spiData [3] ;
41
+ unsigned char chanBits ;
42
+ int chan = pin - node->pinBase ;
43
+
44
+ chanBits = 0b10000000 | (chan << 4) ;
45
+
46
+ spiData [0] = 1 ; // Start bit
47
+ spiData [1] = chanBits ;
48
+ spiData [2] = 0 ;
49
+
50
+ wiringPiSPIDataRW (node->fd, spiData, 3) ;
51
+
52
+ return ((spiData [1] << 8) | spiData [2]) & 0x3FF ;
53
+ }
54
+
55
+
56
+ /*
57
+ * mcp3004Setup:
58
+ * Create a new wiringPi device node for an mcp3004 on the Pi's
59
+ * SPI interface.
60
+ *********************************************************************************
61
+ */
62
+
63
+ int mcp3004Setup (const int pinBase, int spiChannel)
64
+ {
65
+ struct wiringPiNodeStruct *node ;
66
+
67
+ if (wiringPiSPISetup (spiChannel, 1000000) < 0)
68
+ return -1 ;
69
+
70
+ node = wiringPiNewNode (pinBase, 8) ;
71
+
72
+ node->fd = spiChannel ;
73
+ node->analogRead = myAnalogRead ;
74
+
75
+ return 0 ;
76
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * mcp3004.c:
3
+ * Extend wiringPi with the MCP3004 SPI Analog to Digital 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 mcp3004Setup (int pinBase, int spiChannel) ;
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
@@ -0,0 +1,113 @@
1
+ /*
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
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
+
27
+ #include <stdio.h>
28
+ #include <unistd.h>
29
+ #include <stdint.h>
30
+ #include <fcntl.h>
31
+ #include <sys/ioctl.h>
32
+ #include <linux/spi/spidev.h>
33
+
34
+ #include "wiringPi.h"
35
+ #include "wiringPiI2C.h"
36
+
37
+ #include "mcp3422.h"
38
+
39
+
40
+ /*
41
+ * myAnalogRead:
42
+ * Read a channel from the device
43
+ *********************************************************************************
44
+ */
45
+
46
+ int myAnalogRead (struct wiringPiNodeStruct *node, int chan)
47
+ {
48
+ unsigned char config ;
49
+ unsigned char buffer [4] ;
50
+ int value = 0 ;
51
+ int ret = -1;
52
+
53
+ // One-shot mode, trigger plus the other configs.
54
+
55
+ config = 0x80 | ((chan - node->pinBase) << 5) | (node->data0 << 2) | (node->data1) ;
56
+
57
+ wiringPiI2CWrite (node->fd, config) ;
58
+
59
+ switch (node->data0) // Sample rate
60
+ {
61
+ case MCP3422_SR_3_75: // 18 bits
62
+ delay (270) ;
63
+ ret = read (node->fd, buffer, 4) ;
64
+ value = ((buffer [0] & 3) << 16) | (buffer [1] << 8) | buffer [0] ;
65
+ break ;
66
+
67
+ case MCP3422_SR_15: // 16 bits
68
+ delay ( 70) ;
69
+ ret = read (node->fd, buffer, 3) ;
70
+ value = (buffer [0] << 8) | buffer [1] ;
71
+ break ;
72
+
73
+ case MCP3422_SR_60: // 14 bits
74
+ delay ( 17) ;
75
+ ret = read (node->fd, buffer, 3) ;
76
+ value = ((buffer [0] & 0x3F) << 8) | buffer [1] ;
77
+ break ;
78
+
79
+ case MCP3422_SR_240: // 12 bits
80
+ delay ( 5) ;
81
+ ret = read (node->fd, buffer, 3) ;
82
+ value = ((buffer [0] & 0x0F) << 8) | buffer [0] ;
83
+ break ;
84
+ }
85
+
86
+ ret = ret;
87
+
88
+ return value ;
89
+ }
90
+
91
+
92
+ /*
93
+ * mcp3422Setup:
94
+ * Create a new wiringPi device node for the mcp3422
95
+ *********************************************************************************
96
+ */
97
+
98
+ int mcp3422Setup (int pinBase, int i2cAddress, int sampleRate, int gain)
99
+ {
100
+ int fd ;
101
+ struct wiringPiNodeStruct *node ;
102
+
103
+ if ((fd = wiringPiI2CSetup (i2cAddress)) < 0)
104
+ return fd ;
105
+
106
+ node = wiringPiNewNode (pinBase, 4) ;
107
+
108
+ node->data0 = sampleRate ;
109
+ node->data1 = gain ;
110
+ node->analogRead = myAnalogRead ;
111
+
112
+ return 0 ;
113
+ }