em-printer-serialport 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +3 -0
- data/Rakefile +6 -0
- data/bin/serial-monitor +26 -0
- data/em-printer-serialport.gemspec +26 -0
- data/lib/em-printer-serialport.rb +7 -0
- data/lib/em-printer-serialport/connection.rb +19 -0
- data/lib/em-printer-serialport/serial_port.rb +31 -0
- data/lib/em-printer-serialport/version.rb +5 -0
- data/readme.md +39 -0
- data/spec/echo_spec.rb +19 -0
- data/spec/em_serialport_spec.rb +12 -0
- data/spec/spec_helper.rb +7 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e7d4117aab80956fbcf052f106f73efadf9253e6
|
4
|
+
data.tar.gz: 0cc74bb214d9604438c016bbbd497aef89e5a510
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6b543f80d9b007129eeaae79705c2e5d577ffd28cdd2a5c1a89761427f805a94cda7dd3952521fba5bc52823aaf392a5803c3d287f27e22ae40672897d46d8f5
|
7
|
+
data.tar.gz: 21f793d53534ea80f210535b77ed236075c9af4f343132aeea1a50056be462306972c2fec07d29d2faa2e0677c27c0cdc48bd12bf1aca19ea4fab9db6ad832d1
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/serial-monitor
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'em-printer-serialport'
|
6
|
+
|
7
|
+
EM.run do
|
8
|
+
if ARGV.size < 1
|
9
|
+
STDERR.print "Usage: #{$0} /dev/tty.usbserial-ABCDEFGH\n"
|
10
|
+
exit(1)
|
11
|
+
end
|
12
|
+
|
13
|
+
serial = EventMachine.open_serial(ARGV[0], 9600, 8, 1, SerialPort::NONE)
|
14
|
+
serial.on_data do |data|
|
15
|
+
puts 'received: ' + data.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
Thread.new do
|
19
|
+
while TRUE do
|
20
|
+
serial.send_data STDIN.gets.chomp
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
puts 'Serial monitor initialized. Enter data followed by a newline character.'
|
25
|
+
puts 'Ctrl-C to stop'
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'em-printer-serialport/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'em-printer-serialport'
|
8
|
+
gem.version = Em::Serialport::VERSION
|
9
|
+
gem.authors = ['Anup Narkhede', 'Kaz Walker']
|
10
|
+
gem.email = ['kaz@printtopeer.com']
|
11
|
+
gem.summary = %q{EventMachine compatible serialport library}
|
12
|
+
gem.description = %q{}
|
13
|
+
gem.homepage = 'https://github.com/PrintToPeer/em-printer-serialport'
|
14
|
+
gem.license = 'GPLv3'
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ['lib']
|
20
|
+
|
21
|
+
gem.add_dependency 'eventmachine', '~> 1.0.0'
|
22
|
+
gem.add_dependency 'serialport'
|
23
|
+
gem.add_development_dependency 'bundler', '~> 1.3.0'
|
24
|
+
gem.add_development_dependency 'rake', '~> 10.1.0'
|
25
|
+
gem.add_development_dependency 'rspec', '~> 2.14.0'
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module EventMachine
|
2
|
+
class Connection
|
3
|
+
def on_data(&blk)
|
4
|
+
@on_data = blk
|
5
|
+
end
|
6
|
+
|
7
|
+
def trigger_on_data(data)
|
8
|
+
@on_data.call(data) if @on_data
|
9
|
+
end
|
10
|
+
|
11
|
+
def receive_data data
|
12
|
+
trigger_on_data(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def associate_callback_target(sig)
|
16
|
+
return(nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module EventMachine
|
2
|
+
class << self
|
3
|
+
def connect_serial(dev, baud, databits, stopbits, parity)
|
4
|
+
SerialPort.open(dev, baud, databits, stopbits, parity).uuid
|
5
|
+
end
|
6
|
+
|
7
|
+
def open_serial(dev, baud, databits, stopbits, parity, handler=nil)
|
8
|
+
klass = if(handler and handler.is_a?(Class))
|
9
|
+
handler
|
10
|
+
else
|
11
|
+
Class.new(Connection) {handler and include handler}
|
12
|
+
end
|
13
|
+
uuid = connect_serial(dev, baud, databits, stopbits, parity)
|
14
|
+
connection = klass.new uuid
|
15
|
+
@conns[uuid] = connection
|
16
|
+
block_given? and yield connection
|
17
|
+
connection
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class SerialPort < StreamObject
|
22
|
+
def self.open(dev, baud, databits, stopbits, parity)
|
23
|
+
io = ::SerialPort.new(dev, baud, databits, stopbits, parity)
|
24
|
+
self.new(io)
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(io)
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# em-printer-serialport
|
2
|
+
|
3
|
+
Eventmachine compatible asynchronous, ruby-serialport library. A fork of em-serialport that is maintained by PrintToPeer.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
gem install em-printer-serialport
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
|
11
|
+
If you are on Mac, you need to set up a virtual USB serial port by installing a driver from [http://www.ftdichip.com/Drivers/VCP.htm](http://www.ftdichip.com/Drivers/VCP.htm). Identify your serial port device. For ex: /dev/tty.usbserial-xxxxxxxx
|
12
|
+
|
13
|
+
EM.run do
|
14
|
+
serial = EventMachine.open_serial('/dev/tty.usbserial-xxxxxxxx', 9600, 8, 1, 0)
|
15
|
+
serial.send_data 'foo'
|
16
|
+
|
17
|
+
serial.on_data do |data|
|
18
|
+
# do something with data
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
## Serial Monitor
|
23
|
+
|
24
|
+
The gem comes with a simple command line Serial Monitor. Launch it as:
|
25
|
+
|
26
|
+
bundle exec serial-monitor /dev/tty.usbserial-xxxxxxxx
|
27
|
+
|
28
|
+
Here is a working example, tested with [arduino echo server](https://github.com/railsbob/arduino-examples/tree/master/echo_server). It simply reads and writes data to serial port from command line.
|
29
|
+
|
30
|
+
Serial monitor initialized. Enter data followed by a newline character.
|
31
|
+
Ctrl-C to stop
|
32
|
+
hello
|
33
|
+
received: hello
|
34
|
+
A very long sentence
|
35
|
+
received: A v
|
36
|
+
received: ery long
|
37
|
+
received: sentence
|
38
|
+
|
39
|
+
|
data/spec/echo_spec.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# Tested with arduino echo server on USB serial port driver
|
4
|
+
describe 'Echo server test' do
|
5
|
+
it 'should send and receive data over serial port' do
|
6
|
+
@data = nil
|
7
|
+
serial_device = '/dev/tty.usbserial-A100QDRR'
|
8
|
+
|
9
|
+
EM.run do
|
10
|
+
serial = EventMachine.open_serial(serial_device, 9600, 8, 1, SerialPort::NONE)
|
11
|
+
serial.send_data 'an'
|
12
|
+
|
13
|
+
serial.on_data do |data|
|
14
|
+
data.should == 'an'
|
15
|
+
EM.stop
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'EM::Serialport' do
|
4
|
+
it 'should use pure_ruby as library_type' do
|
5
|
+
EventMachine.library_type.should eql(:pure_ruby)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should load dependencies' do
|
9
|
+
defined?(EventMachine::StreamObject).should eql('constant')
|
10
|
+
defined?(SerialPort).should eql('constant')
|
11
|
+
end
|
12
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: em-printer-serialport
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anup Narkhede
|
8
|
+
- Kaz Walker
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: eventmachine
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.0.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.0.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: serialport
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: bundler
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 1.3.0
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.3.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rake
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 10.1.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 10.1.0
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.14.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.14.0
|
84
|
+
description: ''
|
85
|
+
email:
|
86
|
+
- kaz@printtopeer.com
|
87
|
+
executables:
|
88
|
+
- serial-monitor
|
89
|
+
extensions: []
|
90
|
+
extra_rdoc_files: []
|
91
|
+
files:
|
92
|
+
- .gitignore
|
93
|
+
- Gemfile
|
94
|
+
- Rakefile
|
95
|
+
- bin/serial-monitor
|
96
|
+
- em-printer-serialport.gemspec
|
97
|
+
- lib/em-printer-serialport.rb
|
98
|
+
- lib/em-printer-serialport/connection.rb
|
99
|
+
- lib/em-printer-serialport/serial_port.rb
|
100
|
+
- lib/em-printer-serialport/version.rb
|
101
|
+
- readme.md
|
102
|
+
- spec/echo_spec.rb
|
103
|
+
- spec/em_serialport_spec.rb
|
104
|
+
- spec/spec_helper.rb
|
105
|
+
homepage: https://github.com/PrintToPeer/em-printer-serialport
|
106
|
+
licenses:
|
107
|
+
- GPLv3
|
108
|
+
metadata: {}
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - '>='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
requirements: []
|
124
|
+
rubyforge_project:
|
125
|
+
rubygems_version: 2.0.7
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
128
|
+
summary: EventMachine compatible serialport library
|
129
|
+
test_files:
|
130
|
+
- spec/echo_spec.rb
|
131
|
+
- spec/em_serialport_spec.rb
|
132
|
+
- spec/spec_helper.rb
|
133
|
+
has_rdoc:
|