Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

kcDataInteract.js 6.5KB

1 год назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. "use strict";
  2. var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
  3. return typeof e
  4. }
  5. : function (e) {
  6. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
  7. }
  8. , _kcService = require("./kcService.js")
  9. , _kcService2 = _interopRequireDefault(_kcService)
  10. , _kcUtils = require("./kcUtils.js")
  11. , _kcUtils2 = _interopRequireDefault(_kcUtils)
  12. , _kcDataDecode = require("./kcDataDecode.js")
  13. , _kcDataDecode2 = _interopRequireDefault(_kcDataDecode);
  14. function _interopRequireDefault(e) {
  15. return e && e.__esModule ? e : {
  16. default: e
  17. }
  18. }
  19. var TAG_FUNCTION = "function"
  20. , sendCallback = void 0
  21. , TimerID = null;
  22. function _StartSendData(o, e) {
  23. var s = {}
  24. , u = 0
  25. , c = 0;
  26. null != TimerID && (clearTimeout(TimerID),
  27. TimerID = null),
  28. _kcDataDecode2.default.init(),
  29. TimerID = setTimeout(pro_timeout, 10000),
  30. _kcUtils2.default.showLog(TimerID, "开启时钟"),
  31. sendCallback = e,
  32. _kcService2.default._SetDataListenerCallBack(!0, datacallback),
  33. function t() {
  34. var e = "";
  35. 40 * c >= o[u].length && (u++,
  36. c = 0);
  37. 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));
  38. if ("" == e)
  39. _kcUtils2.default.showLog("数据发送完毕!");
  40. else {
  41. for (var a = _kcUtils2.default.hexStr2byteArray(e), l = new ArrayBuffer(a.byteLength), r = new DataView(l), i = 0; i < a.byteLength; i++)
  42. r.setUint8(i, a[i]);
  43. _kcUtils2.default.showLog("发送数据:", e),
  44. _kcService2.default._writeBLECharacteristicValue(l, function (e) {
  45. 0 == e.serviceCode ? (c++,
  46. t()) : (_kcUtils2.default.showError(TimerID, "数据发送失败,取消时钟"),
  47. null != TimerID && (clearTimeout(TimerID),
  48. TimerID = null),
  49. _kcService2.default._SetDataListenerCallBack(!1),
  50. s.serviceCode = -2,
  51. s.serviceInfo = "数据发送失败",
  52. (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION && sendCallback(s))
  53. })
  54. }
  55. }()
  56. }
  57. function datacallback(e) {
  58. _kcService2.default._SetDataListenerCallBack(!0, datacallback),
  59. _ReceiveData(e)
  60. }
  61. function pro_timeout() {
  62. var e = {};
  63. _kcUtils2.default.showError(TimerID, "数据接收超时,取消时钟"),
  64. null != TimerID && (clearTimeout(TimerID),
  65. TimerID = null),
  66. _kcService2.default._SetDataListenerCallBack(!1),
  67. e.serviceCode = -3,
  68. e.serviceInfo = "数据接收超时",
  69. (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION && sendCallback(e)
  70. }
  71. function _ReceiveData(e) {
  72. var t, a = {}, l = _kcUtils2.default.getProtocolType();
  73. 0 == l ? t = _kcDataDecode2.default.decode_GB(e) : 1 == l && (t = _kcDataDecode2.default.decode_WX(e)),
  74. 0 == t.serviceCode && (null != (l = PackageDecode(t.serviceData.strData)) ? (_kcUtils2.default.showLog(TimerID, "接收数据成功,取消时钟"),
  75. null != TimerID && (clearTimeout(TimerID),
  76. TimerID = null),
  77. _kcService2.default._SetDataListenerCallBack(!1),
  78. a.serviceCode = 0,
  79. a.serviceInfo = "数据接收成功",
  80. a.serviceData = {},
  81. a.serviceData.dataBuff = l) : (_kcUtils2.default.showError(TimerID, "数据解析失败,取消时钟"),
  82. null != TimerID && (clearTimeout(TimerID),
  83. TimerID = null),
  84. _kcService2.default._SetDataListenerCallBack(!1),
  85. a.serviceCode = -1,
  86. a.serviceInfo = "数据解析失败"),
  87. (void 0 === sendCallback ? "undefined" : _typeof(sendCallback)) == TAG_FUNCTION) && sendCallback(a)
  88. }
  89. function PackageDecode(e) {
  90. // 获取数据类型
  91. var t = _kcUtils2.default.getDATA_TYPE(),
  92. // 将十六进制字符串转换为字节数组
  93. a = _kcUtils2.default.hexStr2byteArray(e),
  94. l = 0, // 初始化变量 l
  95. r = a[1], // 结果码
  96. i = a[0], // 操作类型
  97. s = ""; // 初始化变量 s
  98. // 打印日志
  99. _kcUtils2.default.showLog("kcPackageDecode:", e);
  100. // 检查结果码是否为 0
  101. if (0 != r) {
  102. _kcUtils2.default.showError("kc结果码非00");
  103. return null;
  104. }
  105. // 根据操作类型选择处理逻辑
  106. switch (i) {
  107. case 146:
  108. case 188:
  109. case 176:
  110. case 179:
  111. case 180:
  112. // 处理类型为 0
  113. if (0 == t) {
  114. var u = 7; // 初始偏移量为 7
  115. // 根据字节数组特定位置的值,计算有效数据长度 l
  116. if (129 == a[5]) {
  117. if (129 == a[6]) {
  118. l = 255 & a[7];
  119. u += 1;
  120. } else if (130 == a[6]) {
  121. l = a[7] << 8;
  122. l += 255 & a[8];
  123. u += 2;
  124. } else {
  125. l = 255 & a[6];
  126. }
  127. }
  128. // 从字节数组中提取有效数据
  129. u = a.slice(u, l + u);
  130. s = _kcUtils2.default.byteArray2hexStr(u);
  131. } else if (1 == t) {
  132. // 处理类型为 1
  133. u = a.slice(5);
  134. s = _kcUtils2.default.APDU2TPDU(_kcUtils2.default.byteArray2hexStr(u));
  135. }
  136. _kcUtils2.default.showLog("kc有效数据长度:", s.length / 2, s);
  137. _kcUtils2.default.showLog("操作类型ok", i);
  138. return s;
  139. case 145:
  140. case 148:
  141. case 144:
  142. // 处理 145, 148, 144 类型
  143. var o = (255 & a[3]) << 8;
  144. o += a[2];
  145. u = a.slice(4, o + 4);
  146. s = _kcUtils2.default.byteArray2hexStr(u);
  147. _kcUtils2.default.showLog("kc有效数据长度:", o, s);
  148. _kcUtils2.default.showLog("操作类型ok", i);
  149. return s;
  150. case 181:
  151. // 处理 181 类型
  152. var o = a[2];
  153. u = a.slice(3, o + 3);
  154. s = _kcUtils2.default.byteArray2hexStr(u);
  155. _kcUtils2.default.showLog("kc有效数据长度:", o, s);
  156. _kcUtils2.default.showLog("操作类型ok", i);
  157. return s;
  158. case 190:
  159. // 处理 190 类型
  160. s = e.substring(e.length - 2);
  161. _kcUtils2.default.showLog("操作类型ok" + s);
  162. return s;
  163. default:
  164. // 处理未知类型
  165. _kcUtils2.default.showError("kc通道类型有误");
  166. return null;
  167. }
  168. }
  169. module.exports = {
  170. _StartSendData: _StartSendData,
  171. _ReceiveData: _ReceiveData
  172. };