relayrace 0.0.3 → 1.0.0

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 (2) hide show
  1. data/lib/relayrace.rb +22 -11
  2. metadata +33 -6
data/lib/relayrace.rb CHANGED
@@ -1,16 +1,12 @@
1
1
  require 'monitor'
2
2
  require 'serialport'
3
+ require 'system_timer'
3
4
 
4
5
  class RelayrAce
5
-
6
- Version = '0.0.3'
7
-
8
- attr_reader :port
9
-
10
- def initialize(port)
6
+ def initialize(port, logger = nil)
11
7
  @port = port
12
- @serial = SerialPort.new(port, 115200, 8, 1, SerialPort::NONE)
13
- @serial.extend(MonitorMixin)
8
+ @logger = logger
9
+ open_serial_port
14
10
  end
15
11
 
16
12
  def close
@@ -48,9 +44,24 @@ class RelayrAce
48
44
 
49
45
  def send_cmd(cmd)
50
46
  @serial.synchronize do
51
- @serial.write("\r\n")
52
- 2.times { @serial.getc == ':' }
53
- @serial.write("#{cmd}\r\n")
47
+ begin
48
+ SystemTimer.timeout_after(10) do
49
+ @serial.write("\r\n")
50
+ until @serial.getc == ':' end
51
+ @serial.getc # Swallow the next ':'
52
+ @serial.write("#{cmd}\r\n")
53
+ end
54
+ rescue Timeout::Error
55
+ @logger.warn "Reopening serial port due to timeout" if @logger
56
+ open_serial_port
57
+ end
54
58
  end
55
59
  end
60
+
61
+ private
62
+ def open_serial_port
63
+ @serial.close if @serial
64
+ @serial = SerialPort.new(@port, 115200, 8, 1, SerialPort::NONE)
65
+ @serial.extend(MonitorMixin)
66
+ end
56
67
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relayrace
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
9
  - 0
9
- - 3
10
- version: 0.0.3
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mat Trudel
@@ -15,10 +15,37 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-20 00:00:00 -04:00
18
+ date: 2010-07-22 00:00:00 -04:00
19
19
  default_executable:
20
- dependencies: []
21
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ruby-serialport
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: SystemTimer
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
22
49
  description: RelayrAce talks to Canakit USB relay boards.
23
50
  email: mat@geeky.net
24
51
  executables: []