Commit 4cb2459b12fc9113cf1ec3072a4c427c034f4baf

Authored by Adhidarma Hadiwinoto
1 parent e77dfd4546
Exists in master

queryIMEI unpipe parser on data

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

lib/modem-commands.js
1 const MUTEX_COMMAND = 'COMMAND'; 1 const MUTEX_COMMAND = 'COMMAND';
2 // const MUTEX_SUBCOMMAND = 'SUBCOMMAND'; 2 // const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
3 3
4 const ParserRegex = require('@serialport/parser-regex'); 4 const ParserRegex = require('@serialport/parser-regex');
5 5
6 const logger = require('komodo-sdk/logger'); 6 const logger = require('komodo-sdk/logger');
7 const mutex = require('./mutex-common'); 7 const mutex = require('./mutex-common');
8 const parsers = require('./serialport-parsers'); 8 const parsers = require('./serialport-parsers');
9 9
10 let port; 10 let port;
11 11
12 function writeToPort(data) { 12 function writeToPort(data) {
13 return new Promise((resolve) => { 13 return new Promise((resolve) => {
14 port.write(data, (err, bytesWritten) => { 14 port.write(data, (err, bytesWritten) => {
15 if (err) logger.warn(`ERROR: ${err.toString()}`); 15 if (err) logger.warn(`ERROR: ${err.toString()}`);
16 16
17 logger.verbose('OUTGOING', { bytesWritten, data: data.toString() }); 17 logger.verbose('OUTGOING', { bytesWritten, data: data.toString() });
18 resolve(bytesWritten); 18 resolve(bytesWritten);
19 }); 19 });
20 }); 20 });
21 } 21 }
22 22
23 exports.sleep = function sleep(ms) { 23 exports.sleep = function sleep(ms) {
24 return new Promise((resolve) => { 24 return new Promise((resolve) => {
25 setTimeout(() => { 25 setTimeout(() => {
26 resolve(); 26 resolve();
27 }, ms || 0); 27 }, ms || 0);
28 }); 28 });
29 }; 29 };
30 30
31 31
32 exports.setPort = function setPort(val) { 32 exports.setPort = function setPort(val) {
33 port = val; 33 port = val;
34 }; 34 };
35 35
36 exports.querySignalQuality = function querySignalQuality() { 36 exports.querySignalQuality = function querySignalQuality() {
37 return new Promise(async (resolve) => { 37 return new Promise(async (resolve) => {
38 if (!mutex.tryLock(MUTEX_COMMAND, 'querySignalQuality')) { 38 if (!mutex.tryLock(MUTEX_COMMAND, 'querySignalQuality')) {
39 resolve(false); 39 resolve(false);
40 return; 40 return;
41 } 41 }
42 42
43 await writeToPort('AT+CSQ\r'); 43 await writeToPort('AT+CSQ\r');
44 mutex.unlock(MUTEX_COMMAND, 'querySignalQuality'); 44 mutex.unlock(MUTEX_COMMAND, 'querySignalQuality');
45 resolve(true); 45 resolve(true);
46 }); 46 });
47 }; 47 };
48 48
49 exports.queryCOPS = function querySignalQuality() { 49 exports.queryCOPS = function querySignalQuality() {
50 return new Promise(async (resolve) => { 50 return new Promise(async (resolve) => {
51 await mutex.lock(MUTEX_COMMAND, 'queryCOPS'); 51 await mutex.lock(MUTEX_COMMAND, 'queryCOPS');
52 await writeToPort('AT+COPS?\r'); 52 await writeToPort('AT+COPS?\r');
53 mutex.unlock(MUTEX_COMMAND, 'queryCOPS'); 53 mutex.unlock(MUTEX_COMMAND, 'queryCOPS');
54 resolve(true); 54 resolve(true);
55 }); 55 });
56 }; 56 };
57 57
58 exports.queryIMEI = function queryIMEI() { 58 exports.queryIMEI = function queryIMEI() {
59 return new Promise(async (resolve) => { 59 return new Promise(async (resolve) => {
60 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); 60 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX });
61 parser.on('data', (data) => { 61 parser.on('data', (data) => {
62 logger.verbose('INCOMING', { parser: 'parserIMEI', data: data.toString() }); 62 logger.verbose('INCOMING', { parser: 'parserIMEI', data: data.toString() });
63 port.unpipe(parser);
63 mutex.unlock(MUTEX_COMMAND, 'queryIMEI'); 64 mutex.unlock(MUTEX_COMMAND, 'queryIMEI');
64 resolve(); 65 resolve();
65 }); 66 });
66 67
67 await mutex.lock(MUTEX_COMMAND, 'queryIMEI'); 68 await mutex.lock(MUTEX_COMMAND, 'queryIMEI');
68 69
69 port.pipe(parser); 70 port.pipe(parser);
70 await writeToPort('AT+CGSN\r'); 71 await writeToPort('AT+CGSN\r');
71 port.unpipe(parser);
72 }); 72 });
73 }; 73 };