From e49a560323ca9f0a041c78634e324019cc164f0c Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Wed, 25 Sep 2019 20:35:36 +0700
Subject: [PATCH] Prototype of bootstrap module

---
 lib/bootstrap.js            | 44 ++++++++++++++++++++++++++++++++++++++++++++
 lib/modem-commands/index.js |  1 +
 lib/modem.js                |  6 +++++-
 3 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 lib/bootstrap.js

diff --git a/lib/bootstrap.js b/lib/bootstrap.js
new file mode 100644
index 0000000..045e531
--- /dev/null
+++ b/lib/bootstrap.js
@@ -0,0 +1,44 @@
+/**
+ * Modul modem bootstrap
+ * @module bootstrap
+ * @since 2019-09-25
+ */
+
+const SerialPort = require('serialport');
+
+const config = require('komodo-sdk/config');
+const logger = require('komodo-sdk/logger');
+
+const parsers = require('./serialport-parsers');
+const modemCommands = require('./modem-commands');
+const modemInfo = require('./modem-info');
+
+const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (err) => {
+    if (err) {
+        logger.warn(`Error opening modem. ${err}. Terminating modem ${config.modem.device}.`);
+        process.exit(1);
+    }
+
+    await modemCommands.writeToPortAndWaitForOkOrError(`${modemCommands.CTRLZ}AT&FE0\r`);
+    await modemCommands.initATCommands();
+    await modemCommands.queryManufacturer();
+    await modemCommands.queryModel();
+    await modemCommands.queryIMEIAndIMSI();
+    await modemCommands.queryCOPSAndSignalQuality();
+
+    logger.info('Modem state', modemInfo);
+
+    setInterval(async () => {
+        await modemCommands.initATCommands();
+        await modemCommands.queryManufacturer();
+        await modemCommands.queryModel();
+        await modemCommands.queryIMEIAndIMSI();
+        await modemCommands.queryCOPSAndSignalQuality();
+        logger.info('Modem state', modemInfo);
+    }, config.interval_beetwen_signal_strength_ms || 30000);
+});
+
+global.MODEM_PORT = port;
+parsers.setPort(port);
+modemCommands.setPort(port);
+port.pipe(parsers.parserReadline);
diff --git a/lib/modem-commands/index.js b/lib/modem-commands/index.js
index d34dc58..6daa717 100644
--- a/lib/modem-commands/index.js
+++ b/lib/modem-commands/index.js
@@ -5,6 +5,7 @@ const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
 exports.MUTEX_SUBCOMMAND = MUTEX_SUBCOMMAND;
 
 const CTRLZ = '\u001a';
+exports.CTRLZ = CTRLZ;
 
 const pdu = require('node-pdu');
 const uuidv1 = require('uuid/v1');
diff --git a/lib/modem.js b/lib/modem.js
index 31a66bc..d79ecaf 100644
--- a/lib/modem.js
+++ b/lib/modem.js
@@ -1,4 +1,8 @@
-'use strict';
+/**
+ * Modem module.
+ * @module
+ * @deprecated going to move to module:bootstrap
+ */
 
 const DEFAULT_SLEEP_AFTER_SEND_SMS_MS = 2000;
 const INTERVAL_BEETWEN_SIGNAL_STRENGTH_MS = 30000;
-- 
1.9.0