Commit 5b0551633c03273f6ab69b39e9089aa2fa82fd7f

Authored by Adhidarma Hadiwinoto
1 parent 9f1ae94c23
Exists in master

Regex on writeToPortAndWaitForOkOrError

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 ParserReadline = require('@serialport/parser-readline'); 4 const ParserReadline = require('@serialport/parser-readline');
5 const ParserRegex = require('@serialport/parser-regex'); 5 const ParserRegex = require('@serialport/parser-regex');
6 6
7 const logger = require('komodo-sdk/logger'); 7 const logger = require('komodo-sdk/logger');
8 const mutex = require('./mutex-common'); 8 const mutex = require('./mutex-common');
9 const parsers = require('./serialport-parsers'); 9 const parsers = require('./serialport-parsers');
10 const modemInfo = require('./modem-info'); 10 const modemInfo = require('./modem-info');
11 11
12 let port; 12 let port;
13 13
14 function writeToPort(data) { 14 function writeToPort(data) {
15 return new Promise((resolve) => { 15 return new Promise((resolve) => {
16 port.write(data, (err, bytesWritten) => { 16 port.write(data, (err, bytesWritten) => {
17 if (err) logger.warn(`ERROR: ${err.toString()}`); 17 if (err) logger.warn(`ERROR: ${err.toString()}`);
18 18
19 logger.verbose('OUTGOING', { bytesWritten, data: data.toString() }); 19 logger.verbose('OUTGOING', { bytesWritten, data: data.toString() });
20 resolve(bytesWritten); 20 resolve(bytesWritten);
21 }); 21 });
22 }); 22 });
23 } 23 }
24 24
25 exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(cmd, lockName) { 25 exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(cmd, lockName) {
26 return new Promise(async (resolve) => { 26 return new Promise(async (resolve) => {
27 const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER }); 27 const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER });
28 parser.on('data', (data) => { 28 parser.on('data', (data) => {
29 port.unpipe(parser); 29 port.unpipe(parser);
30 mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim()); 30 mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim());
31 resolve(data); 31 resolve(data);
32 }); 32 });
33 33
34 await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim()); 34 await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim());
35 port.pipe(parser); 35 port.pipe(parser);
36 await writeToPort(cmd); 36 await writeToPort(cmd);
37 }); 37 });
38 }; 38 };
39 39
40 exports.writeToPortAndWaitForOkOrError = function writeToPortAndWaitForOkOrError(cmd, lockName) { 40 exports.writeToPortAndWaitForOkOrError = function writeToPortAndWaitForOkOrError(cmd, lockName) {
41 const parserName = 'customParserWaitForOkOrError'; 41 const parserName = 'customParserWaitForOkOrError';
42 return new Promise(async (resolve) => { 42 return new Promise(async (resolve) => {
43 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); 43 const parser = new ParserRegex({ regex: /(?:OK|ERROR)\r\n/ });
44 parser.on('data', (data) => { 44 parser.on('data', (data) => {
45 logger.verbose('INCOMING', { parser: parserName, data: data.toString() }); 45 logger.verbose('INCOMING', { parser: parserName, data: data.toString() });
46 logger.verbose(`Unpiping ${parserName}`); 46 logger.verbose(`Unpiping ${parserName}`);
47 port.unpipe(parser); 47 port.unpipe(parser);
48 mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim()); 48 mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim());
49 resolve(data); 49 resolve(data);
50 }); 50 });
51 51
52 await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim()); 52 await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim());
53 logger.verbose(`Piping ${parserName}`); 53 logger.verbose(`Piping ${parserName}`);
54 port.pipe(parser); 54 port.pipe(parser);
55 await writeToPort(cmd); 55 await writeToPort(cmd);
56 }); 56 });
57 }; 57 };
58 58
59 exports.sleep = function sleep(ms) { 59 exports.sleep = function sleep(ms) {
60 return new Promise((resolve) => { 60 return new Promise((resolve) => {
61 setTimeout(() => { 61 setTimeout(() => {
62 resolve(); 62 resolve();
63 }, ms || 0); 63 }, ms || 0);
64 }); 64 });
65 }; 65 };
66 66
67 67
68 exports.setPort = function setPort(val) { 68 exports.setPort = function setPort(val) {
69 port = val; 69 port = val;
70 }; 70 };
71 71
72 exports.querySignalQuality = function querySignalQuality() { 72 exports.querySignalQuality = function querySignalQuality() {
73 return new Promise(async (resolve) => { 73 return new Promise(async (resolve) => {
74 if (!mutex.tryLock(MUTEX_COMMAND, 'querySignalQuality')) { 74 if (!mutex.tryLock(MUTEX_COMMAND, 'querySignalQuality')) {
75 resolve(false); 75 resolve(false);
76 return; 76 return;
77 } 77 }
78 78
79 await writeToPort('AT+CSQ\r'); 79 await writeToPort('AT+CSQ\r');
80 mutex.unlock(MUTEX_COMMAND, 'querySignalQuality'); 80 mutex.unlock(MUTEX_COMMAND, 'querySignalQuality');
81 resolve(true); 81 resolve(true);
82 }); 82 });
83 }; 83 };
84 84
85 exports.queryCOPS = function querySignalQuality() { 85 exports.queryCOPS = function querySignalQuality() {
86 return new Promise(async (resolve) => { 86 return new Promise(async (resolve) => {
87 await mutex.lock(MUTEX_COMMAND, 'queryCOPS'); 87 await mutex.lock(MUTEX_COMMAND, 'queryCOPS');
88 await writeToPort('AT+COPS?\r'); 88 await writeToPort('AT+COPS?\r');
89 mutex.unlock(MUTEX_COMMAND, 'queryCOPS'); 89 mutex.unlock(MUTEX_COMMAND, 'queryCOPS');
90 resolve(true); 90 resolve(true);
91 }); 91 });
92 }; 92 };
93 93
94 exports.queryIMEI = function queryIMEI() { 94 exports.queryIMEI = function queryIMEI() {
95 return new Promise(async (resolve) => { 95 return new Promise(async (resolve) => {
96 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); 96 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX });
97 parser.on('data', (data) => { 97 parser.on('data', (data) => {
98 logger.verbose('INCOMING', { parser: 'parserIMEI', data: data.toString() }); 98 logger.verbose('INCOMING', { parser: 'parserIMEI', data: data.toString() });
99 port.unpipe(parser); 99 port.unpipe(parser);
100 mutex.unlock(MUTEX_COMMAND, 'queryIMEI'); 100 mutex.unlock(MUTEX_COMMAND, 'queryIMEI');
101 modemInfo.imei = data.toString().trim(); 101 modemInfo.imei = data.toString().trim();
102 resolve(modemInfo.imei); 102 resolve(modemInfo.imei);
103 }); 103 });
104 104
105 await mutex.lock(MUTEX_COMMAND, 'queryIMEI'); 105 await mutex.lock(MUTEX_COMMAND, 'queryIMEI');
106 106
107 port.pipe(parser); 107 port.pipe(parser);
108 await writeToPort('AT+CGSN\r'); 108 await writeToPort('AT+CGSN\r');
109 }); 109 });
110 }; 110 };
111 111
112 exports.queryIMSI = function queryIMSI() { 112 exports.queryIMSI = function queryIMSI() {
113 return new Promise(async (resolve) => { 113 return new Promise(async (resolve) => {
114 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX }); 114 const parser = new ParserRegex({ regex: parsers.PARSER_WAIT_FOR_OK_OR_ERROR_REGEX });
115 parser.on('data', (data) => { 115 parser.on('data', (data) => {
116 logger.verbose('INCOMING', { parser: 'parserIMSI', data: data.toString() }); 116 logger.verbose('INCOMING', { parser: 'parserIMSI', data: data.toString() });
117 port.unpipe(parser); 117 port.unpipe(parser);
118 mutex.unlock(MUTEX_COMMAND, 'queryIMSI'); 118 mutex.unlock(MUTEX_COMMAND, 'queryIMSI');
119 modemInfo.imsi = data.toString().trim(); 119 modemInfo.imsi = data.toString().trim();
120 resolve(modemInfo.imsi); 120 resolve(modemInfo.imsi);
121 }); 121 });
122 122
123 await mutex.lock(MUTEX_COMMAND, 'queryIMSI'); 123 await mutex.lock(MUTEX_COMMAND, 'queryIMSI');
124 124
125 port.pipe(parser); 125 port.pipe(parser);
126 await writeToPort('AT+CIMI\r'); 126 await writeToPort('AT+CIMI\r');
127 }); 127 });
128 }; 128 };
129 129