From 8f7f6a139765ede8f9b4c4413af76ef2d2423d3e Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Tue, 3 Sep 2019 19:45:40 +0700 Subject: [PATCH] writeToPortAndWaitForReadline --- lib/modem-commands.js | 17 +++++++++++++++++ modem-tester.js | 27 ++++----------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/lib/modem-commands.js b/lib/modem-commands.js index 2237f43..aea547b 100644 --- a/lib/modem-commands.js +++ b/lib/modem-commands.js @@ -1,6 +1,7 @@ const MUTEX_COMMAND = 'COMMAND'; // const MUTEX_SUBCOMMAND = 'SUBCOMMAND'; +const ParserReadline = require('@serialport/parser-readline'); const ParserRegex = require('@serialport/parser-regex'); const logger = require('komodo-sdk/logger'); @@ -21,6 +22,22 @@ function writeToPort(data) { }); } +exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(cmd, lockName) { + return new Promise(async (resolve) => { + const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER }); + parser.on('data', (data) => { + logger.verbose('INCOMING', { parser: 'customParserReadLine', data: `${data.toString()}${parsers.PARSER_READLINE_DELIMITER}` }); + port.unpipe(parser); + mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim()); + resolve(data); + }); + + await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim()); + port.pipe(parser); + await writeToPort(cmd); + }); +}; + exports.sleep = function sleep(ms) { return new Promise((resolve) => { setTimeout(() => { diff --git a/modem-tester.js b/modem-tester.js index a36ac49..c1dcdc3 100644 --- a/modem-tester.js +++ b/modem-tester.js @@ -49,28 +49,9 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) => await writeToPortDelayed('AT\r'); - const commands = [ - 'AT&FE0\r', - 'AT+CMGF=0\r', - 'AT+CNMI=1,2,0,1,0\r', - ]; - - const commandsCount = commands.length; - // eslint-disable-next-line no-plusplus - for (let i = 0; i < commandsCount; i++) { - // eslint-disable-next-line no-await-in-loop - await writeToPortDelayed(commands[i], 2000); - } - - if (config && config.modem_tester && config.modem_tester.commands - && config.modem_tester.commands.length) { - const additionalCommandsLength = config.modem_tester.commands.length; - // eslint-disable-next-line no-plusplus - for (let i = 0; i < additionalCommandsLength; i++) { - // eslint-disable-next-line no-await-in-loop - await writeToPortDelayed(config.modem_tester.commands[i], 2000); - } - } + await modemCommands.writeToPortAndWaitForReadline('AT&FE0\r'); + await modemCommands.writeToPortAndWaitForReadline('AT+CMGF=0\r'); + await modemCommands.writeToPortAndWaitForReadline('AT+CNMI=1,2,0,1,0\r'); const imei = await modemCommands.queryIMEI(); logger.info(`**** IMEI: ${imei}`); @@ -86,7 +67,7 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) => setInterval(() => { modemCommands.querySignalQuality(); - }, 30000); + }, (config && config.interval_beetwen_signal_strength_ms) || 30000); }); parsers.setPort(port); -- 1.9.0