@canboat/canboatjs 3.0.2 → 3.2.2
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/.github/workflows/publish.yml +18 -9
- package/.github/workflows/test.yml +2 -2
- package/.github/workflows/test_canboat_changes.yml +91 -0
- package/.husky/pre-commit +4 -0
- package/.mocharc.js +7 -0
- package/.prettierrc.json +5 -0
- package/README.md +5 -14
- package/dist/actisense-serial.d.ts +17 -0
- package/dist/actisense-serial.d.ts.map +1 -0
- package/dist/actisense-serial.js +569 -0
- package/dist/actisense-serial.js.map +1 -0
- package/dist/bin/actisense-file.d.ts +3 -0
- package/dist/bin/actisense-file.d.ts.map +1 -0
- package/dist/bin/actisense-file.js +49 -0
- package/dist/bin/actisense-file.js.map +1 -0
- package/dist/bin/actisense-n2k-tcp.d.ts +3 -0
- package/dist/bin/actisense-n2k-tcp.d.ts.map +1 -0
- package/dist/bin/actisense-n2k-tcp.js +46 -0
- package/dist/bin/actisense-n2k-tcp.js.map +1 -0
- package/dist/bin/actisense-serialjs.d.ts +3 -0
- package/dist/bin/actisense-serialjs.d.ts.map +1 -0
- package/dist/bin/actisense-serialjs.js +51 -0
- package/dist/bin/actisense-serialjs.js.map +1 -0
- package/dist/bin/analyzerjs.d.ts +3 -0
- package/dist/bin/analyzerjs.d.ts.map +1 -0
- package/dist/bin/analyzerjs.js +61 -0
- package/dist/bin/analyzerjs.js.map +1 -0
- package/dist/bin/candumpjs.d.ts +3 -0
- package/dist/bin/candumpjs.d.ts.map +1 -0
- package/dist/bin/candumpjs.js +73 -0
- package/dist/bin/candumpjs.js.map +1 -0
- package/dist/bin/cansend.d.ts +3 -0
- package/dist/bin/cansend.d.ts.map +1 -0
- package/dist/bin/cansend.js +123 -0
- package/dist/bin/cansend.js.map +1 -0
- package/dist/bin/ikonvert-serial.d.ts +3 -0
- package/dist/bin/ikonvert-serial.d.ts.map +1 -0
- package/dist/bin/ikonvert-serial.js +36 -0
- package/dist/bin/ikonvert-serial.js.map +1 -0
- package/dist/bin/to-pgn.d.ts +3 -0
- package/dist/bin/to-pgn.d.ts.map +1 -0
- package/dist/bin/to-pgn.js +57 -0
- package/dist/bin/to-pgn.js.map +1 -0
- package/dist/canId.d.ts +21 -0
- package/dist/canId.d.ts.map +1 -0
- package/dist/canId.js +66 -0
- package/dist/canId.js.map +1 -0
- package/dist/canId.test.d.ts +2 -0
- package/dist/canId.test.d.ts.map +1 -0
- package/dist/canId.test.js +58 -0
- package/dist/canId.test.js.map +1 -0
- package/dist/canbus.d.ts +17 -0
- package/dist/canbus.d.ts.map +1 -0
- package/dist/canbus.js +261 -0
- package/dist/canbus.js.map +1 -0
- package/dist/candevice.d.ts +23 -0
- package/dist/candevice.d.ts.map +1 -0
- package/dist/candevice.js +36 -0
- package/dist/candevice.js.map +1 -0
- package/dist/codes.d.ts +2 -0
- package/dist/codes.d.ts.map +1 -0
- package/dist/codes.js +24 -0
- package/dist/codes.js.map +1 -0
- package/dist/discovery.d.ts +17 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +119 -0
- package/dist/discovery.js.map +1 -0
- package/dist/fromPgn.d.ts +51 -0
- package/dist/fromPgn.d.ts.map +1 -0
- package/dist/fromPgn.js +989 -0
- package/dist/fromPgn.js.map +1 -0
- package/dist/fromPgnStream.d.ts +17 -0
- package/dist/fromPgnStream.d.ts.map +1 -0
- package/dist/fromPgnStream.js +47 -0
- package/dist/fromPgnStream.js.map +1 -0
- package/dist/ikonvert.d.ts +17 -0
- package/dist/ikonvert.d.ts.map +1 -0
- package/dist/ikonvert.js +224 -0
- package/dist/ikonvert.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/n2k-actisense.d.ts +24 -0
- package/dist/n2k-actisense.d.ts.map +1 -0
- package/dist/n2k-actisense.js +126 -0
- package/dist/n2k-actisense.js.map +1 -0
- package/dist/n2k-actisense.test.d.ts +2 -0
- package/dist/n2k-actisense.test.d.ts.map +1 -0
- package/dist/n2k-actisense.test.js +49 -0
- package/dist/n2k-actisense.test.js.map +1 -0
- package/dist/n2kDevice.d.ts +44 -0
- package/dist/n2kDevice.d.ts.map +1 -0
- package/dist/n2kDevice.js +436 -0
- package/dist/n2kDevice.js.map +1 -0
- package/dist/pgns.d.ts +22 -0
- package/dist/pgns.d.ts.map +1 -0
- package/dist/pgns.js +157 -0
- package/dist/pgns.js.map +1 -0
- package/dist/pgns.test.d.ts +2 -0
- package/dist/pgns.test.d.ts.map +1 -0
- package/dist/pgns.test.js +14 -0
- package/dist/pgns.test.js.map +1 -0
- package/dist/simpleCan.d.ts +17 -0
- package/dist/simpleCan.d.ts.map +1 -0
- package/dist/simpleCan.js +125 -0
- package/dist/simpleCan.js.map +1 -0
- package/dist/stringMsg.d.ts +33 -0
- package/dist/stringMsg.d.ts.map +1 -0
- package/dist/stringMsg.js +359 -0
- package/dist/stringMsg.js.map +1 -0
- package/dist/stringMsg.test.d.ts +2 -0
- package/dist/stringMsg.test.d.ts.map +1 -0
- package/dist/stringMsg.test.js +244 -0
- package/dist/stringMsg.test.js.map +1 -0
- package/dist/toPgn.d.ts +34 -0
- package/dist/toPgn.d.ts.map +1 -0
- package/dist/toPgn.js +500 -0
- package/dist/toPgn.js.map +1 -0
- package/dist/utilities.d.ts +28 -0
- package/dist/utilities.d.ts.map +1 -0
- package/dist/utilities.js +159 -0
- package/dist/utilities.js.map +1 -0
- package/dist/utilities.test.d.ts +2 -0
- package/dist/utilities.test.d.ts.map +1 -0
- package/dist/utilities.test.js +9 -0
- package/dist/utilities.test.js.map +1 -0
- package/dist/venus-mqtt.d.ts +11 -0
- package/dist/venus-mqtt.d.ts.map +1 -0
- package/dist/venus-mqtt.js +100 -0
- package/dist/venus-mqtt.js.map +1 -0
- package/dist/venus.d.ts +11 -0
- package/dist/venus.d.ts.map +1 -0
- package/dist/venus.js +71 -0
- package/dist/venus.js.map +1 -0
- package/dist/w2k01.d.ts +17 -0
- package/dist/w2k01.d.ts.map +1 -0
- package/dist/w2k01.js +119 -0
- package/dist/w2k01.js.map +1 -0
- package/dist/yddevice.d.ts +25 -0
- package/dist/yddevice.d.ts.map +1 -0
- package/dist/yddevice.js +43 -0
- package/dist/yddevice.js.map +1 -0
- package/dist/ydgw02.d.ts +17 -0
- package/dist/ydgw02.d.ts.map +1 -0
- package/dist/ydgw02.js +163 -0
- package/dist/ydgw02.js.map +1 -0
- package/dist/ydvr.d.ts +17 -0
- package/dist/ydvr.d.ts.map +1 -0
- package/dist/ydvr.js +120 -0
- package/dist/ydvr.js.map +1 -0
- package/eslint.config.js +58 -0
- package/jest.config.js +5 -0
- package/lib/actisense-serial.ts +644 -0
- package/lib/bin/actisense-file.ts +53 -0
- package/lib/bin/actisense-n2k-tcp.ts +50 -0
- package/lib/bin/actisense-serialjs.ts +55 -0
- package/{bin/analyzerjs → lib/bin/analyzerjs.ts} +16 -15
- package/{bin/candumpjs → lib/bin/candumpjs.ts} +19 -20
- package/lib/bin/cansend.ts +131 -0
- package/lib/bin/ikonvert-serial.ts +44 -0
- package/{bin/to-pgn → lib/bin/to-pgn.ts} +23 -17
- package/lib/bin/ydvr-file +33 -0
- package/lib/canId.test.js +35 -15
- package/lib/canId.ts +84 -0
- package/lib/canbus.ts +293 -0
- package/lib/candevice.ts +41 -0
- package/lib/codes.ts +21 -0
- package/lib/{discovery.js → discovery.ts} +32 -30
- package/lib/fromPgn.ts +1207 -0
- package/lib/{fromPgnStream.js → fromPgnStream.ts} +17 -12
- package/lib/{ikonvert.js → ikonvert.ts} +99 -94
- package/lib/index.ts +48 -0
- package/lib/n2k-actisense.test.js +31 -32
- package/lib/n2k-actisense.ts +152 -0
- package/lib/n2kDevice.ts +516 -0
- package/lib/pgns.test.ts +12 -0
- package/lib/pgns.ts +191 -0
- package/lib/simpleCan.ts +140 -0
- package/lib/stringMsg.test.js +58 -41
- package/lib/stringMsg.ts +464 -0
- package/lib/toPgn.ts +597 -0
- package/lib/utilities.ts +169 -0
- package/lib/venus-mqtt.js +69 -73
- package/lib/venus.js +8 -8
- package/lib/w2k01.ts +142 -0
- package/lib/{yddevice.js → yddevice.ts} +18 -16
- package/lib/{ydgw02.js → ydgw02.ts} +58 -51
- package/lib/ydvr.js +65 -147
- package/package.json +54 -18
- package/tsconfig.json +19 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/CHANGELOG.md +0 -101
- package/bin/actisense-file +0 -47
- package/bin/actisense-n2k-tcp +0 -45
- package/bin/actisense-serialjs +0 -52
- package/bin/candumpanalyzerjs +0 -29
- package/bin/cansend +0 -130
- package/bin/ikonvert-serial +0 -50
- package/bin/ydgw-analyzerjs +0 -36
- package/bin/ydvr-file +0 -33
- package/index.js +0 -53
- package/ios_canboat.js/main.js +0 -2
- package/ios_canboat.js/main.js.LICENSE.txt +0 -17
- package/ios_canboat.js/main.js.map +0 -1
- package/lib/canId.js +0 -64
- package/lib/canbus.js +0 -278
- package/lib/candevice.js +0 -51
- package/lib/codes.js +0 -69
- package/lib/codes.test.js +0 -17
- package/lib/codesMfgs.json +0 -166
- package/lib/fromPgn.js +0 -1027
- package/lib/n2k-actisense.js +0 -108
- package/lib/n2kDevice.js +0 -390
- package/lib/pgns.js +0 -196
- package/lib/pgns.test.js +0 -13
- package/lib/serial.js +0 -647
- package/lib/simpleCan.js +0 -105
- package/lib/stringMsg.js +0 -339
- package/lib/toPgn.js +0 -518
- package/lib/utilities.js +0 -111
- package/lib/w2k01.js +0 -129
package/lib/simpleCan.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
|
|
17
|
+
import { CanDevice } from './candevice'
|
|
18
|
+
import { CanID, encodeCanId, parseCanId } from './canId'
|
|
19
|
+
import { toActisenseSerialFormat, parseActisense } from './stringMsg'
|
|
20
|
+
import { toPgn } from './toPgn'
|
|
21
|
+
import { getPlainPGNs, binToActisense, createDebug } from './utilities'
|
|
22
|
+
import _ from 'lodash'
|
|
23
|
+
|
|
24
|
+
const debug = createDebug('canboatjs:simpleCan')
|
|
25
|
+
|
|
26
|
+
export function SimpleCan(
|
|
27
|
+
this: any,
|
|
28
|
+
options: any,
|
|
29
|
+
messageCb: (data: any) => void
|
|
30
|
+
) {
|
|
31
|
+
this.options = options
|
|
32
|
+
this.messageCb = messageCb
|
|
33
|
+
this.plainText = false
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
35
|
+
this.socketcan = require('socketcan')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
SimpleCan.prototype.start = function () {
|
|
39
|
+
const canDevice = this.options.canDevice || 'can0'
|
|
40
|
+
|
|
41
|
+
this.channel = this.socketcan.createRawChannel(canDevice)
|
|
42
|
+
if (this.messageCb) {
|
|
43
|
+
this.channel.addListener('onMessage', (msg: any) => {
|
|
44
|
+
const pgn = parseCanId(msg.id)
|
|
45
|
+
|
|
46
|
+
if (
|
|
47
|
+
this.candevice &&
|
|
48
|
+
this.candevice.cansend &&
|
|
49
|
+
pgn.src == this.candevice.address
|
|
50
|
+
) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const timestamp = new Date().toISOString()
|
|
55
|
+
if (this.plainText) {
|
|
56
|
+
this.messageCb(
|
|
57
|
+
binToActisense(pgn, timestamp, msg.data, msg.data.length)
|
|
58
|
+
)
|
|
59
|
+
} else {
|
|
60
|
+
this.messageCb({ pgn, length: msg.data.length, data: msg.data })
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
this.channel.start()
|
|
65
|
+
this.candevice = new CanDevice(this, {
|
|
66
|
+
...this.options,
|
|
67
|
+
disableDefaultTransmitPGNs: true,
|
|
68
|
+
disableNAKs: true
|
|
69
|
+
})
|
|
70
|
+
this.candevice.start()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
SimpleCan.prototype.sendPGN = function (msg: any) {
|
|
74
|
+
if (this.candevice) {
|
|
75
|
+
if (
|
|
76
|
+
!this.candevice.cansend &&
|
|
77
|
+
msg.pgn !== 59904 &&
|
|
78
|
+
msg.pgn !== 60928 &&
|
|
79
|
+
msg.pgn !== 126996
|
|
80
|
+
) {
|
|
81
|
+
debug('ignoring %j', msg)
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
debug('sending %j', msg)
|
|
86
|
+
|
|
87
|
+
const src =
|
|
88
|
+
msg.pgn === 59904 || (msg as any).forceSrc
|
|
89
|
+
? msg.src
|
|
90
|
+
: this.candevice.address
|
|
91
|
+
if (_.isString(msg)) {
|
|
92
|
+
const split = msg.split(',')
|
|
93
|
+
split[3] = src
|
|
94
|
+
msg = split.join(',')
|
|
95
|
+
} else {
|
|
96
|
+
msg.src = src
|
|
97
|
+
if (_.isUndefined(msg.prio)) {
|
|
98
|
+
msg.prio = 3
|
|
99
|
+
}
|
|
100
|
+
if (_.isUndefined(msg.dst)) {
|
|
101
|
+
msg.dst = 255
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let canid: number
|
|
106
|
+
let buffer: Buffer | undefined
|
|
107
|
+
|
|
108
|
+
let pgn
|
|
109
|
+
if (_.isObject(msg)) {
|
|
110
|
+
canid = encodeCanId(msg as CanID)
|
|
111
|
+
buffer = toPgn(msg)
|
|
112
|
+
pgn = msg
|
|
113
|
+
} else {
|
|
114
|
+
pgn = parseActisense(msg)
|
|
115
|
+
canid = encodeCanId(pgn)
|
|
116
|
+
buffer = pgn.data
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (debug.enabled) {
|
|
120
|
+
const str = toActisenseSerialFormat(pgn.pgn, buffer, pgn.dst, pgn.src)
|
|
121
|
+
debug(str)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (buffer) {
|
|
125
|
+
//seems as though 126720 should always be encoded this way
|
|
126
|
+
if (buffer.length > 8 || pgn.pgn == 126720) {
|
|
127
|
+
const pgns = getPlainPGNs(buffer)
|
|
128
|
+
pgns.forEach((pbuffer) => {
|
|
129
|
+
this.channel.send({ id: canid, ext: true, data: pbuffer })
|
|
130
|
+
})
|
|
131
|
+
} else {
|
|
132
|
+
this.channel.send({ id: canid, ext: true, data: buffer })
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
SimpleCan.prototype.sendActisenseFormat = function (msg: string) {
|
|
139
|
+
this.sendPGN(msg)
|
|
140
|
+
}
|
package/lib/stringMsg.test.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
const {
|
|
2
|
-
encodeActisense,
|
|
3
|
-
|
|
2
|
+
encodeActisense,
|
|
3
|
+
encodeYDRAW,
|
|
4
|
+
parseActisense,
|
|
5
|
+
parseCandump1,
|
|
6
|
+
parseCandump2,
|
|
7
|
+
parsePCDIN,
|
|
8
|
+
parsePDGY,
|
|
9
|
+
parseN2kString,
|
|
10
|
+
parsePDGYdebug,
|
|
11
|
+
parseYDRAW,
|
|
12
|
+
encodeActisenseN2KACSII,
|
|
13
|
+
parseActisenseN2KASCII,
|
|
14
|
+
parseCandump3
|
|
4
15
|
} = require('./stringMsg')
|
|
5
16
|
|
|
6
17
|
/* globals describe test expect */
|
|
@@ -16,7 +27,7 @@ describe('parseCandump1', () => {
|
|
|
16
27
|
len: 8,
|
|
17
28
|
src: 1,
|
|
18
29
|
pgn: 60928,
|
|
19
|
-
prio: 6
|
|
30
|
+
prio: 6
|
|
20
31
|
})
|
|
21
32
|
const msg2 = '<0x18ea2301> [3] 14 f0 01 '
|
|
22
33
|
expect(parseCandump1(msg2)).toEqual({
|
|
@@ -27,28 +38,29 @@ describe('parseCandump1', () => {
|
|
|
27
38
|
len: 3,
|
|
28
39
|
src: 1,
|
|
29
40
|
pgn: 59904,
|
|
30
|
-
prio: 6
|
|
41
|
+
prio: 6
|
|
31
42
|
})
|
|
32
|
-
|
|
33
43
|
})
|
|
34
44
|
})
|
|
35
45
|
|
|
36
46
|
describe('parseMultiLineCandump', () => {
|
|
37
47
|
test('multi line messages', () => {
|
|
38
|
-
const msgs = [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
const msgs = [
|
|
49
|
+
'can0 0DF80523 [8] C0 2B 7E 9A 47 70 F8 2F',
|
|
50
|
+
'can0 0DF80523 [8] C1 26 00 0C D1 EF 45 98',
|
|
51
|
+
'can0 0DF80523 [8] C2 E5 05 00 7E C2 94 03',
|
|
52
|
+
'can0 0DF80523 [8] C3 A8 29 F6 C0 B6 77 02',
|
|
53
|
+
'can0 0DF80523 [8] C4 00 00 00 00 23 FC 0A',
|
|
54
|
+
'can0 0DF80523 [8] C5 5A 00 A0 00 EE F3 FF',
|
|
55
|
+
'can0 0DF80523 [8] C6 FF 00 FF FF FF FF FF'
|
|
56
|
+
]
|
|
45
57
|
|
|
46
58
|
let res
|
|
47
59
|
msgs.forEach((msg) => {
|
|
48
60
|
res = parseCandump2(msg)
|
|
49
61
|
})
|
|
50
62
|
expect(res).toEqual({
|
|
51
|
-
bus:
|
|
63
|
+
bus: 'can0',
|
|
52
64
|
canId: 234358051,
|
|
53
65
|
data: Buffer.from('c6ff00ffffffffff', 'hex'),
|
|
54
66
|
dst: 255,
|
|
@@ -56,7 +68,7 @@ describe('parseMultiLineCandump', () => {
|
|
|
56
68
|
len: 8,
|
|
57
69
|
src: 35,
|
|
58
70
|
pgn: 129029,
|
|
59
|
-
prio: 3
|
|
71
|
+
prio: 3
|
|
60
72
|
})
|
|
61
73
|
})
|
|
62
74
|
})
|
|
@@ -74,7 +86,7 @@ describe('parseMultiLineCandumpV3', () => {
|
|
|
74
86
|
res = parseCandump3(msg)
|
|
75
87
|
})
|
|
76
88
|
expect(res).toEqual({
|
|
77
|
-
bus:
|
|
89
|
+
bus: 'vcan0',
|
|
78
90
|
canId: 166854913,
|
|
79
91
|
data: Buffer.from('63000000007f7fff', 'hex'),
|
|
80
92
|
dst: 255,
|
|
@@ -89,7 +101,8 @@ describe('parseMultiLineCandumpV3', () => {
|
|
|
89
101
|
|
|
90
102
|
describe('parseActisense', () => {
|
|
91
103
|
test('basic msg', () => {
|
|
92
|
-
const msg =
|
|
104
|
+
const msg =
|
|
105
|
+
'2016-04-09T16:41:09.078Z,3,127257,17,255,8,00,ff,7f,52,00,21,fe,ff'
|
|
93
106
|
expect(parseActisense(msg)).toEqual({
|
|
94
107
|
data: Buffer.from('00ff7f520021feff', 'hex'),
|
|
95
108
|
dst: 255,
|
|
@@ -98,20 +111,22 @@ describe('parseActisense', () => {
|
|
|
98
111
|
pgn: 127257,
|
|
99
112
|
prio: 3,
|
|
100
113
|
src: 17,
|
|
101
|
-
timestamp: '2016-04-09T16:41:09.078Z'
|
|
114
|
+
timestamp: '2016-04-09T16:41:09.078Z'
|
|
102
115
|
})
|
|
103
116
|
})
|
|
104
117
|
})
|
|
105
118
|
describe('encodeActisense', () => {
|
|
106
119
|
test('basic msg', () => {
|
|
107
|
-
const msg =
|
|
120
|
+
const msg =
|
|
121
|
+
'2016-04-09T16:41:09.078Z,3,127257,17,255,8,00,ff,7f,52,00,21,fe,ff'
|
|
108
122
|
const n2k = parseActisense(msg)
|
|
109
123
|
const res = encodeActisense(n2k)
|
|
110
124
|
expect(res).toEqual(msg)
|
|
111
125
|
})
|
|
112
126
|
})
|
|
113
127
|
|
|
114
|
-
const pdgyLong =
|
|
128
|
+
const pdgyLong =
|
|
129
|
+
'!PDGY,129029,3,2,255,483.236,UZ9FfR+bI/////////9//////////3//////////fwD8AIgTiBMAAAAAAQAAAAA'
|
|
115
130
|
describe('parsePDGY', () => {
|
|
116
131
|
test('basic msg', () => {
|
|
117
132
|
const msg = '!PDGY,126992,3,2,255,0.563,d2009e45b3b8821d'
|
|
@@ -129,7 +144,10 @@ describe('parsePDGY', () => {
|
|
|
129
144
|
})
|
|
130
145
|
test('long msg', () => {
|
|
131
146
|
expect(parsePDGY(pdgyLong)).toEqual({
|
|
132
|
-
data: Buffer.from(
|
|
147
|
+
data: Buffer.from(
|
|
148
|
+
'UZ9FfR+bI/////////9//////////3//////////fwD8AIgTiBMAAAAAAQAAAAA',
|
|
149
|
+
'base64'
|
|
150
|
+
),
|
|
133
151
|
dst: 255,
|
|
134
152
|
format: 'PDGY',
|
|
135
153
|
prefix: '!PDGY',
|
|
@@ -145,7 +163,7 @@ describe('parsePDGYdebug', () => {
|
|
|
145
163
|
test('basic msg', () => {
|
|
146
164
|
const msg = '$PDGY,000000,4,,5,482,1,0'
|
|
147
165
|
expect(parsePDGYdebug(msg)).toEqual({
|
|
148
|
-
data: Buffer.from([4,0,5,482,1,0]),
|
|
166
|
+
data: Buffer.from([4, 0, 5, 482, 1, 0]),
|
|
149
167
|
dst: 1,
|
|
150
168
|
format: 'PDGYdebug',
|
|
151
169
|
prefix: '$PDGY',
|
|
@@ -158,7 +176,7 @@ describe('parsePDGYdebug', () => {
|
|
|
158
176
|
errors: 0,
|
|
159
177
|
gatewaySrc: 1,
|
|
160
178
|
rejectedTX: 0,
|
|
161
|
-
timer: 482
|
|
179
|
+
timer: 482
|
|
162
180
|
}
|
|
163
181
|
})
|
|
164
182
|
})
|
|
@@ -177,7 +195,7 @@ describe('parsePCDIN', () => {
|
|
|
177
195
|
prio: 0,
|
|
178
196
|
src: 15,
|
|
179
197
|
timer: 1262304000000,
|
|
180
|
-
timestamp: new Date(
|
|
198
|
+
timestamp: new Date('2010-01-01T00:00:00.000Z')
|
|
181
199
|
})
|
|
182
200
|
})
|
|
183
201
|
})
|
|
@@ -186,7 +204,7 @@ describe('parseYDRAW', () => {
|
|
|
186
204
|
test('basic msg', () => {
|
|
187
205
|
const msg = '16:29:27.082 R 09F8017F 50 C3 B8 13 47 D8 2B C6'
|
|
188
206
|
expect(parseYDRAW(msg)).toEqual({
|
|
189
|
-
canId:
|
|
207
|
+
canId: 0x09f8017f,
|
|
190
208
|
data: Buffer.from('50C3B81347D82BC6', 'hex'),
|
|
191
209
|
direction: 'R',
|
|
192
210
|
dst: 255,
|
|
@@ -194,20 +212,20 @@ describe('parseYDRAW', () => {
|
|
|
194
212
|
pgn: 129025,
|
|
195
213
|
prio: 2,
|
|
196
214
|
src: 127,
|
|
197
|
-
time: '16:29:27.082'
|
|
215
|
+
time: '16:29:27.082'
|
|
198
216
|
})
|
|
199
217
|
})
|
|
200
218
|
})
|
|
201
219
|
describe('encodeYDRAW', () => {
|
|
202
220
|
test('long msg', () => {
|
|
203
221
|
expect(encodeYDRAW(parsePDGY(pdgyLong))).toEqual([
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
222
|
+
'0df80502 40 2f 51 9f 45 7d 1f 9b',
|
|
223
|
+
'0df80502 41 23 ff ff ff ff ff ff',
|
|
224
|
+
'0df80502 42 ff 7f ff ff ff ff ff',
|
|
225
|
+
'0df80502 43 ff ff 7f ff ff ff ff',
|
|
226
|
+
'0df80502 44 ff ff ff 7f 00 fc 00',
|
|
227
|
+
'0df80502 45 88 13 88 13 00 00 00',
|
|
228
|
+
'0df80502 46 00 01 00 00 00 00 ff'
|
|
211
229
|
])
|
|
212
230
|
})
|
|
213
231
|
})
|
|
@@ -217,13 +235,13 @@ describe('parseActisenseN2KASCII', () => {
|
|
|
217
235
|
const msg = 'A000021.293 05FF2 1F802 FFFC289A1600FFFF'
|
|
218
236
|
expect(parseActisenseN2KASCII(msg)).toEqual({
|
|
219
237
|
data: Buffer.from('FFFC289A1600FFFF', 'hex'),
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
238
|
+
dst: 255,
|
|
239
|
+
format: 'Actisense N2K ASCII',
|
|
240
|
+
len: 16,
|
|
241
|
+
pgn: 129026,
|
|
242
|
+
prio: 2,
|
|
243
|
+
src: 5,
|
|
244
|
+
time: '000021.293'
|
|
227
245
|
})
|
|
228
246
|
})
|
|
229
247
|
})
|
|
@@ -236,7 +254,6 @@ describe('encodeActisenseN2KACSII', () => {
|
|
|
236
254
|
})
|
|
237
255
|
})
|
|
238
256
|
|
|
239
|
-
|
|
240
257
|
describe('parseN2kString', () => {
|
|
241
258
|
test('empty string or not string', () => {
|
|
242
259
|
const emptyMsg = 'Input not string or empty.'
|
|
@@ -249,7 +266,7 @@ describe('parseN2kString', () => {
|
|
|
249
266
|
const errMsg = {
|
|
250
267
|
error: new Error('Parser not found for input. - foo,bar'),
|
|
251
268
|
input: 'foo,bar',
|
|
252
|
-
format: 'MISSING_PARSER'
|
|
269
|
+
format: 'MISSING_PARSER'
|
|
253
270
|
}
|
|
254
271
|
expect(parseN2kString('foo,bar')).toEqual(errMsg)
|
|
255
272
|
})
|