wiringpi 1.0.1
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.
- data/ext/wiringpi/extconf.rb +2 -0
- data/ext/wiringpi/serial.c +204 -0
- data/ext/wiringpi/serial.h +41 -0
- data/ext/wiringpi/wiringPi.c +614 -0
- data/ext/wiringpi/wiringPi.h +64 -0
- data/ext/wiringpi/wiringShift.c +84 -0
- data/ext/wiringpi/wiringShift.h +41 -0
- data/ext/wiringpi/wiringpi_wrap.c +2753 -0
- data/lib/wiringpi.rb +233 -0
- metadata +60 -0
data/lib/wiringpi.rb
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
require 'wiringpi/wiringpi'
|
2
|
+
|
3
|
+
WPI_MODE_PINS = 0 # Use sane pin numbering
|
4
|
+
WPI_MODE_GPIO = 1 # Use Broadcom barmy GPIO pin numbering
|
5
|
+
|
6
|
+
# Constants for mode()
|
7
|
+
INPUT = 0
|
8
|
+
OUTPUT = 1
|
9
|
+
PWM_OUTPUT = 2
|
10
|
+
|
11
|
+
# Constants for digitalWrite()
|
12
|
+
HIGH = 1
|
13
|
+
LOW = 0
|
14
|
+
|
15
|
+
PUD_OFF = 0
|
16
|
+
PUD_DOWN = 1
|
17
|
+
PUD_UP = 2
|
18
|
+
|
19
|
+
# Bit-order for shiftOut and shiftIn
|
20
|
+
LSBFIRST = 0 # Least Significant Bit First
|
21
|
+
MSBFIRST = 1 # Most Significant Bit First
|
22
|
+
|
23
|
+
module WiringPi
|
24
|
+
|
25
|
+
class Serial
|
26
|
+
|
27
|
+
@id = 0
|
28
|
+
@device = '/dev/ttyAMA0'
|
29
|
+
@baud = 9600
|
30
|
+
|
31
|
+
def initialize(device='/dev/ttyAMA0',baud=9600)
|
32
|
+
|
33
|
+
@device = device
|
34
|
+
@baud = baud
|
35
|
+
|
36
|
+
@id = Wiringpi.serialOpen( @device,@baud )
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def serialClose
|
41
|
+
|
42
|
+
Wiringpi.serialClose( @id )
|
43
|
+
@id = 0
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def serialPutchar( char )
|
48
|
+
|
49
|
+
Wiringpi.serialPutchar( @id, char )
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
def serialPuts( string )
|
54
|
+
|
55
|
+
Wiringpi.serialPuts( @id, string )
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def serialDataAvail
|
60
|
+
|
61
|
+
Wiringpi.serialDataAvail( @id )
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
def serialGetchar
|
66
|
+
|
67
|
+
Wiringpi.serialGetchar( @id )
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
class GPIO
|
74
|
+
|
75
|
+
GPIO_PINS = [
|
76
|
+
0,1,4,7,8,9,10,11,14,15,17,18,21,22,23,24,25 # seemingly random indeed!
|
77
|
+
]
|
78
|
+
|
79
|
+
PINS = [
|
80
|
+
0,1,2,3,4,5,6,7, # basic IO pins
|
81
|
+
8,9, # i2c with 1k8 pull up resistor
|
82
|
+
10,11,12,13,14, # SPI pins, can also be used for IO
|
83
|
+
15,16,17
|
84
|
+
]
|
85
|
+
|
86
|
+
@mode = WPI_MODE_PINS
|
87
|
+
|
88
|
+
@@init = false # once wiringPiSetup has been called, we don't have to do it again
|
89
|
+
|
90
|
+
def initialize( mode=WPI_MODE_PINS )
|
91
|
+
|
92
|
+
@mode = mode
|
93
|
+
self.wiringPiSetup unless @@init
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
def wiringPiMode( mode )
|
98
|
+
|
99
|
+
@mode = mode
|
100
|
+
Wiringpi.wiringPiGpioMode( @mode )
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
def wiringPiSetup
|
105
|
+
|
106
|
+
begin
|
107
|
+
Wiringpi.wiringPiSetup
|
108
|
+
rescue Exception=>e
|
109
|
+
raise e
|
110
|
+
end
|
111
|
+
|
112
|
+
Wiringpi.wiringPiGpioMode( @mode )
|
113
|
+
@@init = true
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
def checkPin(pin)
|
118
|
+
|
119
|
+
( @mode = WPI_MODE_PINS and PINS.include?(pin) ) or ( @mode = WPI_MODE_GPIO and GPIO_PINS.include?(pin) )
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
def pinError(pin)
|
124
|
+
"invalid #{pin}, available gpio pins: #{PINS}" if @mode == WPI_MODE_PINS
|
125
|
+
"invalid #{pin}, available gpio pins: #{GPIO_PINS}" if @mode == WPI_MODE_GPIO
|
126
|
+
end
|
127
|
+
|
128
|
+
def read(pin)
|
129
|
+
|
130
|
+
raise ArgumentError, pinError(pin) unless checkPin(pin)
|
131
|
+
|
132
|
+
Wiringpi.digitalRead(pin)
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
def pwmWrite(pin,value)
|
137
|
+
|
138
|
+
raise ArgumentError, pinError(pin) unless checkPin(pin)
|
139
|
+
|
140
|
+
Wiringpi.pwmWrite(pin,value)
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
def write(pin,value)
|
145
|
+
|
146
|
+
raise ArgumentError, pinError(pin) unless checkPin(pin)
|
147
|
+
raise ArgumentError, 'invalid value' unless [0,1].include?(value)
|
148
|
+
|
149
|
+
Wiringpi.digitalWrite(pin,value)
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
def mode(pin,mode)
|
154
|
+
|
155
|
+
raise ArgumentError, pinError(pin) unless checkPin(pin)
|
156
|
+
raise ArgumentError, "invalid mode" unless [INPUT,OUTPUT,PWM_OUTPUT].include?(mode)
|
157
|
+
|
158
|
+
Wiringpi.pinMode(pin, mode)
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
=begin
|
163
|
+
shiftOutArray int dataPin, int clockPin, int latchPin, int[] bits
|
164
|
+
Shifts out an array of ints by converting them into bytes
|
165
|
+
and handing to Wiringpi.shiftOut, must contain only 1s or 0s
|
166
|
+
=end
|
167
|
+
def shiftOutArray(dataPin, clockPin, latchPin, bits)
|
168
|
+
|
169
|
+
raise ArgumentError, "invalid data pin, available gpio pins: #{PINS}" unless checkPin(dataPin)
|
170
|
+
raise ArgumentError, "invalid clock pin, available gpio pins: #{PINS}" unless checkPin(clockPin)
|
171
|
+
raise ArgumentError, "invalid latch pin, available gpio pins: #{PINS}" unless checkPin(latchPin)
|
172
|
+
|
173
|
+
WiringPi.write( latchPin, LOW )
|
174
|
+
|
175
|
+
bits.each_slice(8) do |slice|
|
176
|
+
Wiringpi.shiftOut(dataPin, clockPin, LSBFIRST, slice.reverse.join.to_i(2))
|
177
|
+
end
|
178
|
+
|
179
|
+
WiringPi.write( latchPin, HIGH )
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
=begin
|
184
|
+
shiftOut int dataPin, int clockPin, int latchPin, char
|
185
|
+
Shift out a single 8-bit integer 0-255
|
186
|
+
=end
|
187
|
+
def shiftOut(dataPin, clockPin, latchPin, char)
|
188
|
+
|
189
|
+
raise ArgumentError, "invalid data pin, available gpio pins: #{PINS}" unless checkPin(dataPin)
|
190
|
+
raise ArgumentError, "invalid clock pin, available gpio pins: #{PINS}" unless checkPin(clockPin)
|
191
|
+
raise ArgumentError, "invalid latch pin, available gpio pins: #{PINS}" unless checkPin(latchPin)
|
192
|
+
|
193
|
+
WiringPi.write( latchPin, LOW )
|
194
|
+
|
195
|
+
Wiringpi.shiftOut(dataPin, clockPin, LSBFIRST, char)
|
196
|
+
|
197
|
+
WiringPi.write( latchPin, HIGH )
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
=begin
|
202
|
+
readAll
|
203
|
+
Reads values of all pins and returns them as a hash
|
204
|
+
=end
|
205
|
+
def readAll
|
206
|
+
|
207
|
+
pinValues = Hash.new
|
208
|
+
|
209
|
+
if @mode == WPI_MODE_GPIO
|
210
|
+
|
211
|
+
GPIO_PINS.each do |pin|
|
212
|
+
|
213
|
+
pinValues[pin] = self.read(pin)
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
else
|
218
|
+
|
219
|
+
PINS.each do |pin|
|
220
|
+
|
221
|
+
pinValues[pin] = self.read(pin)
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
pinValues
|
228
|
+
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wiringpi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gordon
|
9
|
+
- Phil
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-06-22 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description: ! 'WiringPi library wrapper for the Raspberry Pi only. Wraps up the Arduino
|
16
|
+
wiring-like WiringPi library into a convinient Ruby gem. Currently includes GPIO
|
17
|
+
functionality, serial and shiftOut/shiftIn support. Credit to Gordon for the WiringPi
|
18
|
+
library, which can be found here: http://projects.drogon.net/raspberry-pi/wiringpi/'
|
19
|
+
email: phil@gadgetoid.com
|
20
|
+
executables: []
|
21
|
+
extensions:
|
22
|
+
- ext/wiringpi/extconf.rb
|
23
|
+
extra_rdoc_files: []
|
24
|
+
files:
|
25
|
+
- lib/wiringpi.rb
|
26
|
+
- ext/wiringpi/wiringShift.c
|
27
|
+
- ext/wiringpi/wiringPi.c
|
28
|
+
- ext/wiringpi/serial.c
|
29
|
+
- ext/wiringpi/wiringpi_wrap.c
|
30
|
+
- ext/wiringpi/wiringShift.h
|
31
|
+
- ext/wiringpi/serial.h
|
32
|
+
- ext/wiringpi/wiringPi.h
|
33
|
+
- ext/wiringpi/extconf.rb
|
34
|
+
homepage: http://rubygems.org/gems/wiringpi
|
35
|
+
licenses:
|
36
|
+
- GNU General Public License
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.8.24
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: Arduino wiring-like library for Raspberry Pi GPIO. Will only work on a Pi.
|
59
|
+
Alpha version.
|
60
|
+
test_files: []
|