Commit 5b0551633c03273f6ab69b39e9089aa2fa82fd7f
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 |