UNPKG

wiegand-control

Version:

Communicate with wiegand door access controller.

162 lines (161 loc) 5.82 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var moment_1 = __importDefault(require("moment")); require("moment-timezone"); var funcNames_1 = __importDefault(require("./funcNames")); function parseData(data) { var funcCode = "0x" + data .slice(1, 2) .toString("hex") .toUpperCase(); var serial = data.readUInt32LE(4); var payload = data.slice(8); return __assign({ serial: serial }, payloadParser(funcCode, payload)); } exports.parseData = parseData; function payloadParser(funcCode, payload) { switch (funcCode) { case "0x20": var types = ["none", "card", "open", "alert"]; var index = payload.readUInt32LE(0); var type = payload.readUInt8(4); var allow = payload.readUInt8(5); var door = payload.readUInt8(6); var inOut = payload.readUInt8(7); var cardNo = payload.readUInt32LE(8); var time = payload.slice(12, 19); // console.log("[DEBUG] Card No. hex is: ", payload.slice(8, 12)); return { funcName: funcNames_1.default[funcCode], index: index, type: types[type], allow: !!allow, door: door, inOut: inOut === 1 ? "in" : "out", cardNo: cardNo, time: parseBcdDate(time) }; case "0x32": var date = payload.slice(0, 7); return { funcName: funcNames_1.default[funcCode], date: !!parseBcdDate(date) }; case "0x40": return { funcName: funcNames_1.default[funcCode], success: payload.readUInt8(0) }; case "0x50": return { funcName: funcNames_1.default[funcCode], success: !!payload.readUInt8(0) }; case "0x52": return { funcName: funcNames_1.default[funcCode], success: !!payload.readUInt8(0) }; case "0x54": return { funcName: funcNames_1.default[funcCode], success: !!payload.readUInt8(0) }; case "0x5A": return { funcName: funcNames_1.default[funcCode], cardNo: payload.readUInt32LE(0) || null, from: payload.slice(4, 8).toString("hex"), to: payload.slice(8, 12).toString("hex") }; case "0x90": return { funcName: funcNames_1.default[funcCode], success: !!payload.readUInt8(0) }; case "0x92": return { funcName: funcNames_1.default[funcCode], ip: hexToIp(payload.slice(0, 4).toString("hex")), port: payload.readUInt16LE(4), interval: payload.readUInt8(6) }; case "0x94": return { funcName: funcNames_1.default[funcCode], ip: hexToIp(payload.slice(0, 4).toString("hex")), subNet: hexToIp(payload.slice(4, 8).toString("hex")), gateway: hexToIp(payload.slice(8, 12).toString("hex")), mac: (payload .slice(12, 18) .toString("hex") .toUpperCase() .match(/.{1,2}/g) || []).join(":"), version: +payload.slice(18, 20).toString("hex") / 100, release: payload.slice(20, 24).toString("hex") }; case "0x96": return { funcName: funcNames_1.default[funcCode], ip: hexToIp(payload.slice(0, 4).toString("hex")), subNet: hexToIp(payload.slice(4, 8).toString("hex")), gateway: hexToIp(payload.slice(8, 12).toString("hex")) }; default: return { funcName: "Unknown (" + funcCode + ")", data: payload }; } } exports.payloadParser = payloadParser; function parseBcdDate(bcd) { // console.log("BCD Date:", bcd); return moment_1.default .tz(bcd.toString("hex"), "YYYYMMDDHHmmss", "Asia/Shanghai") .toDate(); } exports.parseBcdDate = parseBcdDate; function buildBcdDate(date) { var str = moment_1.default(date) .tz("Asia/Shanghai") .format("YYYYMMDDHHmmss"); return Buffer.from(str, "hex"); } exports.buildBcdDate = buildBcdDate; function hexStringToDecArray(hexString) { var matches = hexString.match(/.{1,2}/g); if (!matches) { return []; } return matches.map(function (byteString) { return parseInt(byteString, 16); }); } exports.hexStringToDecArray = hexStringToDecArray; function decArrayToHexString(decArray) { var hex = decArray.map(function (d) { return d.toString(16).padStart(2, "0"); }).join(""); return hex; } exports.decArrayToHexString = decArrayToHexString; function ipToHex(ip) { return decArrayToHexString(ip.split(".").map(function (d) { return +d; })); } exports.ipToHex = ipToHex; function hexToIp(hex) { return hexStringToDecArray(hex).join("."); } exports.hexToIp = hexToIp;