From 93e860c436a6085c7e8fc98fca99c2eca616f35e Mon Sep 17 00:00:00 2001 From: Scott Bender Date: Tue, 26 Feb 2019 14:17:58 -0500 Subject: [PATCH] refactor: pcdin implmentation --- lib/fromPgn.js | 55 ++++++++++++++++++++++++++++++++------------------ test/pcdin.js | 2 +- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/lib/fromPgn.js b/lib/fromPgn.js index 16c482b..fd53890 100644 --- a/lib/fromPgn.js +++ b/lib/fromPgn.js @@ -261,6 +261,18 @@ class Parser extends EventEmitter { } } + isN2KOver0183(sentence) { + return sentence.startsWith('$PCDIN,') + } + + parseN2KOver0183(sentence) { + if ( sentence.startsWith('$PCDIN,') ) { + this.parsePCDIN(sentence) + return true + } + return false + } + //Yacht Devices NMEA2000 Wifi gateway parseYDWG02(pgn_data) { var split = pgn_data.split(' ') @@ -300,6 +312,28 @@ class Parser extends EventEmitter { } } + parsePCDIN(pgn_data) { + var split = pgn_data.split(',') + + var pgn = {} + pgn.pgn = parseInt(split[1], 16) + pgn.timestamp = new Date(parseInt(split[2], 16)).toISOString() + pgn.src = parseInt(split[3], 16) + pgn.dst = 255 + pgn.prio = 0 + + var data = split[4] + if ( data.indexOf('*') != -1 ) { + data = data.split('*')[0] + } + + const bs = new BitStream(Buffer.from(data, 'hex')) + + if ( this._parse(pgn, bs, data.length/2) ) { + debug('parsed pgn %j', pgn) + } + } + parseString (pgn_data) { if (typeof pgn_data === 'string' && pgn_data.trim().length > 0) { var split = pgn_data.split(',') @@ -308,26 +342,7 @@ class Parser extends EventEmitter { var buffer var len - if ( split[0] === '$PCDIN' ) { - // $PCDIN,01F119,00000000,0F,2AAF00D1067414FF*59 - - pgn.pgn = parseInt(split[1], 16) - pgn.timestamp = new Date(parseInt(split[2], 16)).toISOString() - pgn.src = parseInt(split[3], 16) - pgn.dst = 255 - pgn.prio = 0 - - var data = split[4] - if ( data.indexOf('*') != -1 ) { - data = data.split('*')[0] - } - let array = new Int16Array(data.length/2) - for ( var i = 0, j = 0; i < data.length; i += 2, j++ ) { - array[j] = parseInt(data.slice(i, i+2), 16) - } - buffer = new Buffer(array) - len = data.length/2 - } else if ( split[0] === '!PDGY' ) { + if ( split[0] === '!PDGY' ) { //iKonvert pgn.pgn = Number(split[1]) pgn.prio = Number(split[2]) diff --git a/test/pcdin.js b/test/pcdin.js index ab20e3d..c3b585a 100644 --- a/test/pcdin.js +++ b/test/pcdin.js @@ -47,6 +47,6 @@ describe('from pcdin data converts', function () { } }) - fromPgn.parseString(pcdin) + fromPgn.parseN2KOver0183(pcdin) }) })