|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- var dataTool = require("./dataTool");
- var cmdKey = require("./JLZJConfig.js");
- var wxSeq = 0;
- var frame = 0;
- var MAX_PACK_LEN = 95;
- var ST = "33";
- export function wechatInit1(mac) {
- var cmd_arr = packWechatInit1(mac);
- return cmd_arr
- };
- export function wechatInit2() {
- var cmd_arr = packWechatInit2();
- return cmd_arr
- };
- export function ICCResetReq() {
- var cmd = cmdKey.ICCResetCmd();
- var cmd_arr = packData(cmd);
- return cmd_arr
- };
- export function ESAMResetReq() {
- var cmd = cmdKey.ESAMResetCmd();
- var cmd_arr = packData(cmd);
- return cmd_arr
- };
- export function ICCChannelTransmission(type, dataArr) {
- var cmdApdu = cread_apdu(dataArr);
- var cmdApduLen = cmdApdu.length / 2;
- var cmd = cmdKey.ICCChannelCmd() + type + dataTool.tenToHex(cmdApduLen, 4, true) + cmdApdu;
- var cmd_arr = packData(cmd);
- return cmd_arr
- };
- export function ESAMChannelTransmission(type, dataArr) {
- var cmdApdu = cread_apdu(dataArr);
- var cmdApduLen = cmdApdu.length / 2;
- var cmd = cmdKey.ESAMChannelCmd() + type + dataTool.tenToHex(cmdApduLen, 4, true) + cmdApdu;
- var cmd_arr = packData(cmd);
- return cmd_arr
- };
-
- function packData(cmd) {
- var cmd_arr = pack33Protocol(cmd);
- var wechat_arr = packWechatCmd(cmd_arr);
- var cmdArray = [];
- for (var i = 0; i < wechat_arr.length; i++) {
- var wechat_cmd = wechat_arr[i].wxTotalData;
- if (wechat_cmd.length < 40) {
- cmdArray.push(wechat_cmd)
- } else {
- for (var j = 0; j < wechat_cmd.length; j += 40) {
- var wechat_sub_cmd = wechat_cmd.substr(j, 40);
- cmdArray.push(wechat_sub_cmd)
- }
- }
- }
- return cmdArray
- }
-
- function pack33Protocol(cmd) {
- add_Frame();
- var cmdlen = cmd.length / 2;
- var cmd33conten = [];
- if (cmdlen > MAX_PACK_LEN) {
- var packages = Math.round(cmdlen / MAX_PACK_LEN);
- for (var i = 0; i < packages; i++) {
- var tempBean = {
- ST: "",
- SN: "",
- CTL: "",
- LEN: "",
- DATA: "",
- BCC: "",
- TOTALDATA: ""
- };
- tempBean.ST = ST;
- tempBean.SN = dataTool.tenToHex(frame, 2);
- if (i == 0) {
- tempBean.CTL = get_ctl(1, packages - (i + 1))
- } else {
- tempBean.CTL = get_ctl(0, packages - (i + 1))
- }
- if (i + 1 == packages) {
- tempBean.DATA = cmd.substring(i * MAX_PACK_LEN * 2)
- } else {
- tempBean.DATA = cmd.substring(i * MAX_PACK_LEN * 2, i * MAX_PACK_LEN * 2 + MAX_PACK_LEN * 2)
- }
- tempBean.LEN = dataTool.tenToHex(tempBean.DATA.length / 2, 2);
- tempBean.BCC = dataTool.bccCheck(tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA);
- console.log("tempBean.BCC====================:" + tempBean.BCC);
- tempBean.TOTALDATA = tempBean.ST + tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA + tempBean.BCC;
- cmd33conten.push(tempBean)
- }
- } else {
- var tempBean = {
- ST: "",
- SN: "",
- CTL: "",
- LEN: "",
- DATA: "",
- BCC: "",
- TOTALDATA: ""
- };
- tempBean.ST = ST;
- tempBean.SN = dataTool.tenToHex(frame, 2);
- tempBean.CTL = get_ctl(1, 0);
- tempBean.LEN = dataTool.tenToHex(cmdlen, 2);
- tempBean.DATA = cmd;
- tempBean.BCC = dataTool.bccCheck(tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA);
- tempBean.TOTALDATA = tempBean.ST + tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA + tempBean.BCC;
- cmd33conten.push(tempBean)
- }
- return cmd33conten
- }
- export function cread_apdu(cmdArr) {
- var content = cread_TLV(cmdArr);
- var contentuLen = content.length / 2;
- var contentApdu = "";
- var contentApduLen = "";
- if (contentuLen <= 80) {
- contentApduLen = dataTool.tenToHex(contentuLen, 2)
- } else {
- if (contentuLen <= 255) {
- contentApduLen = "81" + dataTool.tenToHex(contentuLen, 2)
- } else {
- contentApduLen = "82" + dataTool.tenToHex(contentuLen, 4)
- }
- }
- contentApdu = "80" + contentApduLen + content;
- return contentApdu
- };
-
- function cread_TLV(cmdArr) {
- var strTLV = "";
- for (var i = 1; i <= cmdArr.length; i++) {
- var cmd = cmdArr[i - 1];
- var len = cmd.length / 2;
- strTLV = strTLV + dataTool.tenToHex(i, 2) + dataTool.tenToHex(len, 2) + cmd
- }
- return strTLV
- }
-
- function add_Frame() {
- frame++;
- if (frame > 15) {
- frame = 0
- }
- }
-
- function get_ctl(bit7, serial) {
- var ctl = "";
- if (bit7 == 0) {
- ctl = dataTool.tenToHex(serial, 2)
- } else {
- var n = (2 << 6) + serial;
- ctl = dataTool.tenToHex(n, 2)
- }
- return ctl
- }
- export function packWechatInit1(mac) {
- var cmd = "fe01000e4e21" + mac + "0a0208001200";
- var cmd_arr = [];
- for (var i = 0; i < cmd.length; i += 40) {
- var cmd_sub = cmd.substr(i, 40);
- cmd_arr.push(cmd_sub)
- }
- return cmd_arr
- };
- export function packWechatInit2() {
- var cmd = "fe0100134e23" + "0002" + "0a02080010b42418f8ac01";
- var cmd_arr = [];
- for (var i = 0; i < cmd.length; i += 40) {
- var cmd_sub = cmd.substr(i, 40);
- cmd_arr.push(cmd_sub)
- }
- return cmd_arr
- };
-
- function packWechatCmd(cmdArray) {
- var cmdwxconten = [];
- var temp33conten = cmdArray;
- if (temp33conten.length > 0) {
- for (var i = 0; i < temp33conten.length; i++) {
- var tempBean_33 = temp33conten[i].TOTALDATA;
- var tempBean_wx = {
- wxMagicNumber: "",
- wxVer: "",
- wxLen: "",
- wxCMD: "",
- wxSeq: "",
- wxData: "",
- wxExtra: "",
- wxTail: "",
- wxTotalData: ""
- };
- tempBean_uni.wxMagicNumber = "FE";
- tempBean_uni.wxVer = "01";
- tempBean_uni.wxLen = dataTool.tenToHex(tempBean_33.length / 2 + 14, 4);
- tempBean_uni.wxCMD = "7531";
- tempBean_uni.wxSeq = "0000";
- tempBean_uni.wxExtra = "0A0012" + getwcDATAlen(tempBean_33.length / 2);
- tempBean_uni.wxData = tempBean_33;
- tempBean_uni.wxTail = "1800";
- tempBean_uni.wxTotalData = tempBean_uni.wxMagicNumber + tempBean_uni.wxVer + tempBean_uni.wxLen +
- tempBean_uni.wxCMD + tempBean_uni.wxSeq + tempBean_uni.wxExtra + tempBean_uni.wxData + tempBean_uni
- .wxTail;
- cmdwxconten.push(tempBean_wx)
- }
- }
- return cmdwxconten
- }
-
- function getwcDATAlen(dataLen) {
- var len = "";
- var lens1 = 0;
- var lens2 = 0;
- if (dataLen > 127) {
- lens1 = dataLen & 127 | 128;
- lens2 = dataLen >> 7 & 127;
- len = dataTool.tenToHex(lens1, 2) + dataTool.tenToHex(lens2, 2)
- } else {
- len = dataTool.tenToHex(dataLen, 2)
- }
- return len
- }
|