firmata 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/firmata/board.rb +20 -29
- data/lib/firmata/version.rb +1 -1
- data/test/board_test.rb +7 -18
- metadata +2 -2
data/lib/firmata/board.rb
CHANGED
@@ -98,6 +98,9 @@ module Firmata
|
|
98
98
|
once('firmware_query', ->() do
|
99
99
|
once('capability_query', ->() do
|
100
100
|
once('analog_mapping_query', ->() do
|
101
|
+
|
102
|
+
2.times { |i| toggle_pin_reporting(i) }
|
103
|
+
|
101
104
|
@connected = true
|
102
105
|
emit('ready')
|
103
106
|
end)
|
@@ -161,6 +164,9 @@ module Firmata
|
|
161
164
|
|
162
165
|
if analog_pin = analog_pins[pin]
|
163
166
|
pins[analog_pin].value = value
|
167
|
+
|
168
|
+
emit('analog-read', pin, value)
|
169
|
+
emit("analog-read-#{pin}", value)
|
164
170
|
end
|
165
171
|
|
166
172
|
when DIGITAL_MESSAGE_RANGE
|
@@ -189,25 +195,25 @@ module Firmata
|
|
189
195
|
|
190
196
|
case command
|
191
197
|
when CAPABILITY_RESPONSE
|
192
|
-
|
198
|
+
supported_modes = 0
|
193
199
|
n = 0
|
194
200
|
|
195
201
|
current_buffer.slice(2, current_buffer.length - 3).each do |byte|
|
196
202
|
if byte == 127
|
197
|
-
|
203
|
+
modes = []
|
198
204
|
# the pin modes
|
199
205
|
[ INPUT, OUTPUT, ANALOG, PWM, SERVO ].each do |mode|
|
200
|
-
|
206
|
+
modes.push(mode) unless (supported_modes & (1 << mode)).zero?
|
201
207
|
end
|
202
208
|
|
203
|
-
@pins.push(Pin.new(
|
209
|
+
@pins.push(Pin.new(modes, OUTPUT, 0))
|
204
210
|
|
205
|
-
|
211
|
+
supported_modes = 0
|
206
212
|
n = 0
|
207
213
|
next
|
208
214
|
end
|
209
215
|
|
210
|
-
|
216
|
+
supported_modes |= (1 << byte) if n.zero?
|
211
217
|
|
212
218
|
n ^= 1
|
213
219
|
end
|
@@ -371,33 +377,18 @@ module Firmata
|
|
371
377
|
write(START_SYSEX, ANALOG_MAPPING_QUERY, END_SYSEX)
|
372
378
|
end
|
373
379
|
|
374
|
-
|
375
|
-
# Internal: Toggle the pin analog and digtal reporting off and on.
|
376
|
-
#
|
377
|
-
# state - The Integer to turn the pin on (1) or off (0).
|
378
|
-
#
|
379
|
-
# Returns nothing.
|
380
|
-
def toggle_pin_reporting(state)
|
381
|
-
16.times do |i|
|
382
|
-
write(REPORT_DIGITAL | i, state)
|
383
|
-
write(REPORT_ANALOG | i, state)
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
# Public: Turn pin analog and digital reporting on.
|
380
|
+
# Public: Toggle pin reporting on or off.
|
388
381
|
#
|
389
|
-
#
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
# Public: Turn pin analog and digital reporting off.
|
382
|
+
# pin - The Integer pin to toggle.
|
383
|
+
# mode - The Integer mode the pin will report. The valid values are
|
384
|
+
# REPORT_DIGITAL or REPORT_ANALOG (default: REPORT_DIGITAL).
|
385
|
+
# state - The Integer state to toggle the pin. The valid value are
|
386
|
+
# HIGH or LOW (default: HIGH)
|
395
387
|
#
|
396
388
|
# Returns nothing.
|
397
|
-
def
|
398
|
-
|
389
|
+
def toggle_pin_reporting(pin, state = HIGH, mode = REPORT_DIGITAL)
|
390
|
+
write(mode | pin, state)
|
399
391
|
end
|
400
392
|
|
401
|
-
|
402
393
|
end
|
403
394
|
end
|
data/lib/firmata/version.rb
CHANGED
data/test/board_test.rb
CHANGED
@@ -126,32 +126,21 @@ class BoardTest < MiniTest::Unit::TestCase
|
|
126
126
|
assert_equal Firmata::Board::OUTPUT, board.pins[13].mode
|
127
127
|
end
|
128
128
|
|
129
|
-
|
129
|
+
|
130
|
+
def test_toggling_pin_reporting
|
130
131
|
mock_sp = mock_serial_port do |mock|
|
131
|
-
|
132
|
-
mock.expect(:write_nonblock, 2, [[Firmata::Board::REPORT_DIGITAL | i, 1].map(&:chr).join])
|
133
|
-
mock.expect(:write_nonblock, 2, [[(Firmata::Board::REPORT_ANALOG | i), 1].map(&:chr).join])
|
134
|
-
end
|
132
|
+
mock.expect(:write_nonblock, 2, [[Firmata::Board::REPORT_DIGITAL | 13, 1].map(&:chr).join])
|
135
133
|
end
|
136
134
|
|
137
135
|
board = Firmata::Board.new(mock_sp)
|
138
|
-
board.start_pin_reporting
|
139
136
|
|
137
|
+
board.toggle_pin_reporting(13)
|
140
138
|
mock_sp.verify
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_stop_pin_reporting
|
144
|
-
mock_sp = mock_serial_port do |mock|
|
145
|
-
16.times do |i|
|
146
|
-
mock.expect(:write_nonblock, 2, [[Firmata::Board::REPORT_DIGITAL | i, 0].map(&:chr).join])
|
147
|
-
mock.expect(:write_nonblock, 2, [[(Firmata::Board::REPORT_ANALOG | i), 0].map(&:chr).join])
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
board = Firmata::Board.new(mock_sp)
|
152
|
-
board.stop_pin_reporting
|
153
139
|
|
140
|
+
mock_sp.expect(:write_nonblock, 2, [[Firmata::Board::REPORT_DIGITAL | 13, 0].map(&:chr).join])
|
141
|
+
board.toggle_pin_reporting(13, 0)
|
154
142
|
mock_sp.verify
|
143
|
+
|
155
144
|
end
|
156
145
|
|
157
146
|
def test_processing_analog_message
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firmata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|