"use strict"; var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e } , _kcService = require("./kcService.js") , _kcService2 = _interopRequireDefault(_kcService) , _kcUtils = require("./kcUtils.js") , _kcUtils2 = _interopRequireDefault(_kcUtils) , _kcDataDecode = require("./kcDataDecode.js") , _kcDataDecode2 = _interopRequireDefault(_kcDataDecode); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } var TAG_FUNCTION = "function" , sendCallback = void 0 , TimerID = null; function _StartSendData(o, e) { var s = {} , u = 0 , c = 0; null != TimerID && (clearTimeout(TimerID), TimerID = null), _kcDataDecode2.default.init(), TimerID = setTimeout(pro_timeout, 10000), _kcUtils2.default.showLog(TimerID, "开启时钟"), sendCallback = e, _kcService2.default._SetDataListenerCallBack(!0, datacallback), function t() { var e = ""; 40 * c >= o[u].length && (u++, c = 0); u < o.length && (e = o[u].length >= 40 * (c + 1) ? o[u].substring(40 * c, 40 * (c + 1)) : o[u].substring(40 * c, o[u].length)); if ("" == e) _kcUtils2.default.showLog("数据发送完毕!"); else { for (var a = _kcUtils2.default.hexStr2byteArray(e), l = new ArrayBuffer(a.byteLength), r = new DataView(l), i = 0; i < a.byteLength; i++) r.setUint8(i, a[i]); _kcUtils2.default.showLog("发送数据:", e), _kcService2.default._writeBLECharacteristicValue(l, function (e) { 0 == e.serviceCode ? (c++, t()) : (_kcUtils2.default.showError(TimerID, "数据发送失败,取消时钟"), null != TimerID && (clearTimeout(TimerID), TimerID = null), _kcService2.default._SetDataListenerCallBack(!1), s.serviceCode = -2, s.serviceInfo = "数据发送失败", (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION && sendCallback(s)) }) } }() } function datacallback(e) { _kcService2.default._SetDataListenerCallBack(!0, datacallback), _ReceiveData(e) } function pro_timeout() { var e = {}; _kcUtils2.default.showError(TimerID, "数据接收超时,取消时钟"), null != TimerID && (clearTimeout(TimerID), TimerID = null), _kcService2.default._SetDataListenerCallBack(!1), e.serviceCode = -3, e.serviceInfo = "数据接收超时", (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION && sendCallback(e) } function _ReceiveData(e) { var t, a = {}, l = _kcUtils2.default.getProtocolType(); 0 == l ? t = _kcDataDecode2.default.decode_GB(e) : 1 == l && (t = _kcDataDecode2.default.decode_WX(e)), 0 == t.serviceCode && (null != (l = PackageDecode(t.serviceData.strData)) ? (_kcUtils2.default.showLog(TimerID, "接收数据成功,取消时钟"), null != TimerID && (clearTimeout(TimerID), TimerID = null), _kcService2.default._SetDataListenerCallBack(!1), a.serviceCode = 0, a.serviceInfo = "数据接收成功", a.serviceData = {}, a.serviceData.dataBuff = l) : (_kcUtils2.default.showError(TimerID, "数据解析失败,取消时钟"), null != TimerID && (clearTimeout(TimerID), TimerID = null), _kcService2.default._SetDataListenerCallBack(!1), a.serviceCode = -1, a.serviceInfo = "数据解析失败"), (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION) && sendCallback(a) } function PackageDecode(e) { // 获取数据类型 var t = _kcUtils2.default.getDATA_TYPE(), // 将十六进制字符串转换为字节数组 a = _kcUtils2.default.hexStr2byteArray(e), l = 0, // 初始化变量 l r = a[1], // 结果码 i = a[0], // 操作类型 s = ""; // 初始化变量 s // 打印日志 _kcUtils2.default.showLog("kcPackageDecode:", e); // 检查结果码是否为 0 if (0 != r) { _kcUtils2.default.showError("kc结果码非00"); return null; } // 根据操作类型选择处理逻辑 switch (i) { case 146: case 188: case 176: case 179: case 180: // 处理类型为 0 if (0 == t) { var u = 7; // 初始偏移量为 7 // 根据字节数组特定位置的值,计算有效数据长度 l if (129 == a[5]) { if (129 == a[6]) { l = 255 & a[7]; u += 1; } else if (130 == a[6]) { l = a[7] << 8; l += 255 & a[8]; u += 2; } else { l = 255 & a[6]; } } // 从字节数组中提取有效数据 u = a.slice(u, l + u); s = _kcUtils2.default.byteArray2hexStr(u); } else if (1 == t) { // 处理类型为 1 u = a.slice(5); s = _kcUtils2.default.APDU2TPDU(_kcUtils2.default.byteArray2hexStr(u)); } _kcUtils2.default.showLog("kc有效数据长度:", s.length / 2, s); _kcUtils2.default.showLog("操作类型ok", i); return s; case 145: case 148: case 144: // 处理 145, 148, 144 类型 var o = (255 & a[3]) << 8; o += a[2]; u = a.slice(4, o + 4); s = _kcUtils2.default.byteArray2hexStr(u); _kcUtils2.default.showLog("kc有效数据长度:", o, s); _kcUtils2.default.showLog("操作类型ok", i); return s; case 181: // 处理 181 类型 var o = a[2]; u = a.slice(3, o + 3); s = _kcUtils2.default.byteArray2hexStr(u); _kcUtils2.default.showLog("kc有效数据长度:", o, s); _kcUtils2.default.showLog("操作类型ok", i); return s; case 190: // 处理 190 类型 s = e.substring(e.length - 2); _kcUtils2.default.showLog("操作类型ok" + s); return s; default: // 处理未知类型 _kcUtils2.default.showError("kc通道类型有误"); return null; } } module.exports = { _StartSendData: _StartSendData, _ReceiveData: _ReceiveData };