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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pi_driver.rb +1 -1
  3. data/lib/pi_driver/device.rb +1 -1
  4. data/lib/pi_driver/device/mcp23017.rb +49 -33
  5. data/lib/pi_driver/device/mcp23017/hardware_address.rb +2 -4
  6. data/lib/pi_driver/device/mcp23017/port.rb +2 -2
  7. data/lib/pi_driver/device/mcp23017/register.rb +7 -7
  8. data/lib/pi_driver/device/mcp23017/register/defval.rb +1 -1
  9. data/lib/pi_driver/device/mcp23017/register/gpinten.rb +1 -1
  10. data/lib/pi_driver/device/mcp23017/register/gpio.rb +1 -1
  11. data/lib/pi_driver/device/mcp23017/register/gppu.rb +1 -1
  12. data/lib/pi_driver/device/mcp23017/register/intcap.rb +1 -1
  13. data/lib/pi_driver/device/mcp23017/register/intcon.rb +1 -1
  14. data/lib/pi_driver/device/mcp23017/register/intf.rb +1 -1
  15. data/lib/pi_driver/device/mcp23017/register/iocon.rb +15 -15
  16. data/lib/pi_driver/device/mcp23017/register/iodir.rb +1 -1
  17. data/lib/pi_driver/device/mcp23017/register/ipol.rb +1 -1
  18. data/lib/pi_driver/device/mcp23017/register/olat.rb +1 -1
  19. data/lib/pi_driver/device/mcp23017/register/register_helper.rb +2 -2
  20. data/lib/pi_driver/i2c_master.rb +2 -2
  21. data/lib/pi_driver/pin.rb +6 -6
  22. data/lib/pi_driver/pin/board.rb +1 -1
  23. data/lib/pi_driver/pin/direction.rb +1 -1
  24. data/lib/pi_driver/pin/directory_helper.rb +2 -2
  25. data/lib/pi_driver/pin/file_helper.rb +0 -4
  26. data/lib/pi_driver/utils/argument_helper.rb +5 -3
  27. data/lib/pi_driver/utils/byte.rb +0 -2
  28. data/lib/pi_driver/utils/edge.rb +1 -1
  29. data/lib/pi_driver/utils/interrupt.rb +22 -11
  30. data/lib/pi_driver/utils/state.rb +1 -1
  31. data/test/device/mcp23017/test_hardware_address.rb +1 -1
  32. data/test/device/mcp23017/test_i2c_master.rb +1 -1
  33. data/test/device/mcp23017/test_read.rb +2 -2
  34. data/test/device/mcp23017/test_register.rb +2 -2
  35. data/test/device/mcp23017/test_write.rb +2 -2
  36. data/test/i2c_master/test_stop.rb +1 -1
  37. data/test/i2c_master/test_write.rb +1 -1
  38. data/test/pin/test_clear_interrupt.rb +1 -1
  39. data/test/pin/test_error.rb +1 -1
  40. data/test/pin/test_interrupt.rb +1 -1
  41. data/test/test_helper.rb +5 -3
  42. data/test/utils/test_error.rb +0 -2
  43. data/test/utils/test_interrupt.rb +3 -3
  44. data/test/utils_test_helper.rb +1 -2
  45. metadata +42 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a7911c66c972390a7e29125befb058062ca4843
4
- data.tar.gz: 96117a7d39eb4ff1b0a391ee672a9c49b0460353
3
+ metadata.gz: ec7c160fe4b3aeb5e32d745b696ce308eb4a75db
4
+ data.tar.gz: 868d3c59043a67f94ea6a27cfc8d6d82236090de
5
5
  SHA512:
6
- metadata.gz: 4b63ed0825623d485602850e0f70ae8ad2d5768a9a2145b11b1c97cd37698622e19ab5f14e2c61833e81fe3e7ca7fc6ddc5e65e9b4ca962b3c577d80828fa9db
7
- data.tar.gz: 1d0249b62cf2f6e653178760dc17e3b8caf7d62a83bd22096b4b48ef38d211b1e0967bcea18f2cbfe5eccb3da0183418e23de228aea9481160ae8341b28d82b5
6
+ metadata.gz: 9836ae29da58513975b9b46aaa00df30bc388db8e02f21daa5aafd732371472ba7a1d411e7536d7080a89fd173b2e45321e162a9b4ecd122b7fabde95f748007
7
+ data.tar.gz: 9f9175009294e86637cee0a10350a66a955b6efee79c33f3a29843a64ecd670e4ad67a0d157b6488f793b793f24e93c9f408cce1c77126528fb2ca6516b8528c
data/lib/pi_driver.rb CHANGED
@@ -4,4 +4,4 @@ require_relative 'pi_driver/pin'
4
4
  require_relative 'pi_driver/utils'
5
5
 
6
6
  module PiDriver
7
- end
7
+ end
@@ -3,4 +3,4 @@ require_relative 'device/mcp23017'
3
3
  module PiDriver
4
4
  class Device
5
5
  end
6
- end
6
+ end
@@ -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: "MCP23017"
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.each do |_, register|
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
- def write(*register_array)
43
- @i2c_master.start
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
- @i2c_master.write @opcode_for_write
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
- @i2c_master.restart unless index == register_array.length - 1
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 read(*register_array)
62
- @i2c_master.start
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
- @i2c_master.write @opcode_for_read
75
- @i2c_master.ack
76
- registers[register].byte = @i2c_master.read
59
+ @i2c_master.start
77
60
 
78
- @i2c_master.restart unless index == register_array.length - 1
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: "MCP23017::HardwareAddress"
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
@@ -8,7 +8,7 @@ module PiDriver
8
8
  VALID_PORTS = [
9
9
  A,
10
10
  B
11
- ]
11
+ ].freeze
12
12
 
13
13
  def self.default(options)
14
14
  if options[:register] == MCP23017::Register::RegisterHelper::IODIR
@@ -20,4 +20,4 @@ module PiDriver
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ 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: "MCP23017::Register"
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::byte_to_bits(@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::bits_to_byte [@bit7, @bit6, @bit5, @bit4, @bit3, @bit2, @bit1, @bit0]
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
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -15,27 +15,27 @@ module PiDriver
15
15
  @observer.update_registers
16
16
  end
17
17
 
18
- alias_method :bank, :bit7
19
- alias_method :bank=, :bit7=
18
+ alias bank bit7
19
+ alias bank= bit7=
20
20
 
21
- alias_method :mirror, :bit6
22
- alias_method :mirror=, :bit6=
21
+ alias mirror bit6
22
+ alias mirror= bit6=
23
23
 
24
- alias_method :seqop, :bit5
25
- alias_method :seqop=, :bit5=
24
+ alias seqop bit5
25
+ alias seqop= bit5=
26
26
 
27
- alias_method :disslw, :bit4
28
- alias_method :disslw=, :bit4=
27
+ alias disslw bit4
28
+ alias disslw= bit4=
29
29
 
30
- alias_method :haen, :bit3
31
- alias_method :haen=, :bit3=
30
+ alias haen bit3
31
+ alias haen= bit3=
32
32
 
33
- alias_method :odr, :bit2
34
- alias_method :odr=, :bit2=
33
+ alias odr bit2
34
+ alias odr= bit2=
35
35
 
36
- alias_method :intpol, :bit1
37
- alias_method :intpol=, :bit1=
36
+ alias intpol bit1
37
+ alias intpol= bit1=
38
38
  end
39
39
  end
40
40
  end
41
- end
41
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -11,4 +11,4 @@ module PiDriver
11
11
  end
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -27,7 +27,7 @@ module PiDriver
27
27
  INTCAP,
28
28
  GPIO,
29
29
  OLAT
30
- ]
30
+ ].freeze
31
31
 
32
32
  def self.address(options)
33
33
  bank = options[:bank]
@@ -47,4 +47,4 @@ module PiDriver
47
47
  end
48
48
  end
49
49
  end
50
- end
50
+ end
@@ -2,7 +2,7 @@ module PiDriver
2
2
  class I2CMaster
3
3
  def initialize(options = {})
4
4
  @frequency = 100_000
5
- @delta_time = @frequency ** -1.0
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
- alias_method :restart, :start
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: "PiDriver::Pin"
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
- alias_method :off, :clear
57
+ alias off clear
58
58
 
59
59
  def clear?
60
60
  state == Utils::State::LOW
61
61
  end
62
62
 
63
- alias_method :off?, :clear?
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
- alias_method :on, :set
72
+ alias on set
73
73
 
74
74
  def set?
75
75
  state == Utils::State::HIGH
76
76
  end
77
77
 
78
- alias_method :on?, :set?
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.clear if @interrupt
92
+ @interrupt&.clear
93
93
  end
94
94
  end
95
95
  end
@@ -59,7 +59,7 @@ module PiDriver
59
59
  PIN40,
60
60
  PIN27,
61
61
  PIN28
62
- ]
62
+ ].freeze
63
63
  end
64
64
  end
65
65
  end
@@ -7,7 +7,7 @@ module PiDriver
7
7
  VALID_DIRECTIONS = [
8
8
  INPUT,
9
9
  OUTPUT
10
- ]
10
+ ].freeze
11
11
  end
12
12
  end
13
13
  end
@@ -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
@@ -8,10 +8,6 @@ module PiDriver
8
8
  @directory_helper = DirectoryHelper.new @gpio_number
9
9
  end
10
10
 
11
- def read_direction
12
- File.read(@directory_helper.direction).to_sym
13
- end
14
-
15
11
  def read_value
16
12
  File.read(@directory_helper.value).to_i
17
13
  end
@@ -9,10 +9,12 @@ module PiDriver
9
9
  end
10
10
 
11
11
  def check(type, arg, valid_options)
12
- valid_options_for_message = valid_options.map { |value| "#{value.inspect}"}.join(', ')
13
- middle = "invalid argument #{arg.inspect} for #{type.inspect} expected to be one of #{valid_options_for_message}"
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 unless valid_options.include?(arg)
17
+ raise ArgumentError, message
16
18
  end
17
19
  end
18
20
  end
@@ -7,8 +7,6 @@ module PiDriver
7
7
 
8
8
  VALID_BYTES = (ALL_BITS_LOW..ALL_BITS_HIGH).to_a
9
9
 
10
- private
11
-
12
10
  def self.byte_to_bits(byte)
13
11
  byte.to_s(2).rjust(NUM_BITS_PER_BYTE, '0').chars.map(&:to_i)
14
12
  end
@@ -11,7 +11,7 @@ module PiDriver
11
11
  FALLING,
12
12
  BOTH,
13
13
  NONE
14
- ]
14
+ ].freeze
15
15
  end
16
16
  end
17
17
  end
@@ -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: "Utils::Interrupt"
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 = get_interrupt_edge(new_state, last_state)
20
- yield(edge) if edge
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
- def get_interrupt_edge(new_state, last_state)
40
- rising_trigger = new_state == Utils::State::HIGH && last_state == Utils::State::LOW
41
- falling_trigger = new_state == Utils::State::LOW && last_state == Utils::State::HIGH
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
- return Utils::Edge::RISING if rising_trigger && (both? || rising?)
44
- return Utils::Edge::FALLING if falling_trigger && (both? || falling?)
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 both?
51
+ def both_edge?
48
52
  @edge == Utils::Edge::BOTH
49
53
  end
50
54
 
51
- def rising?
55
+ def rising_edge?
52
56
  @edge == Utils::Edge::RISING
53
57
  end
54
58
 
55
- def falling?
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
@@ -7,7 +7,7 @@ module PiDriver
7
7
  VALID_STATES = [
8
8
  LOW,
9
9
  HIGH
10
- ]
10
+ ].freeze
11
11
  end
12
12
  end
13
13
  end
@@ -26,4 +26,4 @@ class MCP23017HardwareAddressTest < MCP23017Test
26
26
 
27
27
  @mcp23017.hardware_address.a0 = 0
28
28
  end
29
- end
29
+ end
@@ -7,4 +7,4 @@ class MCP23017I2CMasterTest < MCP23017Test
7
7
 
8
8
  PiDriver::Device::MCP23017.new i2c_master: @i2c_master
9
9
  end
10
- end
10
+ 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
- @mcp23017.iocon.bank = 1
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
@@ -4,7 +4,7 @@ class I2CStopTest < I2CMasterTest
4
4
  def test_new_i2c_stop
5
5
  @sequence = sequence('stop')
6
6
  expect_sequence_stop
7
-
7
+
8
8
  PiDriver::I2CMaster.new clock_pin: @clock_pin, data_pin: @data_pin
9
9
  end
10
10
 
@@ -18,7 +18,7 @@ class I2CWriteTest < I2CMasterTest
18
18
  private
19
19
 
20
20
  def expect_bit_write(value)
21
- if value == 0
21
+ if value.zero?
22
22
  expect_data_pin_to_be_driven
23
23
  elsif value == 1
24
24
  expect_data_pin_to_be_released
@@ -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
@@ -29,7 +29,7 @@ class PinErrorTest < PinTest
29
29
  def test_error_edge
30
30
  pin = PiDriver::Pin.new @pin_number
31
31
  assert_raises ArgumentError do
32
- pin.interrupt(:invalid_edge) { }
32
+ pin.interrupt(:invalid_edge) {}
33
33
  end
34
34
  end
35
35
  end
@@ -5,7 +5,7 @@ class PinInterruptTest < PinTest
5
5
  pin = PiDriver::Pin.new @pin_number
6
6
  interrupt = mock
7
7
 
8
- [:rising, :falling, :both, :none].each do |edge|
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
- while !(success = yield) do
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
@@ -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
@@ -1,6 +1,5 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class UtilsTest < TestCase
4
- def setup
5
- end
4
+ def setup; end
6
5
  end
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.3
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-17 00:00:00.000000000 Z
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: