Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

JLBleManagerTool.js 14KB

pirms 2 gadiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  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. console.log(JSON.stringify(res)+"******************************************ldd");
  230. if (res.devices.length > 0) {
  231. callBack.call(this, {
  232. code: bleCode.bleErrorCode(),
  233. msg: "蓝牙被占用",
  234. data: res.services[0]
  235. })
  236. } else {
  237. callBack.call(this, {
  238. code: bleCode.bleSuccessCode(),
  239. msg: "可连接设备",
  240. data: null
  241. })
  242. }
  243. },
  244. fail: function (err) {
  245. console.log(JSON.stringify(err)+"******************************************ldd");
  246. var msg = "";
  247. if (err) {
  248. msg = bluetoothErrMsg(err.errCode)
  249. }
  250. callBack.call(this, {
  251. code: bleCode.bleErrorCode(),
  252. msg: msg,
  253. data: null
  254. })
  255. }
  256. })
  257. }
  258. function wxDisConnectDevice(callBack) {
  259. if (dev != null) {
  260. wx.closeBLEConnection({
  261. deviceId: dev.deviceId,
  262. success: function (res) {
  263. wx.closeBluetoothAdapter({
  264. success: function (res) {
  265. callBack.call(this, {
  266. code: bleCode.bleSuccessCode(),
  267. msg: "设备断开连接成功",
  268. data: null
  269. })
  270. },
  271. fail: function (err) {
  272. callBack.call(this, {
  273. code: bleCode.bleErrorCode(),
  274. msg: "设备断开连接成功," + err.errmsg,
  275. data: null
  276. })
  277. }
  278. })
  279. },
  280. fail: function (err) {
  281. var msg = "";
  282. if (err) {
  283. msg = bluetoothErrMsg(err.errCode)
  284. }
  285. callBack.call(this, {
  286. code: bleCode.bleErrorCode(),
  287. msg: msg,
  288. data: null
  289. })
  290. }
  291. })
  292. } else {
  293. callBack.call(this, {
  294. code: bleCode.bleSuccessCode(),
  295. msg: "暂无设备连接",
  296. data: null
  297. })
  298. }
  299. }
  300. export function findDeviceServices(device, callBack1, callBack2) {
  301. getDeviceService(device, function (res) {
  302. getDeviceCharacteristics(device, res.data, function (res1) {
  303. callBack1.call(this, res1)
  304. }, function (res2) {
  305. if (res2.code == bleCode.bleSuccessCode()) {
  306. wx.onBLECharacteristicValueChange(function (res) {
  307. console.log("接收数据<<=============:" + dataTool.bufferTohex(res.value).toLocaleUpperCase());
  308. callBack2.call(this, {
  309. code: bleCode.bleSuccessCode(),
  310. msg: "特征值发生变化",
  311. data: {
  312. value: dataTool.bufferTohex(res.value).toLocaleUpperCase()
  313. }
  314. })
  315. })
  316. } else {
  317. callBack2.call(this, res2)
  318. }
  319. })
  320. })
  321. };
  322. function getDeviceService(device, callBack) {
  323. wx.getBLEDeviceServices({
  324. deviceId: device.deviceId,
  325. success: function (res) {
  326. var services = res.services;
  327. for (var i = 0; i < services.length; i++) {
  328. if ("0000FEE7" == res.services[i].uuid.substr(0, 8)) {
  329. callBack.call(this, {
  330. code: bleCode.bleSuccessCode(),
  331. msg: "寻找服务成功",
  332. data: res.services[i].uuid
  333. })
  334. }
  335. }
  336. }
  337. })
  338. }
  339. function getDeviceCharacteristics(device, serviceId, callBack1, callBack2) {
  340. wx.getBLEDeviceCharacteristics({
  341. deviceId: device.deviceId,
  342. serviceId: serviceId,
  343. success: function (res) {
  344. var charactertics = res.characteristics;
  345. for (var i = 0; i < charactertics.length; i++) {
  346. var charact = charactertics[i];
  347. if (charact.properties.read == true) {
  348. wx.readBLECharacteristicValue({
  349. deviceId: device.deviceId,
  350. serviceId: charact_serviceId,
  351. characteristicId: charact.uuid,
  352. success: function (res) {}
  353. })
  354. }
  355. if (charact.properties.write == true) {
  356. callBack1.call(this, {
  357. code: bleCode.bleSuccessCode(),
  358. msg: null,
  359. data: {
  360. id: {
  361. devId: device.deviceId,
  362. serId: serviceId,
  363. charactId: charact.uuid
  364. }
  365. }
  366. })
  367. }
  368. if (charact.properties.notify == true || charact.properties.indicate == true) {
  369. wx.notifyBLECharacteristicValueChange({
  370. deviceId: device.deviceId,
  371. serviceId: serviceId,
  372. characteristicId: charact.uuid,
  373. state: true,
  374. success: function (res) {
  375. callBack2.call(this, {
  376. code: bleCode.bleSuccessCode(),
  377. msg: "开启设备监听成功",
  378. data: res
  379. })
  380. },
  381. fail: function (err) {
  382. var msg = "";
  383. if (err) {
  384. msg = bluetoothErrMsg(err.errCode)
  385. }
  386. callBack2.call(this, {
  387. code: bleCode.bleErrorCode(),
  388. msg: msg,
  389. data: null
  390. })
  391. }
  392. })
  393. }
  394. }
  395. }
  396. })
  397. }
  398. export function setParams(id) {
  399. deviceId = id.devId;
  400. serviceId = id.serId;
  401. characticId = id.charactId;
  402. console.log("写数据各项ID:" + JSON.stringify(id))
  403. };
  404. export function sendMessageToDevice(cmdArray, callBack) {
  405. var cmd = dataTool.strToBuffer(cmdArray[0]);
  406. var i = 0;
  407. wx.writeBLECharacteristicValue({
  408. deviceId: deviceId,
  409. serviceId: serviceId,
  410. characteristicId: characticId,
  411. value: cmd,
  412. success: function (res) {
  413. if (i < cmdArray.length - 1) {
  414. i++;
  415. onfire.fire("send", i)
  416. } else {
  417. onfire.clear();
  418. console.info("所有数据发送完成 共:" + cmdArray.length + "包");
  419. console.info("发送数据=============>>::" + cmdArray);
  420. callBack.call(this, {
  421. code: successCode,
  422. msg: "数据发送成功",
  423. data: cmdArray
  424. })
  425. }
  426. },
  427. fail: function (err) {
  428. console.log("writeBLECharacteristicValue fail:" + JSON.stringify(err));
  429. var msg = "";
  430. if (err) {
  431. msg = bluetoothErrMsg(err.errCode)
  432. }
  433. callBack.call(this, {
  434. code: bleCode.bleErrorCode(),
  435. msg: msg,
  436. data: null
  437. })
  438. }
  439. });
  440. onfire.on("send", i => {
  441. var cmd1 = dataTool.strToBuffer(cmdArray[i]);
  442. wx.writeBLECharacteristicValue({
  443. deviceId: deviceId,
  444. serviceId: serviceId,
  445. characteristicId: characticId,
  446. value: cmd1,
  447. success: function (res) {
  448. if (i < cmdArray.length - 1) {
  449. i++;
  450. onfire.fire("send", i)
  451. } else {
  452. onfire.clear();
  453. console.info("所有数据发送完成 共:" + cmdArray.length + "包");
  454. console.info("发送数据=============>>:" + cmdArray);
  455. callBack.call(this, {
  456. code: successCode,
  457. msg: "数据发送成功",
  458. data: cmdArray
  459. })
  460. }
  461. },
  462. fail: function (err) {
  463. console.log("writeBLECharacteristicValue fail:" + JSON.stringify(err));
  464. var msg = "";
  465. if (err) {
  466. msg = bluetoothErrMsg(err.errCode)
  467. }
  468. callBack.call(this, {
  469. code: bleCode.bleErrorCode(),
  470. msg: msg,
  471. data: null
  472. })
  473. }
  474. })
  475. })
  476. };
  477. function bluetoothErrMsg(errorCode) {
  478. switch (errorCode) {
  479. case 0:
  480. return "正常";
  481. break;
  482. case 1e4:
  483. return "未初始化蓝牙适配器";
  484. break;
  485. case 10001:
  486. return "当前蓝牙适配器不可用";
  487. break;
  488. case 10002:
  489. return "没有找到指定设备";
  490. break;
  491. case 10003:
  492. return "连接失败:操作超时";
  493. break;
  494. case 10004:
  495. return "蓝牙设备没有找到指定服务";
  496. break;
  497. case 10005:
  498. return "蓝牙设备没有找到指定特征值";
  499. break;
  500. case 10006:
  501. return "当前设备连接已断开";
  502. break;
  503. case 10007:
  504. return "当前特征值不支持此操作";
  505. break;
  506. case 10008:
  507. return "其余所有系统上报的异常";
  508. break;
  509. case 10009:
  510. return "安卓系统版本低于4.3不支持BLE";
  511. break;
  512. default:
  513. return "操作失败";
  514. break
  515. }
  516. }