rubyserial 0.2.4 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c0f2623ceb9ee25081bab20c1bcc9b6fbc7f1439
4
- data.tar.gz: 78b9b14fdf55405fda69d63439121be1bdacb5a4
3
+ metadata.gz: d2f04ee25b99a43446963e07bc51a82bab7fc6b2
4
+ data.tar.gz: 0df2b7cbbde4edc8f268d1b78c744ff88d608a45
5
5
  SHA512:
6
- metadata.gz: 35e40ae4a5635f80f0181ac751c40506b41dd61ca6aeb2b9377e1f5f17b1516685e35e126ea4ca6fe3419530521c166c1eb661cbfbbf7550d8eac42a4062a687
7
- data.tar.gz: bae11afaf890ef42e1eefa383628eb8eab8c8396ca4f18bab67851b4e503779710e8371048bc111f9d42c9f605bea51d390fe2cf6301de4f52e76a6a46aae48d
6
+ metadata.gz: 764b79276ea5b8d352dda64d5ade0f9a0b260af4c45c845c45addd8c184b760e10e0eba0cd9ab2e2648fae84264a8c050c462e4702f7a45dd72ca0993e34b8d0
7
+ data.tar.gz: 510df41b207862690ce47456763ea0a8bcfeb0ccf19b7989e7defaeb52f98ed4ed0823468854e6483b82182b3abc7060c58fe81ee99cb27cebbcd835af470267
@@ -12,6 +12,8 @@ matrix:
12
12
  allow_failures:
13
13
  - rvm: jruby-head
14
14
  - rvm: ruby-head
15
+ before_install:
16
+ - gem update bundler
15
17
  install:
16
18
  - sudo apt-get update && sudo apt-get install --force-yes socat
17
19
  script:
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 The Hybrid Group
1
+ Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # rubyserial
2
2
 
3
- RubySerial is a simple Ruby gem for reading from and writing to serial ports.
3
+ RubySerial is a simple Ruby gem for reading from and writing to serial ports.
4
4
 
5
5
  Unlike other Ruby serial port implementations, it supports all of the most popular Ruby implementations (MRI, JRuby, & Rubinius) on the most popular operating systems (OSX, Linux, & Windows). And it does not require any native compilation thanks to using RubyFFI [https://github.com/ffi/ffi](https://github.com/ffi/ffi).
6
6
 
@@ -36,13 +36,37 @@ available. Emits a `RubySerial::Exception` on error.
36
36
 
37
37
  **getbyte -> Fixnum or nil**
38
38
 
39
- Returns an 8 bit byte or nil if no data is available.
39
+ Returns an 8 bit byte or nil if no data is available.
40
40
  Emits a `RubySerial::Exception` on error.
41
41
 
42
42
  **RubySerial::Exception**
43
43
 
44
44
  A wrapper exception type, that returns the underlying system error code.
45
45
 
46
+ ## Running the tests
47
+
48
+ The test suite is written using rspec, just use the `rspec` command.
49
+
50
+ However, to run the tests, you must also have the `socat` utility program installed.
51
+
52
+ ### Installing socat on OS X
53
+
54
+ ```
55
+ brew install socat
56
+ ```
57
+
58
+ ### Installing socat on Linux
59
+
60
+ ```
61
+ sudo apt-get install socat
62
+ ```
63
+
64
+ ### Installing socat on Windows
65
+
66
+ You might need to build from source... the latest build of socat for Windows is quite old. Get source from here:
67
+
68
+ http://www.dest-unreach.org/socat/download/
69
+
46
70
  ## License
47
71
 
48
72
  Apache 2.0. See `LICENSE` for more details.
@@ -1,4 +1,5 @@
1
- $:.unshift(File.dirname(__FILE__))
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
+
2
3
  require 'rbconfig'
3
4
  require 'ffi'
4
5
  include RbConfig
@@ -18,4 +19,4 @@ else
18
19
  require 'rubyserial/osx_constants'
19
20
  end
20
21
  require 'rubyserial/posix'
21
- end
22
+ end
@@ -1,4 +1,4 @@
1
- require 'ffi'
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  module RubySerial
4
4
  module Posix
@@ -211,4 +211,4 @@ module RubySerial
211
211
  attach_function :write, [:int, :pointer, :int],:int
212
212
  attach_function :read, [:int, :pointer, :int],:int
213
213
  end
214
- end
214
+ end
@@ -1,4 +1,4 @@
1
- require 'ffi'
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  module RubySerial
4
4
  module Posix
@@ -1,4 +1,4 @@
1
- require 'ffi'
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  class Serial
4
4
  def initialize(address, baude_rate=9600, data_bits=8)
@@ -83,6 +83,18 @@ class Serial
83
83
  end
84
84
 
85
85
  def gets(sep=$/, limit=nil)
86
+ if block_given?
87
+ loop do
88
+ yield(get_until_sep(sep, limit))
89
+ end
90
+ else
91
+ get_until_sep(sep, limit)
92
+ end
93
+ end
94
+
95
+ private
96
+
97
+ def get_until_sep(sep, limit)
86
98
  sep = "\n\n" if sep == ''
87
99
  # This allows the method signature to be (sep) or (limit)
88
100
  (limit = sep; sep="\n") if sep.is_a? Integer
@@ -96,8 +108,6 @@ class Serial
96
108
  bytes.map { |e| e.chr }.join
97
109
  end
98
110
 
99
- private
100
-
101
111
  def build_config(baude_rate, data_bits)
102
112
  config = RubySerial::Posix::Termios.new
103
113
 
@@ -1,5 +1,7 @@
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
+
1
3
  module RubySerial
2
4
  unless const_defined?('VERSION')
3
- VERSION = "0.2.4"
5
+ VERSION = "0.3.0"
4
6
  end
5
7
  end
@@ -1,4 +1,4 @@
1
- require 'ffi'
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  class Serial
4
4
  def initialize(address, baude_rate=9600, data_bits=8)
@@ -76,17 +76,13 @@ class Serial
76
76
  end
77
77
 
78
78
  def gets(sep=$/, limit=nil)
79
- sep = "\n\n" if sep == ''
80
- # This allows the method signature to be (sep) or (limit)
81
- (limit = sep; sep="\n") if sep.is_a? Integer
82
- bytes = []
83
- loop do
84
- current_byte = getbyte
85
- bytes << current_byte unless current_byte.nil?
86
- break if (bytes.last(sep.bytes.to_a.size) == sep.bytes.to_a) || ((bytes.size == limit) if limit)
79
+ if block_given?
80
+ loop do
81
+ yield(get_until_sep(sep, limit))
82
+ end
83
+ else
84
+ get_until_sep(sep, limit)
87
85
  end
88
-
89
- bytes.map { |e| e.chr }.join
90
86
  end
91
87
 
92
88
  def close
@@ -101,4 +97,20 @@ class Serial
101
97
  def closed?
102
98
  !@open
103
99
  end
100
+
101
+ private
102
+
103
+ def get_until_sep(sep, limit)
104
+ sep = "\n\n" if sep == ''
105
+ # This allows the method signature to be (sep) or (limit)
106
+ (limit = sep; sep="\n") if sep.is_a? Integer
107
+ bytes = []
108
+ loop do
109
+ current_byte = getbyte
110
+ bytes << current_byte unless current_byte.nil?
111
+ break if (bytes.last(sep.bytes.to_a.size) == sep.bytes.to_a) || ((bytes.size == limit) if limit)
112
+ end
113
+
114
+ bytes.map { |e| e.chr }.join
115
+ end
104
116
  end
@@ -1,4 +1,4 @@
1
- require 'ffi'
1
+ # Copyright (c) 2014-2016 The Hybrid Group
2
2
 
3
3
  module RubySerial
4
4
  module Win32
@@ -11,223 +11,223 @@ module RubySerial
11
11
  OPEN_EXISTING = 3
12
12
 
13
13
  ERROR_CODES = {
14
- 5 => "ERROR_ACCESS_DENIED",
15
- 57 => "ERROR_ADAP_HDW_ERR",
16
- 85 => "ERROR_ALREADY_ASSIGNED",
17
- 183 => "ERROR_ALREADY_EXISTS",
18
- 7 => "ERROR_ARENA_TRASHED",
19
- 174 => "ERROR_ATOMIC_LOCKS_NOT_SUPPORTED",
20
- 199 => "ERROR_AUTODATASEG_EXCEEDS_64k",
21
- 160 => "ERROR_BAD_ARGUMENTS",
22
- 22 => "ERROR_BAD_COMMAND",
23
- 66 => "ERROR_BAD_DEV_TYPE",
24
- 119 => "ERROR_BAD_DRIVER_LEVEL",
25
- 10 => "ERROR_BAD_ENVIRONMENT",
26
- 193 => "ERROR_BAD_EXE_FORMAT",
27
- 222 => "ERROR_BAD_FILE_TYPE",
28
- 11 => "ERROR_BAD_FORMAT",
29
- 24 => "ERROR_BAD_LENGTH",
30
- 67 => "ERROR_BAD_NET_NAME",
31
- 58 => "ERROR_BAD_NET_RESP",
32
- 53 => "ERROR_BAD_NETPATH",
33
- 161 => "ERROR_BAD_PATHNAME",
34
- 230 => "ERROR_BAD_PIPE",
35
- 60 => "ERROR_BAD_REM_ADAP",
36
- 159 => "ERROR_BAD_THREADID_ADDR",
37
- 20 => "ERROR_BAD_UNIT",
38
- 109 => "ERROR_BROKEN_PIPE",
39
- 111 => "ERROR_BUFFER_OVERFLOW",
40
- 142 => "ERROR_BUSY_DRIVE",
41
- 170 => "ERROR_BUSY",
42
- 120 => "ERROR_CALL_NOT_IMPLEMENTED",
43
- 173 => "ERROR_CANCEL_VIOLATION",
44
- 266 => "ERROR_CANNOT_COPY",
45
- 82 => "ERROR_CANNOT_MAKE",
46
- 221 => "ERROR_CHECKOUT_REQUIRED",
47
- 129 => "ERROR_CHILD_NOT_COMPLETE",
48
- 23 => "ERROR_CRC",
49
- 16 => "ERROR_CURRENT_DIRECTORY",
50
- 303 => "ERROR_DELETE_PENDING",
51
- 55 => "ERROR_DEV_NOT_EXIST",
52
- 145 => "ERROR_DIR_NOT_EMPTY",
53
- 144 => "ERROR_DIR_NOT_ROOT",
54
- 130 => "ERROR_DIRECT_ACCESS_HANDLE",
55
- 267 => "ERROR_DIRECTORY",
56
- 157 => "ERROR_DISCARDED",
57
- 107 => "ERROR_DISK_CHANGE",
58
- 112 => "ERROR_DISK_FULL",
59
- 302 => "ERROR_DISK_TOO_FRAGMENTED",
60
- 108 => "ERROR_DRIVE_LOCKED",
61
- 52 => "ERROR_DUP_NAME",
62
- 196 => "ERROR_DYNLINK_FROM_INVALID_RING",
63
- 276 => "ERROR_EA_FILE_CORRUPT",
64
- 255 => "ERROR_EA_LIST_INCONSISTENT",
65
- 277 => "ERROR_EA_TABLE_FULL",
66
- 275 => "ERROR_EAS_DIDNT_FIT",
67
- 282 => "ERROR_EAS_NOT_SUPPORTED",
68
- 203 => "ERROR_ENVVAR_NOT_FOUND",
69
- 101 => "ERROR_EXCL_SEM_ALREADY_OWNED",
70
- 217 => "ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY",
71
- 218 => "ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY",
72
- 216 => "ERROR_EXE_MACHINE_TYPE_MISMATCH",
73
- 192 => "ERROR_EXE_MARKED_INVALID",
74
- 83 => "ERROR_FAIL_I24",
75
- 350 => "ERROR_FAIL_NOACTION_REBOOT",
76
- 352 => "ERROR_FAIL_RESTART",
77
- 351 => "ERROR_FAIL_SHUTDOWN",
78
- 220 => "ERROR_FILE_CHECKED_OUT",
79
- 80 => "ERROR_FILE_EXISTS",
80
- 2 => "ERROR_FILE_NOT_FOUND",
81
- 223 => "ERROR_FILE_TOO_LARGE",
82
- 206 => "ERROR_FILENAME_EXCED_RANGE",
83
- 224 => "ERROR_FORMS_AUTH_REQUIRED",
84
- 31 => "ERROR_GEN_FAILURE",
85
- 39 => "ERROR_HANDLE_DISK_FULL",
86
- 38 => "ERROR_HANDLE_EOF",
87
- 308 => "ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT",
88
- 304 => "ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING",
89
- 202 => "ERROR_INFLOOP_IN_RELOC_CHAIN",
90
- 122 => "ERROR_INSUFFICIENT_BUFFER",
91
- 12 => "ERROR_INVALID_ACCESS",
92
- 487 => "ERROR_INVALID_ADDRESS",
93
- 104 => "ERROR_INVALID_AT_INTERRUPT_TIME",
94
- 9 => "ERROR_INVALID_BLOCK",
95
- 117 => "ERROR_INVALID_CATEGORY",
96
- 13 => "ERROR_INVALID_DATA",
97
- 15 => "ERROR_INVALID_DRIVE",
98
- 278 => "ERROR_INVALID_EA_HANDLE",
99
- 254 => "ERROR_INVALID_EA_NAME",
100
- 151 => "ERROR_INVALID_EVENT_COUNT",
101
- 191 => "ERROR_INVALID_EXE_SIGNATURE",
102
- 186 => "ERROR_INVALID_FLAG_NUMBER",
103
- 1 => "ERROR_INVALID_FUNCTION",
104
- 6 => "ERROR_INVALID_HANDLE",
105
- 124 => "ERROR_INVALID_LEVEL",
106
- 153 => "ERROR_INVALID_LIST_FORMAT",
107
- 307 => "ERROR_INVALID_LOCK_RANGE",
108
- 195 => "ERROR_INVALID_MINALLOCSIZE",
109
- 190 => "ERROR_INVALID_MODULETYPE",
110
- 123 => "ERROR_INVALID_NAME",
111
- 301 => "ERROR_INVALID_OPLOCK_PROTOCOL",
112
- 182 => "ERROR_INVALID_ORDINAL",
113
- 87 => "ERROR_INVALID_PARAMETER",
114
- 86 => "ERROR_INVALID_PASSWORD",
115
- 198 => "ERROR_INVALID_SEGDPL",
116
- 180 => "ERROR_INVALID_SEGMENT_NUMBER",
117
- 209 => "ERROR_INVALID_SIGNAL_NUMBER",
118
- 189 => "ERROR_INVALID_STACKSEG",
119
- 188 => "ERROR_INVALID_STARTING_CODESEG",
120
- 114 => "ERROR_INVALID_TARGET_HANDLE",
121
- 118 => "ERROR_INVALID_VERIFY_SWITCH",
122
- 197 => "ERROR_IOPL_NOT_ENABLED",
123
- 147 => "ERROR_IS_JOIN_PATH",
124
- 133 => "ERROR_IS_JOIN_TARGET",
125
- 134 => "ERROR_IS_JOINED",
126
- 146 => "ERROR_IS_SUBST_PATH",
127
- 149 => "ERROR_IS_SUBST_TARGET",
128
- 135 => "ERROR_IS_SUBSTED",
129
- 194 => "ERROR_ITERATED_DATA_EXCEEDS_64k",
130
- 138 => "ERROR_JOIN_TO_JOIN",
131
- 140 => "ERROR_JOIN_TO_SUBST",
132
- 154 => "ERROR_LABEL_TOO_LONG",
133
- 167 => "ERROR_LOCK_FAILED",
134
- 33 => "ERROR_LOCK_VIOLATION",
135
- 212 => "ERROR_LOCKED",
136
- 353 => "ERROR_MAX_SESSIONS_REACHED",
137
- 164 => "ERROR_MAX_THRDS_REACHED",
138
- 208 => "ERROR_META_EXPANSION_TOO_LONG",
139
- 126 => "ERROR_MOD_NOT_FOUND",
140
- 234 => "ERROR_MORE_DATA",
141
- 317 => "ERROR_MR_MID_NOT_FOUND",
142
- 131 => "ERROR_NEGATIVE_SEEK",
143
- 215 => "ERROR_NESTING_NOT_ALLOWED",
144
- 88 => "ERROR_NET_WRITE_FAULT",
145
- 64 => "ERROR_NETNAME_DELETED",
146
- 65 => "ERROR_NETWORK_ACCESS_DENIED",
147
- 54 => "ERROR_NETWORK_BUSY",
148
- 232 => "ERROR_NO_DATA",
149
- 18 => "ERROR_NO_MORE_FILES",
150
- 259 => "ERROR_NO_MORE_ITEMS",
151
- 113 => "ERROR_NO_MORE_SEARCH_HANDLES",
152
- 89 => "ERROR_NO_PROC_SLOTS",
153
- 205 => "ERROR_NO_SIGNAL_SENT",
154
- 62 => "ERROR_NO_SPOOL_SPACE",
155
- 125 => "ERROR_NO_VOLUME_LABEL",
156
- 26 => "ERROR_NOT_DOS_DISK",
157
- 8 => "ERROR_NOT_ENOUGH_MEMORY",
158
- 136 => "ERROR_NOT_JOINED",
159
- 158 => "ERROR_NOT_LOCKED",
160
- 288 => "ERROR_NOT_OWNER",
161
- 21 => "ERROR_NOT_READY",
162
- 17 => "ERROR_NOT_SAME_DEVICE",
163
- 137 => "ERROR_NOT_SUBSTED",
164
- 50 => "ERROR_NOT_SUPPORTED",
165
- 309 => "ERROR_NOTIFICATION_GUID_ALREADY_DEFINED",
166
- 110 => "ERROR_OPEN_FAILED",
167
- 300 => "ERROR_OPLOCK_NOT_GRANTED",
168
- 28 => "ERROR_OUT_OF_PAPER",
169
- 84 => "ERROR_OUT_OF_STRUCTURES",
170
- 14 => "ERROR_OUTOFMEMORY",
171
- 299 => "ERROR_PARTIAL_COPY",
172
- 148 => "ERROR_PATH_BUSY",
173
- 3 => "ERROR_PATH_NOT_FOUND",
174
- 231 => "ERROR_PIPE_BUSY",
175
- 229 => "ERROR_PIPE_LOCAL",
176
- 233 => "ERROR_PIPE_NOT_CONNECTED",
177
- 63 => "ERROR_PRINT_CANCELLED",
178
- 61 => "ERROR_PRINTQ_FULL",
179
- 127 => "ERROR_PROC_NOT_FOUND",
180
- 402 => "ERROR_PROCESS_MODE_ALREADY_BACKGROUND",
181
- 403 => "ERROR_PROCESS_MODE_NOT_BACKGROUND",
182
- 30 => "ERROR_READ_FAULT",
183
- 72 => "ERROR_REDIR_PAUSED",
184
- 201 => "ERROR_RELOC_CHAIN_XEEDS_SEGLIM",
185
- 51 => "ERROR_REM_NOT_LIST",
186
- 71 => "ERROR_REQ_NOT_ACCEP",
187
- 207 => "ERROR_RING2_STACK_IN_USE",
188
- 200 => "ERROR_RING2SEG_MUST_BE_MOVABLE",
189
- 143 => "ERROR_SAME_DRIVE",
190
- 318 => "ERROR_SCOPE_NOT_FOUND",
191
- 27 => "ERROR_SECTOR_NOT_FOUND",
192
- 306 => "ERROR_SECURITY_STREAM_IS_INCONSISTENT",
193
- 132 => "ERROR_SEEK_ON_DEVICE",
194
- 25 => "ERROR_SEEK",
195
- 102 => "ERROR_SEM_IS_SET",
196
- 187 => "ERROR_SEM_NOT_FOUND",
197
- 105 => "ERROR_SEM_OWNER_DIED",
198
- 121 => "ERROR_SEM_TIMEOUT",
199
- 106 => "ERROR_SEM_USER_LIMIT",
200
- 36 => "ERROR_SHARING_BUFFER_EXCEEDED",
201
- 70 => "ERROR_SHARING_PAUSED",
202
- 32 => "ERROR_SHARING_VIOLATION",
203
- 305 => "ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME",
204
- 162 => "ERROR_SIGNAL_PENDING",
205
- 156 => "ERROR_SIGNAL_REFUSED",
206
- 141 => "ERROR_SUBST_TO_JOIN",
207
- 139 => "ERROR_SUBST_TO_SUBST",
208
- 0 => "ERROR_SUCCESS",
209
- 150 => "ERROR_SYSTEM_TRACE",
210
- 210 => "ERROR_THREAD_1_INACTIVE",
211
- 400 => "ERROR_THREAD_MODE_ALREADY_BACKGROUND",
212
- 401 => "ERROR_THREAD_MODE_NOT_BACKGROUND",
213
- 56 => "ERROR_TOO_MANY_CMDS",
214
- 214 => "ERROR_TOO_MANY_MODULES",
215
- 152 => "ERROR_TOO_MANY_MUXWAITERS",
216
- 68 => "ERROR_TOO_MANY_NAMES",
217
- 4 => "ERROR_TOO_MANY_OPEN_FILES",
218
- 298 => "ERROR_TOO_MANY_POSTS",
219
- 103 => "ERROR_TOO_MANY_SEM_REQUESTS",
220
- 100 => "ERROR_TOO_MANY_SEMAPHORES",
221
- 69 => "ERROR_TOO_MANY_SESS",
222
- 155 => "ERROR_TOO_MANY_TCBS",
223
- 59 => "ERROR_UNEXP_NET_ERR",
224
- 240 => "ERROR_VC_DISCONNECTED",
225
- 226 => "ERROR_VIRUS_DELETED",
226
- 225 => "ERROR_VIRUS_INFECTED",
227
- 128 => "ERROR_WAIT_NO_CHILDREN",
228
- 29 => "ERROR_WRITE_FAULT",
229
- 19 => "ERROR_WRITE_PROTECT",
230
- 34 => "ERROR_WRONG_DISK",
14
+ 5 => "ERROR_ACCESS_DENIED",
15
+ 57 => "ERROR_ADAP_HDW_ERR",
16
+ 85 => "ERROR_ALREADY_ASSIGNED",
17
+ 183 => "ERROR_ALREADY_EXISTS",
18
+ 7 => "ERROR_ARENA_TRASHED",
19
+ 174 => "ERROR_ATOMIC_LOCKS_NOT_SUPPORTED",
20
+ 199 => "ERROR_AUTODATASEG_EXCEEDS_64k",
21
+ 160 => "ERROR_BAD_ARGUMENTS",
22
+ 22 => "ERROR_BAD_COMMAND",
23
+ 66 => "ERROR_BAD_DEV_TYPE",
24
+ 119 => "ERROR_BAD_DRIVER_LEVEL",
25
+ 10 => "ERROR_BAD_ENVIRONMENT",
26
+ 193 => "ERROR_BAD_EXE_FORMAT",
27
+ 222 => "ERROR_BAD_FILE_TYPE",
28
+ 11 => "ERROR_BAD_FORMAT",
29
+ 24 => "ERROR_BAD_LENGTH",
30
+ 67 => "ERROR_BAD_NET_NAME",
31
+ 58 => "ERROR_BAD_NET_RESP",
32
+ 53 => "ERROR_BAD_NETPATH",
33
+ 161 => "ERROR_BAD_PATHNAME",
34
+ 230 => "ERROR_BAD_PIPE",
35
+ 60 => "ERROR_BAD_REM_ADAP",
36
+ 159 => "ERROR_BAD_THREADID_ADDR",
37
+ 20 => "ERROR_BAD_UNIT",
38
+ 109 => "ERROR_BROKEN_PIPE",
39
+ 111 => "ERROR_BUFFER_OVERFLOW",
40
+ 142 => "ERROR_BUSY_DRIVE",
41
+ 170 => "ERROR_BUSY",
42
+ 120 => "ERROR_CALL_NOT_IMPLEMENTED",
43
+ 173 => "ERROR_CANCEL_VIOLATION",
44
+ 266 => "ERROR_CANNOT_COPY",
45
+ 82 => "ERROR_CANNOT_MAKE",
46
+ 221 => "ERROR_CHECKOUT_REQUIRED",
47
+ 129 => "ERROR_CHILD_NOT_COMPLETE",
48
+ 23 => "ERROR_CRC",
49
+ 16 => "ERROR_CURRENT_DIRECTORY",
50
+ 303 => "ERROR_DELETE_PENDING",
51
+ 55 => "ERROR_DEV_NOT_EXIST",
52
+ 145 => "ERROR_DIR_NOT_EMPTY",
53
+ 144 => "ERROR_DIR_NOT_ROOT",
54
+ 130 => "ERROR_DIRECT_ACCESS_HANDLE",
55
+ 267 => "ERROR_DIRECTORY",
56
+ 157 => "ERROR_DISCARDED",
57
+ 107 => "ERROR_DISK_CHANGE",
58
+ 112 => "ERROR_DISK_FULL",
59
+ 302 => "ERROR_DISK_TOO_FRAGMENTED",
60
+ 108 => "ERROR_DRIVE_LOCKED",
61
+ 52 => "ERROR_DUP_NAME",
62
+ 196 => "ERROR_DYNLINK_FROM_INVALID_RING",
63
+ 276 => "ERROR_EA_FILE_CORRUPT",
64
+ 255 => "ERROR_EA_LIST_INCONSISTENT",
65
+ 277 => "ERROR_EA_TABLE_FULL",
66
+ 275 => "ERROR_EAS_DIDNT_FIT",
67
+ 282 => "ERROR_EAS_NOT_SUPPORTED",
68
+ 203 => "ERROR_ENVVAR_NOT_FOUND",
69
+ 101 => "ERROR_EXCL_SEM_ALREADY_OWNED",
70
+ 217 => "ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY",
71
+ 218 => "ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY",
72
+ 216 => "ERROR_EXE_MACHINE_TYPE_MISMATCH",
73
+ 192 => "ERROR_EXE_MARKED_INVALID",
74
+ 83 => "ERROR_FAIL_I24",
75
+ 350 => "ERROR_FAIL_NOACTION_REBOOT",
76
+ 352 => "ERROR_FAIL_RESTART",
77
+ 351 => "ERROR_FAIL_SHUTDOWN",
78
+ 220 => "ERROR_FILE_CHECKED_OUT",
79
+ 80 => "ERROR_FILE_EXISTS",
80
+ 2 => "ERROR_FILE_NOT_FOUND",
81
+ 223 => "ERROR_FILE_TOO_LARGE",
82
+ 206 => "ERROR_FILENAME_EXCED_RANGE",
83
+ 224 => "ERROR_FORMS_AUTH_REQUIRED",
84
+ 31 => "ERROR_GEN_FAILURE",
85
+ 39 => "ERROR_HANDLE_DISK_FULL",
86
+ 38 => "ERROR_HANDLE_EOF",
87
+ 308 => "ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT",
88
+ 304 => "ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING",
89
+ 202 => "ERROR_INFLOOP_IN_RELOC_CHAIN",
90
+ 122 => "ERROR_INSUFFICIENT_BUFFER",
91
+ 12 => "ERROR_INVALID_ACCESS",
92
+ 487 => "ERROR_INVALID_ADDRESS",
93
+ 104 => "ERROR_INVALID_AT_INTERRUPT_TIME",
94
+ 9 => "ERROR_INVALID_BLOCK",
95
+ 117 => "ERROR_INVALID_CATEGORY",
96
+ 13 => "ERROR_INVALID_DATA",
97
+ 15 => "ERROR_INVALID_DRIVE",
98
+ 278 => "ERROR_INVALID_EA_HANDLE",
99
+ 254 => "ERROR_INVALID_EA_NAME",
100
+ 151 => "ERROR_INVALID_EVENT_COUNT",
101
+ 191 => "ERROR_INVALID_EXE_SIGNATURE",
102
+ 186 => "ERROR_INVALID_FLAG_NUMBER",
103
+ 1 => "ERROR_INVALID_FUNCTION",
104
+ 6 => "ERROR_INVALID_HANDLE",
105
+ 124 => "ERROR_INVALID_LEVEL",
106
+ 153 => "ERROR_INVALID_LIST_FORMAT",
107
+ 307 => "ERROR_INVALID_LOCK_RANGE",
108
+ 195 => "ERROR_INVALID_MINALLOCSIZE",
109
+ 190 => "ERROR_INVALID_MODULETYPE",
110
+ 123 => "ERROR_INVALID_NAME",
111
+ 301 => "ERROR_INVALID_OPLOCK_PROTOCOL",
112
+ 182 => "ERROR_INVALID_ORDINAL",
113
+ 87 => "ERROR_INVALID_PARAMETER",
114
+ 86 => "ERROR_INVALID_PASSWORD",
115
+ 198 => "ERROR_INVALID_SEGDPL",
116
+ 180 => "ERROR_INVALID_SEGMENT_NUMBER",
117
+ 209 => "ERROR_INVALID_SIGNAL_NUMBER",
118
+ 189 => "ERROR_INVALID_STACKSEG",
119
+ 188 => "ERROR_INVALID_STARTING_CODESEG",
120
+ 114 => "ERROR_INVALID_TARGET_HANDLE",
121
+ 118 => "ERROR_INVALID_VERIFY_SWITCH",
122
+ 197 => "ERROR_IOPL_NOT_ENABLED",
123
+ 147 => "ERROR_IS_JOIN_PATH",
124
+ 133 => "ERROR_IS_JOIN_TARGET",
125
+ 134 => "ERROR_IS_JOINED",
126
+ 146 => "ERROR_IS_SUBST_PATH",
127
+ 149 => "ERROR_IS_SUBST_TARGET",
128
+ 135 => "ERROR_IS_SUBSTED",
129
+ 194 => "ERROR_ITERATED_DATA_EXCEEDS_64k",
130
+ 138 => "ERROR_JOIN_TO_JOIN",
131
+ 140 => "ERROR_JOIN_TO_SUBST",
132
+ 154 => "ERROR_LABEL_TOO_LONG",
133
+ 167 => "ERROR_LOCK_FAILED",
134
+ 33 => "ERROR_LOCK_VIOLATION",
135
+ 212 => "ERROR_LOCKED",
136
+ 353 => "ERROR_MAX_SESSIONS_REACHED",
137
+ 164 => "ERROR_MAX_THRDS_REACHED",
138
+ 208 => "ERROR_META_EXPANSION_TOO_LONG",
139
+ 126 => "ERROR_MOD_NOT_FOUND",
140
+ 234 => "ERROR_MORE_DATA",
141
+ 317 => "ERROR_MR_MID_NOT_FOUND",
142
+ 131 => "ERROR_NEGATIVE_SEEK",
143
+ 215 => "ERROR_NESTING_NOT_ALLOWED",
144
+ 88 => "ERROR_NET_WRITE_FAULT",
145
+ 64 => "ERROR_NETNAME_DELETED",
146
+ 65 => "ERROR_NETWORK_ACCESS_DENIED",
147
+ 54 => "ERROR_NETWORK_BUSY",
148
+ 232 => "ERROR_NO_DATA",
149
+ 18 => "ERROR_NO_MORE_FILES",
150
+ 259 => "ERROR_NO_MORE_ITEMS",
151
+ 113 => "ERROR_NO_MORE_SEARCH_HANDLES",
152
+ 89 => "ERROR_NO_PROC_SLOTS",
153
+ 205 => "ERROR_NO_SIGNAL_SENT",
154
+ 62 => "ERROR_NO_SPOOL_SPACE",
155
+ 125 => "ERROR_NO_VOLUME_LABEL",
156
+ 26 => "ERROR_NOT_DOS_DISK",
157
+ 8 => "ERROR_NOT_ENOUGH_MEMORY",
158
+ 136 => "ERROR_NOT_JOINED",
159
+ 158 => "ERROR_NOT_LOCKED",
160
+ 288 => "ERROR_NOT_OWNER",
161
+ 21 => "ERROR_NOT_READY",
162
+ 17 => "ERROR_NOT_SAME_DEVICE",
163
+ 137 => "ERROR_NOT_SUBSTED",
164
+ 50 => "ERROR_NOT_SUPPORTED",
165
+ 309 => "ERROR_NOTIFICATION_GUID_ALREADY_DEFINED",
166
+ 110 => "ERROR_OPEN_FAILED",
167
+ 300 => "ERROR_OPLOCK_NOT_GRANTED",
168
+ 28 => "ERROR_OUT_OF_PAPER",
169
+ 84 => "ERROR_OUT_OF_STRUCTURES",
170
+ 14 => "ERROR_OUTOFMEMORY",
171
+ 299 => "ERROR_PARTIAL_COPY",
172
+ 148 => "ERROR_PATH_BUSY",
173
+ 3 => "ERROR_PATH_NOT_FOUND",
174
+ 231 => "ERROR_PIPE_BUSY",
175
+ 229 => "ERROR_PIPE_LOCAL",
176
+ 233 => "ERROR_PIPE_NOT_CONNECTED",
177
+ 63 => "ERROR_PRINT_CANCELLED",
178
+ 61 => "ERROR_PRINTQ_FULL",
179
+ 127 => "ERROR_PROC_NOT_FOUND",
180
+ 402 => "ERROR_PROCESS_MODE_ALREADY_BACKGROUND",
181
+ 403 => "ERROR_PROCESS_MODE_NOT_BACKGROUND",
182
+ 30 => "ERROR_READ_FAULT",
183
+ 72 => "ERROR_REDIR_PAUSED",
184
+ 201 => "ERROR_RELOC_CHAIN_XEEDS_SEGLIM",
185
+ 51 => "ERROR_REM_NOT_LIST",
186
+ 71 => "ERROR_REQ_NOT_ACCEP",
187
+ 207 => "ERROR_RING2_STACK_IN_USE",
188
+ 200 => "ERROR_RING2SEG_MUST_BE_MOVABLE",
189
+ 143 => "ERROR_SAME_DRIVE",
190
+ 318 => "ERROR_SCOPE_NOT_FOUND",
191
+ 27 => "ERROR_SECTOR_NOT_FOUND",
192
+ 306 => "ERROR_SECURITY_STREAM_IS_INCONSISTENT",
193
+ 132 => "ERROR_SEEK_ON_DEVICE",
194
+ 25 => "ERROR_SEEK",
195
+ 102 => "ERROR_SEM_IS_SET",
196
+ 187 => "ERROR_SEM_NOT_FOUND",
197
+ 105 => "ERROR_SEM_OWNER_DIED",
198
+ 121 => "ERROR_SEM_TIMEOUT",
199
+ 106 => "ERROR_SEM_USER_LIMIT",
200
+ 36 => "ERROR_SHARING_BUFFER_EXCEEDED",
201
+ 70 => "ERROR_SHARING_PAUSED",
202
+ 32 => "ERROR_SHARING_VIOLATION",
203
+ 305 => "ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME",
204
+ 162 => "ERROR_SIGNAL_PENDING",
205
+ 156 => "ERROR_SIGNAL_REFUSED",
206
+ 141 => "ERROR_SUBST_TO_JOIN",
207
+ 139 => "ERROR_SUBST_TO_SUBST",
208
+ 0 => "ERROR_SUCCESS",
209
+ 150 => "ERROR_SYSTEM_TRACE",
210
+ 210 => "ERROR_THREAD_1_INACTIVE",
211
+ 400 => "ERROR_THREAD_MODE_ALREADY_BACKGROUND",
212
+ 401 => "ERROR_THREAD_MODE_NOT_BACKGROUND",
213
+ 56 => "ERROR_TOO_MANY_CMDS",
214
+ 214 => "ERROR_TOO_MANY_MODULES",
215
+ 152 => "ERROR_TOO_MANY_MUXWAITERS",
216
+ 68 => "ERROR_TOO_MANY_NAMES",
217
+ 4 => "ERROR_TOO_MANY_OPEN_FILES",
218
+ 298 => "ERROR_TOO_MANY_POSTS",
219
+ 103 => "ERROR_TOO_MANY_SEM_REQUESTS",
220
+ 100 => "ERROR_TOO_MANY_SEMAPHORES",
221
+ 69 => "ERROR_TOO_MANY_SESS",
222
+ 155 => "ERROR_TOO_MANY_TCBS",
223
+ 59 => "ERROR_UNEXP_NET_ERR",
224
+ 240 => "ERROR_VC_DISCONNECTED",
225
+ 226 => "ERROR_VIRUS_DELETED",
226
+ 225 => "ERROR_VIRUS_INFECTED",
227
+ 128 => "ERROR_WAIT_NO_CHILDREN",
228
+ 29 => "ERROR_WRITE_FAULT",
229
+ 19 => "ERROR_WRITE_PROTECT",
230
+ 34 => "ERROR_WRONG_DISK",
231
231
  258 => "WAIT_TIMEOUT"
232
232
  }
233
233
 
@@ -250,8 +250,8 @@ module RubySerial
250
250
  # uint32 fRtsControl :2;
251
251
  # uint32 fAbortOnError :1;
252
252
  # uint32 fDummy2 :17;
253
- Sizeof = 28
254
- ONESTOPBIT = 0
253
+ Sizeof = 28
254
+ ONESTOPBIT = 0
255
255
  NOPARITY = 0
256
256
  end
257
257
 
@@ -272,4 +272,4 @@ module RubySerial
272
272
  attach_function :GetCommTimeouts, [:pointer, RubySerial::Win32::CommTimeouts], :int32
273
273
  attach_function :SetCommTimeouts, [:pointer, RubySerial::Win32::CommTimeouts], :int32
274
274
  end
275
- end
275
+ end
@@ -15,5 +15,5 @@ Gem::Specification.new do |s|
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
16
  s.require_paths = ["lib"]
17
17
 
18
- s.add_runtime_dependency 'ffi', '~> 1.9.3'
18
+ s.add_runtime_dependency 'ffi', '~> 1.9', '>= 1.9.3'
19
19
  end
@@ -5,7 +5,7 @@ describe "rubyserial" do
5
5
  @ports = []
6
6
  require 'rbconfig'
7
7
  if RbConfig::CONFIG['host_os'] =~ /mswin|windows|mingw/i
8
- # NOTE: Tests on windows require com0com
8
+ # NOTE: Tests on windows require com0com
9
9
  # https://github.com/hybridgroup/rubyserial/raw/appveyor_deps/setup_com0com_W7_x64_signed.exe
10
10
  @ports[0] = "\\\\.\\CNCA0"
11
11
  @ports[1] = "\\\\.\\CNCB0"
@@ -84,7 +84,6 @@ describe "rubyserial" do
84
84
  expect([check].pack('C')).to eql('h')
85
85
  end
86
86
 
87
-
88
87
  describe "giving me lines" do
89
88
  it "should give me a line" do
90
89
  @sp.write("no yes \n hello")
@@ -92,6 +91,17 @@ describe "rubyserial" do
92
91
  expect(@sp2.gets).to eql("no yes \n")
93
92
  end
94
93
 
94
+ it "should give me a line with block" do
95
+ @sp.write("no yes \n hello")
96
+ sleep 0.1
97
+ result = ""
98
+ @sp2.gets do |line|
99
+ result = line
100
+ break if !result.empty?
101
+ end
102
+ expect(result).to eql("no yes \n")
103
+ end
104
+
95
105
  it "should accept a sep param" do
96
106
  @sp.write('no yes END bleh')
97
107
  sleep 0.1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyserial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Zankich
@@ -10,13 +10,16 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-05-28 00:00:00.000000000 Z
13
+ date: 2016-05-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ffi
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.9'
22
+ - - ">="
20
23
  - !ruby/object:Gem::Version
21
24
  version: 1.9.3
22
25
  type: :runtime
@@ -24,6 +27,9 @@ dependencies:
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
29
  - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.9'
32
+ - - ">="
27
33
  - !ruby/object:Gem::Version
28
34
  version: 1.9.3
29
35
  description: FFI Ruby library for RS-232 serial port communication
@@ -70,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
76
  version: '0'
71
77
  requirements: []
72
78
  rubyforge_project:
73
- rubygems_version: 2.4.5
79
+ rubygems_version: 2.4.8
74
80
  signing_key:
75
81
  specification_version: 4
76
82
  summary: FFI Ruby library for RS-232 serial port communication