Commit 3e36fb1729b9638b65582a5b2b995bac096353e8

Authored by Adhidarma Hadiwinoto
1 parent 4c896a33cc
Exists in master

Lock dan await serialPortWrite

Showing 3 changed files with 66 additions and 28 deletions Side-by-side Diff

... ... @@ -7,6 +7,9 @@ const config = require('./config.json');
7 7 const request = require('request');
8 8 const common = require('./common');
9 9 const qs = require('querystring');
  10 +const locks = require('locks');
  11 +
  12 +var mutex = locks.createMutex();
10 13  
11 14 //let portUse = process.argv[2];
12 15 //let modemName = process.argv[4];
... ... @@ -19,19 +22,43 @@ const serialPort = new SerialPort(config.core.usb_port, {
19 22 });
20 23 const parser = serialPort.pipe(new Readline());
21 24  
  25 +function serialPortWrite(data) {
  26 + return new Promise(function(resolve, reject) {
  27 + serialPort.write(data, function() {
  28 + resolve();
  29 + })
  30 + })
  31 +}
  32 +
  33 +function setLock() {
  34 + return new Promise(function(resolve) {
  35 + mutex.lock(function() {
  36 + resolve(true);
  37 + })
  38 + })
  39 +}
  40 +
  41 +function releaseLock() {
  42 + mutex.unlock();
  43 +}
  44 +
22 45 exports.startModem = async function(){
23 46 let count = 1;
24 47 let statusModem = "0K";
25 48 let errorMessageModem= "";
26 49  
27 50  
28   - serialPort.on("open", function () {
  51 + serialPort.on("open", async function () {
  52 + //const serialPortWrite = util.promisify(serialPort.write);
  53 +
29 54 common.log('Serial communication open');
30 55 //
31   - serialPort.write("AT+CNMI?");
32   - serialPort.write("\r");
33   - //serialPort.write("AT+CNMI=1,1,2,1,1");
34   - //serialPort.write("\r");
  56 + await serialPortWrite("ATE0\r");
  57 + await serialPortWrite("AT+CNMI?\r");
  58 + //await serialPortWrite("AT+CNMI=1,1,2,1,1");
  59 + //await serialPortWrite("\r");
  60 + await serialPortWrite('AT+CUSD=2\r');
  61 + await serialPortWrite('AT+CUSD=1,"*888*4#",15\r');
35 62 common.log('receive sms ON');
36 63 });
37 64  
... ... @@ -57,8 +84,8 @@ exports.startModem = async function(){
57 84  
58 85 async function readSmsAuto(serialPort, slot){
59 86  
60   - serialPort.write("AT+CMGR="+slot);// read only slot 1
61   - serialPort.write('\r');
  87 + await serialPortWrite("AT+CMGR="+slot);// read only slot 1
  88 + await serialPortWrite('\r');
62 89  
63 90 const parserD = serialPort.pipe(new Delimiter({ delimiter: '\r\nOK\r\n' }));
64 91 parserD.on('data',function(dataD){
... ... @@ -89,9 +116,9 @@ async function readSmsAuto(serialPort, slot){
89 116  
90 117 common.log("pesan slot "+slot+" sudah di baca");
91 118  
92   - setTimeout(function(){
93   - serialPort.write("AT+CMGD="+slot);
94   - serialPort.write("\r");
  119 + setTimeout(async function(){
  120 + await serialPortWrite("AT+CMGD="+slot);
  121 + await serialPortWrite("\r");
95 122 common.log("delete pesan slot "+slot+" done!");
96 123 }, 2000);
97 124 }
... ... @@ -121,27 +148,33 @@ function postIncomingMessage(nomor, pesan){
121 148 });
122 149 }
123 150  
124   -exports.sendingSMS = function (message, phone_no) {
125   -
126   - serialPort.write("AT+CMGF=1");
127   - serialPort.write('\r');
  151 +exports.sendingSMS = async function (message, phone_no) {
  152 + await setLock();
128 153  
  154 + await serialPortWrite("AT+CMGF=1\r");
  155 +
  156 + const parserD = serialPort.pipe(new Delimiter({ delimiter: '\r\nOK\r\n' }));
  157 + parserD.on('data',function(dataD) {
  158 + common.log('MESSAGE SENT');
  159 + serialPort.unpipe(parserD);
  160 + setTimeout(() => {
  161 + releaseLock();
  162 + }, 2000)
  163 + })
  164 +
129 165 common.log('number '+phone_no);
130   - serialPort.write("AT+CMGS=\"" + phone_no + "\"");
131   - serialPort.write('\r');
132   - serialPort.write(message);
  166 + await serialPortWrite(`AT+CMGS="${ phone_no }"\r${ message }`);
133 167 common.log(message);
134   - serialPort.write(Buffer([0x1A]));
135   - serialPort.write('^z');
  168 + await serialPortWrite(Buffer([0x1A]));
136 169 }
137 170  
138 171 exports.sendingUSSD = function (msg, count){
139 172  
140   - return new Promise(resolve => {
  173 + return new Promise(async resolve => {
141 174 let respUssd = null;
142 175 let new_respUssd;
143   - serialPort.write("AT+CUSD=1,\""+msg+"\"");
144   - serialPort.write('\r');
  176 + await serialPortWrite("AT+CUSD=1,\""+msg+"\"");
  177 + await serialPortWrite('\r');
145 178  
146 179 const parserUSSD = serialPort.pipe(new Delimiter({ delimiter: '\",0'}));
147 180 parserUSSD.on('data',function(dataUSSD){
... ... @@ -152,7 +185,7 @@ exports.sendingUSSD = function (msg, count){
152 185 });
153 186  
154 187 let countDown = 10;
155   - let waiting = setInterval(() => {
  188 + let waiting = setInterval(async () => {
156 189 countDown--;
157 190 console.log("wait respUssd "+countDown);
158 191 //if (respUssd || countDown < 2 ){
... ... @@ -160,8 +193,7 @@ exports.sendingUSSD = function (msg, count){
160 193 new_respUssd = respUssd.replace(/^[^ ]+\+CUSD:/, '\+CUSD:');
161 194 //to close command if resp CUSD: 1
162 195 if (new_respUssd.match(/^\+CUSD: 1,/)){
163   - serialPort.write("AT+CUSD=2");
164   - serialPort.write('\r');
  196 + await serialPortWrite("AT+CUSD=2\r");
165 197 }
166 198 resolve(new_respUssd);
167 199 clearInterval(waiting);
... ... @@ -174,9 +206,9 @@ exports.sendingUSSD = function (msg, count){
174 206 });
175 207 }
176 208  
177   -function deleteMessage(serialPort, slot){
178   - serialPort.write("AT+CMGD="+slot);
179   - serialPort.write("\r");
  209 +async function deleteMessage(serialPort, slot){
  210 + await serialPortWrite("AT+CMGD=" + slot);
  211 + await serialPortWrite("\r");
180 212 common.log("delete pesan slot "+slot+" done!");
181 213 }
182 214  
... ... @@ -1106,6 +1106,11 @@
1106 1106 "set-getter": "^0.1.0"
1107 1107 }
1108 1108 },
  1109 + "locks": {
  1110 + "version": "0.2.2",
  1111 + "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz",
  1112 + "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0="
  1113 + },
1109 1114 "log-ok": {
1110 1115 "version": "0.1.1",
1111 1116 "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz",
... ... @@ -13,6 +13,7 @@
13 13 "@serialport/parser-readline": "^2.0.2",
14 14 "date-and-time": "^0.7.0",
15 15 "express": "^4.16.4",
  16 + "locks": "^0.2.2",
16 17 "request": "^2.88.0",
17 18 "serialport": "^6.2.2"
18 19 }