From beba81d88625590172223aff46fb008136030ad4 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Wed, 25 Sep 2019 15:00:59 +0700
Subject: [PATCH] SMS error

---
 lib/modem-commands/index.js | 14 ++++++++++----
 lib/serialport-parsers.js   |  2 ++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/lib/modem-commands/index.js b/lib/modem-commands/index.js
index 50b24ae..d34dc58 100644
--- a/lib/modem-commands/index.js
+++ b/lib/modem-commands/index.js
@@ -247,10 +247,16 @@ exports.sendSMS = function sendSMS(destination, msg) {
     return new Promise(async (resolve) => {
         async function responseHandler(data) {
             logger.verbose('SMS sent callback called', { data });
+
+            if (data.indexOf('ERROR') >= 0 || data.indexOf('+CMS ERROR') >= 0 || data.indexOf('+CMGS') >= 0) {
+                logger.verbose('SMS sent');
+                parsers.setSmsSentCallback(null);
+                mutex.unlock(MUTEX_COMMAND, 'sendSMS');
+                resolve(data.indexOf('ERROR') >= 0 ? null : data.toString().trim());
+            }
         }
 
         await mutex.lock(MUTEX_COMMAND, 'sendSMS');
-        parsers.setSmsSentCallback(responseHandler);
 
         if (!destination || !destination.trim()) {
             resolve(false);
@@ -273,10 +279,10 @@ exports.sendSMS = function sendSMS(destination, msg) {
         submit.getType().setSrr(0);
 
         await sendCMGSPdu(Math.floor(submit.toString().length / 2) - 1);
-        await writeToPortAndWaitForOkOrError(`${submit.toString()}${CTRLZ}`, MUTEX_SUBCOMMAND);
+        // await writeToPortAndWaitForOkOrError(`${submit.toString()}${CTRLZ}`, MUTEX_SUBCOMMAND);
 
-        mutex.unlock(MUTEX_COMMAND, 'sendSMS');
-        resolve(true);
+        parsers.setSmsSentCallback(responseHandler);
+        await writeToPort(`${submit.toString()}${CTRLZ}`, MUTEX_SUBCOMMAND);
     });
 };
 
diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js
index 13861aa..719ccae 100644
--- a/lib/serialport-parsers.js
+++ b/lib/serialport-parsers.js
@@ -150,6 +150,8 @@ parserReadline.on('data', (data) => {
         const pduType = pduParsed.getType();
         logger.verbose('Got a PDU SMS-DELIVER', { pduType });
         onPduDeliver(data, pduParsed);
+    } else if (data.toString().trim() === 'ERROR') {
+        if (typeof smsSentCallback === 'function') smsSentCallback(data.toString());
     } else if (isResultCodeIs(data, 'CSQ')) {
         logger.verbose('Got a signal quality report', { data: data.toString() });
         onCSQ(data);
-- 
1.9.0