const { exec } = require('child_process'); function openPort(port){ return new Promise((resolve, reject) => { var callbackError = function(err) { port.removeListener('error', callbackError); port.removeListener('open', callbackError); reject(err.message); }; var callbackOpen = function(data) { port.removeListener('error', callbackError); port.removeListener('open', callbackOpen); resolve("port open: ok"); }; port.on('error', callbackError); port.on('open', callbackOpen); port.open(); }) } function runSyncExec(command){ return new Promise((resolve, reject) => { exec(command, (error, stdout, stderr) => { if(error == null) resolve(stdout); reject(error); }); }) } async function writeData(port, data, readbytes, timeout){ return new Promise((resolve, reject) => { if(readbytes == undefined) readbytes = 0; if(timeout == undefined) timeout = 10000; var callback = function(data) { rsPortReceivedData.push(...data); let l = rsPortReceivedData.length; if(l >= readbytes) { port.removeListener('data', callback); clearTimeout(t); resolve(rsPortReceivedData); } }; let t = setTimeout(() => { port.removeListener('data', callback); reject("TIMEOUT READING"); }, timeout); let rsPortReceivedData = []; if(readbytes > 0) port.on('data', callback); port.write(Buffer.from(data), function(err) { if (err) { port.removeListener('data', callback); reject(err.message); } if(readbytes == 0) { resolve(rsPortReceivedData); } }); }) } module.exports = { openPort, runSyncExec, writeData }