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