util.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. const Manager = require('./manager');
  2. /// MW-X4 (BZK)
  3. class BleUtil {
  4. static _instance = new BleUtil();
  5. static getInstance() {
  6. return BleUtil._instance;
  7. }
  8. constructor() {
  9. var that = this;
  10. that.manager = new Manager();
  11. }
  12. ///获取比较的数据
  13. getCompareList() {
  14. var that = this;
  15. return that.manager.getCompareList();
  16. }
  17. getDissmissDevice() {
  18. var that = this;
  19. return that.manager.getDissmissDevice();
  20. }
  21. getCallBackConnect() {
  22. var that = this;
  23. return that.manager.getCallBackConnect();
  24. }
  25. ///初始化蓝牙适配器
  26. initBluetoothAdapter() {
  27. var that = this;
  28. that.manager.initBlueAdapter();
  29. }
  30. ///获取蓝牙设备 connect:true,去连接,false,去对比
  31. listenBlueDevices() {
  32. var that = this;
  33. that.manager.listenBlueDevices();
  34. }
  35. ///搜索蓝牙设备
  36. startScan(connectWillDevice, boolean, callBackConnect) {
  37. var that = this;
  38. that.manager.startScan(
  39. connectWillDevice,
  40. boolean,
  41. callBackConnect,
  42. );
  43. }
  44. ///停止搜索蓝牙设备
  45. async stopScan() {
  46. var that = this;
  47. await that.manager.stopScan();
  48. }
  49. ///开始连接设备
  50. async startConnect(device, onChanged, connected) {
  51. var that = this;
  52. await that.stopScan();
  53. await that.disconnect(device);
  54. var res = await that.manager.startConnect(device);
  55. if (!res) {
  56. that.disconnect(device);
  57. onChanged(false);
  58. return;
  59. }
  60. const strings = require('./../../utils/strings');
  61. var services = await that.manager.getNotifyServices(device);
  62. if (strings.isEmpty(services)) {
  63. that.disconnect(device);
  64. onChanged(false);
  65. return;
  66. }
  67. var serviceId = serviceId = services[0].uuid;
  68. for (let i = 0; i < services.length; i++) {
  69. if (services[i].uuid.toUpperCase().indexOf("FFE5") != -1 ||
  70. services[i].uuid.toUpperCase().indexOf("1111") != -1
  71. ) {
  72. serviceId = services[i].uuid;
  73. break;
  74. }
  75. }
  76. that.manager.setWriteServiceId(serviceId);
  77. that.manager.getCharacteristics(device, function () {
  78. that.disconnect(device);
  79. onChanged(false);
  80. },
  81. function (notifyUuid) {
  82. var isTrue = that.manager.monitorCharacteristicValueChange(device, serviceId, notifyUuid);
  83. if (!isTrue) {
  84. onChanged(false);
  85. return;
  86. }
  87. onChanged(true);
  88. ///数据接收
  89. that.manager.onBLECharacteristicValueChange(device, function (value) {
  90. // BtParse.parseTLV(value);
  91. if (value == "mqtt") {
  92. } else if (value == "recv_finish") {
  93. connected(true);
  94. }
  95. });
  96. });
  97. }
  98. ///发送数据
  99. async sendData(device, wifiName, pwd) {
  100. var that = this;
  101. var list = that.sendWiFiInfo(wifiName, pwd);
  102. var isTrue = await that.manager.sendData(device, list);
  103. ///发送数据成功
  104. if (isTrue) {
  105. }
  106. }
  107. sendWiFiInfo(wifiName, pwd) {
  108. const hex_util = require('../hex_util');
  109. let result = [];
  110. // 字母*6 +
  111. let wifiList = hex_util.string2ListInt(wifiName);
  112. // 数字*3 +
  113. let pwdList = hex_util.string2ListInt(pwd);
  114. // 16进制
  115. result.push(0x22);
  116. result.push(parseInt(hex_util.int2Hex(wifiList.length + pwdList.length + 6), 16));
  117. // 账号
  118. result.push(0x33);
  119. result.push(parseInt(hex_util.int2Hex(wifiList.length), 16));
  120. let p = result[3] + 4;
  121. let j = 0;
  122. for (let i = 4; i < p; i++) {
  123. result.splice(i, 0, wifiList[j++]);
  124. }
  125. // 密码
  126. result.splice(p, 0, 0x44);
  127. result.splice(++p, 0, parseInt(hex_util.int2Hex(pwdList.length), 16));
  128. p++;
  129. j = 0;
  130. for (let i = p; i < p + pwdList.length; i++) {
  131. result.splice(i, 0, pwdList[j++]);
  132. }
  133. ///[34, 22, 51, 5, 109, 117, 122, 101, 110, 68, 11, 109, 117, 122, 101, 110, 111, 102, 102, 105, 99, 101]
  134. console.log("发送wifi账号密码:", result.toString());
  135. return result;
  136. }
  137. ///断开设备连接
  138. async disconnect(device) {
  139. var that = this;
  140. await that.manager.disconnect(device);
  141. }
  142. }
  143. module.exports = {
  144. BleUtil
  145. }