UNPKG

mifare-classic

Version:

Read and write NDEF bytes to Mifare Classic NFC Tags

126 lines (102 loc) 3.72 kB
var spawn = require('child_process').spawn, fs = require('fs'), fileName = 'ndef.bin'; // TODO use temp files function defaultCallback(err) { if (err) { throw err; } } function defaultReadCallback(err, data) { if (err) { throw err; } console.log(data); } // callback(err, data) // data is stream of ndef bytes from the tag function read(callback) { var errorMessage = "", result = "", // string for stdout from process uid = null, readMifareClassic = spawn('mifare-classic-read-ndef', [ '-y', '-o', fileName]); if (!callback) { callback = defaultReadCallback; } readMifareClassic.stdout.on('data', function (data) { process.stdout.write(data + ""); result += data; }); readMifareClassic.stderr.on('data', function (data) { errorMessage += data; // console.log('stderr: ' + data); }); readMifareClassic.on('close', function (code) { if (!result.includes('Found')) { // If stdout does not contain "Found" errorMessage = "No tag found"; // then there should be an error } else { // parse the UID from the mifare-classic-read-ndef output uid = result.match(/with UID ([A-F0-9]*)/i)[1]; } if (code === 0 && errorMessage.length === 0) { fs.readFile(fileName, function (err, data) { callback(err, data, uid); fs.unlinkSync(fileName); }); } else { callback(errorMessage); } }); } // callback(err) function write(data, callback) { var buffer = Buffer.from(data), errorMessage = "", result = ""; if (!callback) { callback = defaultCallback; } fs.writeFile(fileName, buffer, function(err) { if (err) callback(err); writeMifareClassic = spawn('mifare-classic-write-ndef', [ '-y', '-i', fileName]); writeMifareClassic.stdout.on('data', function (data) { process.stdout.write(data + ""); result += data; }); writeMifareClassic.stderr.on('data', function (data) { errorMessage += data; //console.log('stderr: ' + data); }); writeMifareClassic.on('close', function (code) { if (!result.includes('Found')) { // If stdout does not contain errorMessage = "No tag found"; // "Found" } // then there should be an error if (code === 0 && errorMessage.length === 0) { callback(null); fs.unlinkSync(fileName); } else { callback(errorMessage); } }); }); } function format(callback) { var errorMessage, result; if (!callback) { callback = defaultCallback; } formatMifareClassic = spawn('mifare-classic-format', [ '-y']); formatMifareClassic.stdout.on('data', function (data) { process.stdout.write(data + ""); result += data; }); formatMifareClassic.stderr.on('data', function (data) { errorMessage += data; // console.log('stderr: ' + data); }); formatMifareClassic.on('close', function (code) { if (!result.includes('Found')) { // If stdout does not contain errorMessage = "No tag found"; // "Found" } // then there should be an error if (code === 0 && errorMessage.length === 0) { callback(null); } else { callback(errorMessage); } }); } module.exports = { read: read, write: write, format: format };