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 14KB

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