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