-
Notifications
You must be signed in to change notification settings - Fork 132
/
NFC.js
89 lines (60 loc) · 1.65 KB
/
NFC.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"use strict";
import pcsclite from '@pokusew/pcsclite';
import EventEmitter from 'events';
import Reader from './Reader';
import ACR122Reader from './ACR122Reader';
class NFC extends EventEmitter {
pcsc = null;
logger = null;
constructor(logger) {
super();
this.pcsc = pcsclite();
if (logger) {
this.logger = logger;
}
else {
this.logger = {
log: function () {
},
debug: function () {
},
info: function () {
},
warn: function () {
},
error: function () {
},
};
}
this.pcsc.on('reader', (reader) => {
this.logger.debug('new reader detected', reader.name);
// create special object for ARC122U reader with commands specific to this reader
if (
// 'acr122' matches ARC122U
reader.name.toLowerCase().indexOf('acr122') !== -1
// 'acr125' matches ACR1252U reader because ACR1252U has some common commands with ARC122U
// ACR1252U product page: https://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/
// TODO: in the future, this should be refactored:
// see discussion in PR#111 https://github.com/pokusew/nfc-pcsc/pull/111
|| reader.name.toLowerCase().indexOf('acr125') !== -1
) {
const device = new ACR122Reader(reader, this.logger);
this.emit('reader', device);
return;
}
const device = new Reader(reader, this.logger);
this.emit('reader', device);
});
this.pcsc.on('error', (err) => {
this.logger.error('PCSC error', err.message);
this.emit('error', err);
});
}
get readers() {
return this.pcsc.readers;
}
close() {
this.pcsc.close();
}
}
export default NFC;