You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

JLBleManagerTool.js 11KB

2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. var bleCode = require("./JLZJConfig.js");
  2. var onfire = require("./onfire.js");
  3. var dataTool = require("./dataTool.js");
  4. var successCode = bleCode.bleSuccessCode();
  5. var errorCode = bleCode.bleErrorCode();
  6. var serviceId = "FEE7";
  7. var charact_serviceId = serviceId;
  8. var deviceId;
  9. var serviceId;
  10. var characticId;
  11. var dev;
  12. export function scan_StartScanBleDevice(nameFlag, callBack) {
  13. var devs = [];
  14. initBluetoothAdapte(function(res) {
  15. if (res.code == bleCode.bleSuccessCode()) {
  16. wx.startBluetoothDevicesDiscovery({
  17. services: ["FEE7"],
  18. success: function(res) {
  19. wx.onBluetoothDeviceFound(function(res) {
  20. var scandevices = res.devices;
  21. for (var i = 0; i < scandevices.length; i++) {
  22. var scan_dev = scandevices[i];
  23. if (nameFlag != null) {
  24. if (scan_dev.name.indexOf(nameFlag) != -1) {
  25. devs.push(scan_dev)
  26. }
  27. } else {
  28. if (scan_dev.name.length > 0) {
  29. devs.push(scan_dev)
  30. }
  31. }
  32. }
  33. if (devs.length > 0) {
  34. callBack.call(this, {
  35. code: successCode,
  36. msg: "搜索设备成功",
  37. data: devs
  38. })
  39. }
  40. })
  41. },
  42. fail: function(err) {
  43. var msg = "";
  44. if (err) {
  45. msg = bluetoothErrMsg(err.errCode)
  46. }
  47. callBack.call(this, {
  48. code: bleCode.bleErrorCode(),
  49. msg: msg,
  50. data: null
  51. })
  52. }
  53. })
  54. } else {
  55. callBack.call(this, res)
  56. }
  57. })
  58. };
  59. export function scan_stopScanBleDevice(callBack) {
  60. wx.stopBluetoothDevicesDiscovery({
  61. success: function(res) {
  62. callBack.call(this, {
  63. code: successCode,
  64. msg: "停止扫描成功",
  65. data: null
  66. })
  67. },
  68. fail: function(err) {
  69. var msg = "";
  70. if (err) {
  71. msg = bluetoothErrMsg(err.errCode)
  72. }
  73. callBack.call(this, {
  74. code: errorCode,
  75. msg: msg,
  76. data: null
  77. })
  78. }
  79. })
  80. };
  81. function initBluetoothAdapte(callBack) {
  82. wx.openBluetoothAdapter({
  83. success: function(res) {
  84. wx.getBluetoothAdapterState({
  85. success: function(res) {
  86. if (res.available == true && res.discovering == false) {
  87. callBack.call(this, {
  88. code: successCode,
  89. msg: "初始化蓝牙模块成功",
  90. data: null
  91. })
  92. }
  93. if (res.available == false) {
  94. callBack.call(this, {
  95. code: errorCode,
  96. msg: "蓝牙适配器不可用",
  97. data: null
  98. })
  99. }
  100. if (res.discovering == true) {
  101. callBack.call(this, {
  102. code: errorCode,
  103. msg: "正在搜索设备",
  104. data: null
  105. })
  106. }
  107. },
  108. fail: function(err) {
  109. var msg = "";
  110. if (err) {
  111. msg = bluetoothErrMsg(err.errCode)
  112. }
  113. callBack.call(this, {
  114. code: errorCode,
  115. msg: msg,
  116. data: null
  117. })
  118. }
  119. })
  120. },
  121. fail: function(err) {
  122. var msg = "";
  123. if (err) {
  124. msg = bluetoothErrMsg(err.errCode)
  125. }
  126. callBack.call(this, {
  127. code: errorCode,
  128. msg: msg,
  129. data: null
  130. })
  131. }
  132. })
  133. }
  134. function closeBluetoothAdapte(callBack) {
  135. wx.getBluetoothAdapterState({
  136. success: function(res) {
  137. wx.closeBluetoothAdapter({
  138. success: function(res) {
  139. callBack.call(this, {
  140. code: successCode,
  141. msg: "关闭蓝牙模块成功",
  142. data: null
  143. })
  144. },
  145. fail: function(err) {
  146. callBack.call(this, {
  147. code: errorCode,
  148. msg: err.errmsg,
  149. data: null
  150. })
  151. }
  152. })
  153. },
  154. fail: function(err) {
  155. var msg = "";
  156. if (err) {
  157. msg = bluetoothErrMsg(err.errCode)
  158. }
  159. callBack.call(this, {
  160. code: errorCode,
  161. msg: msg,
  162. data: null
  163. })
  164. }
  165. })
  166. }
  167. export function connectDevice(device, callBack) {
  168. dev = device;
  169. getConnectedDevice(function(res) {
  170. if (res.code == bleCode.bleSuccessCode()) {
  171. wxConnectDevice(function(res) {
  172. callBack.call(this, res)
  173. })
  174. } else {
  175. callBack.call(this, res)
  176. }
  177. })
  178. };
  179. export function disConnectDevice(callBack) {
  180. wxDisConnectDevice(function(res) {
  181. callBack.call(this, res)
  182. })
  183. };
  184. export function onDeviceConnectStateChange(callBack) {
  185. wx.onBLEConnectionStateChange(function(res) {
  186. if (res.connected == true) {
  187. callBack.call(this, {
  188. code: bleCode.successCode(),
  189. data: res.deviceId,
  190. msg: "设备连接"
  191. })
  192. } else {
  193. callBack.call(this, {
  194. code: bleCode.ondisConnect(),
  195. data: res.deviceId,
  196. msg: "设备断开"
  197. })
  198. }
  199. })
  200. };
  201. function wxConnectDevice(callBack) {
  202. console.log("连接设备对象:" + JSON.stringify(dev));
  203. wx.createBLEConnection({
  204. deviceId: dev.deviceId,
  205. success: function(res) {
  206. callBack.call(this, {
  207. code: bleCode.bleSuccessCode(),
  208. msg: "蓝牙物理连接成功",
  209. data: dev
  210. })
  211. },
  212. fail: function(err) {
  213. var msg = "";
  214. if (err) {
  215. msg = bluetoothErrMsg(err.errCode)
  216. }
  217. callBack.call(this, {
  218. code: bleCode.bleErrorCode(),
  219. msg: msg,
  220. data: null
  221. })
  222. }
  223. })
  224. }
  225. function getConnectedDevice(callBack) {
  226. wx.getConnectedBluetoothDevices({
  227. services: ["fee7"],
  228. success: function(res) {
  229. if (res.devices.length > 0) {
  230. callBack.call(this, {
  231. code: bleCode.bleErrorCode(),
  232. msg: "蓝牙被占用",
  233. data: res.services[0]
  234. })
  235. } else {
  236. callBack.call(this, {
  237. code: bleCode.bleSuccessCode(),
  238. msg: "可连接设备",
  239. data: null
  240. })
  241. }
  242. },
  243. fail: function(err) {
  244. var msg = "";
  245. if (err) {
  246. msg = bluetoothErrMsg(err.errCode)
  247. }
  248. callBack.call(this, {
  249. code: bleCode.bleErrorCode(),
  250. msg: msg,
  251. data: null
  252. })
  253. }
  254. })
  255. }
  256. function wxDisConnectDevice(callBack) {
  257. if (dev != null) {
  258. wx.closeBLEConnection({
  259. deviceId: dev.deviceId,
  260. success: function(res) {
  261. wx.closeBluetoothAdapter({
  262. success: function(res) {
  263. callBack.call(this, {
  264. code: bleCode.bleSuccessCode(),
  265. msg: "设备断开连接成功",
  266. data: null
  267. })
  268. },
  269. fail: function(err) {
  270. callBack.call(this, {
  271. code: bleCode.bleErrorCode(),
  272. msg: "设备断开连接成功," + err.errmsg,
  273. data: null
  274. })
  275. }
  276. })
  277. },
  278. fail: function(err) {
  279. var msg = "";
  280. if (err) {
  281. msg = bluetoothErrMsg(err.errCode)
  282. }
  283. callBack.call(this, {
  284. code: bleCode.bleErrorCode(),
  285. msg: msg,
  286. data: null
  287. })
  288. }
  289. })
  290. } else {
  291. callBack.call(this, {
  292. code: bleCode.bleSuccessCode(),
  293. msg: "暂无设备连接",
  294. data: null
  295. })
  296. }
  297. }
  298. export function findDeviceServices(device, callBack1, callBack2) {
  299. getDeviceService(device, function(res) {
  300. getDeviceCharacteristics(device, res.data, function(res1) {
  301. callBack1.call(this, res1)
  302. }, function(res2) {
  303. if (res2.code == bleCode.bleSuccessCode()) {
  304. wx.onBLECharacteristicValueChange(function(res) {
  305. console.log("接收数据<<=============:" + dataTool.bufferTohex(res.value).toLocaleUpperCase());
  306. callBack2.call(this, {
  307. code: bleCode.bleSuccessCode(),
  308. msg: "特征值发生变化",
  309. data: {
  310. value: dataTool.bufferTohex(res.value).toLocaleUpperCase()
  311. }
  312. })
  313. })
  314. } else {
  315. callBack2.call(this, res2)
  316. }
  317. })
  318. })
  319. };
  320. function getDeviceService(device, callBack) {
  321. wx.getBLEDeviceServices({
  322. deviceId: device.deviceId,
  323. success: function(res) {
  324. var services = res.services;
  325. for (var i = 0; i < services.length; i++) {
  326. if ("0000FEE7" == res.services[i].uuid.substr(0, 8)) {
  327. callBack.call(this, {
  328. code: bleCode.bleSuccessCode(),
  329. msg: "寻找服务成功",
  330. data: res.services[i].uuid
  331. })
  332. }
  333. }
  334. }
  335. })
  336. }
  337. function getDeviceCharacteristics(device, serviceId, callBack1, callBack2) {
  338. wx.getBLEDeviceCharacteristics({
  339. deviceId: device.deviceId,
  340. serviceId: serviceId,
  341. success: function(res) {
  342. var charactertics = res.characteristics;
  343. for (var i = 0; i < charactertics.length; i++) {
  344. var charact = charactertics[i];
  345. if (charact.properties.read == true) {
  346. wx.readBLECharacteristicValue({
  347. deviceId: device.deviceId,
  348. serviceId: charact_serviceId,
  349. characteristicId: charact.uuid,
  350. success: function(res) {}
  351. })
  352. }
  353. if (charact.properties.write == true) {
  354. callBack1.call(this, {
  355. code: bleCode.bleSuccessCode(),
  356. msg: null,
  357. data: {
  358. id: {
  359. devId: device.deviceId,
  360. serId: serviceId,
  361. charactId: charact.uuid
  362. }
  363. }
  364. })
  365. }
  366. if (charact.properties.notify == true || charact.properties.indicate == true) {
  367. wx.notifyBLECharacteristicValueChange({
  368. deviceId: device.deviceId,
  369. serviceId: serviceId,
  370. characteristicId: charact.uuid,
  371. state: true,
  372. success: function(res) {
  373. callBack2.call(this, {
  374. code: bleCode.bleSuccessCode(),
  375. msg: "开启设备监听成功",
  376. data: res
  377. })
  378. },
  379. fail: function(err) {
  380. var msg = "";
  381. if (err) {
  382. msg = bluetoothErrMsg(err.errCode)
  383. }
  384. callBack2.call(this, {
  385. code: bleCode.bleErrorCode(),
  386. msg: msg,
  387. data: null
  388. })
  389. }
  390. })
  391. }
  392. }
  393. }
  394. })
  395. }
  396. export function setParams(id) {
  397. deviceId = id.devId;
  398. serviceId = id.serId;
  399. characticId = id.charactId;
  400. console.log("写数据各项ID:" + JSON.stringify(id))
  401. };
  402. export function sendMessageToDevice(cmdArray, callBack) {
  403. var cmd = dataTool.strToBuffer(cmdArray[0]);
  404. var i = 0;
  405. wx.writeBLECharacteristicValue({
  406. deviceId: deviceId,
  407. serviceId: serviceId,
  408. characteristicId: characticId,
  409. value: cmd,
  410. success: function(res) {
  411. if (i < cmdArray.length - 1) {
  412. i++;
  413. onfire.fire("send", i)
  414. } else {
  415. onfire.clear();
  416. console.info("所有数据发送完成 共:" + cmdArray.length + "包");
  417. console.info("发送数据=============>>::" + cmdArray);
  418. callBack.call(this, {
  419. code: successCode,
  420. msg: "数据发送成功",
  421. data: cmdArray
  422. })
  423. }
  424. },
  425. fail: function(err) {
  426. console.log("writeBLECharacteristicValue fail:" + JSON.stringify(err));
  427. var msg = "";
  428. if (err) {
  429. msg = bluetoothErrMsg(err.errCode)
  430. }
  431. callBack.call(this, {
  432. code: bleCode.bleErrorCode(),
  433. msg: msg,
  434. data: null
  435. })
  436. }
  437. });
  438. onfire.on("send", i => {
  439. var cmd1 = dataTool.strToBuffer(cmdArray[i]);
  440. wx.writeBLECharacteristicValue({
  441. deviceId: deviceId,
  442. serviceId: serviceId,
  443. characteristicId: characticId,
  444. value: cmd1,
  445. success: function(res) {
  446. if (i < cmdArray.length - 1) {
  447. i++;
  448. onfire.fire("send", i)
  449. } else {
  450. onfire.clear();
  451. console.info("所有数据发送完成 共:" + cmdArray.length + "包");
  452. console.info("发送数据=============>>:" + cmdArray);
  453. callBack.call(this, {
  454. code: successCode,
  455. msg: "数据发送成功",
  456. data: cmdArray
  457. })
  458. }
  459. },
  460. fail: function(err) {
  461. console.log("writeBLECharacteristicValue fail:" + JSON.stringify(err));
  462. var msg = "";
  463. if (err) {
  464. msg = bluetoothErrMsg(err.errCode)
  465. }
  466. callBack.call(this, {
  467. code: bleCode.bleErrorCode(),
  468. msg: msg,
  469. data: null
  470. })
  471. }
  472. })
  473. })
  474. };
  475. function bluetoothErrMsg(errorCode) {
  476. switch (errorCode) {
  477. case 0:
  478. return "正常";
  479. break;
  480. case 1e4:
  481. return "未初始化蓝牙适配器";
  482. break;
  483. case 10001:
  484. return "当前蓝牙适配器不可用";
  485. break;
  486. case 10002:
  487. return "没有找到指定设备";
  488. break;
  489. case 10003:
  490. return "连接失败:操作超时";
  491. break;
  492. case 10004:
  493. return "蓝牙设备没有找到指定服务";
  494. break;
  495. case 10005:
  496. return "蓝牙设备没有找到指定特征值";
  497. break;
  498. case 10006:
  499. return "当前设备连接已断开";
  500. break;
  501. case 10007:
  502. return "当前特征值不支持此操作";
  503. break;
  504. case 10008:
  505. return "其余所有系统上报的异常";
  506. break;
  507. case 10009:
  508. return "安卓系统版本低于4.3不支持BLE";
  509. break;
  510. default:
  511. return "操作失败";
  512. break
  513. }
  514. }