@canboat/canboatjs 3.10.4 → 3.11.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
@@ -242,7 +242,7 @@ ydvr-file recording.ydvr | analyzerjs
242
242
  ### Additional Tools
243
243
  - `actisense-file` - Process Actisense log files
244
244
  - `actisense-n2k-tcp` - TCP server for Actisense data
245
- - `cansend` - Send CAN messages
245
+ - `cansendjs` - Send CAN messages
246
246
  - `ikonvert-serial` - iKonvert serial interface
247
247
 
248
248
  ### Message Filtering
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cansendjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cansendjs.d.ts","sourceRoot":"","sources":["../../lib/bin/cansendjs.ts"],"names":[],"mappings":""}
@@ -118,4 +118,4 @@ rl.on('line', function (line) {
118
118
  }
119
119
  }
120
120
  });
121
- //# sourceMappingURL=cansend.js.map
121
+ //# sourceMappingURL=cansendjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cansendjs.js","sourceRoot":"","sources":["../../lib/bin/cansendjs.ts"],"names":[],"mappings":"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"}
package/dist/fromPgn.d.ts CHANGED
@@ -15,7 +15,6 @@
15
15
  */
16
16
  import { Definition, Field, PGN } from '@canboat/ts-pgns';
17
17
  import { EventEmitter } from 'events';
18
- import { BitStream } from 'bit-buffer';
19
18
  export type FromPgnCallback = (msg: any, pgn: any | undefined) => void;
20
19
  export type PostProcessor = (field: Field, value: any) => any;
21
20
  export type ByteMapping = {
@@ -43,7 +42,12 @@ export declare class Parser extends EventEmitter {
43
42
  };
44
43
  mixedFormat: boolean;
45
44
  constructor(opts?: any);
46
- _parse(pgn: PGN, bs: BitStream, len: number, coalesced: boolean, cb: FromPgnCallback | undefined, sourceString?: string | undefined): PGN | undefined;
45
+ private getPGNDefinitionList;
46
+ private readPacket;
47
+ private readRepeatingFields;
48
+ private readFields;
49
+ private readPGN;
50
+ private _parse;
47
51
  setField(res: any, field: Field, value: any): void;
48
52
  getField(res: any, field: Field): any;
49
53
  findNonMatchPgn(pgnList: Definition[]): Definition | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fromPgn.d.ts","sourceRoot":"","sources":["../lib/fromPgn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fromPgn.d.ts","sourceRoot":"","sources":["../lib/fromPgn.ts"],"names":[],"mappings":"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"}
package/dist/fromPgn.js CHANGED
@@ -97,10 +97,7 @@ class Parser extends events_1.EventEmitter {
97
97
  });
98
98
  }
99
99
  }
100
- _parse(pgn, bs, len, coalesced, cb, sourceString = undefined) {
101
- if (pgn.src === undefined) {
102
- throw new Error('invalid pgn, missing src');
103
- }
100
+ getPGNDefinitionList(pgn) {
104
101
  const customPgns = (0, pgns_1.getCustomPgn)(pgn.pgn);
105
102
  let pgnList = (0, pgns_1.getPgn)(pgn.pgn);
106
103
  if (!pgnList && !customPgns) {
@@ -114,34 +111,13 @@ class Parser extends events_1.EventEmitter {
114
111
  this.emit('warning', pgn, `no conversion found for pgn ${JSON.stringify(pgn)}`);
115
112
  return undefined;
116
113
  }
117
- if (pgnList === undefined) {
118
- return;
119
- }
120
114
  if (pgn.pgn === 59392) {
115
+ // I don't think I need this anymore??
121
116
  pgnList = pgnList.filter((pgn) => pgn.Fallback === undefined || pgn.Fallback === false);
122
117
  }
123
- let pgnData;
124
- if (pgnList.length > 1) {
125
- pgnData = this.findMatchPgn(pgnList);
126
- if (pgnData === null) {
127
- pgnData = pgnList[0];
128
- }
129
- }
130
- else {
131
- pgnData = pgnList[0];
132
- }
133
- if (pgnData === undefined) {
134
- return;
135
- }
136
- let couldBeMulti = false;
137
- if (pgnList.length > 0 && len == 8) {
138
- pgnList.forEach((pgnD) => {
139
- if (pgnD.Length && pgnD.Length > 8) {
140
- couldBeMulti = true;
141
- }
142
- });
143
- }
144
- trace(`${pgn.pgn} ${len} ${pgnData.Length} ${couldBeMulti}`);
118
+ return pgnList;
119
+ }
120
+ readPacket(pgn, pgnData, bs, len, coalesced, cb, sourceString = undefined) {
145
121
  if (coalesced ||
146
122
  len > 0x8 ||
147
123
  (this.format == FORMAT_COALESCED && !this.mixedFormat)) {
@@ -149,7 +125,7 @@ class Parser extends events_1.EventEmitter {
149
125
  if (sourceString && this.options.includeInputData) {
150
126
  pgn.input = [sourceString];
151
127
  }
152
- //} else if ( pgnData.Length > 0x8 || (len == 0x8 && (pgnData.RepeatingFields || couldBeMulti))) {
128
+ return bs;
153
129
  }
154
130
  else if (pgnData.Type === 'Fast') {
155
131
  //partial packet
@@ -218,10 +194,63 @@ class Parser extends events_1.EventEmitter {
218
194
  pgn.input = packet.src;
219
195
  }
220
196
  delete this.devices[pgn.src][pgn.pgn];
197
+ return bs;
221
198
  }
222
199
  else if (sourceString && this.options.includeInputData) {
223
200
  pgn.input = [sourceString];
224
201
  }
202
+ return bs;
203
+ }
204
+ readRepeatingFields(pgn, pgnData, bs) {
205
+ const RepeatingFields = pgnData.RepeatingFieldSet1Size
206
+ ? pgnData.RepeatingFieldSet1Size
207
+ : 0;
208
+ const fields = pgnData.Fields;
209
+ const repeating = fields.slice(fields.length - RepeatingFields);
210
+ const fany = pgn.fields;
211
+ fany.list = [];
212
+ if (this.options.includeByteMapping) {
213
+ ;
214
+ pgn.byteMapping['list'] = [];
215
+ }
216
+ let count;
217
+ if (pgnData.RepeatingFieldSet1CountField !== undefined) {
218
+ const rfield = pgnData.Fields[pgnData.RepeatingFieldSet1CountField - 1];
219
+ const dataKey = this.options.useCamel ? rfield.Id : rfield.Name;
220
+ count = pgn.fields[dataKey];
221
+ }
222
+ else {
223
+ count = 2048;
224
+ }
225
+ while (bs.bitsLeft > 0 && --count >= 0) {
226
+ const group = {};
227
+ let repeatingMap;
228
+ if (this.options.includeByteMapping) {
229
+ repeatingMap = {};
230
+ pgn.byteMapping['list'].push(repeatingMap);
231
+ }
232
+ repeating.forEach((field) => {
233
+ if (bs.bitsLeft > 0) {
234
+ const [value, refField, byteMapping] = readField(pgnData, this.options, true, pgn, field, bs, fields);
235
+ if (refField) {
236
+ group.parameterId = refField.Id;
237
+ }
238
+ if (value !== undefined &&
239
+ (value != null || this.options.returnNulls)) {
240
+ this.setField(group, field, value);
241
+ }
242
+ if (this.options.includeByteMapping && byteMapping) {
243
+ repeatingMap[field.Id] = byteMapping;
244
+ }
245
+ }
246
+ });
247
+ if (lodash_1.default.keys(group).length > 0) {
248
+ fany.list.push(group);
249
+ }
250
+ }
251
+ }
252
+ readFields(pgn, pgnList, startDef, bs) {
253
+ let pgnData = startDef;
225
254
  let RepeatingFields = pgnData.RepeatingFieldSet1Size
226
255
  ? pgnData.RepeatingFieldSet1Size
227
256
  : 0;
@@ -230,140 +259,147 @@ class Parser extends events_1.EventEmitter {
230
259
  ;
231
260
  pgn.byteMapping = {};
232
261
  }
233
- try {
234
- let fields = pgnData.Fields;
235
- const continueReading = true;
236
- let unknownPGN = false;
237
- let previousMatch;
238
- for (let i = 0; i < fields.length - RepeatingFields && continueReading; i++) {
239
- const field = fields[i];
240
- const hasMatch = field.Match !== undefined;
241
- const [valueRes, _refField, byteMapping] = readField(pgnData, this.options, !hasMatch, pgn, field, bs, fields);
242
- let value = valueRes;
243
- if (this.options.includeByteMapping) {
244
- ;
245
- pgn.byteMapping[field.Id] = byteMapping;
246
- }
247
- if (hasMatch) {
248
- //console.log(`looking for ${field.Name} == ${value}`)
249
- //console.log(JSON.stringify(pgnList, null, 2))
250
- pgnList = pgnList.filter((f) => f.Fields[i].Match == value);
251
- if (pgnList.length == 0) {
252
- if (!this.options.returnNonMatches) {
253
- return undefined;
262
+ let fields = pgnData.Fields;
263
+ let unknownPGN = false;
264
+ let previousMatch;
265
+ for (let i = 0; i < fields.length - RepeatingFields; i++) {
266
+ const field = fields[i];
267
+ const hasMatch = field.Match !== undefined;
268
+ const [valueRes, _refField, byteMapping] = readField(pgnData, this.options, !hasMatch, pgn, field, bs, fields);
269
+ let value = valueRes;
270
+ if (this.options.includeByteMapping) {
271
+ ;
272
+ pgn.byteMapping[field.Id] = byteMapping;
273
+ }
274
+ if (hasMatch) {
275
+ pgnList = pgnList.filter((f) => f.Fields[i].Match == value);
276
+ if (pgnList.length == 0) {
277
+ if (!this.options.returnNonMatches) {
278
+ return [false, undefined];
279
+ }
280
+ else {
281
+ //this.emit('warning', pgn, `no conversion found for pgn`)
282
+ trace('warning no conversion found for pgn %j', pgn);
283
+ const setByteMapping = (data) => {
284
+ if (this.options.includeByteMapping) {
285
+ const mapping = {
286
+ bytes: Array.from(data)
287
+ };
288
+ pgn.byteMapping.data = mapping;
289
+ }
290
+ };
291
+ pgnData = (0, ts_pgns_1.findFallBackPGN)(pgn.pgn);
292
+ if (pgnData === undefined) {
293
+ unknownPGN = true;
294
+ fields = [];
254
295
  }
255
296
  else {
256
- //this.emit('warning', pgn, `no conversion found for pgn`)
257
- trace('warning no conversion found for pgn %j', pgn);
258
- //continueReading = false
259
- //const nonMatch = this.findNonMatchPgn(origPGNList)
260
- const setByteMapping = (data) => {
261
- if (this.options.includeByteMapping) {
262
- const mapping = {
263
- bytes: Array.from(data)
264
- };
265
- pgn.byteMapping.data = mapping;
266
- }
267
- };
268
- pgnData = (0, ts_pgns_1.findFallBackPGN)(pgn.pgn);
269
- if (pgnData === undefined) {
270
- unknownPGN = true;
271
- fields = [];
272
- }
273
- else {
274
- fields = pgnData.Fields;
275
- }
276
- if (unknownPGN || i >= fields.length) {
277
- const data = bs.readArrayBuffer(Math.floor(bs.bitsLeft / 8));
278
- if (data.length > 0) {
279
- const buf = Buffer.from(data);
280
- pgn.fields.data = (0, utilities_1.byteString)(buf, ' ');
281
- setByteMapping(buf);
282
- }
283
- }
284
- if (previousMatch) {
285
- ;
286
- pgn.partialMatch = previousMatch.Id;
287
- }
288
- const postProcessor = fieldTypePostProcessors[field.FieldType];
289
- if (postProcessor) {
290
- value = postProcessor(field, value);
291
- }
292
- else if (field.FieldType === 'LOOKUP' &&
293
- (lodash_1.default.isUndefined(this.options.resolveEnums) ||
294
- this.options.resolveEnums)) {
295
- value = lookup(field, value);
297
+ fields = pgnData.Fields;
298
+ }
299
+ if (unknownPGN || i >= fields.length) {
300
+ const data = bs.readArrayBuffer(Math.floor(bs.bitsLeft / 8));
301
+ if (data.length > 0) {
302
+ const buf = Buffer.from(data);
303
+ pgn.fields.data = (0, utilities_1.byteString)(buf, ' ');
304
+ setByteMapping(buf);
296
305
  }
297
306
  }
298
- }
299
- else {
300
- previousMatch = pgnData;
301
- pgnData = pgnList[0];
302
- fields = pgnData.Fields;
303
- //console.log(`using ${JSON.stringify(pgnData, null, 2)}`)
304
- value = pgnData.Fields[i].Description;
305
- if (value == null) {
306
- value = pgnData.Fields[i].Match;
307
+ if (previousMatch) {
308
+ ;
309
+ pgn.partialMatch = previousMatch.Id;
310
+ }
311
+ const postProcessor = fieldTypePostProcessors[field.FieldType];
312
+ if (postProcessor) {
313
+ value = postProcessor(field, value);
314
+ }
315
+ else if (field.FieldType === 'LOOKUP' &&
316
+ (lodash_1.default.isUndefined(this.options.resolveEnums) ||
317
+ this.options.resolveEnums)) {
318
+ value = lookup(field, value);
307
319
  }
308
- RepeatingFields = pgnData.RepeatingFieldSet1Size
309
- ? pgnData.RepeatingFieldSet1Size
310
- : 0;
311
320
  }
312
321
  }
313
- if (value !== undefined &&
314
- (value != null || this.options.returnNulls)) {
315
- this.setField(pgn.fields, field, value);
316
- }
317
- }
318
- if (RepeatingFields > 0 && continueReading && pgnData !== undefined) {
319
- const repeating = fields.slice(fields.length - RepeatingFields);
320
- const fany = pgn.fields;
321
- fany.list = [];
322
- if (this.options.includeByteMapping) {
323
- ;
324
- pgn.byteMapping['list'] = [];
325
- }
326
- let count;
327
- if (pgnData.RepeatingFieldSet1CountField !== undefined) {
328
- const rfield = pgnData.Fields[pgnData.RepeatingFieldSet1CountField - 1];
329
- const dataKey = this.options.useCamel ? rfield.Id : rfield.Name;
330
- count = pgn.fields[dataKey];
331
- }
332
322
  else {
333
- count = 2048;
334
- }
335
- while (bs.bitsLeft > 0 && --count >= 0) {
336
- const group = {};
337
- let repeatingMap;
338
- if (this.options.includeByteMapping) {
339
- repeatingMap = {};
340
- pgn.byteMapping['list'].push(repeatingMap);
341
- }
342
- repeating.forEach((field) => {
343
- if (bs.bitsLeft > 0) {
344
- const [value, refField, byteMapping] = readField(pgnData, this.options, true, pgn, field, bs, fields);
345
- if (refField) {
346
- group.parameterId = refField.Id;
347
- }
348
- if (value !== undefined &&
349
- (value != null || this.options.returnNulls)) {
350
- this.setField(group, field, value);
351
- }
352
- if (this.options.includeByteMapping && byteMapping) {
353
- repeatingMap[field.Id] = byteMapping;
354
- }
355
- }
356
- });
357
- if (lodash_1.default.keys(group).length > 0) {
358
- fany.list.push(group);
323
+ previousMatch = pgnData;
324
+ pgnData = pgnList[0];
325
+ fields = pgnData.Fields;
326
+ //console.log(`using ${JSON.stringify(pgnData, null, 2)}`)
327
+ value = pgnData.Fields[i].Description;
328
+ if (value == null) {
329
+ value = pgnData.Fields[i].Match;
359
330
  }
331
+ RepeatingFields = pgnData.RepeatingFieldSet1Size
332
+ ? pgnData.RepeatingFieldSet1Size
333
+ : 0;
334
+ }
335
+ }
336
+ if (value !== undefined && (value != null || this.options.returnNulls)) {
337
+ this.setField(pgn.fields, field, value);
338
+ }
339
+ }
340
+ if (RepeatingFields > 0 && pgnData !== undefined) {
341
+ this.readRepeatingFields(pgn, pgnData, bs);
342
+ }
343
+ return [unknownPGN, pgnData];
344
+ }
345
+ readPGN(pgn, pgnList, inBs, len, coalesced, cb, sourceString = undefined) {
346
+ let pgnData;
347
+ if (pgnList) {
348
+ if (pgnList.length > 1) {
349
+ pgnData = this.findMatchPgn(pgnList);
350
+ if (pgnData === null) {
351
+ pgnData = pgnList[0];
360
352
  }
361
353
  }
354
+ else {
355
+ pgnData = pgnList[0];
356
+ }
357
+ }
358
+ else if (this.options.returnNonMatches) {
359
+ pgnData = (0, ts_pgns_1.findFallBackPGN)(pgn.pgn);
360
+ if (pgnData) {
361
+ pgnList = [pgnData];
362
+ }
363
+ }
364
+ if (pgnList === undefined || pgnData === undefined) {
365
+ if (this.options.includeInputData && sourceString) {
366
+ pgn.input = [sourceString];
367
+ }
368
+ return [true, undefined];
369
+ }
370
+ const bs = this.readPacket(pgn, pgnData, inBs, len, coalesced, cb, sourceString);
371
+ if (!bs) {
372
+ return [false, undefined];
373
+ }
374
+ return this.readFields(pgn, pgnList, pgnData, bs);
375
+ }
376
+ _parse(pgn, bs, len, coalesced, cb, sourceString = undefined) {
377
+ if (pgn.src === undefined) {
378
+ throw new Error('invalid pgn, missing src');
379
+ }
380
+ try {
381
+ const pgnList = this.getPGNDefinitionList(pgn);
382
+ const [unknownPGN, pgnData] = this.readPGN(pgn, pgnList, bs, len, coalesced, cb, sourceString);
383
+ if (unknownPGN == false && pgnData === undefined) {
384
+ //not done reading yet (multi-frame)
385
+ return;
386
+ }
362
387
  let res;
363
388
  if (unknownPGN || pgnData === undefined) {
364
- res = new PGN_Unknown(pgn.fields, unknownDef(pgn.pgn));
389
+ if (this.options.returnNonMatches !== true) {
390
+ return;
391
+ }
392
+ res = new PGN_Unknown(pgn.fields || [], unknownDef(pgn.pgn));
365
393
  res.description = 'Unknown PGN';
366
394
  res.id = 'unknown';
395
+ if (bs.bitsLeft > 0) {
396
+ const data = bs.readArrayBuffer(Math.floor(bs.bitsLeft / 8));
397
+ if (data.length > 0) {
398
+ const buf = Buffer.from(data);
399
+ res.fields.data = (0, utilities_1.byteString)(buf, ' ');
400
+ //setByteMapping(buf)
401
+ }
402
+ }
367
403
  }
368
404
  else {
369
405
  res =