@canboat/canboatjs 3.0.2 → 3.1.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.
Files changed (222) hide show
  1. package/.github/workflows/test.yml +2 -2
  2. package/.github/workflows/test_canboat_changes.yml +91 -0
  3. package/.husky/pre-commit +4 -0
  4. package/.mocharc.js +7 -0
  5. package/.prettierrc.json +5 -0
  6. package/README.md +2 -7
  7. package/dist/actisense-serial.d.ts +17 -0
  8. package/dist/actisense-serial.d.ts.map +1 -0
  9. package/dist/actisense-serial.js +569 -0
  10. package/dist/actisense-serial.js.map +1 -0
  11. package/dist/bin/actisense-file.d.ts +3 -0
  12. package/dist/bin/actisense-file.d.ts.map +1 -0
  13. package/dist/bin/actisense-file.js +49 -0
  14. package/dist/bin/actisense-file.js.map +1 -0
  15. package/dist/bin/actisense-n2k-tcp.d.ts +3 -0
  16. package/dist/bin/actisense-n2k-tcp.d.ts.map +1 -0
  17. package/dist/bin/actisense-n2k-tcp.js +46 -0
  18. package/dist/bin/actisense-n2k-tcp.js.map +1 -0
  19. package/dist/bin/actisense-serialjs.d.ts +3 -0
  20. package/dist/bin/actisense-serialjs.d.ts.map +1 -0
  21. package/dist/bin/actisense-serialjs.js +51 -0
  22. package/dist/bin/actisense-serialjs.js.map +1 -0
  23. package/dist/bin/analyzerjs.d.ts +3 -0
  24. package/dist/bin/analyzerjs.d.ts.map +1 -0
  25. package/dist/bin/analyzerjs.js +61 -0
  26. package/dist/bin/analyzerjs.js.map +1 -0
  27. package/dist/bin/candumpanalyzerjs.d.ts +3 -0
  28. package/dist/bin/candumpanalyzerjs.d.ts.map +1 -0
  29. package/dist/bin/candumpanalyzerjs.js +31 -0
  30. package/dist/bin/candumpanalyzerjs.js.map +1 -0
  31. package/dist/bin/candumpjs.d.ts +3 -0
  32. package/dist/bin/candumpjs.d.ts.map +1 -0
  33. package/dist/bin/candumpjs.js +73 -0
  34. package/dist/bin/candumpjs.js.map +1 -0
  35. package/dist/bin/cansend.d.ts +3 -0
  36. package/dist/bin/cansend.d.ts.map +1 -0
  37. package/dist/bin/cansend.js +123 -0
  38. package/dist/bin/cansend.js.map +1 -0
  39. package/dist/bin/ikonvert-serial.d.ts +3 -0
  40. package/dist/bin/ikonvert-serial.d.ts.map +1 -0
  41. package/dist/bin/ikonvert-serial.js +36 -0
  42. package/dist/bin/ikonvert-serial.js.map +1 -0
  43. package/dist/bin/to-pgn.d.ts +3 -0
  44. package/dist/bin/to-pgn.d.ts.map +1 -0
  45. package/dist/bin/to-pgn.js +57 -0
  46. package/dist/bin/to-pgn.js.map +1 -0
  47. package/dist/canId.d.ts +21 -0
  48. package/dist/canId.d.ts.map +1 -0
  49. package/dist/canId.js +66 -0
  50. package/dist/canId.js.map +1 -0
  51. package/dist/canId.test.d.ts +2 -0
  52. package/dist/canId.test.d.ts.map +1 -0
  53. package/dist/canId.test.js +58 -0
  54. package/dist/canId.test.js.map +1 -0
  55. package/dist/canbus.d.ts +17 -0
  56. package/dist/canbus.d.ts.map +1 -0
  57. package/dist/canbus.js +261 -0
  58. package/dist/canbus.js.map +1 -0
  59. package/dist/candevice.d.ts +23 -0
  60. package/dist/candevice.d.ts.map +1 -0
  61. package/dist/candevice.js +38 -0
  62. package/dist/candevice.js.map +1 -0
  63. package/dist/codes.d.ts +2 -0
  64. package/dist/codes.d.ts.map +1 -0
  65. package/dist/codes.js +24 -0
  66. package/dist/codes.js.map +1 -0
  67. package/dist/discovery.d.ts +17 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +119 -0
  70. package/dist/discovery.js.map +1 -0
  71. package/dist/fromPgn.d.ts +51 -0
  72. package/dist/fromPgn.d.ts.map +1 -0
  73. package/dist/fromPgn.js +989 -0
  74. package/dist/fromPgn.js.map +1 -0
  75. package/dist/fromPgnStream.d.ts +17 -0
  76. package/dist/fromPgnStream.d.ts.map +1 -0
  77. package/dist/fromPgnStream.js +47 -0
  78. package/dist/fromPgnStream.js.map +1 -0
  79. package/dist/ikonvert.d.ts +17 -0
  80. package/dist/ikonvert.d.ts.map +1 -0
  81. package/dist/ikonvert.js +224 -0
  82. package/dist/ikonvert.js.map +1 -0
  83. package/dist/index.d.ts +31 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +60 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/n2k-actisense.d.ts +24 -0
  88. package/dist/n2k-actisense.d.ts.map +1 -0
  89. package/dist/n2k-actisense.js +126 -0
  90. package/dist/n2k-actisense.js.map +1 -0
  91. package/dist/n2k-actisense.test.d.ts +2 -0
  92. package/dist/n2k-actisense.test.d.ts.map +1 -0
  93. package/dist/n2k-actisense.test.js +49 -0
  94. package/dist/n2k-actisense.test.js.map +1 -0
  95. package/dist/n2kDevice.d.ts +40 -0
  96. package/dist/n2kDevice.d.ts.map +1 -0
  97. package/dist/n2kDevice.js +387 -0
  98. package/dist/n2kDevice.js.map +1 -0
  99. package/dist/ncanbus.d.ts +17 -0
  100. package/dist/ncanbus.d.ts.map +1 -0
  101. package/dist/ncanbus.js +92 -0
  102. package/dist/ncanbus.js.map +1 -0
  103. package/dist/pgns.d.ts +22 -0
  104. package/dist/pgns.d.ts.map +1 -0
  105. package/dist/pgns.js +157 -0
  106. package/dist/pgns.js.map +1 -0
  107. package/dist/pgns.test.d.ts +2 -0
  108. package/dist/pgns.test.d.ts.map +1 -0
  109. package/dist/pgns.test.js +14 -0
  110. package/dist/pgns.test.js.map +1 -0
  111. package/dist/simpleCan.d.ts +17 -0
  112. package/dist/simpleCan.d.ts.map +1 -0
  113. package/dist/simpleCan.js +125 -0
  114. package/dist/simpleCan.js.map +1 -0
  115. package/dist/stringMsg.d.ts +33 -0
  116. package/dist/stringMsg.d.ts.map +1 -0
  117. package/dist/stringMsg.js +359 -0
  118. package/dist/stringMsg.js.map +1 -0
  119. package/dist/stringMsg.test.d.ts +2 -0
  120. package/dist/stringMsg.test.d.ts.map +1 -0
  121. package/dist/stringMsg.test.js +244 -0
  122. package/dist/stringMsg.test.js.map +1 -0
  123. package/dist/toPgn.d.ts +34 -0
  124. package/dist/toPgn.d.ts.map +1 -0
  125. package/dist/toPgn.js +500 -0
  126. package/dist/toPgn.js.map +1 -0
  127. package/dist/utilities.d.ts +26 -0
  128. package/dist/utilities.d.ts.map +1 -0
  129. package/dist/utilities.js +112 -0
  130. package/dist/utilities.js.map +1 -0
  131. package/dist/utilities.test.d.ts +2 -0
  132. package/dist/utilities.test.d.ts.map +1 -0
  133. package/dist/utilities.test.js +9 -0
  134. package/dist/utilities.test.js.map +1 -0
  135. package/dist/venus-mqtt.d.ts +11 -0
  136. package/dist/venus-mqtt.d.ts.map +1 -0
  137. package/dist/venus-mqtt.js +100 -0
  138. package/dist/venus-mqtt.js.map +1 -0
  139. package/dist/venus.d.ts +11 -0
  140. package/dist/venus.d.ts.map +1 -0
  141. package/dist/venus.js +71 -0
  142. package/dist/venus.js.map +1 -0
  143. package/dist/w2k01.d.ts +17 -0
  144. package/dist/w2k01.d.ts.map +1 -0
  145. package/dist/w2k01.js +119 -0
  146. package/dist/w2k01.js.map +1 -0
  147. package/dist/yddevice.d.ts +25 -0
  148. package/dist/yddevice.d.ts.map +1 -0
  149. package/dist/yddevice.js +45 -0
  150. package/dist/yddevice.js.map +1 -0
  151. package/dist/ydgw02.d.ts +17 -0
  152. package/dist/ydgw02.d.ts.map +1 -0
  153. package/dist/ydgw02.js +163 -0
  154. package/dist/ydgw02.js.map +1 -0
  155. package/dist/ydvr.d.ts +17 -0
  156. package/dist/ydvr.d.ts.map +1 -0
  157. package/dist/ydvr.js +120 -0
  158. package/dist/ydvr.js.map +1 -0
  159. package/eslint.config.js +58 -0
  160. package/jest.config.js +5 -0
  161. package/lib/actisense-serial.ts +644 -0
  162. package/lib/bin/actisense-file.ts +53 -0
  163. package/lib/bin/actisense-n2k-tcp.ts +50 -0
  164. package/lib/bin/actisense-serialjs.ts +55 -0
  165. package/{bin/analyzerjs → lib/bin/analyzerjs.ts} +16 -15
  166. package/{bin/candumpjs → lib/bin/candumpjs.ts} +19 -20
  167. package/lib/bin/cansend.ts +131 -0
  168. package/lib/bin/ikonvert-serial.ts +44 -0
  169. package/{bin/to-pgn → lib/bin/to-pgn.ts} +23 -17
  170. package/lib/bin/ydvr-file +33 -0
  171. package/lib/canId.test.js +35 -15
  172. package/lib/canId.ts +84 -0
  173. package/lib/canbus.ts +293 -0
  174. package/lib/{candevice.js → candevice.ts} +14 -21
  175. package/lib/codes.ts +21 -0
  176. package/lib/{discovery.js → discovery.ts} +32 -30
  177. package/lib/fromPgn.ts +1207 -0
  178. package/lib/{fromPgnStream.js → fromPgnStream.ts} +17 -12
  179. package/lib/{ikonvert.js → ikonvert.ts} +90 -85
  180. package/lib/index.ts +48 -0
  181. package/lib/n2k-actisense.test.js +31 -32
  182. package/lib/n2k-actisense.ts +152 -0
  183. package/lib/n2kDevice.ts +458 -0
  184. package/lib/pgns.test.ts +12 -0
  185. package/lib/pgns.ts +191 -0
  186. package/lib/simpleCan.ts +140 -0
  187. package/lib/stringMsg.test.js +58 -41
  188. package/lib/stringMsg.ts +464 -0
  189. package/lib/toPgn.ts +597 -0
  190. package/lib/{utilities.js → utilities.ts} +48 -37
  191. package/lib/venus-mqtt.js +69 -73
  192. package/lib/venus.js +8 -8
  193. package/lib/{w2k01.js → w2k01.ts} +57 -44
  194. package/lib/{yddevice.js → yddevice.ts} +18 -13
  195. package/lib/{ydgw02.js → ydgw02.ts} +55 -47
  196. package/lib/ydvr.js +65 -147
  197. package/package.json +54 -18
  198. package/tsconfig.json +19 -0
  199. package/tsconfig.tsbuildinfo +1 -0
  200. package/bin/actisense-file +0 -47
  201. package/bin/actisense-n2k-tcp +0 -45
  202. package/bin/actisense-serialjs +0 -52
  203. package/bin/candumpanalyzerjs +0 -29
  204. package/bin/cansend +0 -130
  205. package/bin/ikonvert-serial +0 -50
  206. package/bin/ydgw-analyzerjs +0 -36
  207. package/bin/ydvr-file +0 -33
  208. package/index.js +0 -53
  209. package/lib/canId.js +0 -64
  210. package/lib/canbus.js +0 -278
  211. package/lib/codes.js +0 -69
  212. package/lib/codes.test.js +0 -17
  213. package/lib/codesMfgs.json +0 -166
  214. package/lib/fromPgn.js +0 -1027
  215. package/lib/n2k-actisense.js +0 -108
  216. package/lib/n2kDevice.js +0 -390
  217. package/lib/pgns.js +0 -196
  218. package/lib/pgns.test.js +0 -13
  219. package/lib/serial.js +0 -647
  220. package/lib/simpleCan.js +0 -105
  221. package/lib/stringMsg.js +0 -339
  222. package/lib/toPgn.js +0 -518
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2025 Scott Bender <scott@scottbender.net>
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.encodeN2KActisense = exports.readN2KActisense = void 0;
19
+ const utilities_1 = require("./utilities");
20
+ const canId_1 = require("./canId");
21
+ const bit_buffer_1 = require("bit-buffer");
22
+ const utilities_2 = require("./utilities");
23
+ const debug = (0, utilities_1.createDebug)('canboatjs:w2k01');
24
+ const debugData = (0, utilities_1.createDebug)('canboatjs:w2k01-data');
25
+ const readN2KActisense = (data, plainText, context, cb) => {
26
+ const inBuf = Buffer.from(data);
27
+ let inOffset = 0;
28
+ let last;
29
+ if (debugData.enabled) {
30
+ debugData('Received: (' + data.length + ') ' + Buffer.from(data).toString('hex'));
31
+ }
32
+ try {
33
+ while (true) {
34
+ const len = inBuf.readUInt16LE(inOffset + 3);
35
+ if (inBuf.length < inOffset + 5 + len) {
36
+ /*
37
+ I've never seen this happen
38
+ context.lastChunk = Buffer.alloc(inBuf.length - inOffset)
39
+ inBuf.copy(context.lastChunk, 0, inOffset, inBuf.length-1)
40
+ */
41
+ if (debug.enabled) {
42
+ debug('incomplete packet: (' +
43
+ len +
44
+ ') ' +
45
+ inBuf.toString('hex', inOffset));
46
+ }
47
+ return;
48
+ }
49
+ else if (inBuf[inOffset + 5 + len - 1] != 0x03 ||
50
+ inBuf[inOffset + 5 + len - 2] != 0x10) {
51
+ if (debug.enabled) {
52
+ debug('bad packet: (' + len + ') ' + inBuf.toString('hex', inOffset));
53
+ }
54
+ //context.lastChunk = null
55
+ return;
56
+ }
57
+ const buf = Buffer.alloc(len);
58
+ inBuf.copy(buf, 0, inOffset + 5, inOffset + len + 5);
59
+ //console.log('NextBuf: (' + buf.length + ') ' + buf.toString('hex'))
60
+ let offset = 0;
61
+ const _dst = buf.readUInt8(offset);
62
+ offset += 1;
63
+ const canid = buf.readUInt32LE(offset);
64
+ offset += 4;
65
+ const _timestamp = buf.readUInt32LE(offset);
66
+ offset += 4;
67
+ const _mhs = buf.readUInt8(offset);
68
+ offset += 1;
69
+ const info = (0, canId_1.parseCanId)(canid);
70
+ //console.log(`${len} ${mhs} ${dst} (${info.src}, ${info.dst}) ${info.pgn} ${timestamp}`)
71
+ const pgnData = Buffer.alloc(len - offset - 3);
72
+ buf.copy(pgnData, 0, offset, len - 3);
73
+ const timestamp = new Date().toISOString();
74
+ if (plainText) {
75
+ last = (0, utilities_2.binToActisense)(info, timestamp, pgnData, pgnData.length);
76
+ cb && cb(last);
77
+ }
78
+ else {
79
+ last = {
80
+ pgn: info,
81
+ length: pgnData.length,
82
+ data: pgnData,
83
+ coalesced: true
84
+ };
85
+ cb && cb(last);
86
+ }
87
+ inOffset += len + 5;
88
+ if (inOffset == inBuf.length) {
89
+ return last;
90
+ }
91
+ }
92
+ }
93
+ catch (error) {
94
+ debug(`[error] ${error}`);
95
+ //context.lastChunk = null
96
+ return;
97
+ }
98
+ };
99
+ exports.readN2KActisense = readN2KActisense;
100
+ const encodeN2KActisense = (pgn, data) => {
101
+ const bs = new bit_buffer_1.BitStream(Buffer.alloc(18 + data.length));
102
+ bs.writeUint8(0x10); //BST Message ID
103
+ bs.writeUint8(0x02);
104
+ bs.writeUint8(0xd0);
105
+ bs.writeUint16(13 + data.length); //len
106
+ bs.writeUint8(pgn.dst);
107
+ bs.writeUint32((0, canId_1.encodeCanId)({
108
+ pgn: pgn.pgn,
109
+ src: pgn.src || 0,
110
+ prio: pgn.prio || 2,
111
+ dst: pgn.dst
112
+ }));
113
+ bs.writeUint32(0); //timestamp
114
+ bs.writeUint8(0); //mhs
115
+ data.copy(bs.view.buffer, bs.byteIndex, 0);
116
+ bs.byteIndex += data.length;
117
+ bs.writeUint8(0); // ??
118
+ bs.writeUint8(0x10);
119
+ bs.writeUint8(0x03);
120
+ if (debugData.enabled) {
121
+ debugData('encoded: ' + bs.view.buffer.toString('hex'));
122
+ }
123
+ return bs.view.buffer;
124
+ };
125
+ exports.encodeN2KActisense = encodeN2KActisense;
126
+ //# sourceMappingURL=n2k-actisense.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n2k-actisense.js","sourceRoot":"","sources":["../lib/n2k-actisense.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=n2k-actisense.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n2k-actisense.test.d.ts","sourceRoot":"","sources":["../lib/n2k-actisense.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ const { readN2KActisense, encodeN2KActisense } = require('./n2k-actisense');
3
+ describe('readN2KActisense', () => {
4
+ test('basic msg', () => {
5
+ const buffer = Buffer.from('1002d01500ff0502f809004c86fe00fffccba56800ffff7310031002d01500ff0501f809004c86fe000d474717e2da69d29c1003', 'hex');
6
+ const res = readN2KActisense(buffer, false, {});
7
+ delete res.pgn.timestamp;
8
+ expect(res).toEqual({
9
+ coalesced: true,
10
+ data: Buffer.from('0d474717e2da69d2', 'hex'),
11
+ length: 8,
12
+ pgn: {
13
+ canId: 167248133,
14
+ dst: 255,
15
+ pgn: 129025,
16
+ prio: 2,
17
+ src: 5
18
+ }
19
+ });
20
+ });
21
+ });
22
+ describe('encodeN2KActisense', () => {
23
+ test('basic msg', () => {
24
+ const expected = '1002d01500ff0501f80900000000000d474717e2da69d2001003';
25
+ const pgn = {
26
+ dst: 255,
27
+ pgn: 129025,
28
+ prio: 2,
29
+ src: 5
30
+ };
31
+ const encoded = encodeN2KActisense(pgn, Buffer.from('0d474717e2da69d2', 'hex'));
32
+ expect(encoded).toEqual(Buffer.from(expected, 'hex'));
33
+ const read = readN2KActisense(encoded, false, {});
34
+ delete read.pgn.timestamp;
35
+ expect(read).toEqual({
36
+ coalesced: true,
37
+ data: Buffer.from('0d474717e2da69d2', 'hex'),
38
+ length: 8,
39
+ pgn: {
40
+ canId: 167248133,
41
+ dst: 255,
42
+ pgn: 129025,
43
+ prio: 2,
44
+ src: 5
45
+ }
46
+ });
47
+ });
48
+ });
49
+ //# sourceMappingURL=n2k-actisense.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n2k-actisense.test.js","sourceRoot":"","sources":["../lib/n2k-actisense.test.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,0GAA0G,EAC1G,KAAK,CACN,CAAA;QACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QAC/C,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAA;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;YAC5C,MAAM,EAAE,CAAC;YACT,GAAG,EAAE;gBACH,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,CAAC;aACP;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,QAAQ,GAAG,sDAAsD,CAAA;QACvE,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;SACP,CAAA;QAED,MAAM,OAAO,GAAG,kBAAkB,CAChC,GAAG,EACH,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CACvC,CAAA;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;QAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;QAEzB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;YAC5C,MAAM,EAAE,CAAC;YACT,GAAG,EAAE;gBACH,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,CAAC;aACP;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright 2025 Scott Bender (scott@scottbender.net)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { PGN } from '@canboat/ts-pgns';
17
+ import { EventEmitter } from 'node:events';
18
+ export declare class N2kDevice extends EventEmitter {
19
+ addressClaim: any;
20
+ productInfo: any;
21
+ configurationInfo: any;
22
+ options: any;
23
+ address: number;
24
+ cansend: boolean;
25
+ foundConflict: boolean;
26
+ heartbeatCounter: number;
27
+ devices: any;
28
+ sentAvailable: boolean;
29
+ addressClaimDetectionTime: number;
30
+ transmitPGNs: number[];
31
+ addressClaimSentAt?: number;
32
+ addressClaimChecker?: any;
33
+ heartbeatInterval?: any;
34
+ constructor(options: any);
35
+ start(): void;
36
+ setStatus(msg: string): void;
37
+ n2kMessage(pgn: PGN): void;
38
+ sendPGN(_pgn: PGN, _src?: number | undefined): void;
39
+ }
40
+ //# sourceMappingURL=n2kDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n2kDevice.d.ts","sourceRoot":"","sources":["../lib/n2kDevice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,GAAG,EAgBJ,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAW1C,qBAAa,SAAU,SAAQ,YAAY;IACzC,YAAY,EAAE,GAAG,CAAA;IACjB,WAAW,EAAE,GAAG,CAAA;IAChB,iBAAiB,EAAE,GAAG,CAAA;IACtB,OAAO,EAAE,GAAG,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,GAAG,CAAA;IACZ,aAAa,EAAE,OAAO,CAAA;IACtB,yBAAyB,EAAE,MAAM,CAAA;IACjC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,GAAG,CAAA;IACzB,iBAAiB,CAAC,EAAE,GAAG,CAAA;gBAEX,OAAO,EAAE,GAAG;IAwFxB,KAAK;IAOL,SAAS,CAAC,GAAG,EAAE,MAAM;IAMrB,UAAU,CAAC,GAAG,EAAE,GAAG;IA4BnB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,GAAG,SAAqB;CACxD"}
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2025 Scott Bender (scott@scottbender.net)
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.N2kDevice = void 0;
22
+ const ts_pgns_1 = require("@canboat/ts-pgns");
23
+ const utilities_1 = require("./utilities");
24
+ const node_events_1 = require("node:events");
25
+ const lodash_1 = __importDefault(require("lodash"));
26
+ const int64_buffer_1 = require("int64-buffer");
27
+ const codes_1 = require("./codes");
28
+ const toPgn_1 = require("./toPgn");
29
+ const package_json_1 = __importDefault(require("../package.json"));
30
+ const debug = (0, utilities_1.createDebug)('canboatjs:n2kdevice');
31
+ const deviceTransmitPGNs = [60928, 59904, 126996, 126464];
32
+ class N2kDevice extends node_events_1.EventEmitter {
33
+ addressClaim;
34
+ productInfo;
35
+ configurationInfo;
36
+ options;
37
+ address;
38
+ cansend;
39
+ foundConflict;
40
+ heartbeatCounter;
41
+ devices;
42
+ sentAvailable;
43
+ addressClaimDetectionTime;
44
+ transmitPGNs;
45
+ addressClaimSentAt;
46
+ addressClaimChecker;
47
+ heartbeatInterval;
48
+ constructor(options) {
49
+ super();
50
+ if (options.addressClaim) {
51
+ this.addressClaim = options.addressClaim;
52
+ this.addressClaim.pgn = 60928;
53
+ this.addressClaim.dst = 255;
54
+ this.addressClaim.prio = 6;
55
+ }
56
+ else {
57
+ this.addressClaim = {
58
+ pgn: 60928,
59
+ dst: 255,
60
+ prio: 6,
61
+ 'Unique Number': 1263,
62
+ 'Manufacturer Code': 999,
63
+ 'Device Function': 130, // PC gateway
64
+ 'Device Class': 25, // Inter/Intranetwork Device
65
+ 'Device Instance Lower': 0,
66
+ 'Device Instance Upper': 0,
67
+ 'System Instance': 0,
68
+ 'Industry Group': 4, // Marine
69
+ Reserved1: 1,
70
+ Reserved2: 2
71
+ };
72
+ this.addressClaim['Unique Number'] =
73
+ options.uniqueNumber || Math.floor(Math.random() * Math.floor(2097151));
74
+ }
75
+ const version = package_json_1.default ? package_json_1.default.version : '1.0';
76
+ if (options.productInfo) {
77
+ this.productInfo = options.productInfo;
78
+ this.productInfo.pgn = 126996;
79
+ this.productInfo.dst = 255;
80
+ }
81
+ else {
82
+ this.productInfo = {
83
+ pgn: 126996,
84
+ dst: 255,
85
+ 'NMEA 2000 Version': 1300,
86
+ 'Product Code': 667, // Just made up..
87
+ 'Model ID': 'Signal K',
88
+ 'Model Version': 'canboatjs',
89
+ 'Model Serial Code': options.uniqueNumber
90
+ ? options.uniqueNumber.toString()
91
+ : '000001',
92
+ 'Certification Level': 0,
93
+ 'Load Equivalency': 1
94
+ };
95
+ }
96
+ this.productInfo['Software Version Code'] = version;
97
+ if (options.serverVersion && options.serverUrl) {
98
+ this.configurationInfo = {
99
+ pgn: 126998,
100
+ dst: 255,
101
+ 'Installation Description #1': options.serverUrl,
102
+ 'Installation Description #2': options.serverDescription,
103
+ 'Manufacturer Information': options.serverVersion
104
+ };
105
+ }
106
+ this.options = lodash_1.default.isUndefined(options) ? {} : options;
107
+ this.address = lodash_1.default.isUndefined(options.preferredAddress)
108
+ ? 100
109
+ : options.preferredAddress;
110
+ this.cansend = false;
111
+ this.foundConflict = false;
112
+ this.heartbeatCounter = 0;
113
+ this.devices = {};
114
+ this.sentAvailable = false;
115
+ this.addressClaimDetectionTime =
116
+ options.addressClaimDetectionTime !== undefined
117
+ ? options.addressClaimDetectionTime
118
+ : 5000;
119
+ if (!options.disableDefaultTransmitPGNs) {
120
+ this.transmitPGNs = lodash_1.default.union(deviceTransmitPGNs, codes_1.defaultTransmitPGNs);
121
+ }
122
+ else {
123
+ this.transmitPGNs = [...deviceTransmitPGNs];
124
+ }
125
+ if (this.options.transmitPGNs) {
126
+ this.transmitPGNs = lodash_1.default.union(this.transmitPGNs, this.options.transmitPGNs);
127
+ }
128
+ }
129
+ start() {
130
+ sendISORequest(this, 60928, 254);
131
+ setTimeout(() => {
132
+ sendAddressClaim(this);
133
+ }, 1000);
134
+ }
135
+ setStatus(msg) {
136
+ if (this.options.app && this.options.app.setPluginStatus) {
137
+ this.options.app.setProviderStatus(this.options.providerId, msg);
138
+ }
139
+ }
140
+ n2kMessage(pgn) {
141
+ if (pgn.dst == 255 || pgn.dst == this.address) {
142
+ try {
143
+ if (pgn.pgn == 59904) {
144
+ handleISORequest(this, pgn);
145
+ }
146
+ else if (pgn.pgn == 126208) {
147
+ handleGroupFunction(this, pgn);
148
+ }
149
+ else if (pgn.pgn == 60928) {
150
+ handleISOAddressClaim(this, pgn);
151
+ }
152
+ else if (pgn.pgn == 126996) {
153
+ handleProductInformation(this, pgn);
154
+ }
155
+ }
156
+ catch (err) {
157
+ console.error(err);
158
+ }
159
+ /*
160
+ var handler = this.handlers[pgn.pgn.toString()]
161
+ if ( pgn.dst == this.address )
162
+ debug(`handler ${handler}`)
163
+ if ( _.isFunction(handler) ) {
164
+ debug(`got handled PGN %j ${handled}`, pgn)
165
+ handler(pgn)
166
+ }
167
+ */
168
+ }
169
+ }
170
+ sendPGN(_pgn, _src = undefined) { }
171
+ }
172
+ exports.N2kDevice = N2kDevice;
173
+ function handleISORequest(device, n2kMsg) {
174
+ debug('handleISORequest %j', n2kMsg);
175
+ const PGN = Number(n2kMsg.fields.pgn);
176
+ switch (PGN) {
177
+ case 126996: // Product Information request
178
+ sendProductInformation(device);
179
+ break;
180
+ case 126998: // Config Information request
181
+ sendConfigInformation(device);
182
+ break;
183
+ case 60928: // ISO address claim request
184
+ debug('sending address claim %j', device.addressClaim);
185
+ device.sendPGN(device.addressClaim);
186
+ break;
187
+ case 126464:
188
+ sendPGNList(device, n2kMsg.src);
189
+ break;
190
+ default:
191
+ if (!device.options.disableNAKs) {
192
+ debug(`Got unsupported ISO request for PGN ${PGN}. Sending NAK.`);
193
+ sendNAKAcknowledgement(device, n2kMsg.src, PGN);
194
+ }
195
+ }
196
+ }
197
+ function handleGroupFunction(device, n2kMsg) {
198
+ debug('handleGroupFunction %j', n2kMsg);
199
+ const functionCode = n2kMsg.fields.functionCode;
200
+ if (functionCode === 'Request') {
201
+ handleRequestGroupFunction(device, n2kMsg);
202
+ }
203
+ else if (functionCode === 'Command') {
204
+ handleCommandGroupFunction(device, n2kMsg);
205
+ }
206
+ else {
207
+ debug('Got unsupported Group Function PGN: %j', n2kMsg);
208
+ }
209
+ function handleRequestGroupFunction(device, n2kMsg) {
210
+ if (!device.options.disableNAKs) {
211
+ // We really don't support group function requests for any PGNs yet -> always respond with pgnErrorCode 1 = "PGN not supported"
212
+ const PGN = n2kMsg.fields.pgn;
213
+ debug("Sending 'PGN Not Supported' Group Function response for requested PGN", PGN);
214
+ const acknowledgement = {
215
+ pgn: 126208,
216
+ dst: n2kMsg.src,
217
+ fields: {
218
+ functionCode: ts_pgns_1.GroupFunction.Acknowledge,
219
+ pgn: PGN,
220
+ pgnErrorCode: ts_pgns_1.PgnErrorCode.NotSupported,
221
+ transmissionIntervalPriorityErrorCode: ts_pgns_1.TransmissionInterval.Acknowledge,
222
+ numberOfParameters: 0,
223
+ list: []
224
+ }
225
+ };
226
+ device.sendPGN(acknowledgement);
227
+ }
228
+ }
229
+ function handleCommandGroupFunction(device, n2kMsg) {
230
+ if (!device.options.disableNAKs) {
231
+ // We really don't support group function commands for any PGNs yet -> always respond with pgnErrorCode 1 = "PGN not supported"
232
+ const PGN = n2kMsg.fields.pgn;
233
+ debug("Sending 'PGN Not Supported' Group Function response for commanded PGN", PGN);
234
+ const acknowledgement = {
235
+ pgn: 126208,
236
+ dst: n2kMsg.src,
237
+ fields: {
238
+ functionCode: ts_pgns_1.GroupFunction.Acknowledge,
239
+ pgn: PGN,
240
+ pgnErrorCode: ts_pgns_1.PgnErrorCode.NotSupported,
241
+ transmissionIntervalPriorityErrorCode: ts_pgns_1.TransmissionInterval.Acknowledge,
242
+ numberOfParameters: 0,
243
+ list: []
244
+ }
245
+ };
246
+ device.sendPGN(acknowledgement);
247
+ }
248
+ }
249
+ }
250
+ function handleISOAddressClaim(device, n2kMsg) {
251
+ if (n2kMsg.src != device.address) {
252
+ if (!device.devices[n2kMsg.src]) {
253
+ debug(`registering device ${n2kMsg.src}`);
254
+ device.devices[n2kMsg.src] = { addressClaim: n2kMsg };
255
+ if (device.cansend) {
256
+ //sendISORequest(device, 126996, undefined, n2kMsg.src)
257
+ }
258
+ }
259
+ return;
260
+ }
261
+ debug('Checking ISO address claim. %j', n2kMsg);
262
+ const uint64ValueFromReceivedClaim = getISOAddressClaimAsUint64(n2kMsg);
263
+ const uint64ValueFromOurOwnClaim = getISOAddressClaimAsUint64(device.addressClaim);
264
+ if (uint64ValueFromOurOwnClaim < uint64ValueFromReceivedClaim) {
265
+ debug(`Address conflict detected! Kept our address as ${device.address}.`);
266
+ sendAddressClaim(device); // We have smaller address claim data -> we can keep our address -> re-claim it
267
+ }
268
+ else if (uint64ValueFromOurOwnClaim > uint64ValueFromReceivedClaim) {
269
+ device.foundConflict = true;
270
+ increaseOwnAddress(device); // We have bigger address claim data -> we have to change our address
271
+ debug(`Address conflict detected! trying address ${device.address}.`);
272
+ sendAddressClaim(device);
273
+ }
274
+ }
275
+ function increaseOwnAddress(device) {
276
+ const start = device.address;
277
+ do {
278
+ device.address = (device.address + 1) % 253;
279
+ } while (device.address != start && device.devices[device.address]);
280
+ }
281
+ function handleProductInformation(device, n2kMsg) {
282
+ if (!device.devices[n2kMsg.src]) {
283
+ device.devices[n2kMsg.src] = {};
284
+ }
285
+ debug('got product information %j', n2kMsg);
286
+ device.devices[n2kMsg.src].productInformation = n2kMsg;
287
+ }
288
+ function sendHeartbeat(device) {
289
+ device.heartbeatCounter = device.heartbeatCounter + 1;
290
+ if (device.heartbeatCounter > 252) {
291
+ device.heartbeatCounter = 0;
292
+ }
293
+ const hb = {
294
+ pgn: 126993,
295
+ dst: 255,
296
+ prio: 7,
297
+ fields: {
298
+ dataTransmitOffset: 60,
299
+ sequenceCounter: device.heartbeatCounter,
300
+ controller1State: ts_pgns_1.ControllerState.ErrorActive
301
+ }
302
+ };
303
+ device.sendPGN(hb);
304
+ }
305
+ function sendAddressClaim(device) {
306
+ if (device.devices[device.address]) {
307
+ //someone already has this address, so find a free one
308
+ increaseOwnAddress(device);
309
+ }
310
+ debug(`Sending address claim ${device.address}`);
311
+ device.sendPGN(device.addressClaim);
312
+ device.setStatus(`Claimed address ${device.address}`);
313
+ device.addressClaimSentAt = Date.now();
314
+ if (device.addressClaimChecker) {
315
+ clearTimeout(device.addressClaimChecker);
316
+ }
317
+ device.addressClaimChecker = setTimeout(() => {
318
+ //if ( Date.now() - device.addressClaimSentAt > 1000 ) {
319
+ //device.addressClaimChecker = null
320
+ debug('claimed address %d', device.address);
321
+ device.cansend = true;
322
+ if (!device.sentAvailable) {
323
+ if (device.options.app) {
324
+ device.options.app.emit('nmea2000OutAvailable');
325
+ }
326
+ device.emit('nmea2000OutAvailable');
327
+ device.sentAvailable = true;
328
+ }
329
+ sendISORequest(device, 126996);
330
+ if (!device.heartbeatInterval) {
331
+ device.heartbeatInterval = setInterval(() => {
332
+ sendHeartbeat(device);
333
+ }, 60 * 1000);
334
+ }
335
+ //}
336
+ }, device.addressClaimDetectionTime);
337
+ }
338
+ function sendISORequest(device, pgn, src = undefined, dst = 255) {
339
+ debug(`Sending iso request for ${pgn} to ${dst}`);
340
+ const isoRequest = {
341
+ pgn: 59904,
342
+ dst: dst,
343
+ fields: {
344
+ pgn
345
+ }
346
+ };
347
+ device.sendPGN(isoRequest, src);
348
+ }
349
+ function sendProductInformation(device) {
350
+ debug('Sending product info %j', device.productInfo);
351
+ device.sendPGN(device.productInfo);
352
+ }
353
+ function sendConfigInformation(device) {
354
+ if (device.configurationInfo) {
355
+ debug('Sending config info..');
356
+ device.sendPGN(device.configurationInfo);
357
+ }
358
+ }
359
+ function sendNAKAcknowledgement(device, src, requestedPGN) {
360
+ const acknowledgement = {
361
+ pgn: 59392,
362
+ dst: src,
363
+ fields: {
364
+ control: ts_pgns_1.IsoControl.Ack,
365
+ groupFunction: 255,
366
+ pgn: requestedPGN
367
+ }
368
+ };
369
+ device.sendPGN(acknowledgement);
370
+ }
371
+ function sendPGNList(device, dst) {
372
+ //FIXME: for now, adding everything that signalk-to-nmea2000 supports
373
+ //need a way for plugins, etc. to register the pgns they provide
374
+ const pgnList = {
375
+ pgn: 126464,
376
+ dst,
377
+ fields: {
378
+ functionCode: ts_pgns_1.PgnListFunction.TransmitPgnList,
379
+ list: device.transmitPGNs
380
+ }
381
+ };
382
+ device.sendPGN(pgnList);
383
+ }
384
+ function getISOAddressClaimAsUint64(pgn) {
385
+ return new int64_buffer_1.Uint64LE((0, toPgn_1.toPgn)(pgn));
386
+ }
387
+ //# sourceMappingURL=n2kDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n2kDevice.js","sourceRoot":"","sources":["../lib/n2kDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Transform } from 'stream';
2
+ export declare function CanbusStream(options: any): Canbus;
3
+ export declare class Canbus extends Transform {
4
+ plainText: boolean;
5
+ options: any;
6
+ setProviderStatus: any;
7
+ setProviderError: any;
8
+ socketcan: any;
9
+ noDataInterval: any;
10
+ channel: any;
11
+ lastDataReceived: number | undefined;
12
+ constructor(options: any);
13
+ start(): void;
14
+ connect(): boolean;
15
+ sendPGN(msg: any, force?: boolean): void;
16
+ }
17
+ //# sourceMappingURL=ncanbus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ncanbus.d.ts","sourceRoot":"","sources":["../lib/ncanbus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAWlC,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,UAExC;AAED,qBAAa,MAAO,SAAQ,SAAS;IACnC,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,GAAG,CAAA;IACZ,iBAAiB,EAAE,GAAG,CAAA;IACtB,gBAAgB,EAAE,GAAG,CAAA;IACrB,SAAS,EAAE,GAAG,CAAA;IACd,cAAc,EAAE,GAAG,CAAA;IACnB,OAAO,EAAE,GAAG,CAAA;IACZ,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;gBAExB,OAAO,EAAE,GAAG;IA2ExB,KAAK;IAEL,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,OAAe;CACzC"}