From e509607c54ae1d6684ef4cca01ed398af9f97609 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Tue, 3 Sep 2019 17:43:56 +0700
Subject: [PATCH] MODEM-COMMANDS: CSQ

---
 lib/modem-commands.js | 36 ++++++++++++++++++++++++++++++++++++
 modem-tester.js       |  6 +++---
 2 files changed, 39 insertions(+), 3 deletions(-)
 create mode 100644 lib/modem-commands.js

diff --git a/lib/modem-commands.js b/lib/modem-commands.js
new file mode 100644
index 0000000..171ff2c
--- /dev/null
+++ b/lib/modem-commands.js
@@ -0,0 +1,36 @@
+const MUTEX_COMMAND = 'COMMAND';
+// const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
+
+const logger = require('komodo-sdk/logger');
+const mutex = require('./mutex-common');
+// const parsers = require('./serialport-parsers');
+
+let port;
+
+function writeToPort(data) {
+    return new Promise((resolve) => {
+        port.write(data, (err, bytesWritten) => {
+            if (err) logger.warn(`ERROR: ${err.toString()}`);
+
+            logger.verbose('OUTGOING', { bytesWritten, data: data.toString() });
+            resolve(bytesWritten);
+        });
+    });
+}
+
+exports.setPort = function setPort(val) {
+    port = val;
+};
+
+exports.querySignalQuality = function querySignalQuality() {
+    return new Promise(async (resolve) => {
+        if (!mutex.tryLock(MUTEX_COMMAND, 'querySignalQuality')) {
+            resolve(false);
+            return;
+        }
+
+        await writeToPort('AT+CSQ\r');
+        mutex.unlock(MUTEX_COMMAND, 'querySignalQuality');
+        resolve(true);
+    });
+};
diff --git a/modem-tester.js b/modem-tester.js
index a37f7c6..cbe5828 100644
--- a/modem-tester.js
+++ b/modem-tester.js
@@ -7,6 +7,7 @@ const logger = require('komodo-sdk/logger');
 const ParserInterByteTimeout = require('@serialport/parser-inter-byte-timeout');
 
 const parsers = require('./lib/serialport-parsers');
+const modemCommands = require('./lib/modem-commands');
 
 const parserInterByteTimeout = new ParserInterByteTimeout({ interval: 1000 });
 parserInterByteTimeout.on('data', (data) => {
@@ -53,7 +54,6 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) =>
         'AT+CGSN\r',
         'AT+CIMI\r',
         'AT+COPS?\r',
-        'AT+CSQ\r',
     ];
 
 
@@ -75,8 +75,8 @@ port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) =>
     }
 
     setInterval(() => {
-        writeToPort('AT+CSQ\r');
-    }, 60000);
+        modemCommands.querySignalQuality();
+    }, 30000);
 });
 
 parsers.setPort(port);
-- 
1.9.0