@jiabaida/tools 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/BleApiManager.js +1 -1
- package/dist/cjs/core/BleCmdAnalysis/BaseParamProtocol.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/BleCmdAnalysis.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/BleCmdDD.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/BleCmdFFAA.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/BleCmdHVES.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/ESHostProtocol.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis/readAndSetParam.js +1 -0
- package/dist/cjs/core/BleCmdAnalysis.js +1 -0
- package/dist/cjs/core/BleDataProcess.js +1 -0
- package/dist/cjs/core/OtaUpgrade.js +1 -0
- package/dist/cjs/core/TelinkApi.js +1 -0
- package/dist/cjs/core/Transfer.js +1 -0
- package/dist/cjs/core/commonfun.js +1 -1
- package/dist/cjs/core/dataJson/baseParamsJson.js +1 -0
- package/dist/cjs/core/keyAndPwdManager.js +1 -0
- package/dist/cjs/index.js +1 -1
- package/dist/esm/core/BleApiManager.js +1 -1
- package/dist/esm/core/BleCmdAnalysis/BaseParamProtocol.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/BleCmdAnalysis.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/BleCmdDD.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/BleCmdFFAA.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/BleCmdHVES.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/ESHostProtocol.js +1 -0
- package/dist/esm/core/BleCmdAnalysis/readAndSetParam.js +1 -0
- package/dist/esm/core/BleCmdAnalysis.js +1 -0
- package/dist/esm/core/BleDataProcess.js +1 -0
- package/dist/esm/core/OtaUpgrade.js +1 -0
- package/dist/esm/core/TelinkApi.js +1 -0
- package/dist/esm/core/Transfer.js +1 -0
- package/dist/esm/core/commonfun.js +1 -1
- package/dist/esm/core/dataJson/baseParamsJson.js +1 -0
- package/dist/esm/core/keyAndPwdManager.js +1 -0
- package/dist/esm/index.js +1 -1
- package/package.json +13 -3
- package/src/core/BleApiManager.js +487 -0
- package/src/core/BleCmdAnalysis/BaseParamProtocol.js +651 -0
- package/src/core/BleCmdAnalysis/BleCmdAnalysis.js +222 -0
- package/src/core/BleCmdAnalysis/BleCmdDD.js +1214 -0
- package/src/core/BleCmdAnalysis/BleCmdDDA4.js +762 -0
- package/src/core/BleCmdAnalysis/BleCmdFFAA.js +407 -0
- package/src/core/BleCmdAnalysis/BleCmdHVES.js +1222 -0
- package/src/core/BleCmdAnalysis/ESHostProtocol.js +829 -0
- package/src/core/BleCmdAnalysis/index.js +7 -0
- package/src/core/BleCmdAnalysis/readAndSetParam.js +288 -0
- package/src/core/BleDataProcess.js +355 -0
- package/src/core/OtaUpgrade.js +338 -0
- package/src/core/TelinkApi.js +73 -0
- package/src/core/Transfer.js +516 -0
- package/src/core/array.js +10 -0
- package/src/core/commonfun.js +87 -0
- package/src/core/dataJson/baseParamsJson.js +754 -0
- package/src/core/dataJson/index.js +1 -0
- package/src/core/keyAndPwdManager.js +346 -0
- package/src/core/mqttServer.js +296 -0
- package/src/core/rsaEncrypt.js +45 -0
- package/src/index.js +11 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import { getData } from './BleCmdAnalysis.js'
|
|
2
|
+
import { string2hexArr, decimalToHex, hex2string, hexArr2string, generateCheckSum, hexArr2Assic, hexToDecimal } from '../BleDataProcess';
|
|
3
|
+
// #region 获取随机数
|
|
4
|
+
/**获取随机数 */
|
|
5
|
+
export const getFFAA17Async = async (deviceId) => {
|
|
6
|
+
const command = ['0xFF', '0xAA', '0x17', '0x00', '0x17'];
|
|
7
|
+
return getData(
|
|
8
|
+
deviceId,
|
|
9
|
+
{
|
|
10
|
+
command,
|
|
11
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == 0x17, pkgLen: hexArr[3] + 5 }),
|
|
12
|
+
pkgVerifyHandler: (pkg) => {
|
|
13
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
14
|
+
const len = pkg.length;
|
|
15
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
16
|
+
const _c1 = pkg[len - 1];
|
|
17
|
+
return { verified: c1 == _c1 };
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
'FFAA_17(获取随机数)'
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
// #region 发送FFAA指令 appkey相关 密码
|
|
24
|
+
/**发送FFAA指令 appkey相关 密码
|
|
25
|
+
*
|
|
26
|
+
* @param {*} deviceId
|
|
27
|
+
* @param {*} code 指令码
|
|
28
|
+
* @param {*} code '0x19' 广播数据
|
|
29
|
+
* @param {*} code '0x20' 恢复出厂设置
|
|
30
|
+
* @param {*} code '0x1F' 恢复二级密码
|
|
31
|
+
* @param {*} code '0x23' 清除一级密码 content 0x01 / 清除key content 0x02
|
|
32
|
+
* @param {*} code '0x21' 验证appkey
|
|
33
|
+
* @param {*} code '0x22' 启用appkey
|
|
34
|
+
* @param {*} content 指令内容 eg:["0x01"]
|
|
35
|
+
* @param {*} type 指令类型描述 eg:'广播数据'
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
export const getFFAAKeyAsync = async (deviceId, code, content, type) => {
|
|
39
|
+
const /*包头*/ header = ['0xff', '0xaa'];
|
|
40
|
+
const /*命令码*/ commandCode = [code];
|
|
41
|
+
const /*数据内容*/ data = [...content];
|
|
42
|
+
const /*数据内容长度*/ dataLength = [`0x${decimalToHex(data.length, 2)}`];
|
|
43
|
+
const /*校验位(指令+长度+数据位)*/ check = generateCheckSum([...commandCode, ...dataLength, ...data]);
|
|
44
|
+
// 包头-命令码-数据内容长度-数据内容-校验位
|
|
45
|
+
const command = [...header, ...commandCode, ...dataLength, ...data, ...check];
|
|
46
|
+
console.log('command: ---------------', command);
|
|
47
|
+
|
|
48
|
+
return getData(
|
|
49
|
+
deviceId,
|
|
50
|
+
{
|
|
51
|
+
command,
|
|
52
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == hexToDecimal(code), pkgLen: hexArr[3] + 5 }),
|
|
53
|
+
pkgVerifyHandler: (pkg) => {
|
|
54
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
55
|
+
const len = pkg.length;
|
|
56
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
57
|
+
const _c1 = pkg[len - 1];
|
|
58
|
+
return { verified: c1 == _c1 };
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
`FFAA_${code}(${type})`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
// #region 解析FFAAKey指令响应
|
|
65
|
+
/** 解析FFAAKey指令响应
|
|
66
|
+
*
|
|
67
|
+
* @param {*} data
|
|
68
|
+
* @returns */
|
|
69
|
+
export const resolveFFAAKey = (data) => {
|
|
70
|
+
if (!data) return null;
|
|
71
|
+
const dataStr = hexArr2string(data);
|
|
72
|
+
const response = data[data.length - 2]
|
|
73
|
+
const status = response
|
|
74
|
+
return { data, dataStr, response, status };
|
|
75
|
+
}
|
|
76
|
+
// #region 恢复出厂设置
|
|
77
|
+
/**
|
|
78
|
+
* 恢复出厂设置
|
|
79
|
+
* @param {*} deviceId
|
|
80
|
+
* @returns hex []
|
|
81
|
+
*/
|
|
82
|
+
export const resetFactoryData = async (deviceId) => {
|
|
83
|
+
return getFFAAKeyAsync(deviceId, '0x20', ['0x01'], '恢复出厂设置');
|
|
84
|
+
}
|
|
85
|
+
// #region 恢复二级密码
|
|
86
|
+
/**
|
|
87
|
+
* 恢复二级密码
|
|
88
|
+
* @param {*} deviceId
|
|
89
|
+
* @returns hex []
|
|
90
|
+
*/
|
|
91
|
+
export const resetSecondaryKey = async (deviceId) => {
|
|
92
|
+
return getFFAAKeyAsync(deviceId, '0x1F', ['0x01'], '恢复二级密码');
|
|
93
|
+
}
|
|
94
|
+
// #region 清除一级密码
|
|
95
|
+
/**
|
|
96
|
+
* 清除一级密码
|
|
97
|
+
* @param {*} deviceId
|
|
98
|
+
* @returns hex []
|
|
99
|
+
*/
|
|
100
|
+
export const clearPrimaryKey = async (deviceId) => {
|
|
101
|
+
return getFFAAKeyAsync(deviceId, '0x23', ['0x01'], '清除一级密码');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**读取蓝牙名称 */
|
|
105
|
+
export const getBluetoothName = async (deviceId) => {
|
|
106
|
+
const hex = await getFFAAKeyAsync(deviceId, '0x06', [], '蓝牙名称');
|
|
107
|
+
let name = ''
|
|
108
|
+
if (hex && hex[2] == 0x06) {
|
|
109
|
+
let arr = hex.slice(4, -1);
|
|
110
|
+
if (arr.length == 0) return '';
|
|
111
|
+
name = String.fromCharCode(...arr);
|
|
112
|
+
}
|
|
113
|
+
return name;
|
|
114
|
+
}
|
|
115
|
+
/**写蓝牙名称
|
|
116
|
+
* @param {*} deviceId 设备id
|
|
117
|
+
* @param {*} value 蓝牙名称
|
|
118
|
+
* @returns boolean 是否成功
|
|
119
|
+
*/
|
|
120
|
+
export const setBluetoothName = async (deviceId, value) => {
|
|
121
|
+
const content = string2hexArr(value).map((o) => `0x${o}`);
|
|
122
|
+
const hex = await getFFAAKeyAsync(deviceId, '0x07', content, '蓝牙名称');
|
|
123
|
+
let name = ''
|
|
124
|
+
if (hex && hex[2] == 0x07) {
|
|
125
|
+
return true
|
|
126
|
+
}
|
|
127
|
+
throw new Error('设置蓝牙名称失败');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// #region 获取广播数据
|
|
131
|
+
/**
|
|
132
|
+
* 获取广播数据
|
|
133
|
+
* @param {*} deviceId
|
|
134
|
+
* @returns hex []
|
|
135
|
+
*/
|
|
136
|
+
export const getBroadcastDataCmd = async (deviceId) => {
|
|
137
|
+
return getFFAAKeyAsync(deviceId, '0x19', ['0x01'], '广播数据');
|
|
138
|
+
}
|
|
139
|
+
// #region AT指令(FFAA80)
|
|
140
|
+
/** AT指令(FFAA80)
|
|
141
|
+
*
|
|
142
|
+
* @param {*} deviceId
|
|
143
|
+
* @param {*} ATStr eg: 'at^wifimode?'
|
|
144
|
+
* @returns
|
|
145
|
+
*/
|
|
146
|
+
export const getFFAA80Async = async (deviceId, ATStr) => {
|
|
147
|
+
const /*包头*/ header = ['0xff', '0xaa'];
|
|
148
|
+
const /*命令码*/ commandCode = ['0x80'];
|
|
149
|
+
const /*数据内容*/ data = string2hexArr(ATStr).map((o) => `0x${o}`);
|
|
150
|
+
const /*数据内容长度*/ dataLength = [`0x${decimalToHex(data.length, 2)}`];
|
|
151
|
+
const /*校验位(指令+长度+数据位)*/ check = generateCheckSum([...commandCode, ...dataLength, ...data], false);
|
|
152
|
+
// 包头-命令码-数据内容长度-数据内容-校验位
|
|
153
|
+
const command = [...header, ...commandCode, ...dataLength, ...data, ...check];
|
|
154
|
+
const response = 'FFAA802D41545E56455253494F4E3F0D0A0D0A5E56455253494F4E3A204A42442E425730332E30312E3030360A4F4B0D0A19';
|
|
155
|
+
|
|
156
|
+
const hex = await getData(
|
|
157
|
+
deviceId,
|
|
158
|
+
{
|
|
159
|
+
command,
|
|
160
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == 0x80, pkgLen: hexArr[3] + 5 }),
|
|
161
|
+
pkgVerifyHandler: (pkg) => {
|
|
162
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
163
|
+
const len = pkg.length;
|
|
164
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
165
|
+
const _c1 = pkg[len - 1];
|
|
166
|
+
return { verified: c1 == _c1 };
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
'FFAA_80(AT)'
|
|
170
|
+
);
|
|
171
|
+
if(!hex) return null;
|
|
172
|
+
return resolveFFAA80(hex);
|
|
173
|
+
}
|
|
174
|
+
// #region 解析AT指令响应
|
|
175
|
+
/** 解析AT指令响应
|
|
176
|
+
*
|
|
177
|
+
* @param {*} data
|
|
178
|
+
* @returns
|
|
179
|
+
*/
|
|
180
|
+
export const resolveFFAA80 = (data) => {
|
|
181
|
+
if (!data) return null;
|
|
182
|
+
const dataStr = hexArr2string(data);
|
|
183
|
+
const status = data[data.length - 2];
|
|
184
|
+
const response = hexArr2Assic(data.slice(4, -1));
|
|
185
|
+
// const response= "AT^VERSION?\r\n\r\n^VERSION: JBD.BW03.01.006\nOK\r\n"
|
|
186
|
+
const moduleVersion = response.replace(/\r|\n|\s+|\OK/g, '').split(':')[1] ?? '';
|
|
187
|
+
return { dataStr, status, response, moduleVersion };
|
|
188
|
+
}
|
|
189
|
+
// #region 通用FFAA
|
|
190
|
+
/**通用FFAA
|
|
191
|
+
* 方案指令执行(FFAA)
|
|
192
|
+
* @param {*} deviceId
|
|
193
|
+
* @param {*} command
|
|
194
|
+
* @returns
|
|
195
|
+
*/
|
|
196
|
+
export const set_PlanCMD_FFAA = async (deviceId, command) => {
|
|
197
|
+
if (typeof command == 'string') {
|
|
198
|
+
command = command.match(/(.{2})/g).map((o) => `0x${o}`);
|
|
199
|
+
}
|
|
200
|
+
let result = null;
|
|
201
|
+
try {
|
|
202
|
+
const data = await getData(
|
|
203
|
+
deviceId,
|
|
204
|
+
{
|
|
205
|
+
command,
|
|
206
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == command[2], pkgLen: hexArr[3] + 5 }),
|
|
207
|
+
pkgVerifyHandler: (pkg) => {
|
|
208
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
209
|
+
const len = pkg.length;
|
|
210
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
211
|
+
const _c1 = pkg[len - 1];
|
|
212
|
+
return { verified: c1 == _c1 };
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
'通用CMD_FFAA'
|
|
216
|
+
);
|
|
217
|
+
if (data) {
|
|
218
|
+
result = resolveFFAAKey(data);
|
|
219
|
+
}
|
|
220
|
+
} catch (error) {
|
|
221
|
+
console.error(error);
|
|
222
|
+
}
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
// #region 方案指令执行(FFAA80-AT)
|
|
226
|
+
/**方案指令执行(FFAA80-AT)
|
|
227
|
+
* @param {*} deviceId
|
|
228
|
+
* @param {*} ATStr
|
|
229
|
+
* @returns
|
|
230
|
+
*/
|
|
231
|
+
export const set_PlanCMD_FFAA80 = async (deviceId, ATStr) => {
|
|
232
|
+
let data = null;
|
|
233
|
+
try {
|
|
234
|
+
if (ATStr.slice(0, 11).toUpperCase() == 'AT^WIFISTA=') {
|
|
235
|
+
const [v0, v1] = ATStr.split('=');
|
|
236
|
+
const [rssi, pwd] = v1.split(',');
|
|
237
|
+
data = await setWiFi(deviceId, rssi, pwd);
|
|
238
|
+
console.warn('WiFi_STA', data);
|
|
239
|
+
} else {
|
|
240
|
+
const hex = await getFFAA80Async(deviceId, ATStr);
|
|
241
|
+
data = resolveFFAA80(hex);
|
|
242
|
+
}
|
|
243
|
+
} catch (error) { }
|
|
244
|
+
|
|
245
|
+
return data;
|
|
246
|
+
}
|
|
247
|
+
// #region 设备配置WiFi
|
|
248
|
+
/**设备配置WiFi */
|
|
249
|
+
export const setWiFiSta = async (deviceId, rssi, pwd) => {
|
|
250
|
+
const str = `AT^WIFISTA=${rssi},${pwd}`;
|
|
251
|
+
try {
|
|
252
|
+
const hex = await getFFAA80Async(deviceId, str, 'WiFi_STA');
|
|
253
|
+
const data = resolveFFAA80(hex);
|
|
254
|
+
return data;
|
|
255
|
+
// return data&& data?.response?.includes('OK');
|
|
256
|
+
} catch (error) { }
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
// #region 查询WiFi IP
|
|
260
|
+
/**查询WiFi IP */
|
|
261
|
+
export const getWiFiIP = async (deviceId) => {
|
|
262
|
+
return new Promise(async (r, j) => {
|
|
263
|
+
try {
|
|
264
|
+
const str = 'AT^WIFISTA_IP?';
|
|
265
|
+
const hex = await getFFAA80Async(deviceId, str, 'WiFi_IP');
|
|
266
|
+
const data = resolveFFAA80(hex);
|
|
267
|
+
const ok = data && data?.response?.includes('OK') && data?.response?.includes(str) && !data?.response?.includes('ip:0.0.0.0');
|
|
268
|
+
if (ok) r(data);
|
|
269
|
+
else j(data);
|
|
270
|
+
} catch (error) {
|
|
271
|
+
j(error);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
export const setWiFi = async (deviceId, rssi, pwd) => {
|
|
276
|
+
let data = null;
|
|
277
|
+
try {
|
|
278
|
+
const ok = await setWiFiSta(deviceId, rssi, pwd);
|
|
279
|
+
data = ok;
|
|
280
|
+
// if (ok) {
|
|
281
|
+
// data = await runWithLimitedTimeout(() => getWiFiIP(deviceId), { retryDelay: 1500, debug, retryTimeout: 30000 });
|
|
282
|
+
// }
|
|
283
|
+
} catch (error) { }
|
|
284
|
+
return data;
|
|
285
|
+
}
|
|
286
|
+
// #region ====LCD屏 ======
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
// #region 查询配对mac地址
|
|
294
|
+
/** 查询配对mac地址(FFAA25)
|
|
295
|
+
*
|
|
296
|
+
* eg:LCD屏
|
|
297
|
+
* @param {*} deviceId
|
|
298
|
+
* @returns
|
|
299
|
+
*/
|
|
300
|
+
export const getFFAA25Async = async (deviceId) => {
|
|
301
|
+
const /*包头*/ header = ['0xff', '0xaa'];
|
|
302
|
+
const /*命令码*/ commandCode = ['0x25'];
|
|
303
|
+
const /*数据内容*/ data = [];
|
|
304
|
+
const /*数据内容长度*/ dataLength = [`0x${decimalToHex(data.length, 2)}`];
|
|
305
|
+
const /*校验位(指令+长度+数据位)*/ check = generateCheckSum([...commandCode, ...dataLength, ...data], false);
|
|
306
|
+
// 包头-命令码-数据内容长度-数据内容-校验位
|
|
307
|
+
const command = [...header, ...commandCode, ...dataLength, ...data, ...check];
|
|
308
|
+
|
|
309
|
+
return getData(
|
|
310
|
+
deviceId,
|
|
311
|
+
{
|
|
312
|
+
command,
|
|
313
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == 0x25, pkgLen: hexArr[3] + 5 }),
|
|
314
|
+
pkgVerifyHandler: (pkg) => {
|
|
315
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
316
|
+
const len = pkg.length;
|
|
317
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
318
|
+
const _c1 = pkg[len - 1];
|
|
319
|
+
return { verified: c1 == _c1 };
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
'FFAA_25(LCD屏查询配对mac)'
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
/** 解析FFAA25查询配对mac地址指令响应
|
|
326
|
+
*
|
|
327
|
+
* @param {*} data
|
|
328
|
+
* @returns
|
|
329
|
+
*/
|
|
330
|
+
export const resolveFFAA25 = (data) => {
|
|
331
|
+
if (!data) return null;
|
|
332
|
+
// FFAA25 07 AAC237000569 04 41
|
|
333
|
+
const dataStr = hexArr2string(data);
|
|
334
|
+
const response = dataStr.slice(8, -2);
|
|
335
|
+
const arr = response.match(/(.{2})/g);
|
|
336
|
+
const state = arr.pop();
|
|
337
|
+
const macAddr = arr.join(':');
|
|
338
|
+
// 0: 未连接 1: UART连接BMS 2: CAN连接BMS 4: 蓝牙连接BMS
|
|
339
|
+
return { dataStr, response, macAddr, state, isConnected: state != 0 };
|
|
340
|
+
}
|
|
341
|
+
// #region 设置配对mac地址
|
|
342
|
+
/** 设置配对mac地址(FFAA26)
|
|
343
|
+
*
|
|
344
|
+
* @param {*} deviceId
|
|
345
|
+
* @param {*} macAddrArr
|
|
346
|
+
* @returns
|
|
347
|
+
*/
|
|
348
|
+
export const getFFAA26Async = async (deviceId, macAddrArr) => {
|
|
349
|
+
const /*包头*/ header = ['0xff', '0xaa'];
|
|
350
|
+
const /*命令码*/ commandCode = ['0x26'];
|
|
351
|
+
const /*数据内容*/ data = [...macAddrArr];
|
|
352
|
+
const /*数据内容长度*/ dataLength = [`0x${decimalToHex(data.length, 2)}`];
|
|
353
|
+
const /*校验位(指令+长度+数据位)*/ check = generateCheckSum([...commandCode, ...dataLength, ...data], false);
|
|
354
|
+
// 包头-命令码-数据内容长度-数据内容-校验位
|
|
355
|
+
const command = [...header, ...commandCode, ...dataLength, ...data, ...check];
|
|
356
|
+
|
|
357
|
+
return getData(
|
|
358
|
+
deviceId,
|
|
359
|
+
{
|
|
360
|
+
command,
|
|
361
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == 0x26, pkgLen: hexArr[3] + 5 }),
|
|
362
|
+
pkgVerifyHandler: (pkg) => {
|
|
363
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
364
|
+
const len = pkg.length;
|
|
365
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
366
|
+
const _c1 = pkg[len - 1];
|
|
367
|
+
return { verified: c1 == _c1 };
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
'FFAA_26(LCD屏设置配对mac)'
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
// #region 解析FFAA26设置配对mac地址指令响应
|
|
374
|
+
/** 解析FFAA26设置配对mac地址指令响应
|
|
375
|
+
*
|
|
376
|
+
* @param {*} data
|
|
377
|
+
* @returns
|
|
378
|
+
*/
|
|
379
|
+
export const resolveFFAA26 = (data) => {
|
|
380
|
+
if (!data) return null;
|
|
381
|
+
// FFAA 26 00 26
|
|
382
|
+
const dataStr = hexArr2string(data);
|
|
383
|
+
const response = dataStr.slice(6, -2);
|
|
384
|
+
|
|
385
|
+
const result = response == 0; // 0:成功 1:失败
|
|
386
|
+
return { dataStr, response, result };
|
|
387
|
+
}
|
|
388
|
+
// #region 模块复位
|
|
389
|
+
/**模块复位 */
|
|
390
|
+
export const getFFAA03Async = async (deviceId) => {
|
|
391
|
+
const command = ['0xFF', '0xAA', '0x03', '0x00', '0x03'];
|
|
392
|
+
return getData(
|
|
393
|
+
deviceId,
|
|
394
|
+
{
|
|
395
|
+
command,
|
|
396
|
+
commandVerifyHandler: (hexArr) => ({ verified: hexArr[0] == 0xff && hexArr[1] == 0xaa && hexArr[2] == 0x03, pkgLen: hexArr[3] + 5 }),
|
|
397
|
+
pkgVerifyHandler: (pkg) => {
|
|
398
|
+
const _pkg = pkg.map((o) => hex2string(o));
|
|
399
|
+
const len = pkg.length;
|
|
400
|
+
const [c1] = generateCheckSum(_pkg.slice(2, len - 1));
|
|
401
|
+
const _c1 = pkg[len - 1];
|
|
402
|
+
return { verified: c1 == _c1 };
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
'FFAA_03(模块复位)'
|
|
406
|
+
);
|
|
407
|
+
}
|