var DATA_LENGTH = 190, FRAME_LENGTH = 40, Protocol_Type = "genvict", SEQ = 3, SN = 1; function protocolType() { return Protocol_Type } function setProtocolType(a) { Protocol_Type = a } function setPackageLen(a) { DATA_LENGTH = 2 * (a - 5); console.log("packageLen:" + DATA_LENGTH / 2) } function makeAuthResponse() { var a = [], b = new Uint8Array("FE0100124E2100010A06080012024F4B1200".match(/[\da-f]{2}/gi).map(function(a) { return parseInt(a, 16) })); a.push(b.buffer); return a } function makeInitResponse() { var a = [], b = "FE0100164E2300020A06080012024F4B100018002000".substring(0, FRAME_LENGTH); b = new Uint8Array(b.match(/[\da-f]{2}/gi).map(function(a) { return parseInt(a, 16) })); a.push(b.buffer); b = new Uint8Array("2000".match(/[\da-f]{2}/gi).map(function(a) { return parseInt(a, 16) })); a.push(b.buffer); return a } function makeFrame(a) { var b = "" + a, c = parseInt(b.length / DATA_LENGTH), d = b.length % DATA_LENGTH; a = []; for (var e = 0; e < c; e++) a.push(b.substring(e * DATA_LENGTH, e * DATA_LENGTH + DATA_LENGTH)); 0 < d && a.push(b.substring(b.length - d)); b = []; SN++; 15 < SN && (SN = 1); for (c = 0; c < a.length; c++) { d = ""; d = 0 == c ? numberToHexString(128 + a.length - 1, 1, !0) : numberToHexString(a.length - c - 1, 1, !0); d = GVPackData(a[c], d); d = wechatPackData(d); e = parseInt(d.length / FRAME_LENGTH); for (var g = d.length % FRAME_LENGTH, f = 0; f < e; f++) { var h = d.substring(f * FRAME_LENGTH, f * FRAME_LENGTH + FRAME_LENGTH); h = new Uint8Array(h.match(/[\da-f]{2}/gi).map(function(a) { return parseInt(a, 16) })); b.push(h.buffer) } 0 < g && (d = d.substring(d.length - g), d = new Uint8Array(d.match(/[\da-f]{2}/gi).map(function(a) { return parseInt(a, 16) })), b.push(d.buffer)) } return b } function makeCosSendData(a, b) { b = 0 == parseInt(a.substring(1, 2), 10) ? "80" + tlvPackData(b) : b[0]; a = "A1" + a + numberToHexString(b.length / 2, 2, !1) + b; return makeFrame(a) } function initDeviceSendData() { return makeFrame("A2") } function makePiccChannelSendData(a, b) { b = 0 == parseInt(a.substring(1, 2), 10) ? "80" + tlvPackData(b) : b[0]; a = "A3" + a + numberToHexString(b.length / 2, 2, !1) + b; return makeFrame(a) } function makeDeviceChannelSendData(a) { a = "" + a; a = "A5" + numberToHexString(a.length / 2, 1, !1) + a; return makeFrame(a) } function makeAuthenChannelSendData(a, b) { a += b; a = "A6" + numberToHexString(a.length / 2, 2, !1) + a; return makeFrame(a) } function makePiccResetSendData() { return makeFrame("A900") } function makeEsamResetSendData() { return makeFrame("AA") } function makeEsamChannelSendData(a, b) { if ("pre" == Protocol_Type) { var c = "AC"; b = 0 == parseInt(a.substring(1, 2), 10) ? "80" + tlvPackData(b) : b[0] } else b = "80" + tlvPackData(b), c = "A1", a = "20"; a = c + a + numberToHexString(b.length / 2, 2, !1) + b; return makeFrame(a) } function makeDeviceAuthenSendData(a, b) { a = "C1" + a + b; a = "AD" + numberToHexString(a.length / 2, 2, !1) + a; return makeFrame(a) } function makeSelfDeviceChannelSendData(a) { a = "" + a; a = "AE" + numberToHexString(a.length / 2, 1, !1) + a; return makeFrame(a) } function makeUpdateChannelSendData(a, b) { a = null == b || 0 >= b.length ? "" + a : a + b; a = "A0" + numberToHexString(a.length / 2, 1, !1) + a; return makeFrame(a) } function tlvPackData(a) { for (var b = "", c = 0; c < a.length; c++) { var d = 256 <= a[c].length / 2 ? "82" + numberToHexString(a[c].length / 2, 2, !1) + a[c] : 128 < a[c].length / 2 ? "81" + numberToHexString(a[c].length / 2, 1, !1) + a[c] : numberToHexString(a[c].length / 2, 1, !1) + a[ c]; b = b + numberToHexString(c + 1, 1, !1) + d } a = b.length / 2; return 256 <= a ? "82" + numberToHexString(a, 2, !1) + b : 128 < a ? "81" + numberToHexString(a, 1, !1) + b : numberToHexString(a, 1, !1) + b } function wechatPackData(a) { if (1 > a.length / 256) a = "0A0012" + numberToHexString(a.length / 2, 1, !0) + a + "1800"; else { var b = numberToHexString((a.length % 256 + 256) / 2, 1, !0), c = numberToHexString(parseInt(a.length / 256), 1, !1); a = "0A0012" + b + c + a + "1800" } b = numberToHexString(a.length / 2 + 8, 2, !0); c = numberToHexString(SEQ, 2, !0); SEQ++; 15 < SEQ && (SEQ = 1); return "FE01" + b + "7531" + c + a } function GVPackData(a, b) { var c = numberToHexString(SN, 1, !0); a = "" + a; var d = numberToHexString(a.length / 2, 1, !0); b = "33" + c + b + d + a; c = 0; for (a = 1; a < b.length / 2; a++) d = parseInt(b.substring(2 * a, 2 * a + 2), 16), c ^= d; return b += numberToHexString(c, 1, !0) } function numberToHexString(a, b, c) { a = a.toString(16); for (var d = a.length; d < 2 * b; d++) a = "0" + a; a.length > 2 * b && (a = a.substring(a.length - 2 * b)); if (!c) { b = ""; for (c = a.length - 2; 0 <= c; c -= 2) b += a.substring(c, c + 2); a = b } return a } function fromCharCode(a) { for (var b = "", c = 0; c < a.length / 2; c++) { var d = a.substring(2 * c, 2 * c + 2); b += String.fromCharCode(parseInt(d, 16)) } return b } function byteArrayToHexStr(a) { for (var b = "", c = 0; c < a.length; c++) { var d = (a[c] & 255).toString(16); d = 1 === d.length ? "0" + d : d; b += d } return b } function hexToString(a) { for (var b = "", c = 0; c < a.length; c += 2) b += String.fromCharCode(parseInt(a.substr(c, 2), 16)); return b } function stringtoHex(a) { if ("" === a) return ""; for (var b = [], c = 0; c < a.length; c++) b.push(a.charCodeAt(c).toString(16)); return b.join("") } function hexToBytes(a) { for (var b = [], c = 0; c < a.length; c += 2) b.push(parseInt(a.substr(c, 2), 16)); return b } function getTime() { var a = new Date, b = a.getFullYear(), c = a.getMonth() + 1, d = a.getDate(); a.getTime(); var e = a.getHours(), g = a.getMinutes(), f = a.getSeconds(); a = a.getMilliseconds(); 1 <= c && 9 >= c && (c = "0" + c); 0 <= d && 9 >= d && (d = "0" + d); 0 <= e && 9 >= e && (e = "0" + e); 0 <= g && 9 >= g && (g = "0" + g); 0 <= f && 9 >= f && (f = "0" + f); return b + "-" + c + "-" + d + " " + e + ":" + g + ":" + f + ":" + a } function consoleLog(a) { a = getTime() + "\uff1a" + a + "\n"; console.log(a) } module.exports = { makeAuthResponse: makeAuthResponse, makeInitResponse: makeInitResponse, makeFrame: makeFrame, makeCosSendData: makeCosSendData, initDeviceSendData: initDeviceSendData, makePiccChannelSendData: makePiccChannelSendData, makeDeviceChannelSendData: makeDeviceChannelSendData, makeAuthenChannelSendData: makeAuthenChannelSendData, makePiccResetSendData: makePiccResetSendData, makeEsamResetSendData: makeEsamResetSendData, makeEsamChannelSendData: makeEsamChannelSendData, makeDeviceAuthenSendData: makeDeviceAuthenSendData, makeSelfDeviceChannelSendData: makeSelfDeviceChannelSendData, makeUpdateChannelSendData: makeUpdateChannelSendData, numberToHexString: numberToHexString, protocolType: protocolType, setProtocolType: setProtocolType, setPackageLen: setPackageLen, fromCharCode: fromCharCode, stringtoHex: stringtoHex, hexToBytes: hexToBytes, hexToString: hexToString, byteArrayToHexStr: byteArrayToHexStr, consoleLog: consoleLog };