diff --git a/lib/serialport-parsers.js b/lib/serialport-parsers.js index 4486df0..d8505c2 100644 --- a/lib/serialport-parsers.js +++ b/lib/serialport-parsers.js @@ -1,7 +1,7 @@ const PARSER_READLINE_DELIMITER = '\r\n'; const PARSER_WAIT_FOR_OK_OR_ERROR_REGEX = /\r\n(?:OK|ERROR)\r\n/; - +const pdu = require('node-pdu'); const ParserReadline = require('@serialport/parser-readline'); const ParserRegex = require('@serialport/parser-regex'); @@ -20,6 +20,17 @@ exports.getPort = function getPort() { return port; }; +function parsePdu(data) { + if (!data) return null; + + try { + const result = pdu.parse(data.toString().trim() || ''); + return result; + } catch (e) { + return null; + } +} + function onCSQ(data) { const val = data.toString().trim().match(/\+CSQ:\s*(.*)/); if (!val || !val[1]) return null; @@ -71,7 +82,11 @@ parserReadline.on('data', (data) => { logger.verbose('INCOMING', { parser: 'parserReadLine', data: `${data.toString()}${PARSER_READLINE_DELIMITER}` }); if (!data) return; - if (isResultCodeIs(data, 'CSQ')) { + + const pduParsed = parsePdu(data); + if (pduParsed) { + logger.verbose('Got a PDU data', { pduParsed }); + } else if (isResultCodeIs(data, 'CSQ')) { logger.verbose('Got a signal quality report', { data: data.toString() }); onCSQ(data); } else if (isResultCodeIs(data, 'COPS:')) {