From afe1003d11755d5bd5e56e70b6875daa77456ef7 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Tue, 3 Sep 2019 20:02:38 +0700
Subject: [PATCH] Using modemCommands.writeToPortAndWaitForOkOrError

---
 lib/modem-commands.js | 17 ++++++++++++++++-
 modem-tester.js       |  6 +++---
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/modem-commands.js b/lib/modem-commands.js
index aea547b..2a4221a 100644
--- a/lib/modem-commands.js
+++ b/lib/modem-commands.js
@@ -26,7 +26,22 @@ exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(c
     return new Promise(async (resolve) => {
         const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER });
         parser.on('data', (data) => {
-            logger.verbose('INCOMING', { parser: 'customParserReadLine', data: `${data.toString()}${parsers.PARSER_READLINE_DELIMITER}` });
+            port.unpipe(parser);
+            mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim());
+            resolve(data);
+        });
+
+        await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim());
+        port.pipe(parser);
+        await writeToPort(cmd);
+    });
+};
+
+exports.writeToPortAndWaitForOkOrError = function writeToPortAndWaitForOkOrError(cmd, 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', { parser: 'customParserWaitForOkOrError', data: data.toString() });
             port.unpipe(parser);
             mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim());
             resolve(data);
diff --git a/modem-tester.js b/modem-tester.js
index c1dcdc3..d8115a0 100644
--- a/modem-tester.js
+++ b/modem-tester.js
@@ -49,9 +49,9 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) =>
 
     await writeToPortDelayed('AT\r');
 
-    await modemCommands.writeToPortAndWaitForReadline('AT&FE0\r');
-    await modemCommands.writeToPortAndWaitForReadline('AT+CMGF=0\r');
-    await modemCommands.writeToPortAndWaitForReadline('AT+CNMI=1,2,0,1,0\r');
+    await modemCommands.writeToPortAndWaitForOkOrError('AT&FE0\r');
+    await modemCommands.writeToPortAndWaitForOkOrError('AT+CMGF=0\r');
+    await modemCommands.writeToPortAndWaitForOkOrError('AT+CNMI=1,2,0,1,0\r');
 
     const imei = await modemCommands.queryIMEI();
     logger.info(`**** IMEI: ${imei}`);
-- 
1.9.0