pi_driver 0.0.3 → 0.0.4
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/lib/pi_driver.rb +1 -1
- data/lib/pi_driver/device.rb +1 -1
- data/lib/pi_driver/device/mcp23017.rb +49 -33
- data/lib/pi_driver/device/mcp23017/hardware_address.rb +2 -4
- data/lib/pi_driver/device/mcp23017/port.rb +2 -2
- data/lib/pi_driver/device/mcp23017/register.rb +7 -7
- data/lib/pi_driver/device/mcp23017/register/defval.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/gpinten.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/gpio.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/gppu.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/intcap.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/intcon.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/intf.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/iocon.rb +15 -15
- data/lib/pi_driver/device/mcp23017/register/iodir.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/ipol.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/olat.rb +1 -1
- data/lib/pi_driver/device/mcp23017/register/register_helper.rb +2 -2
- data/lib/pi_driver/i2c_master.rb +2 -2
- data/lib/pi_driver/pin.rb +6 -6
- data/lib/pi_driver/pin/board.rb +1 -1
- data/lib/pi_driver/pin/direction.rb +1 -1
- data/lib/pi_driver/pin/directory_helper.rb +2 -2
- data/lib/pi_driver/pin/file_helper.rb +0 -4
- data/lib/pi_driver/utils/argument_helper.rb +5 -3
- data/lib/pi_driver/utils/byte.rb +0 -2
- data/lib/pi_driver/utils/edge.rb +1 -1
- data/lib/pi_driver/utils/interrupt.rb +22 -11
- data/lib/pi_driver/utils/state.rb +1 -1
- data/test/device/mcp23017/test_hardware_address.rb +1 -1
- data/test/device/mcp23017/test_i2c_master.rb +1 -1
- data/test/device/mcp23017/test_read.rb +2 -2
- data/test/device/mcp23017/test_register.rb +2 -2
- data/test/device/mcp23017/test_write.rb +2 -2
- data/test/i2c_master/test_stop.rb +1 -1
- data/test/i2c_master/test_write.rb +1 -1
- data/test/pin/test_clear_interrupt.rb +1 -1
- data/test/pin/test_error.rb +1 -1
- data/test/pin/test_interrupt.rb +1 -1
- data/test/test_helper.rb +5 -3
- data/test/utils/test_error.rb +0 -2
- data/test/utils/test_interrupt.rb +3 -3
- data/test/utils_test_helper.rb +1 -2
- metadata +42 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec7c160fe4b3aeb5e32d745b696ce308eb4a75db
|
4
|
+
data.tar.gz: 868d3c59043a67f94ea6a27cfc8d6d82236090de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9836ae29da58513975b9b46aaa00df30bc388db8e02f21daa5aafd732371472ba7a1d411e7536d7080a89fd173b2e45321e162a9b4ecd122b7fabde95f748007
|
7
|
+
data.tar.gz: 9f9175009294e86637cee0a10350a66a955b6efee79c33f3a29843a64ecd670e4ad67a0d157b6488f793b793f24e93c9f408cce1c77126528fb2ca6516b8528c
|
data/lib/pi_driver.rb
CHANGED
data/lib/pi_driver/device.rb
CHANGED
@@ -19,7 +19,7 @@ module PiDriver
|
|
19
19
|
attr_reader :hardware_address
|
20
20
|
|
21
21
|
def initialize(options = {})
|
22
|
-
@argument_helper = Utils::ArgumentHelper.new prefix:
|
22
|
+
@argument_helper = Utils::ArgumentHelper.new prefix: 'MCP23017'
|
23
23
|
@i2c_master = options[:i2c_master]
|
24
24
|
@hardware_address = HardwareAddress.new observer: self
|
25
25
|
update_opcodes
|
@@ -27,7 +27,7 @@ module PiDriver
|
|
27
27
|
|
28
28
|
def update_registers
|
29
29
|
bank = registers[:iocon].bank
|
30
|
-
registers.
|
30
|
+
registers.each_value do |register|
|
31
31
|
register.update_address bank
|
32
32
|
end
|
33
33
|
end
|
@@ -39,50 +39,33 @@ module PiDriver
|
|
39
39
|
@opcode_for_read = PiDriver::I2CMaster.prepare_address_for_read base
|
40
40
|
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
register_array.each_with_index do |register, index|
|
46
|
-
@argument_helper.check(:register, register, registers.keys)
|
42
|
+
# TODO: read and write look similar. consider consolidation
|
43
|
+
def read(*register_array)
|
44
|
+
check_registers register_array
|
47
45
|
|
48
|
-
|
49
|
-
@i2c_master.ack
|
50
|
-
@i2c_master.write registers[register].address
|
51
|
-
@i2c_master.ack
|
52
|
-
@i2c_master.write registers[register].byte
|
53
|
-
@i2c_master.ack
|
46
|
+
@i2c_master.start
|
54
47
|
|
55
|
-
|
48
|
+
register_array.each_with_index do |register, sequence_index|
|
49
|
+
@i2c_master.restart unless sequence_index.zero?
|
50
|
+
read_register register
|
56
51
|
end
|
57
52
|
|
58
53
|
@i2c_master.stop
|
59
54
|
end
|
60
55
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
register_array.each_with_index do |register, index|
|
65
|
-
@argument_helper.check(:register, register, registers.keys)
|
66
|
-
|
67
|
-
@i2c_master.write @opcode_for_write
|
68
|
-
@i2c_master.ack
|
69
|
-
@i2c_master.write registers[register].address
|
70
|
-
@i2c_master.ack
|
71
|
-
|
72
|
-
@i2c_master.restart
|
56
|
+
def write(*register_array)
|
57
|
+
check_registers register_array
|
73
58
|
|
74
|
-
|
75
|
-
@i2c_master.ack
|
76
|
-
registers[register].byte = @i2c_master.read
|
59
|
+
@i2c_master.start
|
77
60
|
|
78
|
-
|
61
|
+
register_array.each_with_index do |register, sequence_index|
|
62
|
+
@i2c_master.restart unless sequence_index.zero?
|
63
|
+
write_register register
|
79
64
|
end
|
80
65
|
|
81
66
|
@i2c_master.stop
|
82
67
|
end
|
83
68
|
|
84
|
-
private
|
85
|
-
|
86
69
|
def self.register_reader(*register_array)
|
87
70
|
register_array.each do |register|
|
88
71
|
define_method register do
|
@@ -91,6 +74,7 @@ module PiDriver
|
|
91
74
|
end
|
92
75
|
end
|
93
76
|
|
77
|
+
private_class_method :register_reader
|
94
78
|
register_reader :iodira, :iodirb
|
95
79
|
register_reader :ipola, :ipolb
|
96
80
|
register_reader :gpintena, :gpintenb
|
@@ -103,10 +87,13 @@ module PiDriver
|
|
103
87
|
register_reader :gpioa, :gpiob
|
104
88
|
register_reader :olata, :olatb
|
105
89
|
|
90
|
+
private
|
91
|
+
|
106
92
|
def registers
|
107
93
|
@registers ||= initialize_registers
|
108
94
|
end
|
109
95
|
|
96
|
+
# rubocop:disable Metrics/AbcSize
|
110
97
|
def initialize_registers
|
111
98
|
{
|
112
99
|
iodira: Iodir.new(port: :a), iodirb: Iodir.new(port: :b),
|
@@ -124,6 +111,35 @@ module PiDriver
|
|
124
111
|
olata: Olat.new(port: :a), olatb: Olat.new(port: :b)
|
125
112
|
}
|
126
113
|
end
|
114
|
+
# rubocop:enable Metrics/AbcSize
|
115
|
+
|
116
|
+
def check_registers(register_array)
|
117
|
+
register_array.each do |register|
|
118
|
+
@argument_helper.check(:register, register, registers.keys)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def read_register(register)
|
123
|
+
@i2c_master.write @opcode_for_write
|
124
|
+
@i2c_master.ack
|
125
|
+
@i2c_master.write registers[register].address
|
126
|
+
@i2c_master.ack
|
127
|
+
|
128
|
+
@i2c_master.restart
|
129
|
+
|
130
|
+
@i2c_master.write @opcode_for_read
|
131
|
+
@i2c_master.ack
|
132
|
+
registers[register].byte = @i2c_master.read
|
133
|
+
end
|
134
|
+
|
135
|
+
def write_register(register)
|
136
|
+
@i2c_master.write @opcode_for_write
|
137
|
+
@i2c_master.ack
|
138
|
+
@i2c_master.write registers[register].address
|
139
|
+
@i2c_master.ack
|
140
|
+
@i2c_master.write registers[register].byte
|
141
|
+
@i2c_master.ack
|
142
|
+
end
|
127
143
|
end
|
128
144
|
end
|
129
|
-
end
|
145
|
+
end
|
@@ -5,7 +5,7 @@ module PiDriver
|
|
5
5
|
attr_reader :a0, :a1, :a2
|
6
6
|
|
7
7
|
def initialize(options)
|
8
|
-
@argument_helper = Utils::ArgumentHelper.new prefix:
|
8
|
+
@argument_helper = Utils::ArgumentHelper.new prefix: 'MCP23017::HardwareAddress'
|
9
9
|
|
10
10
|
@observer = options.delete :observer
|
11
11
|
|
@@ -14,8 +14,6 @@ module PiDriver
|
|
14
14
|
@a2 = Utils::State::LOW
|
15
15
|
end
|
16
16
|
|
17
|
-
private
|
18
|
-
|
19
17
|
def self.address_writer(*addresses)
|
20
18
|
addresses.each do |address|
|
21
19
|
setter_symbol = "#{address}=".to_sym
|
@@ -34,4 +32,4 @@ module PiDriver
|
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
37
|
-
end
|
35
|
+
end
|
@@ -10,7 +10,7 @@ module PiDriver
|
|
10
10
|
attr_reader :address, :byte
|
11
11
|
|
12
12
|
def initialize(options)
|
13
|
-
@argument_helper = Utils::ArgumentHelper.new prefix:
|
13
|
+
@argument_helper = Utils::ArgumentHelper.new prefix: 'MCP23017::Register'
|
14
14
|
|
15
15
|
@register = options[:register]
|
16
16
|
@port = options[:port]
|
@@ -26,7 +26,6 @@ module PiDriver
|
|
26
26
|
@argument_helper.check(:register_byte, value, Utils::Byte::VALID_BYTES)
|
27
27
|
@byte = value
|
28
28
|
mirror_bits_from_byte
|
29
|
-
@byte
|
30
29
|
end
|
31
30
|
|
32
31
|
def update_address(bank)
|
@@ -34,8 +33,6 @@ module PiDriver
|
|
34
33
|
@address = RegisterHelper.address options
|
35
34
|
end
|
36
35
|
|
37
|
-
private
|
38
|
-
|
39
36
|
def self.bit_accessors
|
40
37
|
Utils::Byte::NUM_BITS_PER_BYTE.times do |bit_number|
|
41
38
|
string = "bit#{bit_number}"
|
@@ -58,6 +55,7 @@ module PiDriver
|
|
58
55
|
end
|
59
56
|
end
|
60
57
|
|
58
|
+
private_class_method :bit_accessors
|
61
59
|
bit_accessors
|
62
60
|
|
63
61
|
def self.mirror_bit_accessors(prefix_symbol)
|
@@ -76,8 +74,10 @@ module PiDriver
|
|
76
74
|
end
|
77
75
|
end
|
78
76
|
|
77
|
+
private_class_method :mirror_bit_accessors
|
78
|
+
|
79
79
|
def mirror_bits_from_byte
|
80
|
-
byte_bits = Utils::Byte
|
80
|
+
byte_bits = Utils::Byte.byte_to_bits(@byte)
|
81
81
|
|
82
82
|
@bit0 = byte_bits.pop
|
83
83
|
@bit1 = byte_bits.pop
|
@@ -90,9 +90,9 @@ module PiDriver
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def mirror_byte_from_bits
|
93
|
-
@byte = Utils::Byte
|
93
|
+
@byte = Utils::Byte.bits_to_byte [@bit7, @bit6, @bit5, @bit4, @bit3, @bit2, @bit1, @bit0]
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
98
|
-
end
|
98
|
+
end
|
@@ -15,27 +15,27 @@ module PiDriver
|
|
15
15
|
@observer.update_registers
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
alias bank bit7
|
19
|
+
alias bank= bit7=
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
alias mirror bit6
|
22
|
+
alias mirror= bit6=
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
alias seqop bit5
|
25
|
+
alias seqop= bit5=
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
alias disslw bit4
|
28
|
+
alias disslw= bit4=
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
alias haen bit3
|
31
|
+
alias haen= bit3=
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
alias odr bit2
|
34
|
+
alias odr= bit2=
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
alias intpol bit1
|
37
|
+
alias intpol= bit1=
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
41
|
-
end
|
41
|
+
end
|
data/lib/pi_driver/i2c_master.rb
CHANGED
@@ -2,7 +2,7 @@ module PiDriver
|
|
2
2
|
class I2CMaster
|
3
3
|
def initialize(options = {})
|
4
4
|
@frequency = 100_000
|
5
|
-
@delta_time = @frequency
|
5
|
+
@delta_time = @frequency**-1.0
|
6
6
|
@clock_pin = options[:clock_pin]
|
7
7
|
@data_pin = options[:data_pin]
|
8
8
|
stop
|
@@ -18,7 +18,7 @@ module PiDriver
|
|
18
18
|
drive_clock_pin
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
alias restart start
|
22
22
|
|
23
23
|
def write(byte)
|
24
24
|
send_data byte
|
data/lib/pi_driver/pin.rb
CHANGED
@@ -7,7 +7,7 @@ module PiDriver
|
|
7
7
|
attr_reader :gpio_number
|
8
8
|
|
9
9
|
def initialize(gpio_number, options = {})
|
10
|
-
@argument_helper = Utils::ArgumentHelper.new prefix:
|
10
|
+
@argument_helper = Utils::ArgumentHelper.new prefix: 'PiDriver::Pin'
|
11
11
|
|
12
12
|
@gpio_number = gpio_number
|
13
13
|
@argument_helper.check(:gpio_number, @gpio_number, Board::VALID_NUMBERS)
|
@@ -54,13 +54,13 @@ module PiDriver
|
|
54
54
|
@state
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
alias off clear
|
58
58
|
|
59
59
|
def clear?
|
60
60
|
state == Utils::State::LOW
|
61
61
|
end
|
62
62
|
|
63
|
-
|
63
|
+
alias off? clear?
|
64
64
|
|
65
65
|
def set
|
66
66
|
return unless output?
|
@@ -69,13 +69,13 @@ module PiDriver
|
|
69
69
|
@state
|
70
70
|
end
|
71
71
|
|
72
|
-
|
72
|
+
alias on set
|
73
73
|
|
74
74
|
def set?
|
75
75
|
state == Utils::State::HIGH
|
76
76
|
end
|
77
77
|
|
78
|
-
|
78
|
+
alias on? set?
|
79
79
|
|
80
80
|
def state
|
81
81
|
input? ? @file_helper.read_value : @state
|
@@ -89,7 +89,7 @@ module PiDriver
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def clear_interrupt
|
92
|
-
@interrupt
|
92
|
+
@interrupt&.clear
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
data/lib/pi_driver/pin/board.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module PiDriver
|
2
2
|
class Pin
|
3
3
|
class DirectoryHelper
|
4
|
-
# TODO figure out environment variables for test
|
4
|
+
# TODO: figure out environment variables for test
|
5
5
|
# DIR_BASE = '/sys/class'
|
6
6
|
DIR_BASE = File.expand_path '~/pi/gpio/sys/class'
|
7
|
-
DIR_GPIO = "#{DIR_BASE}/gpio"
|
7
|
+
DIR_GPIO = "#{DIR_BASE}/gpio".freeze
|
8
8
|
|
9
9
|
def initialize(gpio_number)
|
10
10
|
@gpio_number = gpio_number
|
@@ -9,10 +9,12 @@ module PiDriver
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def check(type, arg, valid_options)
|
12
|
-
|
13
|
-
|
12
|
+
return if valid_options.include?(arg)
|
13
|
+
options = valid_options.map(&:to_s).join(', ')
|
14
|
+
middle = "invalid argument for #{type.inspect}, "
|
15
|
+
middle += "#{arg.inspect} was given but expected to be one of #{options}"
|
14
16
|
message = "#{@prefix if @prefix} #{middle} #{@suffix if @suffix}"
|
15
|
-
raise ArgumentError, message
|
17
|
+
raise ArgumentError, message
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
data/lib/pi_driver/utils/byte.rb
CHANGED
data/lib/pi_driver/utils/edge.rb
CHANGED
@@ -2,7 +2,7 @@ module PiDriver
|
|
2
2
|
module Utils
|
3
3
|
class Interrupt
|
4
4
|
def initialize(edge, &block)
|
5
|
-
@argument_helper = Utils::ArgumentHelper.new prefix:
|
5
|
+
@argument_helper = Utils::ArgumentHelper.new prefix: 'Utils::Interrupt'
|
6
6
|
@edge = edge
|
7
7
|
|
8
8
|
@argument_helper.check(:block, block_given?, [true])
|
@@ -16,8 +16,8 @@ module PiDriver
|
|
16
16
|
last_state = check
|
17
17
|
loop do
|
18
18
|
new_state = check
|
19
|
-
edge =
|
20
|
-
yield
|
19
|
+
edge = get_current_edge(new_state, last_state)
|
20
|
+
yield edge if valid_edge? edge
|
21
21
|
last_state = new_state
|
22
22
|
end
|
23
23
|
end
|
@@ -36,25 +36,36 @@ module PiDriver
|
|
36
36
|
state
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
# TODO: I hate that I had to break this into separate functions. Revisit.
|
40
|
+
def get_current_edge(new_state, last_state)
|
41
|
+
is_rising = new_state == Utils::State::HIGH && last_state == Utils::State::LOW
|
42
|
+
is_falling = new_state == Utils::State::LOW && last_state == Utils::State::HIGH
|
42
43
|
|
43
|
-
|
44
|
-
|
44
|
+
if is_rising
|
45
|
+
Utils::Edge::RISING
|
46
|
+
elsif is_falling
|
47
|
+
Utils::Edge::FALLING
|
48
|
+
end
|
45
49
|
end
|
46
50
|
|
47
|
-
def
|
51
|
+
def both_edge?
|
48
52
|
@edge == Utils::Edge::BOTH
|
49
53
|
end
|
50
54
|
|
51
|
-
def
|
55
|
+
def rising_edge?
|
52
56
|
@edge == Utils::Edge::RISING
|
53
57
|
end
|
54
58
|
|
55
|
-
def
|
59
|
+
def falling_edge?
|
56
60
|
@edge == Utils::Edge::FALLING
|
57
61
|
end
|
62
|
+
|
63
|
+
def valid_edge?(edge)
|
64
|
+
valid_rising_edge = (Utils::Edge::RISING == edge) && (both_edge? || rising_edge?)
|
65
|
+
valid_falling_edge = (Utils::Edge::FALLING == edge) && (both_edge? || falling_edge?)
|
66
|
+
|
67
|
+
valid_rising_edge || valid_falling_edge
|
68
|
+
end
|
58
69
|
end
|
59
70
|
end
|
60
71
|
end
|
@@ -35,7 +35,7 @@ class MCP23017ReadTest < MCP23017Test
|
|
35
35
|
@i2c_master.expects(:ack).with(nil).in_sequence(seq)
|
36
36
|
|
37
37
|
@i2c_master.expects(:restart).with(nil).in_sequence(seq)
|
38
|
-
|
38
|
+
|
39
39
|
@i2c_master.expects(:write).with(0b01001111).in_sequence(seq)
|
40
40
|
@i2c_master.expects(:ack).with(nil).in_sequence(seq)
|
41
41
|
@i2c_master.expects(:read).with(nil).returns(0b01010101).in_sequence(seq)
|
@@ -60,4 +60,4 @@ class MCP23017ReadTest < MCP23017Test
|
|
60
60
|
assert_equal 0b01010101, @mcp23017.olata.byte
|
61
61
|
assert_equal 0b10101010, @mcp23017.olatb.byte
|
62
62
|
end
|
63
|
-
end
|
63
|
+
end
|
@@ -36,7 +36,7 @@ class MCP23017RegisterTest < MCP23017Test
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_addresses_bank_high
|
39
|
-
|
39
|
+
@mcp23017.iocon.bank = 1
|
40
40
|
assert_equal 0x05, @mcp23017.iocon.address
|
41
41
|
|
42
42
|
assert_equal 0x00, @mcp23017.iodira.address
|
@@ -115,4 +115,4 @@ class MCP23017RegisterTest < MCP23017Test
|
|
115
115
|
@mcp23017.iodira.bit7 = 0
|
116
116
|
assert_equal 0b01010101, @mcp23017.iodira.byte
|
117
117
|
end
|
118
|
-
end
|
118
|
+
end
|
@@ -23,7 +23,7 @@ class MCP23017WriteTest < MCP23017Test
|
|
23
23
|
seq = sequence('multiple')
|
24
24
|
|
25
25
|
@i2c_master.expects(:start).with(nil).in_sequence(seq)
|
26
|
-
|
26
|
+
|
27
27
|
@i2c_master.expects(:write).with(0b01001110).in_sequence(seq)
|
28
28
|
@i2c_master.expects(:ack).with(nil).in_sequence(seq)
|
29
29
|
@i2c_master.expects(:write).with(0x14).in_sequence(seq)
|
@@ -46,4 +46,4 @@ class MCP23017WriteTest < MCP23017Test
|
|
46
46
|
@mcp23017.olatb.byte = 0b10101010
|
47
47
|
@mcp23017.write :olata, :olatb
|
48
48
|
end
|
49
|
-
end
|
49
|
+
end
|
@@ -3,7 +3,7 @@ require_relative '../pin_test_helper'
|
|
3
3
|
class PinClearInterruptTest < PinTest
|
4
4
|
def test_clear_interrupt
|
5
5
|
pin = PiDriver::Pin.new @pin_number
|
6
|
-
interrupt_thread = pin.interrupt {
|
6
|
+
interrupt_thread = pin.interrupt {}
|
7
7
|
interrupt_thread.expects(:kill)
|
8
8
|
pin.clear_interrupt
|
9
9
|
end
|
data/test/pin/test_error.rb
CHANGED
data/test/pin/test_interrupt.rb
CHANGED
@@ -5,7 +5,7 @@ class PinInterruptTest < PinTest
|
|
5
5
|
pin = PiDriver::Pin.new @pin_number
|
6
6
|
interrupt = mock
|
7
7
|
|
8
|
-
[
|
8
|
+
%i[rising falling both none].each do |edge|
|
9
9
|
begin
|
10
10
|
PiDriver::Utils::Interrupt.expects(:new).with(edge).returns(interrupt)
|
11
11
|
interrupt.expects(:start)
|
data/test/test_helper.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
1
4
|
require 'minitest/autorun'
|
2
5
|
require 'pi_driver'
|
3
6
|
require 'mocha/minitest'
|
4
7
|
|
5
8
|
class TestCase < Minitest::Test
|
6
9
|
def timeout(seconds = 0.5)
|
7
|
-
success = false
|
8
10
|
started_at = Time.now
|
9
|
-
|
11
|
+
until (success = yield)
|
10
12
|
break if Time.now - started_at > seconds
|
11
13
|
end
|
12
14
|
success
|
13
15
|
end
|
14
|
-
end
|
16
|
+
end
|
data/test/utils/test_error.rb
CHANGED
@@ -4,7 +4,6 @@ class UtilsErrorTest < UtilsTest
|
|
4
4
|
def test_error_interrupt_new_block
|
5
5
|
assert_raises ArgumentError do
|
6
6
|
PiDriver::Utils::Interrupt.new(:rising)
|
7
|
-
timeout { false }
|
8
7
|
end
|
9
8
|
end
|
10
9
|
|
@@ -12,7 +11,6 @@ class UtilsErrorTest < UtilsTest
|
|
12
11
|
assert_raises ArgumentError do
|
13
12
|
interrupt = PiDriver::Utils::Interrupt.new(:rising) { [0, 1].sample }
|
14
13
|
interrupt.start
|
15
|
-
timeout { false }
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
@@ -10,7 +10,7 @@ class UtilsInterruptTest < UtilsTest
|
|
10
10
|
thread = mock
|
11
11
|
thread.stubs(:abort_on_exception=)
|
12
12
|
Thread.expects(:new).returns(thread)
|
13
|
-
interrupt.start {
|
13
|
+
interrupt.start {}
|
14
14
|
timeout 0.1 { false }
|
15
15
|
end
|
16
16
|
|
@@ -100,10 +100,10 @@ class UtilsInterruptTest < UtilsTest
|
|
100
100
|
interrupted = false
|
101
101
|
interrupt.start { interrupted = true }
|
102
102
|
|
103
|
-
timeout {
|
103
|
+
timeout {}
|
104
104
|
refute interrupted
|
105
105
|
ensure
|
106
106
|
interrupt.clear
|
107
107
|
end
|
108
108
|
end
|
109
|
-
end
|
109
|
+
end
|
data/test/utils_test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pi_driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Winningham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mocha
|
@@ -30,6 +30,46 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.4.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rubocop
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.51.0
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.51.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.51.0
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.51.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: simplecov
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.15.1
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.15.1
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.15.1
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.15.1
|
33
73
|
description: Ruby driver for Raspberry Pi with device drivers
|
34
74
|
email: lucas.winningham@gmail.com
|
35
75
|
executables:
|