86 lines
No EOL
1.8 KiB
JavaScript
86 lines
No EOL
1.8 KiB
JavaScript
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
|
|
} |