@ap-mitch/nfc-pcsc
Version:
Easy reading and writing NFC tags and cards
165 lines (142 loc) • 5.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _Reader = _interopRequireDefault(require("./Reader"));
var _errors = require("./errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ACR12XReader extends _Reader.default {
async inAutoPoll() {
const payload = [0xd4, 0x60, 0xff, // PollNr (0xFF = Endless polling)
0x01, // Period (0x01 – 0x0F) indicates the polling period in units of 150 ms
0x00 // Type 1 0x00 = Generic passive 106 kbps (ISO/IEC14443-4A, Mifare and DEP)
]; // CMD: Direct Transmit (to inner PN532 chip InAutoPoll CMD)
const packet = Buffer.from([0xff, // Class
0x00, // INS
0x00, // P1
0x00, // P2
payload.length, // Lc: Number of Bytes to send (Maximum 255 bytes)
...payload]);
console.log(packet);
let response = null;
try {
response = await this.control(packet, 2);
this.logger.debug("response received", response); // Red OFF Green OFF 0x00
// Red ON Green OFF 0x01
// Red OFF Green ON 0x02
// Red ON Green ON 0x03
console.log(response.slice(1));
} catch (err) {
throw err;
} // const statusCode = response.readUInt16BE(0);
//
// if (statusCode !== 0x9000) {
// //throw new LoadAuthenticationKeyError(OPERATION_FAILED, `Load authentication key operation failed: Status code: ${statusCode}`);
// }
}
async led(led, blinking) {
// P2: LED State Control (1 byte = 8 bits)
// format:
/*
+-----+----------------------------------+-------------------------------------+
| Bit | Item | Description |
+-----+----------------------------------+-------------------------------------+
| 0 | Final Red LED State | 1 = On; 0 = Off |
| 1 | Final Green LED State | 1 = On; 0 = Off |
| 2 | Red LED State Mask | 1 = Update the State; 0 = No change |
| 3 | Green LED State Mask | 1 = Update the State; 0 = No change |
| 4 | Initial Red LED Blinking State | 1 = On; 0 = Off |
| 5 | Initial Green LED Blinking State | 1 = On; 0 = Off |
| 6 | Red LED Blinking Mask | 1 = Blink; 0 = Not Blink |
| 7 | Green LED Blinking Mask | 1 = Blink; 0 = Not Blink |
+-----+----------------------------------+-------------------------------------+
*/
//const led = 0b00001111;
//const led = 0x50;
// Data In: Blinking Duration Control (4 bytes)
// Byte 0: T1 Duration Initial Blinking State (Unit = 100 ms)
// Byte 1: T2 Duration Toggle Blinking State (Unit = 100 ms)
// Byte 2: Number of repetition
// Byte 3: Link to Buzzer
// - 00: The buzzer will not turn on
// - 01: The buzzer will turn on during the T1 Duration
// - 02: The buzzer will turn on during the T2 Duration
// - 03: The buzzer will turn on during the T1 and T2 Duration
// const blinking = [
// 0x00,
// 0x00,
// 0x00,
// 0x00
// ];
// CMD: Bi-Color LED and Buzzer Control
const packet = Buffer.from([0xff, // Class
0x00, // INS
0x40, // P1
led, // P2: LED State Control
0x04, // Lc
...blinking // Data In: Blinking Duration Control (4 bytes)
]);
console.log(packet);
let response = null;
try {
response = await this.control(packet, 2);
this.logger.debug("response received", response); // Red OFF Green OFF 0x00
// Red ON Green OFF 0x01
// Red OFF Green ON 0x02
// Red ON Green ON 0x03
console.log(response.slice(1));
} catch (err) {
throw err;
} // const statusCode = response.readUInt16BE(0);
//
// if (statusCode !== 0x9000) {
// //throw new LoadAuthenticationKeyError(OPERATION_FAILED, `Load authentication key operation failed: Status code: ${statusCode}`);
// }
}
async setBuzzerOutput(enabled = true) {
// CMD: Set Buzzer Output Enable for Card Detection
const packet = Buffer.from([0xff, // Class
0x00, // INS
0x52, // P1
enabled ? 0xff : 0x00, // P2: PollBuzzStatus
0x00 // Le
]);
console.log(packet);
let response = null;
try {
response = await this.control(packet, 2);
this.logger.debug("response received", response);
} catch (err) {
throw err;
}
const statusCode = response.readUInt16BE(0);
if (statusCode !== 0x9000) {//throw new LoadAuthenticationKeyError(OPERATION_FAILED, `Load authentication key operation failed: Status code: ${statusCode}`);
}
}
async setPICC(picc) {
// just enable Auto ATS Generation
// const picc = 0b01000000;
// CMD: Set PICC Operating Parameter
const packet = Buffer.from([0xff, // Class
0x00, // INS
0x51, // P1
picc, // P2: New PICC Operating Parameter
0x00 // Le
]);
console.log(packet);
let response = null;
try {
response = await this.control(packet, 1);
this.logger.debug("response received", response);
} catch (err) {
throw err;
} // const statusCode = response.readUInt16BE(0);
//
// if (statusCode !== 0x9000) {
// //throw new LoadAuthenticationKeyError(OPERATION_FAILED, `Load authentication key operation failed: Status code: ${statusCode}`);
// }
}
}
var _default = ACR12XReader;
exports.default = _default;