msr 0.0.1 → 0.0.2

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: 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