diff --git a/lib/modem-commands.js b/lib/modem-commands.js index 6fde986..763201e 100644 --- a/lib/modem-commands.js +++ b/lib/modem-commands.js @@ -1,5 +1,8 @@ const MUTEX_COMMAND = 'COMMAND'; +exports.MUTEX_COMMAND = MUTEX_COMMAND; + const MUTEX_SUBCOMMAND = 'SUBCOMMAND'; +exports.MUTEX_SUBCOMMAND = MUTEX_SUBCOMMAND; const ParserReadline = require('@serialport/parser-readline'); const ParserRegex = require('@serialport/parser-regex'); @@ -117,7 +120,7 @@ exports.queryIMEI = function queryIMEI(lockName) { logger.verbose('INCOMING', { data: data.toString(), parser: 'parserIMEI' }); port.unpipe(parser); mutex.unlock(lockName || MUTEX_COMMAND, 'queryIMEI'); - modemInfo.imei = data.toString().trim(); + modemInfo.imei = data.toString().trim() || null; logger.info('IMEI extracted', { imei: modemInfo.imei }); resolve(modemInfo.imei); }); @@ -136,7 +139,7 @@ exports.queryIMSI = function queryIMSI(lockName) { logger.verbose('INCOMING', { data: data.toString(), parser: 'parserIMSI' }); port.unpipe(parser); mutex.unlock(lockName || MUTEX_COMMAND, 'queryIMSI'); - modemInfo.imsi = data.toString().trim(); + modemInfo.imsi = data.toString().trim() || null; logger.info('IMSI extracted', { imsi: modemInfo.imsi }); resolve(modemInfo.imsi); }); @@ -157,3 +160,11 @@ exports.queryIMEIAndIMSI = async function queryIMEIAndIMSI() { await mutex.unlock(MUTEX_COMMAND, 'queryIMEIAndIMSI'); return { imei, imsi }; }; + +exports.initATCommands = async function initATCommands() { + await mutex.lock(MUTEX_COMMAND, 'INIT MODEM'); + await this.writeToPortAndWaitForOkOrError('ATE0\r', MUTEX_SUBCOMMAND); + await this.writeToPortAndWaitForOkOrError('AT+CMGF=0\r', MUTEX_SUBCOMMAND); + await this.writeToPortAndWaitForOkOrError('AT+CNMI=1,2,0,1,0\r', MUTEX_SUBCOMMAND); + mutex.unlock(MUTEX_COMMAND, 'INIT MODEM'); +}; diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js index 9c6b39b..e684ff9 100644 --- a/lib/serialport-parsers.js +++ b/lib/serialport-parsers.js @@ -1,5 +1,5 @@ const PARSER_READLINE_DELIMITER = '\r\n'; -const PARSER_WAIT_FOR_OK_OR_ERROR_REGEX = /\r\n(?:OK|ERROR)\r\n/; +const PARSER_WAIT_FOR_OK_OR_ERROR_REGEX = /\n(?:OK|ERROR)\r\n/; const moment = require('moment'); const nodePdu = require('node-pdu'); @@ -77,8 +77,8 @@ function onCOPS(data) { }); modemInfo.cops = cops; - modemInfo.networkId = networkId; - modemInfo.networkName = networkName; + modemInfo.networkId = networkId || null; + modemInfo.networkName = networkName || null; return { cops, mode, format, networkId, networkName, diff --git a/modem-tester.js b/modem-tester.js index ff636d5..df61a89 100644 --- a/modem-tester.js +++ b/modem-tester.js @@ -30,6 +30,7 @@ const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (er logger.info('Modem state', modemInfo); setInterval(async () => { + await modemCommands.initATCommands(); await modemCommands.queryIMEIAndIMSI(); await modemCommands.queryCOPSAndSignalQuality(); logger.info('Modem state', modemInfo);