You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

wjDataEncode.js 3.7KB

3 maanden geleden
1
  1. "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};