diff --git a/lib/modem-commands.js b/lib/modem-commands.js index 82151cb..09e26e0 100644 --- a/lib/modem-commands.js +++ b/lib/modem-commands.js @@ -1,5 +1,5 @@ const MUTEX_COMMAND = 'COMMAND'; -// const MUTEX_SUBCOMMAND = 'SUBCOMMAND'; +const MUTEX_SUBCOMMAND = 'SUBCOMMAND'; const ParserReadline = require('@serialport/parser-readline'); const ParserRegex = require('@serialport/parser-regex'); @@ -23,12 +23,17 @@ function writeToPort(data) { } exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(cmd, lockName) { + let resolved = false; + return new Promise(async (resolve) => { const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER }); parser.on('data', (data) => { port.unpipe(parser); mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim()); - resolve(data); + if (!resolved) { + resolved = true; + resolve(data); + } }); await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim()); @@ -78,11 +83,26 @@ exports.querySignalQuality = function querySignalQuality() { }); }; -exports.queryCOPS = function queryCOPS() { +exports.queryCOPS = function queryCOPS(lockName) { return new Promise(async (resolve) => { - await mutex.lock(MUTEX_COMMAND, 'queryCOPS'); + await mutex.lock(lockName || MUTEX_COMMAND, 'queryCOPS'); await writeToPort('AT+COPS?\r'); - mutex.unlock(MUTEX_COMMAND, 'queryCOPS'); + mutex.unlock(lockName || MUTEX_COMMAND, 'queryCOPS'); + resolve(true); + }); +}; + +exports.queryCOPSAndSignalQuality = function queryCOPSAndSignalQuality() { + return new Promise(async (resolve) => { + if (!mutex.tryLock(MUTEX_COMMAND, 'queryCOPSAndSignalQuality')) { + resolve(false); + return; + } + + await this.writeToPortAndWaitForReadline('AT+COPS?\r', MUTEX_SUBCOMMAND); + await this.writeToPortAndWaitForReadline('AT+CSQ\r', MUTEX_SUBCOMMAND); + + mutex.unlock(MUTEX_COMMAND, 'queryCopsAndSignalQuality'); resolve(true); }); }; diff --git a/modem-tester.js b/modem-tester.js index 577d026..3b42b40 100644 --- a/modem-tester.js +++ b/modem-tester.js @@ -38,7 +38,8 @@ const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (er logger.info(`**** Signal Quality: ${signalQuality}`); setInterval(() => { - modemCommands.querySignalQuality(); + // modemCommands.querySignalQuality(); + modemCommands.queryCOPSAndSignalQuality(); }, (config && config.interval_beetwen_signal_strength_ms) || 30000); });