msr 0.0.1 → 0.0.2

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: e05a55f89cc5ba507959b75913957939f283e039
4
- data.tar.gz: aef2815e7192bade10ed798c073b63049cf52587
3
+ metadata.gz: db0608761faf290f7fb9eceac6be19f584a8b050
4
+ data.tar.gz: 91a207db5a02beba3ebfa044e5bc10a2e22f34f8
5
5
  SHA512:
6
- metadata.gz: b6e4beea042e4fba1ff9d87df4b8ce99175990b1e77f48761c9652089ae3d0a9a353e9aee1a57dd44129897bec799bb36ca66dbb5abfebc976449bf5b4f31600
7
- data.tar.gz: 3b9c9e7f3049c7ff5a44d0499ad5c56eba6f0344f4e4a1d37db6937c9381abb25b5a68b763ef611e817b72c867c62dd5e30fb940019cbc1281d38d080f38a726
6
+ metadata.gz: f834b5ee6d3c3771b7d3214676b1d3e27caf3b2d66cd40a3a927d8485092eac8c5743dbc58dca2a2e5619555a8930f5aba97ae4f7917878ca907e3becda38b0a
7
+ data.tar.gz: 3be025af516e630802c1916e2a40504bc4d95702e6cb6f8fbb9899edf7afa545d19603e820267ac54196732dc45a598b4ef07807606a7857fb89241f4fb994a0
@@ -8,10 +8,11 @@ static VALUE initialize(VALUE self, VALUE rb_string);
8
8
  static VALUE comm_test(VALUE self);
9
9
  static VALUE sensor_test(VALUE self);
10
10
  static VALUE ram_test(VALUE self);
11
+ static VALUE reset(VALUE self);
11
12
  static VALUE get_coercivity(VALUE self);
12
13
  static VALUE set_coercivity(VALUE self, VALUE co_sym);
13
14
  static VALUE set_bpi(VALUE self, VALUE bpi);
14
- static VALUE set_bpc(VALUE self, VALUE bpc);
15
+ static VALUE set_bpc(VALUE self, VALUE bpc1, VALUE bpc2, VALUE bpc3);
15
16
  static VALUE set_led(VALUE self, VALUE led_sym);
16
17
  static VALUE raw_read(VALUE self);
17
18
  static VALUE iso_read(VALUE self);
@@ -26,10 +27,11 @@ void Init_msr_msr206()
26
27
  rb_define_method(cMSR_MSR206, "comm_test!", comm_test, 0);
27
28
  rb_define_method(cMSR_MSR206, "sensor_test!", sensor_test, 0);
28
29
  rb_define_method(cMSR_MSR206, "ram_test!", ram_test, 0);
30
+ rb_define_method(cMSR_MSR206, "reset!", reset, 0);
29
31
  rb_define_method(cMSR_MSR206, "coercivity", get_coercivity, 0);
30
32
  rb_define_method(cMSR_MSR206, "coercivity=", set_coercivity, 1);
31
33
  rb_define_method(cMSR_MSR206, "bpi=", set_bpi, 1);
32
- rb_define_method(cMSR_MSR206, "bpc=", set_bpc, 1);
34
+ rb_define_method(cMSR_MSR206, "bpc=", set_bpc, 3);
33
35
  rb_define_method(cMSR_MSR206, "led=", set_led, 1);
34
36
  rb_define_method(cMSR_MSR206, "raw_read", raw_read, 0);
35
37
  rb_define_method(cMSR_MSR206, "iso_read", iso_read, 0);
@@ -52,7 +54,7 @@ static void deallocate_206_ctx(msr206_ctx_t *ctx)
52
54
  msr_serial_close(ctx->fd);
53
55
  }
54
56
 
55
- free(ctx);
57
+ xfree(ctx);
56
58
  }
57
59
 
58
60
  static VALUE initialize(VALUE self, VALUE rb_path)
@@ -83,17 +85,67 @@ static VALUE initialize(VALUE self, VALUE rb_path)
83
85
 
84
86
  static VALUE comm_test(VALUE self)
85
87
  {
86
- return Qnil;
88
+ VALUE pass = ID2SYM(rb_intern("pass"));
89
+ VALUE fail = ID2SYM(rb_intern("fail"));
90
+ msr206_ctx_t *ctx;
91
+ int ret;
92
+
93
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
94
+
95
+ ret = msr_commtest(ctx->fd);
96
+
97
+ if (ret != LIBMSR_ERR_OK) {
98
+ return fail;
99
+ }
100
+
101
+ return pass;
87
102
  }
88
103
 
89
104
  static VALUE sensor_test(VALUE self)
90
105
  {
91
- return Qnil;
106
+ VALUE pass = ID2SYM(rb_intern("pass"));
107
+ VALUE fail = ID2SYM(rb_intern("fail"));
108
+ msr206_ctx_t *ctx;
109
+ int ret;
110
+
111
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
112
+
113
+ ret = msr_sensor_test(ctx->fd);
114
+
115
+ if (ret != LIBMSR_ERR_OK) {
116
+ return fail;
117
+ }
118
+
119
+ return pass;
92
120
  }
93
121
 
94
122
  static VALUE ram_test(VALUE self)
95
123
  {
96
- return Qnil;
124
+ VALUE pass = ID2SYM(rb_intern("pass"));
125
+ VALUE fail = ID2SYM(rb_intern("fail"));
126
+ msr206_ctx_t *ctx;
127
+ int ret;
128
+
129
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
130
+
131
+ ret = msr_ram_test(ctx->fd);
132
+
133
+ if (ret != LIBMSR_ERR_OK) {
134
+ return fail;
135
+ }
136
+
137
+ return pass;
138
+ }
139
+
140
+ static VALUE reset(VALUE self)
141
+ {
142
+ msr206_ctx_t *ctx;
143
+
144
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
145
+
146
+ msr_reset(ctx->fd);
147
+
148
+ return self;
97
149
  }
98
150
 
99
151
  static VALUE get_coercivity(VALUE self)
@@ -147,12 +199,46 @@ static VALUE set_coercivity(VALUE self, VALUE co_sym)
147
199
 
148
200
  static VALUE set_bpi(VALUE self, VALUE bpi)
149
201
  {
150
- return Qnil;
202
+ uint8_t bpi_tk2;
203
+ msr206_ctx_t *ctx;
204
+ int ret;
205
+
206
+ Check_Type(bpi, T_FIXNUM);
207
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
208
+
209
+ bpi_tk2 = NUM2CHR(bpi);
210
+
211
+ ret = msr_set_bpi(ctx->fd, bpi_tk2);
212
+
213
+ if (ret != LIBMSR_ERR_OK) {
214
+ rb_raise(rb_eRuntimeError, "Couldn't change bpi (%d)", ret);
215
+ }
216
+
217
+ return self;
151
218
  }
152
219
 
153
- static VALUE set_bpc(VALUE self, VALUE bpc)
220
+ static VALUE set_bpc(VALUE self, VALUE bpc1, VALUE bpc2, VALUE bpc3)
154
221
  {
155
- return Qnil;
222
+ uint8_t bpc_tk1, bpc_tk2, bpc_tk3;
223
+ msr206_ctx_t *ctx;
224
+ int ret;
225
+
226
+ Check_Type(bpc1, T_FIXNUM);
227
+ Check_Type(bpc2, T_FIXNUM);
228
+ Check_Type(bpc3, T_FIXNUM);
229
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
230
+
231
+ bpc_tk1 = NUM2CHR(bpc1);
232
+ bpc_tk2 = NUM2CHR(bpc2);
233
+ bpc_tk3 = NUM2CHR(bpc3);
234
+
235
+ ret = msr_set_bpc(ctx->fd, bpc_tk1, bpc_tk2, bpc_tk3);
236
+
237
+ if (ret != LIBMSR_ERR_OK) {
238
+ rb_raise(rb_eRuntimeError, "Couldn't change bpc (%d)", ret);
239
+ }
240
+
241
+ return self;
156
242
  }
157
243
 
158
244
  static VALUE set_led(VALUE self, VALUE led_sym)
@@ -242,10 +328,46 @@ static VALUE iso_read(VALUE self)
242
328
 
243
329
  static VALUE raw_write(VALUE self, VALUE tks_obj)
244
330
  {
245
- return Qnil;
331
+ msr206_ctx_t *ctx;
332
+ msr_tracks_t tks = {0};
333
+ int ret;
334
+
335
+ if (CLASS_OF(tks_obj) != c_MSR_Tracks) {
336
+ rb_raise(rb_eArgError, "expected tracks object");
337
+ }
338
+
339
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
340
+
341
+ msr_unwrap_tracks(tks_obj, &tks);
342
+
343
+ ret = msr_raw_write(ctx->fd, &tks);
344
+
345
+ if (ret != LIBMSR_ERR_OK) {
346
+ rb_raise(rb_eRuntimeError, "Device write failed (%d)", ret);
347
+ }
348
+
349
+ return self;
246
350
  }
247
351
 
248
352
  static VALUE iso_write(VALUE self, VALUE tks_obj)
249
353
  {
250
- return Qnil;
354
+ msr206_ctx_t *ctx;
355
+ msr_tracks_t tks = {0};
356
+ int ret;
357
+
358
+ if (CLASS_OF(tks_obj) != c_MSR_Tracks) {
359
+ rb_raise(rb_eArgError, "expected tracks object");
360
+ }
361
+
362
+ Data_Get_Struct(self, msr206_ctx_t, ctx);
363
+
364
+ msr_unwrap_tracks(tks_obj, &tks);
365
+
366
+ ret = msr_iso_write(ctx->fd, &tks);
367
+
368
+ if (ret != LIBMSR_ERR_OK) {
369
+ rb_raise(rb_eRuntimeError, "Device write failed (%d)", ret);
370
+ }
371
+
372
+ return self;
251
373
  }
@@ -0,0 +1,60 @@
1
+ #include "msr.h"
2
+
3
+ /*
4
+ A convenience function for instantiating a new MSR::Track in C.
5
+ */
6
+ VALUE msr_track_new(msr_track_t tk)
7
+ {
8
+ VALUE obj = rb_obj_alloc(c_MSR_Track);
9
+
10
+ VALUE tk_data_ary = rb_ary_new();
11
+
12
+ for (int i = 0; i < tk.msr_tk_len; i++) {
13
+ rb_ary_push(tk_data_ary, INT2NUM(tk.msr_tk_data[i]));
14
+ }
15
+
16
+ return msr_track_initialize(obj, tk_data_ary);
17
+ }
18
+
19
+ /*
20
+ A convenience function for instantiating a new MSR::Tracks in C.
21
+ */
22
+ VALUE msr_tracks_new(msr_tracks_t tks)
23
+ {
24
+ VALUE obj = rb_obj_alloc(c_MSR_Tracks);
25
+ VALUE tk1_obj = msr_track_new(tks.msr_tracks[0]);
26
+ VALUE tk2_obj = msr_track_new(tks.msr_tracks[1]);
27
+ VALUE tk3_obj = msr_track_new(tks.msr_tracks[2]);
28
+
29
+ return msr_tracks_initialize(obj, tk1_obj, tk2_obj, tk3_obj);
30
+ }
31
+
32
+ /*
33
+ A convenience function for unwrapping an MSR::Track instance.
34
+ */
35
+ void msr_unwrap_track(VALUE tk_obj, msr_track_t *tk)
36
+ {
37
+ VALUE tk_data_ary = rb_funcall(tk_obj, rb_intern("data"), 0);
38
+ VALUE tk_data_len = rb_funcall(tk_obj, rb_intern("length"), 0);
39
+ uint8_t len = (uint8_t) NUM2CHR(tk_data_len);
40
+
41
+ tk->msr_tk_len = len;
42
+
43
+ for (int i = 0; i < len; i++) {
44
+ tk->msr_tk_data[i] = (uint8_t) NUM2CHR(rb_ary_entry(tk_data_ary, i));
45
+ }
46
+ }
47
+
48
+ /*
49
+ A convenience function for unwrapping an MSR::Tracks instance.
50
+ */
51
+ void msr_unwrap_tracks(VALUE tks_obj, msr_tracks_t *tks)
52
+ {
53
+ VALUE tk1_obj = rb_funcall(tks_obj, rb_intern("track1"), 0);
54
+ VALUE tk2_obj = rb_funcall(tks_obj, rb_intern("track2"), 0);
55
+ VALUE tk3_obj = rb_funcall(tks_obj, rb_intern("track3"), 0);
56
+
57
+ msr_unwrap_track(tk1_obj, &(tks->msr_tracks[0]));
58
+ msr_unwrap_track(tk2_obj, &(tks->msr_tracks[1]));
59
+ msr_unwrap_track(tk3_obj, &(tks->msr_tracks[2]));
60
+ }
@@ -1,6 +1,5 @@
1
1
  #include "msr.h"
2
2
 
3
- static VALUE initialize(VALUE self, VALUE data);
4
3
  static VALUE msr_track_data(VALUE self);
5
4
  static VALUE msr_track_length(VALUE self);
6
5
 
@@ -12,28 +11,12 @@ void Init_msr_track()
12
11
 
13
12
  rb_define_const(c_MSR_Track, "MAX_TRACK_LEN", INT2NUM(MSR_MAX_TRACK_LEN));
14
13
 
15
- rb_define_method(c_MSR_Track, "initialize", initialize, 1);
14
+ rb_define_method(c_MSR_Track, "initialize", msr_track_initialize, 1);
16
15
  rb_define_method(c_MSR_Track, "data", msr_track_data, 0);
17
16
  rb_define_method(c_MSR_Track, "length", msr_track_length, 0);
18
17
  }
19
18
 
20
- /*
21
- A convenience function for instantiating a new MSR::Track in C.
22
- */
23
- VALUE msr_track_new(msr_track_t tk)
24
- {
25
- VALUE obj = rb_obj_alloc(c_MSR_Track);
26
-
27
- VALUE tk_data_ary = rb_ary_new();
28
-
29
- for (int i = 0; i < tk.msr_tk_len; i++) {
30
- rb_ary_push(tk_data_ary, INT2NUM(tk.msr_tk_data[i]));
31
- }
32
-
33
- return initialize(obj, tk_data_ary);
34
- }
35
-
36
- static VALUE initialize(VALUE self, VALUE tk_data_ary)
19
+ VALUE msr_track_initialize(VALUE self, VALUE tk_data_ary)
37
20
  {
38
21
  int tk_len;
39
22
 
@@ -45,6 +28,10 @@ static VALUE initialize(VALUE self, VALUE tk_data_ary)
45
28
  rb_raise(rb_eArgError, "Track >%d bytes", MSR_MAX_TRACK_LEN);
46
29
  }
47
30
 
31
+ for (int i = 0; i < tk_len; ++i) {
32
+ Check_Type(rb_ary_entry(tk_data_ary, i), T_FIXNUM);
33
+ }
34
+
48
35
  rb_iv_set(self, "@data", tk_data_ary);
49
36
 
50
37
  return self;
@@ -1,6 +1,5 @@
1
1
  #include "msr.h"
2
2
 
3
- static VALUE initialize(VALUE self, VALUE tk1, VALUE tk2, VALUE tk3);
4
3
  static VALUE msr_tracks_track1(VALUE self);
5
4
  static VALUE msr_tracks_track2(VALUE self);
6
5
  static VALUE msr_tracks_track3(VALUE self);
@@ -11,26 +10,13 @@ void Init_msr_tracks()
11
10
  {
12
11
  c_MSR_Tracks = rb_define_class_under(mMSR, "Tracks", rb_cObject);
13
12
 
14
- rb_define_method(c_MSR_Tracks, "initialize", initialize, 3);
13
+ rb_define_method(c_MSR_Tracks, "initialize", msr_tracks_initialize, 3);
15
14
  rb_define_method(c_MSR_Tracks, "track1", msr_tracks_track1, 0);
16
15
  rb_define_method(c_MSR_Tracks, "track2", msr_tracks_track2, 0);
17
16
  rb_define_method(c_MSR_Tracks, "track3", msr_tracks_track3, 0);
18
17
  }
19
18
 
20
- /*
21
- A convenience function for instantiating a new MSR::Tracks in C.
22
- */
23
- VALUE msr_tracks_new(msr_tracks_t tks)
24
- {
25
- VALUE obj = rb_obj_alloc(c_MSR_Tracks);
26
- VALUE tk1_obj = msr_track_new(tks.msr_tracks[0]);
27
- VALUE tk2_obj = msr_track_new(tks.msr_tracks[1]);
28
- VALUE tk3_obj = msr_track_new(tks.msr_tracks[2]);
29
-
30
- return initialize(obj, tk1_obj, tk2_obj, tk3_obj);
31
- }
32
-
33
- static VALUE initialize(VALUE self, VALUE tk1, VALUE tk2, VALUE tk3)
19
+ VALUE msr_tracks_initialize(VALUE self, VALUE tk1, VALUE tk2, VALUE tk3)
34
20
  {
35
21
  if (CLASS_OF(tk1) != c_MSR_Track) {
36
22
  rb_raise(rb_eArgError, "expected track object for track 1");
data/lib/msr.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require_relative "../ext/msr/msr"
2
2
  require_relative "msr/track"
3
+ require_relative "msr/tracks"
3
4
  require_relative "msr/msr206"
4
5
 
5
6
  module MSR
6
- VERSION = "0.0.1".freeze
7
+ VERSION = "0.0.2".freeze
7
8
  end
@@ -1,4 +1,7 @@
1
1
  module MSR
2
2
  class MSR206
3
+ def linked?
4
+ comm_test! == :pass
5
+ end
3
6
  end
4
7
  end
@@ -1,4 +1,8 @@
1
1
  module MSR
2
2
  class Track
3
+ def ==(o)
4
+ return unless o.is_a?(self.class)
5
+ data == o.data
6
+ end
3
7
  end
4
8
  end
@@ -1,4 +1,8 @@
1
1
  module MSR
2
2
  class Tracks
3
+ def ==(o)
4
+ return unless o.is_a?(self.class)
5
+ track1 == o.track1 && track2 == o.track2 && track3 == o.track3
6
+ end
3
7
  end
4
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-20 00:00:00.000000000 Z
11
+ date: 2016-10-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for controlling magnetic stripe reader/writers.
14
14
  email: william@tuffbizz.com
@@ -22,6 +22,7 @@ files:
22
22
  - ext/msr/extconf.rb
23
23
  - ext/msr/msr.c
24
24
  - ext/msr/msr206.c
25
+ - ext/msr/shim.c
25
26
  - ext/msr/track.c
26
27
  - ext/msr/tracks.c
27
28
  - lib/msr.rb