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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. "use strict";
  2. var PROTOCOL_TYPE = 1
  3. , PAGLENMAX = 95
  4. , TRANSFER_TYPE = 0
  5. , DATA_TYPE = 0
  6. , CMD_TYPE = 1;
  7. // 定义有效设备前缀数组(可配置化)
  8. const DEVICE_PREFIXES = ["ETC-KC-", "ETC-EB-", "ETC-HX-"];
  9. function isValidDevice(deviceName = '', prefixes = DEVICE_PREFIXES) {
  10. if (typeof deviceName !== 'string') {
  11. return false;
  12. }
  13. return prefixes.some(prefix =>
  14. deviceName.startsWith(prefix)
  15. );
  16. }
  17. function showLog() {
  18. if (!(arguments.length < 1)) {
  19. for (var r = arguments[0], t = 1; t < arguments.length; t++)
  20. r += " " + arguments[t];
  21. console.log(r)
  22. }
  23. }
  24. function showError() {
  25. if (!(arguments.length < 1)) {
  26. for (var r = arguments[0], t = 1; t < arguments.length; t++)
  27. r += " " + arguments[t];
  28. console.error(r)
  29. }
  30. }
  31. function byteArray2hexStr(r) {
  32. return Array.prototype.map.call(new Uint8Array(r), function (r) {
  33. return ("00" + r.toString(16)).slice(-2)
  34. }).join("")
  35. }
  36. function hexStr2byteArray(r) {
  37. return new Uint8Array(r.match(/[\da-f]{2}/gi).map(function (r) {
  38. return parseInt(r, 16)
  39. }))
  40. }
  41. function byte2hexStr(r) {
  42. var t = "0123456789abcdef"
  43. , e = "";
  44. return (e += t.charAt(r >> 4)) + t.charAt(15 & r)
  45. }
  46. function array2Str(r) {
  47. for (var t = "", e = 0; e < r.length; e++)
  48. t += r[e];
  49. return t
  50. }
  51. function getProtocolType() {
  52. return PROTOCOL_TYPE
  53. }
  54. function getPagLenMax() {
  55. return PAGLENMAX
  56. }
  57. function getTRANSFER_TYPE() {
  58. return TRANSFER_TYPE
  59. }
  60. function getDATA_TYPE() {
  61. return DATA_TYPE
  62. }
  63. function getCMD_TYPE() {
  64. return CMD_TYPE
  65. }
  66. function APDU2TPDU(r) {
  67. var t = hexStr2byteArray(r)
  68. , e = "";
  69. if ("01" == r.substring(0, 2))
  70. e = r;
  71. else {
  72. for (var n = new Array, o = 0, a = 0; a < t[0]; a++) {
  73. var g = o + 2
  74. , i = o + 2 + t[o + 1];
  75. o += 1 + t[o + 1],
  76. n[a] = r.substring(2 * g, 2 * i)
  77. }
  78. for (a = 0; a < t[0]; a++) {
  79. var u = n[a].length / 2;
  80. e += byte2hexStr(a + 1 & 255) + byte2hexStr(255 & u) + n[a]
  81. }
  82. }
  83. return e
  84. }
  85. function TPDU2APDU(r) {
  86. for (var t = hexStr2byteArray(r), e = "", n = new Array, o = 0, a = t.byteLength; o < a;) {
  87. var g = t[o++]
  88. , i = t[o++];
  89. n[g - 1] = r.substring(2 * o, 2 * (o + i)),
  90. o += i
  91. }
  92. for (var e = byte2hexStr(255 & n.length), u = 0; u < n.length; u++)
  93. e += byte2hexStr(n[u].length / 2 & 255) + n[u];
  94. return e
  95. }
  96. function hexCharCodeToStr(r) {
  97. var t, r = r.trim(), e = "0x" === r.substr(0, 2).toLowerCase() ? r.substr(2) : r, n = e.length;
  98. if (n % 2 != 0)
  99. return "";
  100. for (var o = [], a = 0; a < n; a += 2)
  101. t = parseInt(e.substr(a, 2), 16),
  102. o.push(String.fromCharCode(t));
  103. return o.join("")
  104. }
  105. function obuSetSleepTimeCmd(r) {
  106. r = "D1" + array2Str(r);
  107. return this.packetData(r)
  108. }
  109. function getActStateCmd() {
  110. return this.packetData("D20200")
  111. }
  112. function getCardBalanceCmd() {
  113. return packetData("a30105805c000204")
  114. }
  115. function packetData(r) {
  116. console.log("开始拆包:" + r);
  117. for (var t, e, n = new Array, o = void 0, a = void 0, g = void 0, i = r.length, o = r.length % 15 == 0 ? parseInt(r.length / 30) : parseInt(r.length / 30) + 1, u = 0; u < o; u++)
  118. a = 0 == u ? "80" + intToHexString(o, 1, !1) : "00" + intToHexString(u + 1, 1, !1),
  119. 30 <= i ? (g = r.substring(15 * u * 2, 15 * (u + 1) * 2),
  120. i -= 30) : g = r.substring(r.length - i, r.length),
  121. t = "5" + parseInt(g.length / 2, 10).toString(16),
  122. e = getBcc(t + a + g),
  123. console.log("组帧:ST:" + t + " CTL:" + a + " DATA:" + g + " BCC:" + e),
  124. n.push(str2array(t + a + g + e).buffer);
  125. return n
  126. }
  127. function intToHexString(r, t, e) {
  128. for (var n = r.toString(16), o = n.length; o < 2 * t; o++)
  129. n = "0" + n;
  130. if (n.length > 2 * t && (n = n.substring(n.length - 2 * t)),
  131. 0 == e) {
  132. for (var a = "", g = n.length - 2; 0 <= g; g -= 2)
  133. a += n.substring(g, g + 2);
  134. n = a
  135. }
  136. return n
  137. }
  138. function sleep(ms) {
  139. return new Promise(resolve => setTimeout(resolve, ms));
  140. }
  141. module.exports = {
  142. showLog: showLog,
  143. byteArray2hexStr: byteArray2hexStr,
  144. hexStr2byteArray: hexStr2byteArray,
  145. showError: showError,
  146. byte2hexStr: byte2hexStr,
  147. getProtocolType: getProtocolType,
  148. getPagLenMax: getPagLenMax,
  149. getTRANSFER_TYPE: getTRANSFER_TYPE,
  150. getDATA_TYPE: getDATA_TYPE,
  151. getCMD_TYPE: getCMD_TYPE,
  152. APDU2TPDU: APDU2TPDU,
  153. TPDU2APDU: TPDU2APDU,
  154. hexCharCodeToStr: hexCharCodeToStr,
  155. obuSetSleepTimeCmd: obuSetSleepTimeCmd,
  156. array2Str: array2Str,
  157. sleep: sleep,
  158. isValidDevice: isValidDevice,
  159. };