const { ipcMain } = require('electron') const SerialPort = require('serialport') const InterByteTimeout = require('@serialport/parser-inter-byte-timeout') const config = require('./config') const NMEAHandler = require('./api/NMEAHandler') const DEFAULT_BAUDRATE = 9600 const getSerialPortConstructorArguments = (ports) => { let 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 senders = [] ipcMain.on("APP_MOUNTED", (event) => { const { sender } = event senders.push(sender) sender.once('destroyed', () => { const index = senders.indexOf(sender) if (index >= 0) senders.splice(index, 1) }) }) const sendMsg = (channel, msg) => { if (senders.length <= 0) return try { senders.forEach((sender) => { sender.send(channel, msg) }) } catch (error) { console.error(error) } } SerialPort.list().then((ports, err) => { if (err) { console.log(err) return } // console.log(ports, '=====================') // 过滤掉COM1口,很多电脑自带COM1接口 ports.filter((port) => port.path != 'COM1') if (ports.length == 0) { console.error('设备为连接') return } try { const { path, baudRate } = getSerialPortConstructorArguments(ports) const serialPort = new SerialPort(path, { baudRate }) const parser = serialPort.pipe(new InterByteTimeout({interval: 30})) NMEAHandler.on('handled' , (nmeaObj) => { sendMsg('nmea', JSON.stringify(nmeaObj)) }) parser.on('data', (data) => NMEAHandler.handle(data.toString())) } catch (error) { console.error(error); } })