itender/getSerialList.js
2023-01-11 18:34:17 +01:00

82 lines
1.5 KiB
JavaScript

const { SerialPort } = require('serialport');
const { ReadlineParser } = require('@serialport/parser-readline');
( async( ) => {
console.log( await SerialPort.list() );
let port = new SerialPort( { path: '/dev/ttyS11', baudRate: 9600 } );
/*port.on('data', function (data) {
console.log('Data:', data.toString())
})*/
port.close()
let callbacks = {};
function request()
{
return new Promise((resolve, reject) => {
let id = makeid(8);
console.log(id);
let req = {
id: id,
type: "REQUEST",
data: "1,2"
}
callbacks[req.id] = resolve;
let done = false;
setTimeout( () => {
if( !done )
reject("Request with id " + id + " timed out");
}, 15000 );
port.write(JSON.stringify(req) + "\r", "utf-8");
});
}
const parser = port.pipe(new ReadlineParser({ delimiter: '\r' }))
parser.on('data', (data) => {
/*let req = {
id: id,
type: "ACK",
data: "1,2"
}*/
data = data.toString().trim();
let json = JSON.parse(data);
console.log("GOT: " + data );
callbacks[json.id]();
});
try {
await request();
console.log("FUNCTION RESOLVED YAY!");
} catch( e )
{
console.error(e);
}
} )();
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}