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

WJDataEncode.js 4.1KB

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