Floppy-rb232 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/extconf.rb +3 -0
- data/lib/rb232/text_protocol.rb +16 -8
- data/src/port.c +14 -5
- metadata +2 -2
data/extconf.rb
CHANGED
data/lib/rb232/text_protocol.rb
CHANGED
@@ -37,13 +37,21 @@ module RB232
|
|
37
37
|
@reader_thread = Thread.new {
|
38
38
|
buffer = ""
|
39
39
|
while (@stop == false)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
new_string = ""
|
41
|
+
# Read in as much data as possible
|
42
|
+
begin
|
43
|
+
new_string = @port.read_string(255)
|
44
|
+
if (new_string.size > 0)
|
45
|
+
buffer += new_string
|
46
|
+
messages = buffer.split(@separator,2)
|
47
|
+
if messages.size > 1
|
48
|
+
changed
|
49
|
+
notify_observers(messages[0])
|
50
|
+
buffer = messages[1] || ""
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end while (new_string.size > 0 && @stop == false)
|
54
|
+
sleep(0.5)
|
47
55
|
end
|
48
56
|
}
|
49
57
|
end
|
@@ -56,4 +64,4 @@ module RB232
|
|
56
64
|
|
57
65
|
end
|
58
66
|
|
59
|
-
end
|
67
|
+
end
|
data/src/port.c
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
#include <fcntl.h>
|
5
5
|
#include <termios.h>
|
6
|
+
#include <unistd.h>
|
6
7
|
|
7
8
|
/* Module and class handles */
|
8
9
|
VALUE RB232 = Qnil;
|
@@ -40,6 +41,8 @@ VALUE rb232_port_data_free(void* p) {
|
|
40
41
|
/* Free memory */
|
41
42
|
free(port_data->port_name);
|
42
43
|
free(port_data);
|
44
|
+
/* Done */
|
45
|
+
return Qnil;
|
43
46
|
}
|
44
47
|
|
45
48
|
/*
|
@@ -67,7 +70,7 @@ VALUE rb232_port_initialize_with_options(VALUE self, VALUE port, VALUE options)
|
|
67
70
|
port_data->parity = rbx_bool_from_hash_or_default(options, ID2SYM(rb_intern("parity")), FALSE);
|
68
71
|
port_data->stop_bits = rbx_int_from_hash_or_default(options, ID2SYM(rb_intern("stop_bits")), 1);
|
69
72
|
/* Open the serial port */
|
70
|
-
port_data->port_handle = open(port_data->port_name, O_RDWR | O_NOCTTY);
|
73
|
+
port_data->port_handle = open(port_data->port_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
|
71
74
|
if (port_data->port_handle < 0) {
|
72
75
|
rb_raise(rb_eArgError, "couldn't open the specified port");
|
73
76
|
}
|
@@ -251,8 +254,10 @@ int rb232_port_read(VALUE self, char* buffer, VALUE count) {
|
|
251
254
|
}
|
252
255
|
|
253
256
|
/*
|
254
|
-
* Read _count_ raw byte values from the port.
|
255
|
-
* Returns an array of values.
|
257
|
+
* Read up to _count_ raw byte values from the port.
|
258
|
+
* Returns an array of values. If no data is currently available, a zero-length
|
259
|
+
* array will be returned.
|
260
|
+
* Useful for binary protocols.
|
256
261
|
* call-seq:
|
257
262
|
* read_bytes(count)
|
258
263
|
*
|
@@ -265,11 +270,14 @@ VALUE rb232_port_read_bytes(VALUE self, VALUE count) {
|
|
265
270
|
for (i=0; i<bytes_read; i++) {
|
266
271
|
rb_ary_push(data, INT2NUM(buffer[i]));
|
267
272
|
}
|
273
|
+
return data;
|
268
274
|
}
|
269
275
|
|
270
276
|
/*
|
271
|
-
* Read _count_ characters from the port.
|
272
|
-
* Returns a string.
|
277
|
+
* Read up to _count_ characters from the port.
|
278
|
+
* Returns a string. If no data is currently available, an empty string will be
|
279
|
+
* returned.
|
280
|
+
* Useful for text-based protocols.
|
273
281
|
* call-seq:
|
274
282
|
* read_string(count)
|
275
283
|
*
|
@@ -277,6 +285,7 @@ VALUE rb232_port_read_bytes(VALUE self, VALUE count) {
|
|
277
285
|
VALUE rb232_port_read_string(VALUE self, VALUE count) {
|
278
286
|
char buffer[256];
|
279
287
|
int bytes_read = rb232_port_read(self, buffer, count);
|
288
|
+
if (bytes_read < 1) bytes_read = 0;
|
280
289
|
buffer[bytes_read] = 0;
|
281
290
|
return rb_str_new2(buffer);
|
282
291
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Floppy-rb232
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Smith
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-22 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|