domotics-arduino 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -33,19 +33,23 @@ task :major, :commit_message do |t, args|
33
33
  update(args[:commit_message]){ |sv,i| i == MAJOR ? sv.succ : "0" }
34
34
  end
35
35
 
36
+
36
37
  def update(msg)
37
38
  # Update version
38
- File.open "lib/domotics/arduino/version.rb", "r+" do |f|
39
+ File.open "./lib/domotics/arduino/version.rb", "r+" do |f|
39
40
  up = f.read.sub(/\d+.\d+.\d+/) { |ver| ver.split('.').map.with_index{ |sv, i| yield sv,i }.join('.') }
40
41
  f.seek 0
41
42
  f.write up
42
43
  end
44
+ puts "Changed version."
45
+ puts "Removed #{File.delete(*Dir['./*.gem'])} old gems"
46
+ Dir["./*.gemspec"].each { |spec| puts %x(gem build #{spec}) }
47
+ Dir["./*.gem"].each { |gem| puts %x(gem push #{gem}) }
43
48
  # add new files to repo
44
49
  %x(git add --all .)
45
50
  # commit
46
51
  if msg then %x(git commit -a -m "#{msg}")
47
52
  else %x(git commit -a --reuse-message=HEAD); end
48
- # release
49
- Rake::Task[:release].reenable
50
- Rake::Task[:release].invoke
53
+ %x(git push)
54
+ puts "Pushed to github."
51
55
  end
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Goredar"]
10
10
  spec.email = ["goredar@gmail.com"]
11
11
  spec.description = %q{Arduino part of Domotics}
12
- spec.summary = %q{Arduino part of Domotics}
13
- spec.homepage = ""
12
+ spec.summary = %q{Hardware drivers for arduino}
13
+ spec.homepage = "https://dom.goredar.it"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -21,7 +21,7 @@ module Domotics
21
21
  SUCCESSREPRLY = 2
22
22
  FAILREPRLY = 3
23
23
  # Board events
24
- EVENTS = {'0' => :pin_state_change}
24
+ EVENTS = {'0' => :pin_state_changed}
25
25
  # Commands for board
26
26
  SETPINMODE = 0
27
27
  GETDIGITAL = 1
@@ -65,6 +65,8 @@ module Domotics
65
65
  @pwm_pins = Array.new(12) { |index| 2+index } + [44,45,46]
66
66
  end
67
67
  @logger = args[:logger] || Logger.new(STDERR)
68
+ @timeout = args[:timeout] || 1
69
+ @retry_wait = args[:retry_wait] || 5
68
70
  # Not allow multiple command sends
69
71
  @command_lock = Mutex.new
70
72
  @reply = Queue.new
@@ -184,13 +186,13 @@ module Domotics
184
186
  private
185
187
 
186
188
  # Default event handler simple prints event.
187
- def event_handler(hash)
188
- raise hash[:e] if hash[:e].is_a? ArduinoError
189
+ def event_handler(event)
190
+ raise event[:e] if event[:e].is_a? ArduinoError
189
191
  end
190
192
 
191
193
  # Send command directly to board
192
194
  def send_command(command, pin = 0, value = 0)
193
- Timeout.timeout(1) do
195
+ Timeout.timeout(@timeout) do
194
196
  @command_lock.synchronize do
195
197
  @board.puts("#{command} #{pin} #{value}")
196
198
  # Get reply
@@ -285,8 +287,8 @@ module Domotics
285
287
  tries = tries || 0
286
288
  tries += 1
287
289
  if tries <= 3
288
- @logger.info { "Attempt #{tries}: try to reconnect in #{2**tries} seconds." }
289
- sleep 2**tries
290
+ @logger.info { "Attempt #{tries}: try to reconnect in #{@retry_wait**tries} seconds." }
291
+ sleep @retry_wait**tries
290
292
  retry
291
293
  end
292
294
  @logger.error { "Board [#{@port_str}] malfunction. Automatic restart failed." }
@@ -0,0 +1,50 @@
1
+ require 'pty'
2
+
3
+ module Domotics
4
+ module Arduino
5
+
6
+ class BoardEmulator
7
+ attr_accessor :type, :state_list
8
+ def initialize(args = {})
9
+ success = ArduinoBase::SUCCESSREPRLY
10
+ @master, @slave = PTY.open
11
+ @type = args[:type] || :normal
12
+ @state_list = Hash.new(ArduinoBase::LOW)
13
+ Thread.new do
14
+ loop do
15
+ case @type
16
+ when :dead
17
+ terminate
18
+ when :crasy
19
+ @master.gets
20
+ @master.puts rand(4).times.map{ rand(10) }.join(' ')
21
+ when :disconnect
22
+ @master.gets
23
+ @slave.close
24
+ @master.close
25
+ else
26
+ message = @master.gets
27
+ command, pin, value = message.chomp.split(" ").map{ |m| m.to_i }
28
+ case command
29
+ when ArduinoBase::ECHOREPLY
30
+ @master.puts "#{value} #{pin}"
31
+ when ArduinoBase::SETDIGITAL
32
+ @state_list[pin] = value
33
+ @master.puts success
34
+ else
35
+ @master.puts success
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ def port
42
+ @slave.path
43
+ end
44
+ def toggle_pin(pin)
45
+ @state_list[pin] = @state_list[pin] == ArduinoBase::LOW ? ArduinoBase::HIGH : ArduinoBase::LOW
46
+ @master.puts "0 #{pin} #{@state_list[pin]}"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
1
  module Domotics
2
2
  module Arduino
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.2"
4
4
  end
5
5
  end
data/test/test_arduino.rb CHANGED
@@ -1,34 +1,45 @@
1
1
  require 'test/unit'
2
2
  require 'domotics/arduino'
3
- require 'board_emulator'
4
3
 
5
4
  class ArduinoTestBoard
5
+ attr_reader :last_event
6
6
  include Domotics::Arduino::ArduinoBase
7
+ def event_handler(event)
8
+ super
9
+ @last_event = event
10
+ end
7
11
  end
8
12
 
9
13
  class ArduinoTest < Test::Unit::TestCase
10
- def asetup
11
- @brd = ArduinoTestBoard.new(port: BoardEmulator.new.port)
14
+ def setup
15
+ #@brd = ArduinoTestBoard.new(port: Domotics::Arduino::BoardEmulator.new.port)
12
16
  end
13
17
  def test_dead_board
14
- assert_raise Domotics::Arduino::ArduinoError do
15
- ArduinoTestBoard.new(port: BoardEmulator.new(type: :dead).port)
16
- end
18
+ assert_raise(Domotics::Arduino::ArduinoError) { emulate :dead }
17
19
  end
18
20
  def test_crasy_board
19
- assert_raise Domotics::Arduino::ArduinoError do
20
- ArduinoTestBoard.new(port: BoardEmulator.new(type: :crasy).port)
21
- end
21
+ assert_raise(Domotics::Arduino::ArduinoError) { emulate :crasy }
22
22
  end
23
23
  def test_disconnected_board
24
- assert_raise Domotics::Arduino::ArduinoError do
25
- ArduinoTestBoard.new(port: BoardEmulator.new(type: :disconnect).port)
26
- end
24
+ assert_raise(Domotics::Arduino::ArduinoError) { emulate :disconnect }
25
+ end
26
+ def test_set_digital
27
+ brd, emul = emulate
28
+ brd.set_digital(13, Domotics::Arduino::ArduinoBase::HIGH)
29
+ assert_equal Domotics::Arduino::ArduinoBase::HIGH, emul.state_list[13]
30
+ end
31
+ def test_watch
32
+ brd, emul = emulate
33
+ emul.toggle_pin (13)
34
+ sleep 0.1
35
+ assert_equal Hash[:event, :pin_state_changed, :pin, 13, :state, Domotics::Arduino::ArduinoBase::HIGH], brd.last_event
27
36
  end
28
- def atest_set_pin_mode
29
- @brd
37
+ def emulate(type = :normal)
38
+ emul = Domotics::Arduino::BoardEmulator.new :type => type
39
+ brd = ArduinoTestBoard.new port: emul.port, retry_wait: 1
40
+ [brd, emul]
30
41
  end
31
- def ateardown
32
- @brd.destroy
42
+ def teardown
43
+ #@brd.destroy
33
44
  end
34
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domotics-arduino
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -66,7 +66,6 @@ executables: []
66
66
  extensions: []
67
67
  extra_rdoc_files: []
68
68
  files:
69
- - .Rakefile.kate-swp
70
69
  - .gitignore
71
70
  - Gemfile
72
71
  - LICENSE.txt
@@ -75,6 +74,7 @@ files:
75
74
  - domotics-arduino.gemspec
76
75
  - lib/domotics/arduino.rb
77
76
  - lib/domotics/arduino/arduino_base.rb
77
+ - lib/domotics/arduino/board_emulator.rb
78
78
  - lib/domotics/arduino/digital_pin.rb
79
79
  - lib/domotics/arduino/digital_pin/nc_sensor.rb
80
80
  - lib/domotics/arduino/digital_pin/no_sensor.rb
@@ -82,9 +82,8 @@ files:
82
82
  - lib/domotics/arduino/firmware/stepper.c
83
83
  - lib/domotics/arduino/pwm_pin.rb
84
84
  - lib/domotics/arduino/version.rb
85
- - test/board_emulator.rb
86
85
  - test/test_arduino.rb
87
- homepage: ''
86
+ homepage: https://dom.goredar.it
88
87
  licenses:
89
88
  - MIT
90
89
  post_install_message:
@@ -108,8 +107,7 @@ rubyforge_project:
108
107
  rubygems_version: 1.8.25
109
108
  signing_key:
110
109
  specification_version: 3
111
- summary: Arduino part of Domotics
110
+ summary: Hardware drivers for arduino
112
111
  test_files:
113
- - test/board_emulator.rb
114
112
  - test/test_arduino.rb
115
113
  has_rdoc:
data/.Rakefile.kate-swp DELETED
Binary file
@@ -1,39 +0,0 @@
1
- require 'pty'
2
-
3
- class BoardEmulator
4
- def initialize(args = {})
5
- success = Domotics::Arduino::ArduinoBase::SUCCESSREPRLY
6
- @master, @slave = PTY.open
7
- type = args[:type] || :normal
8
- Thread.new do
9
- case type
10
- when :dead
11
- terminate
12
- when :crasy
13
- loop do
14
- @master.gets
15
- ans = rand(4).times.map{ rand(10) }.join(' ')
16
- @master.puts ans
17
- end
18
- when :disconnect
19
- @master.gets
20
- @slave.close
21
- @master.close
22
- else
23
- loop do
24
- raise unless message = @master.gets
25
- command, pin, value = message.chomp.split(" ").map{ |m| m.to_i }
26
- case command
27
- when Domotics::Arduino::ArduinoBase::ECHOREPLY
28
- @master.puts "#{value} #{pin}"
29
- else
30
- @master.puts success
31
- end
32
- end
33
- end
34
- end
35
- end
36
- def port
37
- @slave.path
38
- end
39
- end