diff --git a/lib/modem.js b/lib/modem.js index 1c32877..b9ec2f2 100644 --- a/lib/modem.js +++ b/lib/modem.js @@ -15,6 +15,8 @@ const common = require('./common'); const sms = require('./sms'); const modemInfo = { + manufacturer: null, + model: null, imsi: null, signalStrength: null, }; @@ -96,6 +98,22 @@ parserWaitForOK.on('data', () => { mutex.releaseLockWaitForOK(); }); +function simpleCommand(cmd, callback) { + const parser = new ParserDelimiter({ delimiter: DELIMITER_WAIT_FOR_OK }); + parser.on('data', (data) => { + port.unpipe(parser); + mutex.releaseLockWaitForOK(); + + if (data) { + callback(null, data.toString().trim()); + } + }); + + port.pipe(parser); + writeToPortAndWaitForOK(cmd); +} + +/* async function readIMSI() { logger.info('Querying IMSI'); const parserReadIMSI = new ParserDelimiter({ delimiter: DELIMITER_WAIT_FOR_OK }); @@ -116,6 +134,47 @@ async function readIMSI() { port.unpipe(parserReadIMSI); mutex.releaseLockWaitForCommand(); } +*/ + +function readManufacturer() { + return new Promise((resolve) => { + simpleCommand('AT+CGMI\r', (err, result) => { + modemInfo.manufacturer = result; + logger.info(`Manufacturer: ${result}`); + resolve(result); + }); + }); +} + +function readModel() { + return new Promise((resolve) => { + simpleCommand('AT+CGMM\r', (err, result) => { + modemInfo.model = result; + logger.info(`Model: ${result}`); + resolve(result); + }); + }); +} + +function readIMEI() { + return new Promise((resolve) => { + simpleCommand('AT+CGSN\r', (err, result) => { + modemInfo.imei = result; + logger.info(`IMEI: ${result}`); + resolve(result); + }); + }); +} + +function readIMSI() { + return new Promise((resolve) => { + simpleCommand('AT+CIMI\r', (err, result) => { + modemInfo.imsi = result; + logger.info(`IMSI: ${result}`); + resolve(result); + }); + }); +} async function querySignalStrength() { port.pipe(parserWaitForOK); @@ -166,6 +225,9 @@ function init() { logger.info('Deleting existing messages'); // await writeToPortAndWaitForOK('AT+CMGD=0,4\r'); + await readManufacturer(); + await readModel(); + await readIMEI(); await readIMSI(); port.unpipe(parserWaitForOK);