您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

wjDataEncode.js 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. "use strict";
  2. var _wjUtils = require("./wjUtils.js"),
  3. _wjUtils2 = _interopRequireDefault(_wjUtils);
  4. function _interopRequireDefault(t) {
  5. return t && t.__esModule ? t : {
  6. default: t
  7. }
  8. }
  9. function encode(t, e, a) {
  10. var r = _wjUtils2.default.getProtocolType(),
  11. t = getETCData(t, e, a),
  12. e = {};
  13. return 0 == r ? e = encode_GB(t) : 1 == r && (e = encode_WX(t)), e
  14. }
  15. function getETCData(t, e, a) {
  16. var r = "",
  17. r = "A0" == a || "A3" == a || "A4" == a || "82" == a || "C2" == a || "AC" == a ? a + e + (r = getCommand(t)) :
  18. "A1" == a ? a + (r = getCommand(t)) : t;
  19. return _wjUtils2.default.showLog("组拼ETCData完毕:", r.length / 2, r), r
  20. }
  21. function getCommand(t) {
  22. var e, a = t,
  23. r = _wjUtils2.default.getDATA_TYPE(),
  24. t = t.length / 2,
  25. n = new ArrayBuffer(10),
  26. s = new DataView(n);
  27. return 0 == r ? (e = 256 < t ? (s.setInt8(0, 4 + t & 255), s.setInt8(1, 4 + t >> 8 & 255), s.setInt8(2, 128), s
  28. .setInt8(3, 130), s.setInt8(4, t >> 8 & 255), s.setInt8(5, 255 & t), n.slice(0, 6)) : 128 < t && t <=
  29. 256 ? (s.setInt8(0, 3 + t & 255), s.setInt8(1, (3 + t & 255) >> 8), s.setInt8(2, 128), s.setInt8(3, 129), s
  30. .setInt8(4, t), n.slice(0, 5)) : (s.setInt8(0, 2 + t & 255), s.setInt8(1, (2 + t & 255) >> 8), s
  31. .setInt8(2, 128), s.setInt8(3, t), n.slice(0, 4)), a = _wjUtils2.default.byteArray2hexStr(e) + a) : 1 ==
  32. r && (s.setInt8(0, 255 & t), s.setInt8(1, t >> 8 & 255), e = n.slice(0, 2), a = _wjUtils2.default
  33. .byteArray2hexStr(e) + a), a
  34. }
  35. function encode_GB(t) {
  36. var e = {},
  37. a = _wjUtils2.default.getPagLenMax(),
  38. r = parseInt(t.length / 2 / a),
  39. n = (t.length / 2 % a != 0 && (r += 1), new ArrayBuffer(10));
  40. new DataView(n);
  41. e.serviceCode = 0, e.serviceInfo = "encode ok", e.serviceData = {}, e.serviceData.dataEncode = new Array;
  42. for (var s = 0; s < r - 1; s++) e.serviceData.dataEncode[s] = t.substr(s * a * 2, 2 * a), e.serviceData.dataEncode[
  43. s] = getGBFrame(e.serviceData.dataEncode[s], s, r);
  44. return e.serviceData.dataEncode[r - 1] = t.substring((r - 1) * a * 2), e.serviceData.dataEncode[r - 1] = getGBFrame(
  45. e.serviceData.dataEncode[r - 1], r - 1, r), e
  46. }
  47. function encode_WX(t) {
  48. for (var e = {}, a = _wjUtils2.default.getPagLenMax(), r = parseInt(t.length / 2 / a), n = (t.length / 2 % a != 0 &&
  49. (r += 1), e.serviceCode = 0, e.serviceInfo = "encode ok", e.serviceData = {}, e.serviceData.dataEncode =
  50. new Array, 0), n = 0; n < r - 1; n++) e.serviceData.dataEncode[n] = t.substr(n * a * 2, 2 * a), e
  51. .serviceData.dataEncode[n] = getWXFrame(e.serviceData.dataEncode[n], n, r);
  52. return e.serviceData.dataEncode[r - 1] = t.substring((r - 1) * a * 2), e.serviceData.dataEncode[r - 1] = getWXFrame(
  53. e.serviceData.dataEncode[r - 1], r - 1, r), e
  54. }
  55. function getWXFrame(t, e, a) {
  56. for (var r = _wjUtils2.default.getCMD_TYPE(), n = t, s = new ArrayBuffer(10), i = new DataView(s), l = "", d = 0,
  57. t = t.length / 2, u = (0 == e ? i.setInt8(0, 128 + (a - 1 - e & 255)) : i.setInt8(0, a - 1 - e & 255), l =
  58. _wjUtils2.default.byteArray2hexStr(s).substring(0, 2), n = 2 == r ? "33" + l + _wjUtils2.default
  59. .byte2hexStr(255 & t) + n : "3301" + l + _wjUtils2.default.byte2hexStr(255 & t) + n, _wjUtils2.default
  60. .hexStr2byteArray(n)), c = 1; c < u.length; c++) d ^= u[c];
  61. n += _wjUtils2.default.byte2hexStr(d);
  62. var o, a = _wjUtils2.default.hexStr2byteArray(n).length;
  63. return 127 < a ? (i.setInt8(0, 128 + (a % 128 & 255)), i.setInt8(1, a / 128 & 255), l = _wjUtils2.default
  64. .byteArray2hexStr(s).substring(0, 4), i.setInt8(0, (o = a + 8 + 4 + 3) >> 8 & 255)) : (i.setInt8(0, 255 &
  65. a), l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 2), i.setInt8(0, (o = a + 8 + 4 + 2) >> 8 & 255)
  66. ), i.setInt8(1, 255 & o), n = "FE01" + _wjUtils2.default.byteArray2hexStr(s).substring(0, 4) +
  67. "753100000A0012" + l + n + "1800"
  68. }
  69. function getGBFrame(t, e, a) {
  70. var r = _wjUtils2.default.getCMD_TYPE(),
  71. n = t,
  72. s = new ArrayBuffer(10),
  73. i = new DataView(s),
  74. l = "",
  75. d = 0,
  76. t = t.length / 2;
  77. if (2 == r) {
  78. 0 == e ? i.setInt8(0, a - 1 + 128) : i.setInt8(0, a - (e + 1) & 255), i.setInt8(1, 255 & t);
  79. for (var n = "33" + (l = _wjUtils2.default.byteArray2hexStr(s).substring(0, 4)) + n, u = _wjUtils2.default
  80. .hexStr2byteArray(n), c = 1; c < u.length - 1; c++) d ^= u[c]
  81. } else {
  82. 0 == e ? (i.setInt8(0, 128 + (a >> 8 & 255)), i.setInt8(1, 255 & a)) : (i.setInt8(0, e + 1 >> 8 & 255), i
  83. .setInt8(1, e + 1 & 255)), i.setInt8(2, 255 & t), l = _wjUtils2.default.byteArray2hexStr(s).substring(0,
  84. 6);
  85. for (u = _wjUtils2.default.hexStr2byteArray(n = "50" + l + n), c = 0; c < u.length; c++) d ^= u[c]
  86. }
  87. return n += _wjUtils2.default.byte2hexStr(d)
  88. }
  89. module.exports = {
  90. encode: encode
  91. };