import { SerialPort } from 'serialport' import { InterByteTimeoutParser } from '@serialport/parser-inter-byte-timeout' import config from './config.js' import sendMsg from './ipcRendererManager' import NMEAHandler from './api/NMEAHandler' const DEFAULT_BAUDRATE = 115200 const getSerialPortConstructorArguments = (ports) => { // 很多电脑自带COM1接口,过滤掉COM1口 ports = ports.filter((port) => port.path != 'COM1') if (ports.length == 0) return const serialport = config.get('serialport') const path = ( serialport && serialport.path ) ? serialport.path : ports[0].path const baudRate = ( serialport && serialport.baudRate ) ? serialport.baudRate : DEFAULT_BAUDRATE return { path, baudRate } } const openSerialport = (ports) => { try { const constructorArguments = getSerialPortConstructorArguments(ports) if (!constructorArguments) { console.error('设备未连接') return } const { path, baudRate } = constructorArguments const serialPort = new SerialPort({ path, baudRate }) const parser = serialPort.pipe(new InterByteTimeoutParser({interval: 300})) NMEAHandler.on('received' , (nmeaStr) => { sendMsg('NMEA_RECEIVED', nmeaStr) }) NMEAHandler.on('handled' , (nmeaObj) => { sendMsg('NMEA_HANDLED', JSON.stringify(nmeaObj)) }) parser.on('data', (data) => NMEAHandler.handle(data.toString())) } catch (error) { console.error(error); } } SerialPort.list().then( ports => openSerialport(ports), err => console.error(err) )