選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

wjDataEncode.js 4.2KB

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