Commit 47910cce60174f617789aad87a054a56a7131227

Authored by Adhidarma Hadiwinoto
1 parent 4d1b592447
Exists in master

queryCOPSAndSignalQuality

Showing 2 changed files with 27 additions and 6 deletions Side-by-side Diff

lib/modem-commands.js
1 1 const MUTEX_COMMAND = 'COMMAND';
2   -// const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
  2 +const MUTEX_SUBCOMMAND = 'SUBCOMMAND';
3 3  
4 4 const ParserReadline = require('@serialport/parser-readline');
5 5 const ParserRegex = require('@serialport/parser-regex');
... ... @@ -23,12 +23,17 @@ function writeToPort(data) {
23 23 }
24 24  
25 25 exports.writeToPortAndWaitForReadline = function writeToPortAndWaitForReadline(cmd, lockName) {
  26 + let resolved = false;
  27 +
26 28 return new Promise(async (resolve) => {
27 29 const parser = new ParserReadline({ delimiter: parsers.PARSER_READLINE_DELIMITER });
28 30 parser.on('data', (data) => {
29 31 port.unpipe(parser);
30 32 mutex.unlock(lockName || MUTEX_COMMAND, cmd.trim());
31   - resolve(data);
  33 + if (!resolved) {
  34 + resolved = true;
  35 + resolve(data);
  36 + }
32 37 });
33 38  
34 39 await mutex.lock(lockName || MUTEX_COMMAND, cmd.trim());
... ... @@ -78,11 +83,26 @@ exports.querySignalQuality = function querySignalQuality() {
78 83 });
79 84 };
80 85  
81   -exports.queryCOPS = function queryCOPS() {
  86 +exports.queryCOPS = function queryCOPS(lockName) {
82 87 return new Promise(async (resolve) => {
83   - await mutex.lock(MUTEX_COMMAND, 'queryCOPS');
  88 + await mutex.lock(lockName || MUTEX_COMMAND, 'queryCOPS');
84 89 await writeToPort('AT+COPS?\r');
85   - mutex.unlock(MUTEX_COMMAND, 'queryCOPS');
  90 + mutex.unlock(lockName || MUTEX_COMMAND, 'queryCOPS');
  91 + resolve(true);
  92 + });
  93 +};
  94 +
  95 +exports.queryCOPSAndSignalQuality = function queryCOPSAndSignalQuality() {
  96 + return new Promise(async (resolve) => {
  97 + if (!mutex.tryLock(MUTEX_COMMAND, 'queryCOPSAndSignalQuality')) {
  98 + resolve(false);
  99 + return;
  100 + }
  101 +
  102 + await this.writeToPortAndWaitForReadline('AT+COPS?\r', MUTEX_SUBCOMMAND);
  103 + await this.writeToPortAndWaitForReadline('AT+CSQ\r', MUTEX_SUBCOMMAND);
  104 +
  105 + mutex.unlock(MUTEX_COMMAND, 'queryCopsAndSignalQuality');
86 106 resolve(true);
87 107 });
88 108 };
... ... @@ -38,7 +38,8 @@ const port = new SerialPort(config.modem.device, { baudRate: 115200 }, async (er
38 38 logger.info(`**** Signal Quality: ${signalQuality}`);
39 39  
40 40 setInterval(() => {
41   - modemCommands.querySignalQuality();
  41 + // modemCommands.querySignalQuality();
  42 + modemCommands.queryCOPSAndSignalQuality();
42 43 }, (config && config.interval_beetwen_signal_strength_ms) || 30000);
43 44 });
44 45