"use strict"; var _wjUtils = require("./wjUtils.js"), _wjUtils2 = _interopRequireDefault(_wjUtils); function _interopRequireDefault(t) { return t && t.__esModule ? t : { default: t } } function encode(t, e, a) { var r = _wjUtils2.default.getProtocolType(), t = getETCData(t, e, a), e = {}; return 0 == r ? e = encode_GB(t) : 1 == r && (e = encode_WX(t)), e } function getETCData(t, e, a) { var r = "", r = "A0" == a || "A3" == a || "A4" == a || "82" == a || "C2" == a || "AC" == a ? a + e + (r = getCommand(t)) : "A1" == a ? a + (r = getCommand(t)) : t; return _wjUtils2.default.showLog("组拼ETCData完毕:", r.length / 2, r), r } function getCommand(t) { var e, a = t, r = _wjUtils2.default.getDATA_TYPE(), t = t.length / 2, n = new ArrayBuffer(10), s = new DataView(n); return 0 == r ? (e = 256 < t ? (s.setInt8(0, 4 + t & 255), s.setInt8(1, 4 + t >> 8 & 255), s.setInt8(2, 128), s .setInt8(3, 130), s.setInt8(4, t >> 8 & 255), s.setInt8(5, 255 & t), n.slice(0, 6)) : 128 < t && t <= 256 ? (s.setInt8(0, 3 + t & 255), s.setInt8(1, (3 + t & 255) >> 8), s.setInt8(2, 128), s.setInt8(3, 129), s .setInt8(4, t), n.slice(0, 5)) : (s.setInt8(0, 2 + t & 255), s.setInt8(1, (2 + t & 255) >> 8), s .setInt8(2, 128), s.setInt8(3, t), n.slice(0, 4)), a = _wjUtils2.default.byteArray2hexStr(e) + a) : 1 == r && (s.setInt8(0, 255 & t), s.setInt8(1, t >> 8 & 255), e = n.slice(0, 2), a = _wjUtils2.default .byteArray2hexStr(e) + a), a } function encode_GB(t) { var e = {}, a = _wjUtils2.default.getPagLenMax(), r = parseInt(t.length / 2 / a), n = (t.length / 2 % a != 0 && (r += 1), new ArrayBuffer(10)); new DataView(n); e.serviceCode = 0, e.serviceInfo = "encode ok", e.serviceData = {}, e.serviceData.dataEncode = new Array; for (var s = 0; s < r - 1; s++) e.serviceData.dataEncode[s] = t.substr(s * a * 2, 2 * a), e.serviceData.dataEncode[ s] = getGBFrame(e.serviceData.dataEncode[s], s, r); return e.serviceData.dataEncode[r - 1] = t.substring((r - 1) * a * 2), e.serviceData.dataEncode[r - 1] = getGBFrame( e.serviceData.dataEncode[r - 1], r - 1, r), e } function encode_WX(t) { for (var e = {}, a = _wjUtils2.default.getPagLenMax(), r = parseInt(t.length / 2 / a), n = (t.length / 2 % a != 0 && (r += 1), e.serviceCode = 0, e.serviceInfo = "encode ok", e.serviceData = {}, e.serviceData.dataEncode = new Array, 0), n = 0; n < r - 1; n++) e.serviceData.dataEncode[n] = t.substr(n * a * 2, 2 * a), e .serviceData.dataEncode[n] = getWXFrame(e.serviceData.dataEncode[n], n, r); return e.serviceData.dataEncode[r - 1] = t.substring((r - 1) * a * 2), e.serviceData.dataEncode[r - 1] = getWXFrame( e.serviceData.dataEncode[r - 1], r - 1, r), e } function getWXFrame(t, e, a) { for (var r = _wjUtils2.default.getCMD_TYPE(), n = t, s = new ArrayBuffer(10), i = new DataView(s), l = "", d = 0, t = t.length / 2, u = (0 == e ? i.setInt8(0, 128 + (a - 1 - e & 255)) : i.setInt8(0, a - 1 - e & 255), l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 2), n = 2 == r ? "33" + l + _wjUtils2.default .byte2hexStr(255 & t) + n : "3301" + l + _wjUtils2.default.byte2hexStr(255 & t) + n, _wjUtils2.default .hexStr2byteArray(n)), c = 1; c < u.length; c++) d ^= u[c]; n += _wjUtils2.default.byte2hexStr(d); var o, a = _wjUtils2.default.hexStr2byteArray(n).length; return 127 < a ? (i.setInt8(0, 128 + (a % 128 & 255)), i.setInt8(1, a / 128 & 255), l = _wjUtils2.default .byteArray2hexStr(s).substring(0, 4), i.setInt8(0, (o = a + 8 + 4 + 3) >> 8 & 255)) : (i.setInt8(0, 255 & a), l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 2), i.setInt8(0, (o = a + 8 + 4 + 2) >> 8 & 255) ), i.setInt8(1, 255 & o), n = "FE01" + _wjUtils2.default.byteArray2hexStr(s).substring(0, 4) + "753100000A0012" + l + n + "1800" } function getGBFrame(t, e, a) { var r = _wjUtils2.default.getCMD_TYPE(), n = t, s = new ArrayBuffer(10), i = new DataView(s), l = "", d = 0, t = t.length / 2; if (2 == r) { 0 == e ? i.setInt8(0, a - 1 + 128) : i.setInt8(0, a - (e + 1) & 255), i.setInt8(1, 255 & t); for (var n = "33" + (l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 4)) + n, u = _wjUtils2.default .hexStr2byteArray(n), c = 1; c < u.length - 1; c++) d ^= u[c] } else { 0 == e ? (i.setInt8(0, 128 + (a >> 8 & 255)), i.setInt8(1, 255 & a)) : (i.setInt8(0, e + 1 >> 8 & 255), i .setInt8(1, e + 1 & 255)), i.setInt8(2, 255 & t), l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 6); for (u = _wjUtils2.default.hexStr2byteArray(n = "50" + l + n), c = 0; c < u.length; c++) d ^= u[c] } return n += _wjUtils2.default.byte2hexStr(d) } module.exports = { encode: encode };