nfc 3.1.1 → 3.1.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 +5 -5
- data/ext/nfc/context.c +41 -39
- data/ext/nfc/nfc.c +10 -8
- data/ext/nfc/nfc_device.c +133 -105
- data/ext/nfc/nfc_iso14443a.c +27 -25
- data/lib/nfc.rb +1 -1
- data/lib/nfc/device.rb +3 -2
- metadata +17 -14
- data/.gemtest +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 880daef4e1b9f8531dfdc0918b68ba72ed46e88003f71b25cc17ea3309437b31
|
4
|
+
data.tar.gz: a0293da46032dc21626205360daaee2b06b7aa4f0ac02c8fc5a3e5dde6bfa6cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 770e545c3fde0e95c5b7bf74a0a77e18d7738c3c5967456af903a101adb9f08aca4418693c078329b04efd45e39f95c25d92c771a3279d4aba2eefc2f42fd535
|
7
|
+
data.tar.gz: 3d507a24639bf3c544e96090f2fe61f87433c5915e9cd42751b5343405d64f7c0dfa3b5d7b30433b459c0de82b139691d4b7c9896c0e667a11a65d00b67be212
|
data/ext/nfc/context.c
CHANGED
@@ -1,61 +1,63 @@
|
|
1
1
|
#include <nfc.h>
|
2
2
|
|
3
3
|
static VALUE allocate(VALUE klass) {
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
nfc_context * context;
|
5
|
+
nfc_init(&context);
|
6
|
+
return Data_Wrap_Struct(klass, NULL, nfc_exit, context);
|
7
7
|
}
|
8
8
|
|
9
9
|
static VALUE open_dev(VALUE self, VALUE name)
|
10
10
|
{
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
nfc_context * ctx;
|
12
|
+
nfc_device * dev;
|
13
|
+
VALUE device;
|
14
14
|
|
15
|
-
|
15
|
+
Data_Get_Struct(self, nfc_context, ctx);
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
if (NIL_P(name)) {
|
18
|
+
dev = nfc_open(ctx, NULL);
|
19
|
+
} else {
|
20
|
+
dev = nfc_open(ctx, StringValuePtr(name));
|
21
|
+
}
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
if (NULL == dev)
|
24
|
+
rb_raise(rb_eRuntimeError, "Unable to open the device");
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
if(nfc_initiator_init(dev) < 0)
|
27
|
+
rb_raise(rb_eRuntimeError, "Could not initialize device");
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
device = Data_Wrap_Struct(cNfcDevice, 0, nfc_close, dev);
|
30
|
+
rb_iv_set(device, "@context", self);
|
31
|
+
return device;
|
32
32
|
}
|
33
33
|
|
34
34
|
static VALUE devices(VALUE self, VALUE len)
|
35
35
|
{
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
36
|
+
nfc_context *ctx;
|
37
|
+
nfc_connstring * strs;
|
38
|
+
size_t found, i;
|
39
|
+
VALUE devs;
|
40
|
+
|
41
|
+
Data_Get_Struct(self, nfc_context, ctx);
|
42
|
+
|
43
|
+
strs = malloc(sizeof(nfc_connstring) * len);
|
44
|
+
|
45
|
+
found = nfc_list_devices(ctx, strs, 10);
|
46
|
+
devs = rb_ary_new2(found);
|
47
|
+
for (i = 0; i < found; i++) {
|
48
|
+
rb_ary_push(devs, rb_str_new2(strs[i]));
|
49
|
+
}
|
50
|
+
free(strs);
|
51
|
+
return devs;
|
52
52
|
}
|
53
53
|
|
54
54
|
void init_context()
|
55
55
|
{
|
56
|
-
|
57
|
-
|
56
|
+
VALUE cContext = rb_define_class_under(mNfc, "Context", rb_cObject);
|
57
|
+
rb_define_alloc_func(cContext, allocate);
|
58
58
|
|
59
|
-
|
60
|
-
|
59
|
+
rb_define_method(cContext, "devices", devices, 1);
|
60
|
+
rb_define_method(cContext, "open", open_dev, 1);
|
61
61
|
}
|
62
|
+
|
63
|
+
/* vim: set noet sws=4 sw=4: */
|
data/ext/nfc/nfc.c
CHANGED
@@ -4,12 +4,14 @@ VALUE mNfc;
|
|
4
4
|
|
5
5
|
void Init_nfc()
|
6
6
|
{
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
mNfc = rb_define_module("NFC");
|
8
|
+
|
9
|
+
init_context();
|
10
|
+
init_device();
|
11
|
+
init_iso14443a();
|
12
|
+
/*
|
13
|
+
init_felica();
|
14
|
+
*/
|
15
15
|
}
|
16
|
+
|
17
|
+
/* vim: set noet sws=4 sw=4: */
|
data/ext/nfc/nfc_device.c
CHANGED
@@ -1,7 +1,28 @@
|
|
1
1
|
#include <nfc.h>
|
2
|
+
#include <ruby/thread.h>
|
2
3
|
|
3
4
|
VALUE cNfcDevice;
|
4
5
|
|
6
|
+
struct nogvl_ctx {
|
7
|
+
nfc_device *dev;
|
8
|
+
nfc_modulation *mod;
|
9
|
+
nfc_target *ti;
|
10
|
+
};
|
11
|
+
|
12
|
+
void * nogvl_select_passive_target(void * ctx)
|
13
|
+
{
|
14
|
+
nfc_device * dev;
|
15
|
+
nfc_modulation * mod;
|
16
|
+
nfc_target * ti;
|
17
|
+
|
18
|
+
struct nogvl_ctx * myctx = (struct nogvl_ctx *)ctx;
|
19
|
+
dev = myctx->dev;
|
20
|
+
mod = myctx->mod;
|
21
|
+
ti = myctx->ti;
|
22
|
+
|
23
|
+
return nfc_initiator_select_passive_target(dev, *mod, NULL, 0, ti);
|
24
|
+
}
|
25
|
+
|
5
26
|
/*
|
6
27
|
* call-seq:
|
7
28
|
* select_passive_target(tag)
|
@@ -10,32 +31,37 @@ VALUE cNfcDevice;
|
|
10
31
|
*/
|
11
32
|
static VALUE select_passive_target(VALUE self, VALUE tag)
|
12
33
|
{
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
34
|
+
nfc_device * dev;
|
35
|
+
nfc_modulation * mod;
|
36
|
+
nfc_target * ti;
|
37
|
+
struct nogvl_ctx ctx;
|
38
|
+
|
39
|
+
Data_Get_Struct(self, nfc_device, dev);
|
40
|
+
Data_Get_Struct(tag, nfc_modulation, mod);
|
41
|
+
|
42
|
+
ti = (nfc_target *)xmalloc(sizeof(nfc_target));
|
43
|
+
|
44
|
+
ctx.dev = dev;
|
45
|
+
ctx.mod = mod;
|
46
|
+
ctx.ti = ti;
|
47
|
+
|
48
|
+
if (rb_thread_call_without_gvl(nogvl_select_passive_target, &ctx, RUBY_UBF_IO, 0) ) {
|
49
|
+
switch(mod->nmt) {
|
50
|
+
case NMT_ISO14443A:
|
51
|
+
return Data_Wrap_Struct(cNfcISO14443A, 0, xfree, ti);
|
52
|
+
break;
|
53
|
+
case NMT_FELICA:
|
54
|
+
/* return Data_Wrap_Struct(cNfcFelica, 0, free, ti); */
|
55
|
+
return Qnil;
|
56
|
+
break;
|
57
|
+
default:
|
58
|
+
rb_raise(rb_eRuntimeError, "untested type: %d", mod->nmt);
|
59
|
+
}
|
60
|
+
} else {
|
35
61
|
xfree(ti);
|
36
|
-
|
62
|
+
}
|
37
63
|
|
38
|
-
|
64
|
+
return Qfalse;
|
39
65
|
}
|
40
66
|
|
41
67
|
/*
|
@@ -46,37 +72,37 @@ static VALUE select_passive_target(VALUE self, VALUE tag)
|
|
46
72
|
*/
|
47
73
|
static VALUE poll_target(VALUE self, VALUE tag, VALUE poll_nr, VALUE ms)
|
48
74
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
75
|
+
nfc_device * dev;
|
76
|
+
nfc_modulation * mod;
|
77
|
+
nfc_target * ti;
|
78
|
+
int code;
|
79
|
+
int ms_c, poll_nr_c;
|
80
|
+
Data_Get_Struct(self, nfc_device, dev);
|
81
|
+
Data_Get_Struct(tag, nfc_modulation, mod);
|
82
|
+
|
83
|
+
ms_c = FIX2INT(ms);
|
84
|
+
poll_nr_c = FIX2INT(poll_nr);
|
85
|
+
|
86
|
+
ti = (nfc_target *)xmalloc(sizeof(nfc_target));
|
87
|
+
|
88
|
+
code = nfc_initiator_poll_target(dev, mod, 1, poll_nr_c, ms_c, ti);
|
89
|
+
|
90
|
+
if (code > 0) {
|
91
|
+
switch(mod->nmt) {
|
92
|
+
case NMT_ISO14443A:
|
93
|
+
return Data_Wrap_Struct(cNfcISO14443A, 0, xfree, ti);
|
94
|
+
break;
|
95
|
+
case NMT_FELICA:
|
96
|
+
return Data_Wrap_Struct(cNfcFelica, 0, xfree, ti);
|
97
|
+
break;
|
98
|
+
default:
|
99
|
+
rb_raise(rb_eRuntimeError, "untested type: %d", mod->nmt);
|
100
|
+
}
|
101
|
+
}else {
|
76
102
|
xfree(ti);
|
77
|
-
|
103
|
+
}
|
78
104
|
|
79
|
-
|
105
|
+
return INT2NUM(code);
|
80
106
|
}
|
81
107
|
|
82
108
|
/*
|
@@ -87,10 +113,10 @@ static VALUE poll_target(VALUE self, VALUE tag, VALUE poll_nr, VALUE ms)
|
|
87
113
|
*/
|
88
114
|
static VALUE name(VALUE self)
|
89
115
|
{
|
90
|
-
|
91
|
-
|
116
|
+
nfc_device * dev;
|
117
|
+
Data_Get_Struct(self, nfc_device, dev);
|
92
118
|
|
93
|
-
|
119
|
+
return rb_str_new2(nfc_device_get_name(dev));
|
94
120
|
}
|
95
121
|
|
96
122
|
/*
|
@@ -101,90 +127,92 @@ static VALUE name(VALUE self)
|
|
101
127
|
*/
|
102
128
|
static VALUE dev_deselect(VALUE self)
|
103
129
|
{
|
104
|
-
|
105
|
-
|
130
|
+
nfc_device * dev;
|
131
|
+
Data_Get_Struct(self, nfc_device, dev);
|
106
132
|
|
107
|
-
|
133
|
+
nfc_initiator_deselect_target(dev);
|
108
134
|
|
109
|
-
|
135
|
+
return self;
|
110
136
|
}
|
111
137
|
|
112
138
|
static VALUE mod_initialize(VALUE self, VALUE type, VALUE baud)
|
113
139
|
{
|
114
|
-
|
140
|
+
nfc_modulation * mod;
|
115
141
|
|
116
|
-
|
117
|
-
|
118
|
-
|
142
|
+
Data_Get_Struct(self, nfc_modulation, mod);
|
143
|
+
mod->nmt = NUM2INT(type);
|
144
|
+
mod->nbr = NUM2INT(baud);
|
119
145
|
|
120
|
-
|
146
|
+
return self;
|
121
147
|
}
|
122
148
|
|
123
149
|
static VALUE mod_alloc(VALUE klass)
|
124
150
|
{
|
125
|
-
|
151
|
+
nfc_modulation * modulation;
|
126
152
|
|
127
|
-
|
153
|
+
modulation = xcalloc(1, sizeof(nfc_modulation));
|
128
154
|
|
129
|
-
|
155
|
+
return Data_Wrap_Struct(klass, NULL, xfree, modulation);
|
130
156
|
}
|
131
157
|
|
132
158
|
static VALUE mod_nmt(VALUE self)
|
133
159
|
{
|
134
|
-
|
160
|
+
nfc_modulation * mod;
|
135
161
|
|
136
|
-
|
162
|
+
Data_Get_Struct(self, nfc_modulation, mod);
|
137
163
|
|
138
|
-
|
164
|
+
return INT2NUM(mod->nmt);
|
139
165
|
}
|
140
166
|
|
141
167
|
static VALUE mod_nbr(VALUE self)
|
142
168
|
{
|
143
|
-
|
169
|
+
nfc_modulation * mod;
|
144
170
|
|
145
|
-
|
171
|
+
Data_Get_Struct(self, nfc_modulation, mod);
|
146
172
|
|
147
|
-
|
173
|
+
return INT2NUM(mod->nbr);
|
148
174
|
}
|
149
175
|
|
150
176
|
static VALUE initiator_init(VALUE self)
|
151
177
|
{
|
152
|
-
|
153
|
-
|
178
|
+
nfc_device * dev;
|
179
|
+
int err;
|
154
180
|
|
155
|
-
|
181
|
+
Data_Get_Struct(self, nfc_device, dev);
|
156
182
|
|
157
|
-
|
158
|
-
|
159
|
-
|
183
|
+
err = nfc_initiator_init(dev);
|
184
|
+
if (0 == err)
|
185
|
+
return Qtrue;
|
160
186
|
|
161
|
-
|
187
|
+
return INT2NUM(err);
|
162
188
|
}
|
163
189
|
|
164
190
|
void init_device()
|
165
191
|
{
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
192
|
+
VALUE cNfcModulation;
|
193
|
+
cNfcDevice = rb_define_class_under(mNfc, "Device", rb_cObject);
|
194
|
+
rb_define_method(cNfcDevice, "initiator_init", initiator_init, 0);
|
195
|
+
rb_define_method(cNfcDevice, "select_passive_target", select_passive_target, 1);
|
196
|
+
rb_define_method(cNfcDevice, "poll_target", poll_target, 3);
|
197
|
+
rb_define_method(cNfcDevice, "name", name, 0);
|
198
|
+
rb_define_method(cNfcDevice, "deselect", dev_deselect, 0);
|
199
|
+
|
200
|
+
cNfcModulation = rb_define_class_under(cNfcDevice, "Modulation", rb_cObject);
|
201
|
+
|
202
|
+
/* modulation types. */
|
203
|
+
rb_define_const(cNfcModulation, "NMT_ISO14443A", INT2NUM(NMT_ISO14443A));
|
204
|
+
rb_define_const(cNfcModulation, "NMT_FELICA", INT2NUM(NMT_FELICA));
|
205
|
+
|
206
|
+
/* baud rates */
|
207
|
+
rb_define_const(cNfcModulation, "NBR_UNDEFINED", INT2NUM(NBR_UNDEFINED));
|
208
|
+
rb_define_const(cNfcModulation, "NBR_106", INT2NUM(NBR_106));
|
209
|
+
rb_define_const(cNfcModulation, "NBR_212", INT2NUM(NBR_212));
|
210
|
+
|
211
|
+
rb_define_alloc_func(cNfcModulation, mod_alloc);
|
212
|
+
|
213
|
+
rb_define_method(cNfcModulation, "initialize", mod_initialize, 2);
|
214
|
+
rb_define_method(cNfcModulation, "nmt", mod_nmt, 0);
|
215
|
+
rb_define_method(cNfcModulation, "nbr", mod_nbr, 0);
|
190
216
|
}
|
217
|
+
|
218
|
+
/* vim: set noet sws=4 sw=4: */
|
data/ext/nfc/nfc_iso14443a.c
CHANGED
@@ -10,10 +10,10 @@ VALUE cNfcISO14443A;
|
|
10
10
|
*/
|
11
11
|
static VALUE szUidLen(VALUE self)
|
12
12
|
{
|
13
|
-
|
14
|
-
|
13
|
+
nfc_target * tag;
|
14
|
+
Data_Get_Struct(self, nfc_target, tag);
|
15
15
|
|
16
|
-
|
16
|
+
return INT2NUM(tag->nti.nai.szUidLen);
|
17
17
|
}
|
18
18
|
|
19
19
|
/*
|
@@ -24,10 +24,10 @@ static VALUE szUidLen(VALUE self)
|
|
24
24
|
*/
|
25
25
|
static VALUE szAtsLen(VALUE self)
|
26
26
|
{
|
27
|
-
|
28
|
-
|
27
|
+
nfc_target * tag;
|
28
|
+
Data_Get_Struct(self, nfc_target, tag);
|
29
29
|
|
30
|
-
|
30
|
+
return INT2NUM(tag->nti.nai.szAtsLen);
|
31
31
|
}
|
32
32
|
|
33
33
|
/*
|
@@ -38,10 +38,10 @@ static VALUE szAtsLen(VALUE self)
|
|
38
38
|
*/
|
39
39
|
static VALUE abtUid(VALUE self)
|
40
40
|
{
|
41
|
-
|
42
|
-
|
41
|
+
nfc_target * tag;
|
42
|
+
Data_Get_Struct(self, nfc_target, tag);
|
43
43
|
|
44
|
-
|
44
|
+
return rb_str_new((const char *)tag->nti.nai.abtUid, tag->nti.nai.szUidLen);
|
45
45
|
}
|
46
46
|
|
47
47
|
/*
|
@@ -52,10 +52,10 @@ static VALUE abtUid(VALUE self)
|
|
52
52
|
*/
|
53
53
|
static VALUE abtAts(VALUE self)
|
54
54
|
{
|
55
|
-
|
56
|
-
|
55
|
+
nfc_target * tag;
|
56
|
+
Data_Get_Struct(self, nfc_target, tag);
|
57
57
|
|
58
|
-
|
58
|
+
return rb_str_new((const char *)tag->nti.nai.abtAts, tag->nti.nai.szAtsLen);
|
59
59
|
}
|
60
60
|
|
61
61
|
/*
|
@@ -66,10 +66,10 @@ static VALUE abtAts(VALUE self)
|
|
66
66
|
*/
|
67
67
|
static VALUE abtAtqa(VALUE self)
|
68
68
|
{
|
69
|
-
|
70
|
-
|
69
|
+
nfc_target * tag;
|
70
|
+
Data_Get_Struct(self, nfc_target, tag);
|
71
71
|
|
72
|
-
|
72
|
+
return rb_str_new((const char *)tag->nti.nai.abtAtqa, 2);
|
73
73
|
}
|
74
74
|
|
75
75
|
/*
|
@@ -80,21 +80,23 @@ static VALUE abtAtqa(VALUE self)
|
|
80
80
|
*/
|
81
81
|
static VALUE btSak(VALUE self)
|
82
82
|
{
|
83
|
-
|
84
|
-
|
83
|
+
nfc_target * tag;
|
84
|
+
Data_Get_Struct(self, nfc_target, tag);
|
85
85
|
|
86
|
-
|
86
|
+
return INT2NUM(tag->nti.nai.btSak);
|
87
87
|
}
|
88
88
|
|
89
89
|
void init_iso14443a()
|
90
90
|
{
|
91
|
-
|
91
|
+
cNfcISO14443A = rb_define_class_under(mNfc, "ISO14443A", rb_cObject);
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
rb_define_method(cNfcISO14443A, "szUidLen", szUidLen, 0);
|
94
|
+
rb_define_method(cNfcISO14443A, "szAtsLen", szAtsLen, 0);
|
95
|
+
rb_define_method(cNfcISO14443A, "btSak", btSak, 0);
|
96
96
|
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
rb_define_private_method(cNfcISO14443A, "abtUid", abtUid, 0);
|
98
|
+
rb_define_private_method(cNfcISO14443A, "abtAts", abtAts, 0);
|
99
|
+
rb_define_private_method(cNfcISO14443A, "abtAtqa", abtAtqa, 0);
|
100
100
|
}
|
101
|
+
|
102
|
+
/* vim: set noet sws=4 sw=4: */
|
data/lib/nfc.rb
CHANGED
data/lib/nfc/device.rb
CHANGED
@@ -6,14 +6,15 @@ module NFC
|
|
6
6
|
DCO_INFINITE_LIST_PASSIVE = 0x20
|
7
7
|
|
8
8
|
IM_ISO14443A_106 = Modulation.new Modulation::NMT_ISO14443A,
|
9
|
-
|
9
|
+
Modulation::NBR_106
|
10
10
|
|
11
11
|
# Find a tag, blocks until there is a tag available
|
12
12
|
def select
|
13
13
|
select_passive_target NFC::Device::IM_ISO14443A_106
|
14
14
|
end
|
15
|
+
|
15
16
|
def poll poll_nr = 1, ms = 1
|
16
|
-
|
17
|
+
poll_target NFC::Device::IM_ISO14443A_106, poll_nr,ms
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nfc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -16,42 +16,48 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.11'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5.
|
26
|
+
version: '5.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '4.0'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '6'
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '4.0'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '6'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: hoe
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
53
|
+
version: '3.17'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
60
|
+
version: '3.17'
|
55
61
|
description: |-
|
56
62
|
NFC is a ruby wrapper for the Near Field Communication library. The Near
|
57
63
|
Field Communication library works with many USB RFID readers, so this gem
|
@@ -68,7 +74,6 @@ extra_rdoc_files:
|
|
68
74
|
- README.rdoc
|
69
75
|
files:
|
70
76
|
- ".autotest"
|
71
|
-
- ".gemtest"
|
72
77
|
- CHANGELOG.rdoc
|
73
78
|
- Manifest.txt
|
74
79
|
- README.rdoc
|
@@ -108,11 +113,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
113
|
- !ruby/object:Gem::Version
|
109
114
|
version: '0'
|
110
115
|
requirements: []
|
111
|
-
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.7.6
|
113
118
|
signing_key:
|
114
119
|
specification_version: 4
|
115
120
|
summary: NFC is a ruby wrapper for the Near Field Communication library
|
116
|
-
test_files:
|
117
|
-
- test/test_context.rb
|
118
|
-
- test/test_device.rb
|
121
|
+
test_files: []
|
data/.gemtest
DELETED
File without changes
|