From 1d6334a9bf44e972f534cb11fd6552c5329477be Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Mon, 9 Sep 2019 16:28:12 +0700
Subject: [PATCH] Coba sms error

---
 lib/modem-commands/index.js |  7 ++++++-
 lib/serialport-parsers.js   | 11 ++++++++++-
 modem-tester.js             |  2 ++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/lib/modem-commands/index.js b/lib/modem-commands/index.js
index 84d8046..50b24ae 100644
--- a/lib/modem-commands/index.js
+++ b/lib/modem-commands/index.js
@@ -245,7 +245,12 @@ function sendCMGSPdu(pduLength) {
 
 exports.sendSMS = function sendSMS(destination, msg) {
     return new Promise(async (resolve) => {
+        async function responseHandler(data) {
+            logger.verbose('SMS sent callback called', { data });
+        }
+
         await mutex.lock(MUTEX_COMMAND, 'sendSMS');
+        parsers.setSmsSentCallback(responseHandler);
 
         if (!destination || !destination.trim()) {
             resolve(false);
@@ -268,7 +273,7 @@ exports.sendSMS = function sendSMS(destination, msg) {
         submit.getType().setSrr(0);
 
         await sendCMGSPdu(Math.floor(submit.toString().length / 2) - 1);
-        await writeToPort(`${submit.toString()}${CTRLZ}`);
+        await writeToPortAndWaitForOkOrError(`${submit.toString()}${CTRLZ}`, MUTEX_SUBCOMMAND);
 
         mutex.unlock(MUTEX_COMMAND, 'sendSMS');
         resolve(true);
diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js
index 0a777f9..157d721 100644
--- a/lib/serialport-parsers.js
+++ b/lib/serialport-parsers.js
@@ -29,6 +29,12 @@ function setUssdCallback(cb) {
 }
 exports.setUssdCallback = setUssdCallback;
 
+let smsSentCallback = null;
+function setSmsSentCallback(cb) {
+    smsSentCallback = cb;
+}
+exports.setSmsSentCallback = setSmsSentCallback;
+
 function isAlphaNumeric(str) {
     const len = str.length;
     // eslint-disable-next-line no-plusplus
@@ -156,12 +162,15 @@ parserReadline.on('data', (data) => {
         logger.verbose('Got a new message notification report', { data: data.toString() });
     } else if (isResultCodeIs(data, 'CUSD')) {
         logger.verbose('Got a USSD command response', { data: data.toString() });
-        if (ussdCallback && typeof ussdCallback === 'function') {
+        if (typeof ussdCallback === 'function') {
             logger.verbose('Calling USSD callback');
             ussdCallback(data.toString());
         } else {
             logger.verbose('Skip unwanted USSD response');
         }
+    } else if (isResultCodeIs(data, 'CMGS')) {
+        logger.verbose('Got CMGS report', { data: data.toString() });
+        if (typeof smsSentCallback === 'function') smsSentCallback(data.toString());
     }
 });
 
diff --git a/modem-tester.js b/modem-tester.js
index 7eaadef..bf9bb00 100644
--- a/modem-tester.js
+++ b/modem-tester.js
@@ -36,6 +36,8 @@ const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (er
     // await modemCommands.sendSMS('628128364883', `coba pakai pdu ${new Date()}`);
     // await modemCommands.sendSMS('+6282210008543', `coba pakai pdu ${new Date()}`);
     // await modemCommands.sendSMS('6281809903333', `coba pakai pdu ${new Date()}`);
+    await modemCommands.sendSMS('999', `coba pakai pdu ${new Date()}`);
+
     // const ussdResponse = await modemCommands.executeUSSD('*888#', 2);
     // logger.info('USSD RESPONSE', { ussdResponse });
 
-- 
1.9.0