From e77dfd454654c8ae786e7ba0e7981601a7ee35b1 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Tue, 3 Sep 2019 18:43:42 +0700
Subject: [PATCH] queryIMEI

---
 lib/modem-commands.js     | 21 ++++++++++++++++++++-
 lib/serialport-parsers.js |  3 +++
 modem-tester.js           |  2 +-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/lib/modem-commands.js b/lib/modem-commands.js
index a8921f3..b00f724 100644
--- a/lib/modem-commands.js
+++ b/lib/modem-commands.js
@@ -1,9 +1,11 @@
 const MUTEX_COMMAND = 'COMMAND';
 // const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
 
+const ParserRegex = require('@serialport/parser-regex');
+
 const logger = require('komodo-sdk/logger');
 const mutex = require('./mutex-common');
-// const parsers = require('./serialport-parsers');
+const parsers = require('./serialport-parsers');
 
 let port;
 
@@ -52,3 +54,20 @@ exports.queryCOPS = function querySignalQuality() {
         resolve(true);
     });
 };
+
+exports.queryIMEI = function queryIMEI() {
+    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', { parser: 'parserIMEI', data: data.toString() });
+            mutex.unlock(MUTEX_COMMAND, 'queryIMEI');
+            resolve();
+        });
+
+        await mutex.lock(MUTEX_COMMAND, 'queryIMEI');
+
+        port.pipe(parser);
+        await writeToPort('AT+CGSN\r');
+        port.unpipe(parser);
+    });
+};
diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js
index 222e510..b62e4d4 100644
--- a/lib/serialport-parsers.js
+++ b/lib/serialport-parsers.js
@@ -125,5 +125,8 @@ parserWaitForOkOrError.on('data', (data) => {
 });
 
 
+exports.PARSER_READLINE_DELIMITER = PARSER_READLINE_DELIMITER;
+exports.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX = PARSER_WAIT_FOR_OK_OR_ERROR_REGEX;
+
 exports.parserReadline = parserReadline;
 exports.parserWaitForOkOrError = parserWaitForOkOrError;
diff --git a/modem-tester.js b/modem-tester.js
index accae59..7a091e8 100644
--- a/modem-tester.js
+++ b/modem-tester.js
@@ -51,7 +51,6 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) =>
 
     const commands = [
         'AT&FE0\r',
-        'AT+CGSN\r',
         'AT+CIMI\r',
         'AT+CMGF=0\r',
         'AT+CNMI=1,2,0,1,0\r',
@@ -74,6 +73,7 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) =>
         }
     }
 
+    await modemCommands.queryIMEI();
     await modemCommands.queryCOPS();
     await modemCommands.querySignalQuality();
 
-- 
1.9.0