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 +4 -4
- data/ext/msr/msr206.c +133 -11
- data/ext/msr/shim.c +60 -0
- data/ext/msr/track.c +6 -19
- data/ext/msr/tracks.c +2 -16
- data/lib/msr.rb +2 -1
- data/lib/msr/msr206.rb +3 -0
- data/lib/msr/track.rb +4 -0
- data/lib/msr/tracks.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db0608761faf290f7fb9eceac6be19f584a8b050
|
4
|
+
data.tar.gz: 91a207db5a02beba3ebfa044e5bc10a2e22f34f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f834b5ee6d3c3771b7d3214676b1d3e27caf3b2d66cd40a3a927d8485092eac8c5743dbc58dca2a2e5619555a8930f5aba97ae4f7917878ca907e3becda38b0a
|
7
|
+
data.tar.gz: 3be025af516e630802c1916e2a40504bc4d95702e6cb6f8fbb9899edf7afa545d19603e820267ac54196732dc45a598b4ef07807606a7857fb89241f4fb994a0
|
data/ext/msr/msr206.c
CHANGED
@@ -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
|
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,
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
220
|
+
static VALUE set_bpc(VALUE self, VALUE bpc1, VALUE bpc2, VALUE bpc3)
|
154
221
|
{
|
155
|
-
|
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
|
-
|
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
|
-
|
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
|
}
|
data/ext/msr/shim.c
ADDED
@@ -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
|
+
}
|
data/ext/msr/track.c
CHANGED
@@ -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",
|
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;
|
data/ext/msr/tracks.c
CHANGED
@@ -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",
|
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
data/lib/msr/msr206.rb
CHANGED
data/lib/msr/track.rb
CHANGED
data/lib/msr/tracks.rb
CHANGED
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.
|
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-
|
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
|