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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. "use strict";
  2. import _kcBaseBIZservice from "./kcBaseBIZservice.js"
  3. var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
  4. return typeof e
  5. }
  6. : function (e) {
  7. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
  8. }
  9. , _kcUtils = require("./kcUtils.js")
  10. , _kcUtils2 = _interopRequireDefault(_kcUtils)
  11. , _kcService = require("./kcService.js")
  12. , _kcService2 = _interopRequireDefault(_kcService);
  13. function _interopRequireDefault(e) {
  14. return e && e.__esModule ? e : {
  15. default: e
  16. }
  17. }
  18. var TAG_FUNCTION = "function";
  19. function getCallbackParamCount(callback) {
  20. if (typeof callback !== "function") {
  21. throw new TypeError("callback 必须是一个函数");
  22. }
  23. return callback.length;
  24. }
  25. function _asyncExecuteCallback(callback, successData, error) {
  26. if (typeof callback === "function") {
  27. try {
  28. let result;
  29. if (successData !== null) {
  30. result = successData;
  31. } else {
  32. const isError = error instanceof Error; // 更精确的判断
  33. result = isError
  34. ? { code: -1, data: [], msg: error.message }
  35. : { code: error.serviceCode, data: [], msg: error.serviceInfo };
  36. }
  37. // 异步执行回调(通过 Promise.resolve().then)
  38. Promise.resolve().then(() => callback(result)).catch(err => {
  39. console.error("回调执行异常:", err);
  40. });
  41. } catch (err) {
  42. console.error("回调执行异常:", err);
  43. }
  44. }
  45. }
  46. // 辅助函数:安全回调执行
  47. function _syncExecuteCallback(callback, successData, error) {
  48. if (typeof callback === "function") {
  49. try {
  50. let result;
  51. if (successData !== null) {
  52. result = successData;
  53. } else {
  54. const isError = typeof error === "object" && error !== null && "name" in error && "message" in error;
  55. if (isError) {
  56. result = { code: -1, data: [], msg: error.serviceInfo };
  57. } else {
  58. result = { code: error.serviceCode, data: [], msg: error.serviceInfo };
  59. }
  60. }
  61. callback(result);
  62. } catch (err) {
  63. console.error("回调执行异常:", err);
  64. }
  65. }
  66. }
  67. function reallyScanConnect(t) {
  68. _kcService2.default.reallyScanConnect(function (e) {
  69. (void 0 === t ? "undefined" : _typeof(t)) == TAG_FUNCTION && t(e)
  70. })
  71. }
  72. function connectDevice(e, t) {
  73. let o = {};
  74. o.device_name = e.name;
  75. o.device_id = e.deviceId;
  76. _kcService2.default.reallyConnect(o, function (e) {
  77. console.log("3--1", e);
  78. setTimeout(function(){(void 0 === t ? "undefined" : _typeof(t)) == TAG_FUNCTION && t(e)}, 300);
  79. });
  80. }
  81. function deployBle(t) {
  82. _kcService2.default.deployBleConf(function (e) {
  83. 0 == e && _kcUtils2.default.showLog("配置连接外设成功"),
  84. (void 0 === t ? "undefined" : _typeof(t)) == TAG_FUNCTION && t(e)
  85. })
  86. }
  87. function disconnectDevice(t) {
  88. var a;
  89. _kcService2.default.reallyDisConnect(function (e) {
  90. a = e,
  91. (void 0 === t ? "undefined" : _typeof(t)) == TAG_FUNCTION && t(a.serviceCode)
  92. })
  93. }
  94. // 将 singleTransCmd 函数改为返回 Promise
  95. function singleTransCmd(cmdtype, cmd) {
  96. return _kcBaseBIZservice.singleTransCmd(cmdtype, cmd);
  97. }
  98. // 修改 transCmdLoop 函数,按顺序执行 singleTransCmd,并在失败时停止循环
  99. async function transCmdLoop(cmdArray, cmdtype, callback) {
  100. _kcBaseBIZservice.transCmdLoop(cmdArray, cmdtype, callback);
  101. }
  102. function transCmd(cmdArray, cmdtype, callback) {
  103. _kcBaseBIZservice.transCmd(cmdArray, cmdtype, function(res){
  104. if (res.code === -5) {
  105. res.code = 0;
  106. const diff = cmdArray.length - res.data.length;
  107. if (diff > 0) {
  108. console.log(`需要补全 ${diff} 条数据`);
  109. //res.data.push(...Array(diff).fill("")); // 使用展开运算符批量追加
  110. for (let i = 0; i < diff; i++) {
  111. res.data.push("6982");
  112. }
  113. }
  114. }
  115. if (typeof callback === TAG_FUNCTION) {
  116. callback(res);
  117. }
  118. });
  119. }
  120. function getDeviceInfo(n) {
  121. _kcBaseBIZservice.getDeviceNumber(n);
  122. }
  123. function getDeviceNumber(callback) {
  124. _kcBaseBIZservice.getDeviceNumber()
  125. .then(deviceInfo => {
  126. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  127. _asyncExecuteCallback(callback, result, null);
  128. })
  129. .catch(error => {
  130. _asyncExecuteCallback(callback, null, error);
  131. });
  132. }
  133. function obuSetSleepTime(e, t) {
  134. _kcBaseBIZservice.obuSetSleepTime(e, t);
  135. }
  136. function getDisassemblyPillar(callback) {
  137. _kcBaseBIZservice.getDisassemblyPillar()
  138. .then(deviceInfo => {
  139. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  140. _asyncExecuteCallback(callback, result, null);
  141. })
  142. .catch(error => {
  143. _asyncExecuteCallback(callback, null, error);
  144. });
  145. }
  146. function getActState(callback) {
  147. _kcBaseBIZservice.getActState()
  148. .then(deviceInfo => {
  149. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  150. _asyncExecuteCallback(callback, result, null);
  151. })
  152. .catch(error => {
  153. _asyncExecuteCallback(callback, null, error);
  154. });
  155. }
  156. function getDevicePower(callback) {
  157. _kcBaseBIZservice.getDevicePower()
  158. .then(deviceInfo => {
  159. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  160. _asyncExecuteCallback(callback, result, null);
  161. })
  162. .catch(error => {
  163. _asyncExecuteCallback(callback, null, error);
  164. });
  165. }
  166. function getBleDeviceVersion(callback) {
  167. _kcBaseBIZservice.getBleDeviceVersion()
  168. .then(deviceInfo => {
  169. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  170. _asyncExecuteCallback(callback, result, null);
  171. })
  172. .catch(error => {
  173. _asyncExecuteCallback(callback, null, error);
  174. });
  175. }
  176. function getObuDeviceVersion(callback) {
  177. _kcBaseBIZservice.getObuDeviceVersion()
  178. .then(deviceInfo => {
  179. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  180. _asyncExecuteCallback(callback, result, null);
  181. })
  182. .catch(error => {
  183. _asyncExecuteCallback(callback, null, error);
  184. });
  185. }
  186. function getIcCardInfo(callback) {
  187. _kcBaseBIZservice.getIcCardInfo()
  188. .then(deviceInfo => {
  189. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  190. _asyncExecuteCallback(callback, result, null);
  191. })
  192. .catch(error => {
  193. _asyncExecuteCallback(callback, null, error);
  194. });
  195. }
  196. function scanBle(outTime, ScanDeviceResultCallBack) {
  197. var result = {
  198. code: -2,
  199. msg: '蓝牙状态异常'
  200. };
  201. let foundDevices = [];
  202. let onScanResult = [];
  203. let timeoutId; // 用于存储超时定时器的ID
  204. // 定义处理发现设备的函数
  205. function etcHandleDeviceFound(res) {
  206. for (let i = 0; i < res.devices.length; i++) {
  207. let isHave = false;
  208. console.log(res.devices[i].name);
  209. for (let j = 0; j < foundDevices.length; j++) {
  210. if (res.devices[i].deviceId === foundDevices[j].deviceId) {
  211. isHave = true;
  212. break;
  213. }
  214. }
  215. if (!isHave) {
  216. foundDevices.push(res.devices[i]);
  217. var name = res.devices[i].name || '';
  218. const isValidPrefix = _kcUtils2.default.isValidDevice(name);
  219. if (isValidPrefix) {
  220. clearTimeout(timeoutId); // 找到设备,清除超时定时器
  221. onScanResult.push(res.devices[i]);
  222. wx.stopBluetoothDevicesDiscovery({
  223. success: function (res) {
  224. console.log("1.停止扫描");
  225. },
  226. fail: function (res) {
  227. console.error('stopBluetoothDevicesDiscovery fail', res);
  228. }
  229. });
  230. result.code = 0;
  231. result.msg = '蓝牙状态正常';
  232. console.log(`%cdeviceName ${res.devices[i].name}, RSSI: ${res.devices[i].RSSI}`, "color: green;");
  233. if (typeof ScanDeviceResultCallBack === TAG_FUNCTION) ScanDeviceResultCallBack(onScanResult, result);
  234. break;
  235. }
  236. }
  237. }
  238. }
  239. console.log('/***********Running :: Do reallyScanConnect() begin *************/');
  240. // 设置超时时间,例如30秒
  241. timeoutId = setTimeout(function () {
  242. console.log("超时了,停止扫描");
  243. wx.stopBluetoothDevicesDiscovery({
  244. success: function (res) {
  245. console.log("因超时停止扫描");
  246. },
  247. fail: function (res) {
  248. console.error('因超时停止扫描失败', res);
  249. }
  250. });
  251. result.code = -3;
  252. if (typeof ScanDeviceResultCallBack === TAG_FUNCTION) ScanDeviceResultCallBack(null, result);
  253. }, outTime);
  254. wx.closeBluetoothAdapter();
  255. wx.openBluetoothAdapter({
  256. success: function (res) {
  257. wx.startBluetoothDevicesDiscovery({
  258. services: [],
  259. success: function (res) {
  260. wx.onBluetoothDeviceFound(etcHandleDeviceFound);
  261. },
  262. fail: function (res) {
  263. console.error('startBluetoothDevicesDiscovery fail', res);
  264. clearTimeout(timeoutId);
  265. if (typeof ScanDeviceResultCallBack === TAG_FUNCTION) ScanDeviceResultCallBack(null, result);
  266. }
  267. });
  268. },
  269. fail: function (res) {
  270. console.error('openBluetoothAdapter fail', res);
  271. clearTimeout(timeoutId);
  272. if (typeof ScanDeviceResultCallBack === TAG_FUNCTION) ScanDeviceResultCallBack(null, result);
  273. }
  274. });
  275. }
  276. function closBluetooth(callBack) {
  277. var c = {
  278. code: 0,
  279. msg: '蓝牙搜索已停止'
  280. };
  281. wx.stopBluetoothDevicesDiscovery({
  282. success: function (res) {
  283. console.log("stopBluetoothDevicesDiscovery success");
  284. (void 0 === callBack ? "undefined" : _typeof(callBack)) == TAG_FUNCTION && callBack(c)
  285. },
  286. fail: function (res) {
  287. console.error('stopBluetoothDevicesDiscovery fail', res);
  288. }
  289. });
  290. }
  291. function disconnectDeviceBluetooth(callBack) {
  292. _kcService2.default.disconnectDeviceBluetooth(callBack);
  293. }
  294. function turnOn58GANT(callback) {
  295. _kcBaseBIZservice.turnOn58GANT()
  296. .then(deviceInfo => {
  297. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  298. _asyncExecuteCallback(callback, result, null);
  299. })
  300. .catch(error => {
  301. _asyncExecuteCallback(callback, null, error);
  302. });
  303. }
  304. function turnOff58GANT(callback) {
  305. _kcBaseBIZservice.turnOff58GANT()
  306. .then(deviceInfo => {
  307. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  308. _asyncExecuteCallback(callback, result, null);
  309. })
  310. .catch(error => {
  311. _asyncExecuteCallback(callback, null, error);
  312. });
  313. }
  314. function get58GStatus(callback) {
  315. _kcBaseBIZservice.get58GStatus()
  316. .then(deviceInfo => {
  317. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  318. _asyncExecuteCallback(callback, result, null);
  319. })
  320. .catch(error => {
  321. _asyncExecuteCallback(callback, null, error);
  322. });
  323. }
  324. function getIcCardSwitchStatus(callback) {
  325. _kcBaseBIZservice.getIcCardSwitchStatus()
  326. .then(deviceInfo => {
  327. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  328. _asyncExecuteCallback(callback, result, null);
  329. })
  330. .catch(error => {
  331. _asyncExecuteCallback(callback, null, error);
  332. });
  333. }
  334. function getVoiceFeature(callback) {
  335. _kcBaseBIZservice.getVoiceFeature()
  336. .then(deviceInfo => {
  337. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  338. _asyncExecuteCallback(callback, result, null);
  339. })
  340. .catch(error => {
  341. _asyncExecuteCallback(callback, null, error);
  342. });
  343. }
  344. function getBatteryPercentage(callback) {
  345. _kcBaseBIZservice.getBatteryPercentage()
  346. .then(deviceInfo => {
  347. let result = { code: deviceInfo.serviceCode, data: deviceInfo.serviceData.etcVehicleInfo, msg: deviceInfo.serviceInfo };
  348. _asyncExecuteCallback(callback, result, null);
  349. })
  350. .catch(error => {
  351. _asyncExecuteCallback(callback, null, error);
  352. });
  353. }
  354. // export default {
  355. // reallyScanConnect, connectDevice, disconnectDevice, getDeviceInfo, transCmd, getActState, getDisassemblyPillar, obuSetSleepTime, scanBle, closBluetooth, disconnectDeviceBluetooth, getDeviceNumber, getDevicePower, getObuDeviceVersion, getIcCardInfo, turnOn58GANT, turnOff58GANT, get58GStatus, getIcCardSwitchStatus, getVoiceFeature, getBatteryPercentage, getBleDeviceVersion,
  356. // };
  357. module.exports = {
  358. reallyScanConnect: reallyScanConnect,
  359. connectDevice: connectDevice,
  360. disconnectDevice: disconnectDevice,
  361. getDeviceInfo: getDeviceInfo,
  362. transCmd: transCmd,
  363. getActState: getActState,
  364. obuSetSleepTime: obuSetSleepTime,
  365. scanBle: scanBle,
  366. closBluetooth: closBluetooth,
  367. disconnectDeviceBluetooth: disconnectDeviceBluetooth,
  368. };