@canboat/canboatjs 1.21.1 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -205,9 +205,9 @@ Output: `!PDGY,127245,255,/Pj/f/9///8=`
205
205
  ## Generate YDGW-02 format from canboat json
206
206
 
207
207
  ```js
208
- const pgnToYdwgRawFormat = require("./index").pgnToYdwgRawFormat;
208
+ const pgnToYdgwRawFormat = require("./index").pgnToYdgwRawFormat;
209
209
 
210
- const array = pgnToYdwgRawFormat({
210
+ const array = pgnToYdgwRawFormat({
211
211
  src: 127,
212
212
  prio: 3,
213
213
  dst: 255,
package/lib/candevice.js CHANGED
@@ -177,7 +177,7 @@ function handleGroupFunction(device, n2kMsg) {
177
177
  const acknowledgement = {
178
178
  pgn: 126208,
179
179
  dst: n2kMsg.src,
180
- "Function Code": 1,
180
+ "Function Code": 2,
181
181
  "PGN": n2kMsg.fields.PGN,
182
182
  "PGN error code": 4,
183
183
  "Transmission interval/Priority error code": 0,
@@ -195,7 +195,7 @@ function handleGroupFunction(device, n2kMsg) {
195
195
  const acknowledgement = {
196
196
  pgn: 126208,
197
197
  dst: n2kMsg.src,
198
- "Function Code": 1,
198
+ "Function Code": 2,
199
199
  "PGN": n2kMsg.fields.PGN,
200
200
  "PGN error code": 4,
201
201
  "Transmission interval/Priority error code": 0,
package/lib/codes.test.js CHANGED
@@ -4,6 +4,7 @@ describe('getManufacturerCode', () => {
4
4
  test('Return mfg number from name string', () => {
5
5
  expect(getManufacturerCode('Furuno')).toBe(1855)
6
6
  expect(getManufacturerCode('Yacht Devices')).toBe(717)
7
+ expect(getManufacturerCode('TJC Micro')).toBe(963)
7
8
  })
8
9
  })
9
10
 
@@ -11,5 +12,6 @@ describe('getManufacturerName', () => {
11
12
  test('Return name string from mfg number', () => {
12
13
  expect(getManufacturerName(1855)).toBe('Furuno')
13
14
  expect(getManufacturerName(717)).toBe('Yacht Devices')
15
+ expect(getManufacturerName(963)).toBe('TJC Micro')
14
16
  })
15
17
  })
@@ -136,6 +136,7 @@
136
136
  "Teleflex Marine (SeaStar Solutions)": 1850,
137
137
  "Thrane and Thrane": 351,
138
138
  "Tides Marine": 797,
139
+ "TJC Micro": 963,
139
140
  "Tohatsu Co, JP": 431,
140
141
  "Transas USA": 518,
141
142
  "Trimble": 1856,
package/lib/fromPgn.js CHANGED
@@ -111,14 +111,13 @@ class Parser extends EventEmitter {
111
111
  }
112
112
 
113
113
  trace(`${pgn.pgn} ${len} ${pgnData.Length} ${pgnData.RepeatingFields} ${couldBeMulti}`)
114
- if ( len > 0x8 || (this.format == FORMAT_FAST && !this.mixedFormat) ) {
115
- //if ( (len > 0x8 || pgnData.Type === 'Fast') && coalesced ) {
114
+ if ( coalesced || len > 0x8 || (this.format == FORMAT_FAST && !this.mixedFormat) ) {
116
115
  this.format = FORMAT_FAST
117
116
  if ( sourceString ) {
118
117
  pgn.input = [ sourceString ]
119
118
  }
120
- } else if ( pgnData.Length > 0x8 || (len == 0x8 && (pgnData.RepeatingFields || couldBeMulti))) {
121
- //} else if ( pgnData.Type === 'Fast' ) {
119
+ //} else if ( pgnData.Length > 0x8 || (len == 0x8 && (pgnData.RepeatingFields || couldBeMulti))) {
120
+ } else if ( pgnData.Type === 'Fast' ) {
122
121
  //partial packet
123
122
  this.format = FORMAT_PLAIN
124
123
 
@@ -156,9 +155,6 @@ class Parser extends EventEmitter {
156
155
  bs.view.buffer.copy(packet.buffer, 0, FASTPACKET_BUCKET_0_OFFSET, 8)
157
156
  trace(`${pgn.pgn} targetStart: 0 sourceStart: ${FASTPACKET_BUCKET_0_OFFSET}`)
158
157
  } else {
159
- if ( sourceString ) {
160
- packet.src.push(sourceString)
161
- }
162
158
  if (packet.lastPacket + 1 != packetIndex) {
163
159
  debug(`PGN ${pgn.pgn} malformed packet for ${pgn.src} received; expected ${packet.lastPacket+1} but got ${packetIndex}`)
164
160
  cb && cb(`Could not parse ${JSON.stringify(pgn)}`)
@@ -520,17 +516,26 @@ function readField(options, runPostProcessor, pgn, field, bs) {
520
516
  if ( field.Resolution && typeof value === 'number' ) {
521
517
  var resolution = field.Resolution
522
518
 
519
+ if ( _.isString(resolution) ) {
520
+ resolution = Number.parseFloat(resolution)
521
+ }
522
+
523
523
  value = (value * resolution)
524
+
525
+ let precision = 0;
526
+ for (let r = resolution; (r > 0.0) && (r < 1.0); r = r * 10.0)
527
+ {
528
+ precision++;
529
+ }
530
+
531
+ value = Number.parseFloat(value.toFixed(precision))
524
532
 
533
+ /*
525
534
  if ( resolution === 3.125e-8 ) {
526
535
  //yes. hack.
527
536
  resolution = "0.0000000001"
528
537
  }
529
-
530
- if ( _.isString(resolution) &&
531
- resolution.indexOf('.') != -1 ) {
532
- value = Number.parseFloat(value.toFixed(resolution.length-2))
533
- }
538
+ */
534
539
  }
535
540
 
536
541
  if (field.EnumValues &&
@@ -708,7 +713,9 @@ fieldTypeReaders['ASCII string starting with length byte'] = (pgn, field, bs) =>
708
713
  fieldTypeReaders["String with start/stop byte"] = (pgn, field, bs) => {
709
714
  var len
710
715
  var first = bs.readUint8()
711
- if ( first == 0x02 ) {
716
+ if ( first == 0xff ) { // no name, stop reading
717
+ return ''
718
+ } else if ( first == 0x02 ) {
712
719
  var buf = Buffer.alloc(255)
713
720
  var c
714
721
  var idx = 0
package/lib/simpleCan.js CHANGED
@@ -27,9 +27,9 @@ SimpleCan.prototype.start = function () {
27
27
 
28
28
  pgn.timestamp = new Date().toISOString()
29
29
  if ( this.plainText ) {
30
- messageCb(binToActisense(pgn, msg.data, msg.data.length))
30
+ this.messageCb(binToActisense(pgn, msg.data, msg.data.length))
31
31
  } else {
32
- messageCb({ pgn, length: msg.data.length, data: msg.data })
32
+ this.messageCb({ pgn, length: msg.data.length, data: msg.data })
33
33
  }
34
34
  })
35
35
  }
package/lib/stringMsg.js CHANGED
@@ -49,7 +49,7 @@ exports.parseActisense = (input) => {
49
49
  buildCanId(prio, pgn, dst, src),
50
50
  'Actisense',
51
51
  Buffer.from(data.join(''), 'hex'),
52
- { len: Number(len), timestamp, coalesced: true },
52
+ { len: Number(len), timestamp },
53
53
  )
54
54
  }
55
55
  exports.encodeActisense = ({
@@ -153,12 +153,21 @@ exports.encodeMXPGN = ({ prefix = '$MXPGN', pgn, prio, src, data }) => {
153
153
  exports.isPDGY = startsWith('!PDGY,')
154
154
  exports.parsePDGY = (input) => {
155
155
  const parts = input.split(',')
156
- if ( parts.length != 7 ) return buildErr('iKonvert', 'Invalid parts.', input)
157
- const [ prefix, pgn, prio, src, dst, timer, data ] = parts
158
- return buildMsg(
159
- buildCanId(prio, pgn, dst, src), 'PDGY', Buffer.from(data, 'base64'),
160
- { timer: Number(timer), prefix },
161
- )
156
+ if ( parts.length === 7 ) {
157
+ const [ prefix, pgn, prio, src, dst, timer, data ] = parts
158
+ return buildMsg(
159
+ buildCanId(prio, pgn, dst, src), 'PDGY', Buffer.from(data, 'base64'),
160
+ { timer: Number(timer), prefix, coalesced: true },
161
+ )
162
+ } else if ( parts.length === 4 ) {
163
+ const [ prefix, pgn, dst, data ] = parts
164
+ return buildMsg(
165
+ buildCanId(0, pgn, dst, 0), 'PDGY', Buffer.from(data, 'base64'),
166
+ { coalesced: true }
167
+ )
168
+ } else {
169
+ return buildErr('iKonvert', 'Invalid parts.', input)
170
+ }
162
171
  }
163
172
  exports.encodePDGY = ({ prefix = '!PDGY', pgn, data, dst = 255}) => (
164
173
  [ prefix, pgn, dst, data.toString('base64')].join(',')
@@ -65,7 +65,6 @@ describe('parseActisense', () => {
65
65
  test('basic msg', () => {
66
66
  const msg = '2016-04-09T16:41:09.078Z,3,127257,17,255,8,00,ff,7f,52,00,21,fe,ff'
67
67
  expect(parseActisense(msg)).toEqual({
68
- coalesced: true,
69
68
  data: Buffer.from('00ff7f520021feff', 'hex'),
70
69
  dst: 255,
71
70
  len: 8,
@@ -99,6 +98,7 @@ describe('parsePDGY', () => {
99
98
  prio: 3,
100
99
  src: 2,
101
100
  timer: 0.563,
101
+ coalesced: true
102
102
  })
103
103
  })
104
104
  test('long msg', () => {
@@ -111,6 +111,7 @@ describe('parsePDGY', () => {
111
111
  prio: 3,
112
112
  src: 2,
113
113
  timer: 483.236,
114
+ coalesced: true
114
115
  })
115
116
  })
116
117
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canboat/canboatjs",
3
- "version": "1.21.1",
3
+ "version": "1.22.0",
4
4
  "description": "Native javascript version of canboat",
5
5
  "main": "index.js",
6
6
  "scripts": {