dino 0.10.0 → 0.11.2
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.
- data/CHANGELOG.md +67 -0
- data/README.md +24 -8
- data/bin/dino +108 -0
- data/dino.gemspec +2 -1
- data/examples/button/button.rb +3 -2
- data/examples/ethernet.rb +15 -0
- data/examples/{ir_receiver.rb → ir_receiver/ir_receiver.rb} +3 -2
- data/examples/led/led.rb +3 -3
- data/examples/{potentiometer.rb → potentiometer/potentiometer.rb} +4 -6
- data/examples/{rgb_led.rb → rgb_led/rgb_led.rb} +4 -6
- data/examples/{sensor.rb → sensor/sensor.rb} +5 -6
- data/examples/ser2net.rb +31 -0
- data/examples/servo/servo.rb +16 -0
- data/examples/stepper/stepper.rb +3 -3
- data/lib/dino/board.rb +69 -59
- data/lib/dino/components/base_component.rb +8 -7
- data/lib/dino/components/rgb_led.rb +19 -17
- data/lib/dino/components/sensor.rb +2 -2
- data/lib/dino/components/servo.rb +8 -5
- data/lib/dino/components/stepper.rb +9 -9
- data/lib/dino/tx_rx.rb +5 -4
- data/lib/dino/tx_rx/base.rb +64 -0
- data/lib/dino/tx_rx/serial.rb +44 -0
- data/lib/dino/tx_rx/tcp.rb +23 -0
- data/lib/dino/version.rb +1 -1
- data/spec/lib/board_spec.rb +53 -39
- data/spec/lib/components/led_spec.rb +1 -1
- data/spec/lib/components/rgb_led_spec.rb +49 -4
- data/spec/lib/components/sensor_spec.rb +14 -10
- data/spec/lib/components/servo_spec.rb +9 -4
- data/spec/lib/components/stepper_spec.rb +2 -2
- data/spec/lib/tx_rx/serial_spec.rb +111 -0
- data/spec/lib/tx_rx/tcp_spec.rb +37 -0
- data/spec/spec_helper.rb +10 -1
- data/src/du/du.ino +19 -0
- data/src/du_ethernet/du_ethernet.ino +71 -0
- data/src/lib/Dino.cpp +257 -0
- data/src/lib/Dino.h +85 -0
- metadata +25 -17
- data/examples/servo.rb +0 -13
- data/examples/telnet.rb +0 -28
- data/lib/dino/tx_rx/telnet.rb +0 -53
- data/lib/dino/tx_rx/usb_serial.rb +0 -69
- data/spec/lib/tx_rx/telnet_spec.rb +0 -66
- data/spec/lib/tx_rx/usb_serial_spec.rb +0 -101
- data/src/du.ino +0 -251
data/src/lib/Dino.h
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
/*
|
2
|
+
Library for dino ruby gem.
|
3
|
+
*/
|
4
|
+
|
5
|
+
#ifndef Dino_h
|
6
|
+
#define Dino_h
|
7
|
+
|
8
|
+
#include "Arduino.h"
|
9
|
+
#include <Servo.h>
|
10
|
+
|
11
|
+
// Allocate listener storage based on what board we're running.
|
12
|
+
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
13
|
+
# define PIN_COUNT 70
|
14
|
+
# define SERVO_OFFSET 22
|
15
|
+
#else
|
16
|
+
# define PIN_COUNT 22
|
17
|
+
# define SERVO_OFFSET 2
|
18
|
+
#endif
|
19
|
+
|
20
|
+
// Uncomment this line to enable debugging mode.
|
21
|
+
// #define debug true
|
22
|
+
|
23
|
+
class Dino {
|
24
|
+
public:
|
25
|
+
Dino();
|
26
|
+
void setupWrite(void (*writeCallback)(char *str));
|
27
|
+
void parse(char c);
|
28
|
+
void process();
|
29
|
+
void updateListeners();
|
30
|
+
|
31
|
+
private:
|
32
|
+
// Manage heartbeat and listeners.
|
33
|
+
long heartRate;
|
34
|
+
long lastUpdate;
|
35
|
+
unsigned int loopCount;
|
36
|
+
unsigned int analogDivider;
|
37
|
+
|
38
|
+
// Storage for enough analog and digital listeners for UNO or Nano board.
|
39
|
+
// Correspond to raw pin number by array index, and store boolean. false == disabled.
|
40
|
+
boolean analogListeners[PIN_COUNT];
|
41
|
+
boolean digitalListeners[PIN_COUNT];
|
42
|
+
|
43
|
+
// Keep track of the last read values for digital listeners. Only write responses when changed.
|
44
|
+
byte digitalListenerValues[PIN_COUNT];
|
45
|
+
|
46
|
+
// Request storage.
|
47
|
+
char request[8];
|
48
|
+
int index;
|
49
|
+
char cmdStr[3];
|
50
|
+
byte cmd;
|
51
|
+
char pinStr[3];
|
52
|
+
byte pin;
|
53
|
+
char valStr[4];
|
54
|
+
int val;
|
55
|
+
|
56
|
+
// Value and response storage.
|
57
|
+
int rval;
|
58
|
+
char response[8];
|
59
|
+
void (*_writeCallback)(char *str);
|
60
|
+
void writeResponse();
|
61
|
+
|
62
|
+
Servo servos[12];
|
63
|
+
|
64
|
+
// API-accessible functions.
|
65
|
+
void setMode ();
|
66
|
+
void dWrite ();
|
67
|
+
void dRead ();
|
68
|
+
void aWrite ();
|
69
|
+
void aRead ();
|
70
|
+
void addDigitalListener ();
|
71
|
+
void addAnalogListener ();
|
72
|
+
void removeListener ();
|
73
|
+
void servoToggle ();
|
74
|
+
void servoWrite ();
|
75
|
+
void reset ();
|
76
|
+
void setAnalogDivider ();
|
77
|
+
void setHeartRate ();
|
78
|
+
|
79
|
+
// Internal functions.
|
80
|
+
long timeSince (long event);
|
81
|
+
void updateDigitalListeners ();
|
82
|
+
void updateAnalogListeners ();
|
83
|
+
};
|
84
|
+
|
85
|
+
#endif
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dino
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.2
|
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: 2013-
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: serialport
|
@@ -31,30 +31,34 @@ description: ! "A utility library for interfacting with an Arduino.\n Designed
|
|
31
31
|
control, expansion, and with love."
|
32
32
|
email:
|
33
33
|
- austinbv@gmail.com
|
34
|
-
executables:
|
34
|
+
executables:
|
35
|
+
- dino
|
35
36
|
extensions: []
|
36
37
|
extra_rdoc_files: []
|
37
38
|
files:
|
38
39
|
- .gitignore
|
39
40
|
- .rvmrc
|
40
41
|
- .travis.yml
|
42
|
+
- CHANGELOG.md
|
41
43
|
- Gemfile
|
42
44
|
- LICENSE
|
43
45
|
- README.md
|
44
46
|
- Rakefile
|
47
|
+
- bin/dino
|
45
48
|
- dino.gemspec
|
46
49
|
- examples/button/button.png
|
47
50
|
- examples/button/button.rb
|
48
|
-
- examples/
|
51
|
+
- examples/ethernet.rb
|
52
|
+
- examples/ir_receiver/ir_receiver.rb
|
49
53
|
- examples/led/led.png
|
50
54
|
- examples/led/led.rb
|
51
|
-
- examples/potentiometer.rb
|
52
|
-
- examples/rgb_led.rb
|
53
|
-
- examples/sensor.rb
|
54
|
-
- examples/
|
55
|
+
- examples/potentiometer/potentiometer.rb
|
56
|
+
- examples/rgb_led/rgb_led.rb
|
57
|
+
- examples/sensor/sensor.rb
|
58
|
+
- examples/ser2net.rb
|
59
|
+
- examples/servo/servo.rb
|
55
60
|
- examples/stepper/stepper.png
|
56
61
|
- examples/stepper/stepper.rb
|
57
|
-
- examples/telnet.rb
|
58
62
|
- lib/dino.rb
|
59
63
|
- lib/dino/board.rb
|
60
64
|
- lib/dino/board_not_found.rb
|
@@ -68,8 +72,9 @@ files:
|
|
68
72
|
- lib/dino/components/servo.rb
|
69
73
|
- lib/dino/components/stepper.rb
|
70
74
|
- lib/dino/tx_rx.rb
|
71
|
-
- lib/dino/tx_rx/
|
72
|
-
- lib/dino/tx_rx/
|
75
|
+
- lib/dino/tx_rx/base.rb
|
76
|
+
- lib/dino/tx_rx/serial.rb
|
77
|
+
- lib/dino/tx_rx/tcp.rb
|
73
78
|
- lib/dino/version.rb
|
74
79
|
- spec/lib/board_not_found_spec.rb
|
75
80
|
- spec/lib/board_spec.rb
|
@@ -80,10 +85,13 @@ files:
|
|
80
85
|
- spec/lib/components/sensor_spec.rb
|
81
86
|
- spec/lib/components/servo_spec.rb
|
82
87
|
- spec/lib/components/stepper_spec.rb
|
83
|
-
- spec/lib/tx_rx/
|
84
|
-
- spec/lib/tx_rx/
|
88
|
+
- spec/lib/tx_rx/serial_spec.rb
|
89
|
+
- spec/lib/tx_rx/tcp_spec.rb
|
85
90
|
- spec/spec_helper.rb
|
86
|
-
- src/du.ino
|
91
|
+
- src/du/du.ino
|
92
|
+
- src/du_ethernet/du_ethernet.ino
|
93
|
+
- src/lib/Dino.cpp
|
94
|
+
- src/lib/Dino.h
|
87
95
|
homepage: https://github.com/austinbv/dino
|
88
96
|
licenses: []
|
89
97
|
post_install_message:
|
@@ -107,7 +115,7 @@ rubyforge_project:
|
|
107
115
|
rubygems_version: 1.8.24
|
108
116
|
signing_key:
|
109
117
|
specification_version: 3
|
110
|
-
summary: Control your
|
118
|
+
summary: Control your Arduino with Ruby.
|
111
119
|
test_files:
|
112
120
|
- spec/lib/board_not_found_spec.rb
|
113
121
|
- spec/lib/board_spec.rb
|
@@ -118,6 +126,6 @@ test_files:
|
|
118
126
|
- spec/lib/components/sensor_spec.rb
|
119
127
|
- spec/lib/components/servo_spec.rb
|
120
128
|
- spec/lib/components/stepper_spec.rb
|
121
|
-
- spec/lib/tx_rx/
|
122
|
-
- spec/lib/tx_rx/
|
129
|
+
- spec/lib/tx_rx/serial_spec.rb
|
130
|
+
- spec/lib/tx_rx/tcp_spec.rb
|
123
131
|
- spec/spec_helper.rb
|
data/examples/servo.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This is an example of how to use the servo class
|
3
|
-
#
|
4
|
-
|
5
|
-
require File.expand_path('../../lib/dino', __FILE__)
|
6
|
-
|
7
|
-
board = Dino::Board.new(Dino::TxRx.new)
|
8
|
-
servo = Dino::Components::Servo.new(pin: 9, board: board)
|
9
|
-
|
10
|
-
loop do
|
11
|
-
servo.position += 9
|
12
|
-
sleep 0.5
|
13
|
-
end
|
data/examples/telnet.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example showing how to access an Arduino over a telnet connection.
|
3
|
-
# Running ser2net on the machine that the Arduino is connected to will serve up the serial interface over telnet.
|
4
|
-
# You can then communicate with that Arduino over your local network or the Internet.
|
5
|
-
#
|
6
|
-
# Example ser2net command for an Arduino UNO on Mac:
|
7
|
-
# ser2net -u -C "9000:raw:0:/dev/cu.usbmodem621:115200"
|
8
|
-
#
|
9
|
-
# Replace 9000 with the port number you want to use and /dev/cu.usbmodem621 with your Arduino device.
|
10
|
-
# Arduino UNOs are usually /dev/ACM0 under Linux.
|
11
|
-
#
|
12
|
-
# ser2net is preinstalled on many Linuxes. Install ser2net on Mac with:
|
13
|
-
# brew install ser2net
|
14
|
-
#
|
15
|
-
# http://sourceforge.net/projects/ser2net/ for more info on configuring ser2net.
|
16
|
-
#
|
17
|
-
|
18
|
-
require File.expand_path('../../lib/dino', __FILE__)
|
19
|
-
|
20
|
-
# The host and port for the telnet connection must be passed in as arguments.
|
21
|
-
connection = Dino::TxRx::Telnet.new("localhost", 9000)
|
22
|
-
board = Dino::Board.new(connection)
|
23
|
-
led = Dino::Components::Led.new(pin: 13, board: board)
|
24
|
-
|
25
|
-
[:on, :off].cycle do |switch|
|
26
|
-
led.send(switch)
|
27
|
-
sleep 0.5
|
28
|
-
end
|
data/lib/dino/tx_rx/telnet.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'net/telnet'
|
2
|
-
require 'observer'
|
3
|
-
|
4
|
-
module Dino
|
5
|
-
module TxRx
|
6
|
-
class Telnet
|
7
|
-
include Observable
|
8
|
-
|
9
|
-
def initialize(host, port)
|
10
|
-
@host, @port = host, port
|
11
|
-
@read_buffer = ""
|
12
|
-
end
|
13
|
-
|
14
|
-
def io
|
15
|
-
@io ||= connect
|
16
|
-
end
|
17
|
-
|
18
|
-
def read
|
19
|
-
@thread ||= Thread.new do
|
20
|
-
loop do
|
21
|
-
io.waitfor("\n") do |text|
|
22
|
-
@read_buffer += text
|
23
|
-
while line = @read_buffer.slice!(/^.*\n/) do
|
24
|
-
pin, message = line.chop.split(/::/)
|
25
|
-
pin && message && changed && notify_observers(pin, message)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
sleep 0.004
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def close_read
|
34
|
-
return nil if @thread.nil?
|
35
|
-
Thread.kill(@thread)
|
36
|
-
@read_buffer = ""
|
37
|
-
@thread = nil
|
38
|
-
end
|
39
|
-
|
40
|
-
def write(message)
|
41
|
-
io.puts(message)
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def connect
|
47
|
-
Net::Telnet.new("Host" => @host, "Port" => @port)
|
48
|
-
rescue
|
49
|
-
raise BoardNotFound
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'serialport'
|
2
|
-
require 'observer'
|
3
|
-
|
4
|
-
module Dino
|
5
|
-
module TxRx
|
6
|
-
class USBSerial
|
7
|
-
include Observable
|
8
|
-
|
9
|
-
BAUD = 115200
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@first_write = true
|
13
|
-
end
|
14
|
-
|
15
|
-
def io
|
16
|
-
raise BoardNotFound unless @io ||= find_arduino
|
17
|
-
@io
|
18
|
-
end
|
19
|
-
|
20
|
-
def io=(device)
|
21
|
-
@io = SerialPort.new(device, BAUD)
|
22
|
-
end
|
23
|
-
|
24
|
-
def read
|
25
|
-
@thread ||= Thread.new do
|
26
|
-
loop do
|
27
|
-
if IO.select([io], nil, nil, 0.005)
|
28
|
-
pin, message = *io.gets.chop.split(/::/)
|
29
|
-
pin && message && changed && notify_observers(pin, message)
|
30
|
-
end
|
31
|
-
sleep 0.004
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def close_read
|
37
|
-
return nil if @thread.nil?
|
38
|
-
Thread.kill(@thread)
|
39
|
-
@thread = nil
|
40
|
-
end
|
41
|
-
|
42
|
-
def write(message)
|
43
|
-
IO.select(nil, [io], nil)
|
44
|
-
io.puts(message)
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def tty_devices
|
50
|
-
if RUBY_PLATFORM.include?("mswin") || RUBY_PLATFORM.include?("mingw")
|
51
|
-
["COM1", "COM2", "COM3", "COM4"]
|
52
|
-
else
|
53
|
-
`ls /dev`.split("\n").grep(/usb|ACM/).map{|d| "/dev/#{d}"}
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def find_arduino
|
58
|
-
tty_devices.map do |device|
|
59
|
-
next if device.match /^cu/
|
60
|
-
begin
|
61
|
-
SerialPort.new(device, BAUD)
|
62
|
-
rescue
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
end.compact.first
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Dino
|
4
|
-
describe TxRx::Telnet do
|
5
|
-
|
6
|
-
before :each do
|
7
|
-
@mock_telnet = mock
|
8
|
-
Net::Telnet.stub(:new) { @mock_telnet }
|
9
|
-
@instance = TxRx::Telnet.new("127.0.0.1", 3001)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '#connect' do
|
13
|
-
it 'should raise a BoardNotFound exception if it cannot connect to the server' do
|
14
|
-
Net::Telnet.stub(:new).and_raise
|
15
|
-
@instance = TxRx::Telnet.new("0.0.0.0", 999999)
|
16
|
-
expect { @instance.io }.to raise_exception BoardNotFound
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#io' do
|
21
|
-
it 'should set io to a new telnet connection with the specified host and port' do
|
22
|
-
Net::Telnet.should_receive(:new).with("Host" => "127.0.0.1", "Port" => 3001)
|
23
|
-
@instance.io
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should use the existing io instance if set' do
|
27
|
-
Net::Telnet.should_receive(:new).exactly(1).times.with("Host" => "127.0.0.1", "Port" => 3001)
|
28
|
-
2.times { @instance.io }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#read' do
|
33
|
-
it 'should create a new thread' do
|
34
|
-
Thread.should_receive :new
|
35
|
-
@instance.read
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'should get messages from the device' do
|
39
|
-
Thread.should_receive(:new).and_yield
|
40
|
-
@instance.should_receive(:loop).and_yield
|
41
|
-
@instance.io.should_receive(:waitfor).with("\n").and_yield("foo::bar\n")
|
42
|
-
@instance.should_receive(:changed).and_return(true)
|
43
|
-
@instance.should_receive(:notify_observers).with('foo','bar')
|
44
|
-
|
45
|
-
@instance.read
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '#close_read' do
|
50
|
-
it 'should kill the reading thread' do
|
51
|
-
@instance.instance_variable_set(:@thread, mock_thread = mock)
|
52
|
-
Thread.should_receive(:kill).with(mock_thread)
|
53
|
-
@instance.read
|
54
|
-
@instance.close_read
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#write' do
|
59
|
-
it 'should write to the device' do
|
60
|
-
@mock_telnet.should_receive(:puts).with("foo::bar")
|
61
|
-
@instance.write("foo::bar")
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Dino
|
4
|
-
describe TxRx::USBSerial do
|
5
|
-
it { should be }
|
6
|
-
|
7
|
-
describe '#initialize' do
|
8
|
-
it 'should set first_write to false' do
|
9
|
-
TxRx::USBSerial.new.instance_variable_get(:@first_write).should == true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#io' do
|
14
|
-
context "on windows" do
|
15
|
-
it 'should instantiate a new SerialPort for each usb tty device found' do
|
16
|
-
original_platform = RUBY_PLATFORM
|
17
|
-
RUBY_PLATFORM = "mswin"
|
18
|
-
subject.should_receive(:tty_devices).and_return(["COM1", "COM2", "COM3", "COM4"])
|
19
|
-
SerialPort.should_receive(:new).with('COM1', TxRx::USBSerial::BAUD).and_return(mock_serial = mock)
|
20
|
-
SerialPort.should_receive(:new).with('COM2', TxRx::USBSerial::BAUD).and_return(mock)
|
21
|
-
SerialPort.should_receive(:new).with('COM3', TxRx::USBSerial::BAUD).and_return(mock)
|
22
|
-
SerialPort.should_receive(:new).with('COM4', TxRx::USBSerial::BAUD).and_return(mock)
|
23
|
-
|
24
|
-
subject.io.should == mock_serial
|
25
|
-
RUBY_PLATFORM = original_platform
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "on unix" do
|
30
|
-
it 'should instantiate a new SerialPort for each usb tty device found' do
|
31
|
-
subject.should_receive(:tty_devices).and_return(['/dev/tty1.usb', '/dev/tty1.usb', '/dev/tty.ACM0'])
|
32
|
-
SerialPort.should_receive(:new).with('/dev/tty1.usb', TxRx::USBSerial::BAUD).and_return(mock_serial = mock)
|
33
|
-
SerialPort.should_receive(:new).with('/dev/tty1.usb', TxRx::USBSerial::BAUD).and_return(mock)
|
34
|
-
SerialPort.should_receive(:new).with('/dev/tty.ACM0', TxRx::USBSerial::BAUD).and_return(mock)
|
35
|
-
|
36
|
-
subject.io.should == mock_serial
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should use the existing io instance if set' do
|
41
|
-
subject.should_not_receive(:tty_devices)
|
42
|
-
SerialPort.stub(:new).and_return(mock_serial = mock)
|
43
|
-
|
44
|
-
subject.io = '/dev/tty1.usb'
|
45
|
-
subject.io.should == mock_serial
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should raise a BoardNotFound exception if there is no board connected' do
|
49
|
-
SerialPort.stub(:new).and_raise
|
50
|
-
expect { subject.io }.to raise_exception BoardNotFound
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#io=' do
|
55
|
-
it 'should set io to a new serial port with the specified device' do
|
56
|
-
SerialPort.should_receive(:new).with('/dev/tty1.usb', TxRx::USBSerial::BAUD).and_return(mock_serial = mock)
|
57
|
-
subject.io = '/dev/tty1.usb'
|
58
|
-
subject.instance_variable_get(:@io).should == mock_serial
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '#read' do
|
63
|
-
it 'should create a new thread' do
|
64
|
-
Thread.should_receive :new
|
65
|
-
subject.read
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should get messages from the device' do
|
69
|
-
subject.stub(:io).and_return(mock_serial = mock)
|
70
|
-
|
71
|
-
IO.should_receive(:select).and_return(true)
|
72
|
-
Thread.should_receive(:new).and_yield
|
73
|
-
subject.should_receive(:loop).and_yield
|
74
|
-
mock_serial.should_receive(:gets).and_return("foo::bar\n")
|
75
|
-
subject.should_receive(:changed).and_return(true)
|
76
|
-
subject.should_receive(:notify_observers).with('foo','bar')
|
77
|
-
|
78
|
-
subject.read
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe '#close_read' do
|
83
|
-
it 'should kill the reading thread' do
|
84
|
-
subject.instance_variable_set(:@thread, mock_thread = mock)
|
85
|
-
Thread.should_receive(:kill).with(mock_thread)
|
86
|
-
subject.read
|
87
|
-
subject.close_read
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe '#write' do
|
92
|
-
it 'should write to the device' do
|
93
|
-
IO.should_receive(:select).and_return(true)
|
94
|
-
|
95
|
-
subject.stub(:io).and_return(mock_serial = mock)
|
96
|
-
mock_serial.should_receive(:puts).with('a message')
|
97
|
-
subject.write('a message')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|