electron+串口请求、监听、buffer数据处理
啥都不说,先附上代码:
let sendData = [0xB0, 0x00, 0x00]
sendData = this.pushTo16(sendData); // 这部分是根据文档协议处理向设备发送的数据
return (new Promise((resolve, reject) => {
port.write(sendData, (e) => { // 指令写入
})
port.removeAllListeners(); // 移除监听
port.on('data', (data) => { // 监听数据
let _data = this.dataTrans(data); // 这个是对返回的数据进行处理
if (_data && _data[3] === 0xB0) { //这个判断是有数据返回,并且buffer数据里面有指令,由于有数据头和检验位,所以命令放在第四个
_data = _data.slice(10, 514); // 截取真正的数据
// 由于在解析的时候,utf-8只能解析,不能解析0x00,会解析成乱码,所以需要把有效数据过滤出来
let officeArr = _data.filter((item) => {
if (item !== 0x00) {
return item;
}
})
// 数据解析
let content = officeArr; // arraybuffer类型数据
let resBlob = new Blob([content])
let reader = new FileReader()
reader.readAsText(resBlob, 'utf-8');
reader.onload = () => {
console.log(reader.result)
resolve(reader.result); // 解析后返回的结果
}
port.removeAllListeners(); // 由于这个监听会一直存在,它会监听到设备返回的所有数据,我们只需要监听需要的数据,所以需要在收到数据后移除
}
})
}))