rs_232 2.3.2.pre → 3.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0674804097687f19fbbfedc5dea7521a9f98461
4
- data.tar.gz: 04e9fa3516b31e999cc6c99f99ddd1922e58a798
3
+ metadata.gz: 5bcb80fd72cfb4f47935134fbe73abc7594b289c
4
+ data.tar.gz: 949a14cb21434e5a3af56701e265f44c06a50966
5
5
  SHA512:
6
- metadata.gz: 74e8bf283ef230e3d7b859881c4fb1e230572b3dc5e2714712d4a0253276956ace8aa7b24dfaac3a32369a33dc6d64ed706d0c2d6f689c362ffdaae24d614d84
7
- data.tar.gz: 46509055a24f52ac267693003f0992df8ffa0d829e9ae13ef771111cb323d846cb7486434eb54474c41b817a5cb9d06335ac3428f8b8ca3fd7e7f39bac009ea8
6
+ metadata.gz: 01e9454ede82eb0905af93a07e30783917e003f552e99f5bf5cedb1d253ab8e85c17bc5c684e46c5221bd25c91bd983ef13162d538ca4e3a94428b94f09ae07c
7
+ data.tar.gz: ae532ffee6ab6490641e6cbb32568ce0a357b30135980f6ddebe962a9751f19f4563ddccb4049a7c188bb1a6a6b6195d5516302e993bee28facda3203830ef49
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013, Ingenico Inc.
1
+ Copyright (c) 2013, Roman Lishtaba.
2
2
 
3
3
  MIT License
4
4
 
@@ -16,7 +16,7 @@ included in all copies or substantial portions of the Software.
16
16
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
17
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
18
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ NONINFINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
22
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,13 +1,35 @@
1
1
  lib = File.expand_path '../lib', __FILE__
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include? lib
3
+
3
4
  require 'bundler/setup'
4
5
  require 'bundler/gem_tasks'
5
- require 'rake'
6
6
 
7
- load 'tasks/clean.rake'
8
- load 'tasks/cov.rake'
9
- load 'tasks/rspec.rake'
10
- load 'tasks/cucumber.rake'
11
- load 'tasks/compile.rake'
7
+ require 'rake/extensiontask'
8
+ Rake::ExtensionTask.new('rs_232') do |ext|
9
+ ext.name = 'rs_232_native'
10
+ ext.source_pattern = '*.{c,cpp}'
11
+ end
12
+
13
+ require 'rake/clean'
14
+ CLEAN.include %w(**/*.{log} doc coverage tmp pkg **/*.{o,so,bundle} Makefile)
15
+
16
+ require 'simplecov'
17
+ task :cov do
18
+ ENV['SIMPLECOV'] = 'features'
19
+ Rake::Task['default'].invoke
20
+ end
21
+
22
+ require 'cucumber/rake/task'
23
+ Cucumber::Rake::Task.new(:features) do |t|
24
+ t.fork = true
25
+ t.profile = :default
26
+ end
27
+
28
+ require 'rspec/core/rake_task'
29
+ RSpec::Core::RakeTask.new do |t|
30
+ t.fail_on_error = false
31
+ t.verbose = true
32
+ t.rspec_opts = '--format RspecJunitFormatter --out rspec.xml --tag ~wip'
33
+ end
12
34
 
13
- task default: [:clobber, :compile, :spec, :features]
35
+ task default: [:clobber, :compile, :spec]
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright (c) 2013, Roman Lishtaba.
3
+ *
4
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
5
+ * provided that the above copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
8
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
9
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
10
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
11
+ * PERFORMANCE OF THIS SOFTWARE.
12
+ *
13
+ **/
14
+
15
+ /*
16
+ * @author Roman Lishtaba
17
+ */
18
+
19
+ #include "Constants.h"
20
+
21
+ void Constants_Init(VALUE namespace)
22
+ {
23
+ rb_define_const(namespace, "BAUD_110", INT2FIX(BAUD110));
24
+ rb_define_const(namespace, "BAUD_300", INT2FIX(BAUD300));
25
+ rb_define_const(namespace, "BAUD_600", INT2FIX(BAUD600));
26
+ rb_define_const(namespace, "BAUD_1200", INT2FIX(BAUD1200));
27
+ rb_define_const(namespace, "BAUD_2400", INT2FIX(BAUD2400));
28
+ rb_define_const(namespace, "BAUD_4800", INT2FIX(BAUD4800));
29
+ rb_define_const(namespace, "BAUD_9600", INT2FIX(BAUD9600));
30
+ rb_define_const(namespace, "BAUD_19200", INT2FIX(BAUD19200));
31
+ rb_define_const(namespace, "BAUD_38400", INT2FIX(BAUD38400));
32
+ rb_define_const(namespace, "BAUD_57600", INT2FIX(BAUD57600));
33
+ rb_define_const(namespace, "BAUD_115200", INT2FIX(BAUD115200));
34
+
35
+ rb_define_const(namespace, "DATA_BITS_5", INT2FIX(DATA_5));
36
+ rb_define_const(namespace, "DATA_BITS_6", INT2FIX(DATA_6));
37
+ rb_define_const(namespace, "DATA_BITS_7", INT2FIX(DATA_7));
38
+ rb_define_const(namespace, "DATA_BITS_8", INT2FIX(DATA_8));
39
+
40
+ rb_define_const(namespace, "PAR_NONE", INT2FIX(PAR_NONE));
41
+ rb_define_const(namespace, "PAR_ODD", INT2FIX(PAR_ODD));
42
+ rb_define_const(namespace, "PAR_EVEN", INT2FIX(PAR_EVEN));
43
+
44
+ rb_define_const(namespace, "STOP_BITS_1", INT2FIX(STOP_1));
45
+ rb_define_const(namespace, "STOP_BITS_3", INT2FIX(STOP_2));
46
+
47
+ rb_define_const(namespace, "FLOW_OFF", INT2FIX(FLOW_OFF));
48
+ rb_define_const(namespace, "FLOW_HARDWARE", INT2FIX(FLOW_HARDWARE));
49
+ rb_define_const(namespace, "FLOW_XONXOFF", INT2FIX(FLOW_XONXOFF));
50
+ }
@@ -0,0 +1,97 @@
1
+ /*
2
+ * Copyright (c) 2013, Roman Lishtaba.
3
+ *
4
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
5
+ * provided that the above copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
8
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
9
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
10
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
11
+ * PERFORMANCE OF THIS SOFTWARE.
12
+ *
13
+ **/
14
+
15
+ /*
16
+ * @author Roman Lishtaba
17
+ */
18
+
19
+ #pragma once
20
+
21
+ #ifdef __cplusplus
22
+ extern "C" {
23
+ #endif
24
+
25
+ #include <ruby.h>
26
+
27
+ #define LS_CTS 0x01
28
+ #define LS_DSR 0x02
29
+ #define LS_DCD 0x04
30
+ #define LS_RI 0x08
31
+ #define LS_RTS 0x10
32
+ #define LS_DTR 0x20
33
+ #define LS_ST 0x40
34
+ #define LS_SR 0x80
35
+
36
+ enum { PORT_OPEN, PORT_CLOSED };
37
+
38
+ enum BaudRateType
39
+ {
40
+ BAUD110 = 110,
41
+ BAUD300 = 300,
42
+ BAUD600 = 600,
43
+ BAUD1200 = 1200,
44
+ BAUD2400 = 2400,
45
+ BAUD4800 = 4800,
46
+ BAUD9600 = 9600,
47
+ BAUD19200 = 19200,
48
+ BAUD38400 = 38400,
49
+ BAUD57600 = 57600,
50
+ BAUD115200 = 115200
51
+ };
52
+
53
+ enum DataBitsType
54
+ {
55
+ DATA_5 = 5,
56
+ DATA_6,
57
+ DATA_7,
58
+ DATA_8
59
+ };
60
+
61
+ enum ParityType
62
+ {
63
+ PAR_NONE,
64
+ PAR_ODD,
65
+ PAR_EVEN,
66
+ };
67
+
68
+ enum StopBitsType
69
+ {
70
+ STOP_1 = 1,
71
+ STOP_2
72
+ };
73
+
74
+ enum FlowType
75
+ {
76
+ FLOW_OFF,
77
+ FLOW_HARDWARE,
78
+ FLOW_XONXOFF
79
+ };
80
+
81
+ enum SettingsFlags
82
+ {
83
+ T_BaudRate = 0x0001,
84
+ T_Parity = 0x0002,
85
+ T_StopBits = 0x0004,
86
+ T_DataBits = 0x0008,
87
+ T_Flow = 0x0010,
88
+ T_TimeOut = 0x0100,
89
+ T_ALL = 0x0fff,
90
+ T_SettingsDone = 0x00ff,
91
+ };
92
+
93
+ void Constants_Init(VALUE);
94
+
95
+ #ifdef __cplusplus
96
+ }
97
+ #endif
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2013, Ingenico Inc.
2
+ * Copyright (c) 2013, Roman Lishtaba.
3
3
  *
4
4
  * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
5
5
  * provided that the above copyright notice and this permission notice appear in all copies.
@@ -10,45 +10,44 @@
10
10
  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
11
11
  * PERFORMANCE OF THIS SOFTWARE.
12
12
  *
13
- **/
13
+ */
14
14
 
15
- #include "initializer.h"
15
+ /*
16
+ * @author Roman Lishtaba
17
+ */
18
+
19
+ #include "Rs232.h"
16
20
 
17
21
  static void destructor(PortDescriptor *port)
18
22
  {
19
23
  xfree(port);
20
24
  }
21
25
 
22
-
23
26
  static void markDescriptor(PortDescriptor *port)
24
27
  {
28
+ //noop
25
29
  }
26
30
 
27
31
 
28
32
  static VALUE allocateStruct(VALUE self)
29
33
  {
30
- PortDescriptor *port;
31
-
34
+ PortDescriptor *port = NULL;
32
35
  rb_iv_set(self, "@port", Qnil);
33
-
36
+
34
37
  return Data_Make_Struct(self, PortDescriptor, markDescriptor, destructor, port);
35
38
  }
36
39
 
37
40
 
38
41
  void setBaudRate(VALUE self, VALUE int_baudRate)
39
42
  {
43
+ Check_Type(int_baudRate, T_FIXNUM);
44
+
40
45
  PortDescriptor *port;
41
-
42
- {
43
- Check_Type(int_baudRate, T_FIXNUM);
44
- }
45
-
46
46
  int baudRate = FIX2INT(int_baudRate);
47
-
48
- Data_Get_Struct(self, PortDescriptor, port);
49
-
50
47
  int baud = 110;
51
-
48
+
49
+ Data_Get_Struct(self, PortDescriptor, port);
50
+
52
51
  switch (baudRate)
53
52
  {
54
53
  case BAUD110:
@@ -85,10 +84,10 @@ void setBaudRate(VALUE self, VALUE int_baudRate)
85
84
  rb_raise(rb_eException, "BaudRate value does not match specification, current: %d", baudRate);
86
85
  break;
87
86
  }
88
-
87
+
89
88
  port->settings.BaudRate = (enum BaudRateType) baud;
90
89
  port->toBeUpdated |= T_BaudRate;
91
-
90
+
92
91
  updateSettings(port);
93
92
  }
94
93
 
@@ -96,28 +95,21 @@ void setBaudRate(VALUE self, VALUE int_baudRate)
96
95
  VALUE getBaudRate(VALUE self)
97
96
  {
98
97
  PortDescriptor *port;
99
-
100
98
  Data_Get_Struct(self, PortDescriptor, port);
101
-
99
+
102
100
  return INT2FIX(port->settings.BaudRate);
103
101
  }
104
102
 
105
103
 
106
104
  void setParity(VALUE self, VALUE int_parity)
107
105
  {
108
-
109
- {
110
- Check_Type(int_parity, T_FIXNUM);
111
- }
112
-
113
- int parity = FIX2INT(int_parity);
114
-
106
+ Check_Type(int_parity, T_FIXNUM);
107
+
115
108
  PortDescriptor *port;
116
-
117
109
  Data_Get_Struct(self, PortDescriptor, port);
118
-
110
+ int parity = FIX2INT(int_parity);
119
111
  enum ParityType parity_type = PAR_NONE;
120
-
112
+
121
113
  switch (parity)
122
114
  {
123
115
  case PAR_NONE:
@@ -133,40 +125,31 @@ void setParity(VALUE self, VALUE int_parity)
133
125
  rb_raise(rb_eException, "Parity value does not match specification, current: %d", parity);
134
126
  break;
135
127
  }
136
-
128
+
137
129
  port->settings.Parity = parity_type;
138
130
  port->toBeUpdated |= T_Parity;
139
-
131
+
140
132
  updateSettings(port);
141
133
  }
142
134
 
143
135
 
144
136
  VALUE getParity(VALUE self)
145
137
  {
146
-
147
138
  PortDescriptor *port;
148
-
149
139
  Data_Get_Struct(self, PortDescriptor, port);
150
-
140
+
151
141
  return INT2FIX(port->settings.Parity);
152
142
  }
153
143
 
154
144
 
155
145
  void setDataBits(VALUE self, VALUE intDataBits)
156
146
  {
157
-
158
- {
159
- Check_Type(intDataBits, T_FIXNUM);
160
- }
161
-
162
- int dataBits = FIX2INT(intDataBits);
163
-
147
+ Check_Type(intDataBits, T_FIXNUM);
164
148
  PortDescriptor *port;
165
-
166
149
  Data_Get_Struct(self, PortDescriptor, port);
167
-
150
+ int dataBits = FIX2INT(intDataBits);
168
151
  enum DataBitsType dataBitsType = DATA_8;
169
-
152
+
170
153
  switch (dataBits)
171
154
  {
172
155
  case DATA_5:
@@ -185,40 +168,32 @@ void setDataBits(VALUE self, VALUE intDataBits)
185
168
  rb_raise(rb_eException, "DataBits value does not match specification, current: %d", dataBits);
186
169
  break;
187
170
  }
188
-
171
+
189
172
  port->settings.DataBits = dataBitsType;
190
173
  port->toBeUpdated |= T_DataBits;
191
-
174
+
192
175
  updateSettings(port);
193
176
  }
194
177
 
195
178
 
196
179
  VALUE getDataBits(VALUE self)
197
180
  {
198
-
199
181
  PortDescriptor *port;
200
-
201
182
  Data_Get_Struct(self, PortDescriptor, port);
202
-
183
+
203
184
  return INT2FIX(port->settings.DataBits);
204
185
  }
205
186
 
206
187
 
207
188
  void setStopBits(VALUE self, VALUE intStopBits)
208
189
  {
209
-
210
- {
211
- Check_Type(intStopBits, T_FIXNUM);
212
- }
213
-
214
- int stopBits = FIX2INT(intStopBits);
215
-
190
+ Check_Type(intStopBits, T_FIXNUM);
191
+
216
192
  PortDescriptor *port;
217
-
218
193
  Data_Get_Struct(self, PortDescriptor, port);
219
-
194
+ int stopBits = FIX2INT(intStopBits);
220
195
  enum StopBitsType stopBitsType = STOP_1;
221
-
196
+
222
197
  switch (stopBits)
223
198
  {
224
199
  case STOP_1:
@@ -231,40 +206,31 @@ void setStopBits(VALUE self, VALUE intStopBits)
231
206
  rb_raise(rb_eException, "StopBits value does not match specification, current: %d", stopBits);
232
207
  break;
233
208
  }
234
-
209
+
235
210
  port->settings.StopBits = stopBitsType;
236
211
  port->toBeUpdated |= T_StopBits;
237
-
212
+
238
213
  updateSettings(port);
239
214
  }
240
215
 
241
216
 
242
217
  VALUE getStopBits(VALUE self)
243
218
  {
244
-
245
219
  PortDescriptor *port;
246
-
247
220
  Data_Get_Struct(self, PortDescriptor, port);
248
-
221
+
249
222
  return INT2FIX(port->settings.StopBits);
250
223
  }
251
224
 
252
225
 
253
226
  void setFlowControl(VALUE self, VALUE intFlow)
254
227
  {
255
-
256
- {
257
- Check_Type(intFlow, T_FIXNUM);
258
- }
259
-
260
- int flow = FIX2INT(intFlow);
261
-
228
+ Check_Type(intFlow, T_FIXNUM);
262
229
  PortDescriptor *port;
263
-
264
230
  Data_Get_Struct(self, PortDescriptor, port);
265
-
231
+ int flow = FIX2INT(intFlow);
266
232
  enum FlowType flowType = FLOW_OFF;
267
-
233
+
268
234
  switch (flow)
269
235
  {
270
236
  case FLOW_OFF:
@@ -280,119 +246,120 @@ void setFlowControl(VALUE self, VALUE intFlow)
280
246
  rb_raise(rb_eException, "FlowControl value does not match specification, current: %d", flow);
281
247
  break;
282
248
  }
283
-
249
+
284
250
  port->settings.FlowControl = flowType;
285
251
  port->toBeUpdated |= T_StopBits;
286
-
252
+
287
253
  updateSettings(port);
288
254
  }
289
255
 
290
256
 
291
257
  VALUE getFlowControl(VALUE self)
292
258
  {
293
-
294
259
  PortDescriptor *port;
295
-
296
260
  Data_Get_Struct(self, PortDescriptor, port);
297
-
261
+
298
262
  return INT2FIX(port->settings.FlowControl);
299
263
  }
300
264
 
301
265
 
302
266
  void setTimeout(VALUE self, VALUE rb_timeout)
303
267
  {
304
-
305
- {
306
- Check_Type(rb_timeout, T_FIXNUM);
307
- }
308
-
268
+ Check_Type(rb_timeout, T_FIXNUM);
309
269
  PortDescriptor *port;
310
-
311
270
  Data_Get_Struct(self, PortDescriptor, port);
312
-
313
271
  long timeout = FIX2LONG(rb_timeout);
314
-
272
+
315
273
  port->settings.Timeout_Millisec = timeout;
316
274
  port->toBeUpdated |= T_TimeOut;
317
-
275
+
318
276
  updateSettings(port);
319
277
  }
320
278
 
321
-
279
+ /*
280
+ * Get connection timeout
281
+ *
282
+ * @return [Fixnum] the timeout value
283
+ * @see Impl#timeout
284
+ */
322
285
  VALUE getTimeout(VALUE self)
323
286
  {
324
-
325
287
  PortDescriptor *port;
326
-
327
288
  Data_Get_Struct(self, PortDescriptor, port);
328
-
289
+
329
290
  return INT2FIX(port->settings.Timeout_Millisec);
330
291
  }
331
292
 
332
-
333
293
  void setSettings(VALUE self)
334
294
  {
335
-
336
295
  PortDescriptor *port;
337
-
338
296
  Data_Get_Struct(self, PortDescriptor, port);
339
-
297
+
340
298
  setBaudRate(self, INT2FIX(port->settings.BaudRate));
341
299
  setParity(self, INT2FIX(port->settings.Parity));
342
300
  setDataBits(self, INT2FIX(port->settings.DataBits));
343
301
  setStopBits(self, INT2FIX(port->settings.StopBits));
344
302
  setFlowControl(self, INT2FIX(port->settings.FlowControl));
345
303
  setTimeout(self, LONG2FIX(port->settings.Timeout_Millisec));
346
-
347
304
  port->toBeUpdated = T_ALL;
348
-
305
+
349
306
  updateSettings(port);
350
307
  }
351
308
 
352
-
353
- void Init_rs_232(void)
309
+ extern "C" void Init_rs_232_native(void)
354
310
  {
355
-
356
- VALUE root, rb_cPort;
357
-
358
- root = rb_define_module("CommPort");
359
-
360
- Constants_Init(root);
361
-
362
- rb_cPort = rb_define_class_under(root, "Rs232", rb_cObject);
363
- rb_define_alloc_func(rb_cPort, allocateStruct);
364
- rb_define_method(rb_cPort, "initialize", (VALUE ( *)()) initializeStruct, 1);
365
-
366
- rb_define_method(rb_cPort, "baud_rate=", (VALUE ( *)()) setBaudRate, 1);
367
- rb_define_method(rb_cPort, "baud_rate", (VALUE ( *)()) getBaudRate, 0);
368
-
369
- rb_define_method(rb_cPort, "parity=", (VALUE ( *)()) setParity, 1);
370
- rb_define_method(rb_cPort, "parity", (VALUE ( *)()) getParity, 0);
371
-
372
- rb_define_method(rb_cPort, "data_bits=", (VALUE ( *)()) setDataBits, 1);
373
- rb_define_method(rb_cPort, "data_bits", (VALUE ( *)()) getDataBits, 0);
374
-
375
- rb_define_method(rb_cPort, "stop_bits=", (VALUE ( *)()) setStopBits, 1);
376
- rb_define_method(rb_cPort, "stop_bits", (VALUE ( *)()) getStopBits, 0);
377
-
378
- rb_define_method(rb_cPort, "flow_control=", (VALUE ( *)()) setFlowControl, 1);
379
- rb_define_method(rb_cPort, "flow_control", (VALUE ( *)()) getFlowControl, 0);
380
-
381
- rb_define_method(rb_cPort, "timeout=", (VALUE ( *)()) setTimeout, 1);
382
- rb_define_method(rb_cPort, "timeout", (VALUE ( *)()) getTimeout, 0);
383
-
384
- rb_define_method(rb_cPort, "open", (VALUE ( *)()) openIO, 0);
385
- rb_define_method(rb_cPort, "close", (VALUE ( *)()) closeIO, 0);
386
- rb_define_method(rb_cPort, "flush", (VALUE ( *)()) flushIO, 0);
387
- rb_define_method(rb_cPort, "closed?", (VALUE ( *)()) isClosedIO, 0);
388
-
389
-
390
- rb_define_method(rb_cPort, "write", (VALUE ( *)()) writeIO, 1);
391
- rb_define_method(rb_cPort, "read", (VALUE ( *)()) readIO, 1);
392
- rb_define_method(rb_cPort, "available?", (VALUE ( *)()) bytesAvailableIO, 0);
393
-
394
- rb_define_method(rb_cPort, "line_status", (VALUE ( *)()) lineStatusIO, 0);
395
- rb_define_method(rb_cPort, "set_rts", (VALUE ( *)()) setRtsIO, 1);
396
- rb_define_method(rb_cPort, "set_dtr", (VALUE ( *)()) setDtrIO, 1);
397
-
311
+ const char rootModName[] = "Rs232";
312
+ const char implClassName[] = "Native";
313
+ const char constantsModName[] = "Constants";
314
+ const char VERSION[] = "2.0.0";
315
+
316
+ // define root Rs232 module
317
+ const VALUE root = rb_define_module(rootModName);
318
+
319
+ // define impl ruby class
320
+ const VALUE impl = rb_define_class_under(root, implClassName, rb_cObject);
321
+
322
+ // define module Constants under Native
323
+ const VALUE constants = rb_define_module_under(root, constantsModName);
324
+
325
+ // initialize constants in to module Native::Constants
326
+ Constants_Init(constants);
327
+
328
+ // define native version constant
329
+ rb_define_const(impl, "NATIVE_VERSION", rb_str_new2(VERSION));
330
+
331
+ rb_define_alloc_func(impl, allocateStruct);
332
+
333
+ rb_define_method(impl, "initialize", RUBY_METHOD_FUNC(initializeStruct), 1);
334
+
335
+ rb_define_method(impl, "baud_rate=", RUBY_METHOD_FUNC(setBaudRate), 1);
336
+ rb_define_method(impl, "baud_rate", RUBY_METHOD_FUNC(getBaudRate), 0);
337
+
338
+ rb_define_method(impl, "parity=", RUBY_METHOD_FUNC(setParity), 1);
339
+ rb_define_method(impl, "parity", RUBY_METHOD_FUNC(getParity), 0);
340
+
341
+ rb_define_method(impl, "data_bits=", RUBY_METHOD_FUNC(setDataBits), 1);
342
+ rb_define_method(impl, "data_bits", RUBY_METHOD_FUNC(getDataBits), 0);
343
+
344
+ rb_define_method(impl, "stop_bits=", RUBY_METHOD_FUNC(setStopBits), 1);
345
+ rb_define_method(impl, "stop_bits", RUBY_METHOD_FUNC(getStopBits), 0);
346
+
347
+ rb_define_method(impl, "flow_control=", RUBY_METHOD_FUNC(setFlowControl), 1);
348
+ rb_define_method(impl, "flow_control", RUBY_METHOD_FUNC(getFlowControl), 0);
349
+
350
+ rb_define_method(impl, "timeout=", RUBY_METHOD_FUNC(setTimeout), 1);
351
+ rb_define_method(impl, "timeout", RUBY_METHOD_FUNC(getTimeout), 0);
352
+
353
+ rb_define_method(impl, "open", RUBY_METHOD_FUNC(openIO), 0);
354
+ rb_define_method(impl, "close", RUBY_METHOD_FUNC(closeIO), 0);
355
+ rb_define_method(impl, "flush", RUBY_METHOD_FUNC(flushIO), 0);
356
+ rb_define_method(impl, "open?", RUBY_METHOD_FUNC(isOpenIO), 0);
357
+
358
+ rb_define_method(impl, "write", RUBY_METHOD_FUNC(writeIO), 1);
359
+ rb_define_method(impl, "read", RUBY_METHOD_FUNC(readIO), 1);
360
+ rb_define_method(impl, "available?", RUBY_METHOD_FUNC(bytesAvailableIO), 0);
361
+
362
+ rb_define_method(impl, "line_status", RUBY_METHOD_FUNC(lineStatusIO), 0);
363
+ rb_define_method(impl, "set_rts", RUBY_METHOD_FUNC(setRtsIO), 1);
364
+ rb_define_method(impl, "set_dtr", RUBY_METHOD_FUNC(setDtrIO), 1);
398
365
  }