diff --git a/lib/modem-commands.js b/lib/modem-commands.js index b0fb0f7..1b3b554 100644 --- a/lib/modem-commands.js +++ b/lib/modem-commands.js @@ -92,9 +92,11 @@ exports.queryCOPS = function queryCOPS(lockName) { }); }; -exports.queryCOPSAndSignalQuality = function queryCOPSAndSignalQuality() { +exports.queryCOPSAndSignalQuality = function queryCOPSAndSignalQuality(skipOnLocked) { return new Promise(async (resolve) => { - if (!mutex.tryLock(MUTEX_COMMAND, 'queryCOPSAndSignalQuality')) { + if (!skipOnLocked) { + await mutex.lock(MUTEX_COMMAND); + } else if (!mutex.tryLock(MUTEX_COMMAND, 'queryCOPSAndSignalQuality')) { resolve(false); return; } @@ -107,38 +109,47 @@ exports.queryCOPSAndSignalQuality = function queryCOPSAndSignalQuality() { }); }; -exports.queryIMEI = function queryIMEI() { +exports.queryIMEI = function queryIMEI(lockName) { return new Promise(async (resolve) => { const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); parser.on('data', (data) => { logger.verbose('INCOMING', { data: data.toString(), parser: 'parserIMEI' }); port.unpipe(parser); - mutex.unlock(MUTEX_COMMAND, 'queryIMEI'); + mutex.unlock(lockName || MUTEX_COMMAND, 'queryIMEI'); modemInfo.imei = data.toString().trim(); resolve(modemInfo.imei); }); - await mutex.lock(MUTEX_COMMAND, 'queryIMEI'); + await mutex.lock(lockName || MUTEX_COMMAND, 'queryIMEI'); port.pipe(parser); await writeToPort('AT+CGSN\r'); }); }; -exports.queryIMSI = function queryIMSI() { +exports.queryIMSI = function queryIMSI(lockName) { return new Promise(async (resolve) => { const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); parser.on('data', (data) => { logger.verbose('INCOMING', { data: data.toString(), parser: 'parserIMSI' }); port.unpipe(parser); - mutex.unlock(MUTEX_COMMAND, 'queryIMSI'); + mutex.unlock(lockName || MUTEX_COMMAND, 'queryIMSI'); modemInfo.imsi = data.toString().trim(); resolve(modemInfo.imsi); }); - await mutex.lock(MUTEX_COMMAND, 'queryIMSI'); + await mutex.lock(lockName || MUTEX_COMMAND, 'queryIMSI'); port.pipe(parser); await writeToPort('AT+CIMI\r'); }); }; + +exports.queryIMEIAndIMSI = async function queryIMEIAndIMSI() { + await mutex.lock(MUTEX_COMMAND, 'queryIMEIAndIMSI'); + + await this.queryIMEI(MUTEX_SUBCOMMAND); + await this.queryIMSI(MUTEX_SUBCOMMAND); + + await mutex.unlock(MUTEX_SUBCOMMAND, 'queryIMEIAndIMSI'); +}; diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js index 1d70950..dd178ea 100644 --- a/lib/serialport-parsers.js +++ b/lib/serialport-parsers.js @@ -60,7 +60,7 @@ function onCOPS(data) { const [mode, format, networkId] = cops.split(','); const networkName = networkId ? dbCops[networkId] || networkId : null; - logger.verbose('COPS extracted', { + logger.info('COPS extracted', { cops, mode, format, networkId, networkName, }); diff --git a/modem-tester.js b/modem-tester.js index 932178c..8f4483d 100644 --- a/modem-tester.js +++ b/modem-tester.js @@ -34,6 +34,7 @@ const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (er await modemCommands.queryCOPSAndSignalQuality(); setInterval(() => { + modemCommands.queryIMEIAndIMSI(); modemCommands.queryCOPSAndSignalQuality(); }, (config && config.interval_beetwen_signal_strength_ms) || 30000); });