@canboat/canboatjs 2.12.3 → 3.0.0-beta.10
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/bin/analyzerjs +6 -3
- package/bin/candumpjs +1 -14
- package/bin/cansend +130 -0
- package/ios_canboat.js/main.js +2 -0
- package/ios_canboat.js/main.js.LICENSE.txt +17 -0
- package/ios_canboat.js/main.js.map +1 -0
- package/lib/canbus.js +1 -16
- package/lib/fromPgn.js +35 -12
- package/lib/n2k-actisense.js +1 -17
- package/lib/n2kDevice.js +5 -3
- package/lib/pgns.js +3 -2
- package/lib/simpleCan.js +1 -15
- package/lib/toPgn.js +15 -7
- package/lib/utilities.js +15 -0
- package/package.json +4 -3
- package/examples/signalk-device-emulator/dist/index.d.ts +0 -11
- package/examples/signalk-device-emulator/dist/index.js +0 -129
- package/examples/signalk-device-emulator/signalk-device-emulator-1.0.0.tgz +0 -0
package/bin/analyzerjs
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const argv = require('minimist')(process.argv.slice(2), {
|
|
4
4
|
alias: { h: 'help' },
|
|
5
|
-
boolean: ['n']
|
|
6
|
-
boolean: ['r']
|
|
5
|
+
boolean: ['n', 'r', 'camel', 'camel-compat']
|
|
7
6
|
})
|
|
8
7
|
|
|
9
8
|
if ( argv['help'] ) {
|
|
@@ -13,6 +12,8 @@ Options:
|
|
|
13
12
|
-c don't check for invalid values
|
|
14
13
|
-n output null values
|
|
15
14
|
-r parse $MXPGN as little endian
|
|
15
|
+
--camel output field names in camelCase
|
|
16
|
+
--camel-compat output field names in camelCase and regular
|
|
16
17
|
-h, --help output usage information`)
|
|
17
18
|
process.exit(1)
|
|
18
19
|
}
|
|
@@ -21,7 +22,9 @@ const Parser = require('../index').FromPgn
|
|
|
21
22
|
var parser = new Parser( {
|
|
22
23
|
returnNulls: argv['n'] === true,
|
|
23
24
|
littleEndianMXPGN: argv['r'] === true,
|
|
24
|
-
checkForInvalidFields: argv['c'] !== true
|
|
25
|
+
checkForInvalidFields: argv['c'] !== true,
|
|
26
|
+
useCamel: argv['camel'],
|
|
27
|
+
useCamelCompat: argv['camel-compat']
|
|
25
28
|
})
|
|
26
29
|
|
|
27
30
|
parser.on('error', (pgn, error) => {
|
package/bin/candumpjs
CHANGED
|
@@ -4,7 +4,7 @@ const canboatjs = require('../index')
|
|
|
4
4
|
const Parser = require('../index').FromPgn
|
|
5
5
|
const { parseCanId } = require('../lib/canId')
|
|
6
6
|
const socketcan = require('socketcan')
|
|
7
|
-
|
|
7
|
+
const { binToActisense } = require('../lib/utilities')
|
|
8
8
|
var parser = new canboatjs.FromPgn()
|
|
9
9
|
|
|
10
10
|
|
|
@@ -83,16 +83,3 @@ channel.addListener('onMessage', (msg) => {
|
|
|
83
83
|
channel.start()
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
function binToActisense(pgn, data, length) {
|
|
87
|
-
return (
|
|
88
|
-
pgn.timestamp +
|
|
89
|
-
`,${pgn.prio},${pgn.pgn},${pgn.src},${pgn.dst},${length},` +
|
|
90
|
-
new Uint32Array(data)
|
|
91
|
-
.reduce(function(acc, i) {
|
|
92
|
-
acc.push(i.toString(16));
|
|
93
|
-
return acc;
|
|
94
|
-
}, [])
|
|
95
|
-
.map(x => (x.length === 1 ? "0" + x : x))
|
|
96
|
-
.join(",")
|
|
97
|
-
);
|
|
98
|
-
}
|
package/bin/cansend
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const canboatjs = require('../index')
|
|
4
|
+
const Parser = require('../index').FromPgn
|
|
5
|
+
const { parseCanId } = require('../lib/canId')
|
|
6
|
+
const { parseActisense } = require('../lib/stringMsg')
|
|
7
|
+
|
|
8
|
+
const { toPgn } = require('../lib/toPgn')
|
|
9
|
+
const { getPlainPGNs, binToActisense } = require('../lib/utilities')
|
|
10
|
+
const { encodeCanId } = require('../lib/canId')
|
|
11
|
+
|
|
12
|
+
const argv = require('minimist')(process.argv.slice(2), {
|
|
13
|
+
boolean: ['test', 'log-output'],
|
|
14
|
+
string: ['src'],
|
|
15
|
+
alias: { h: 'help' }
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
if ( argv['help'] ) {
|
|
19
|
+
console.error(`Usage: ${process.argv[0]} [options] candevice
|
|
20
|
+
|
|
21
|
+
Options:
|
|
22
|
+
--src <src> use src for all messages
|
|
23
|
+
--log-output log messages sent
|
|
24
|
+
--test don't connect or send any data
|
|
25
|
+
-h, --help output usage information`)
|
|
26
|
+
process.exit(1)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if ( argv['_'].length === 0 ) {
|
|
30
|
+
console.error('Please specify a device')
|
|
31
|
+
process.exit(1)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const canDevice = argv['_'][0]
|
|
35
|
+
const srcArg = argv.src
|
|
36
|
+
const logOut = argv['log-output']
|
|
37
|
+
const test = argv.test
|
|
38
|
+
|
|
39
|
+
let channel
|
|
40
|
+
|
|
41
|
+
if ( !test ) {
|
|
42
|
+
const socketcan = require('socketcan')
|
|
43
|
+
channel = socketcan.createRawChannel(canDevice);
|
|
44
|
+
|
|
45
|
+
channel.addListener('onStopped', (msg) => {
|
|
46
|
+
console.error('socketcan stopped')
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
channel.start()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
var readline = require('readline')
|
|
53
|
+
var rl = readline.createInterface({
|
|
54
|
+
input: process.stdin,
|
|
55
|
+
output: process.stdout,
|
|
56
|
+
terminal: false
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
var input = []
|
|
60
|
+
|
|
61
|
+
rl.on('line', function (line) {
|
|
62
|
+
if ( line.length === 0 ) {
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
let msg = line[0] === '{' ? JSON.parse(line) : line
|
|
67
|
+
|
|
68
|
+
if ( typeof msg === 'string' ) {
|
|
69
|
+
var split = msg.split(',')
|
|
70
|
+
if ( srcArg !== undefined ) {
|
|
71
|
+
split[3] = srcArg
|
|
72
|
+
}
|
|
73
|
+
msg = split.join(',')
|
|
74
|
+
} else {
|
|
75
|
+
if ( msg.prio === undefined ) {
|
|
76
|
+
msg.prio = 3
|
|
77
|
+
}
|
|
78
|
+
if ( msg.dst === undefined ) {
|
|
79
|
+
msg.dst = 255
|
|
80
|
+
}
|
|
81
|
+
if ( srcArg !== undefined ) {
|
|
82
|
+
msg.src = srcArg
|
|
83
|
+
}
|
|
84
|
+
if ( msg.src === undefined ) {
|
|
85
|
+
msg.src = 100
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
var pgn, canid, buffer
|
|
90
|
+
if ( typeof msg === 'object' ) {
|
|
91
|
+
canid = encodeCanId(msg)
|
|
92
|
+
buffer = toPgn(msg)
|
|
93
|
+
if ( buffer === undefined ) {
|
|
94
|
+
console.error('invalid input: %s', line)
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
pgn = msg
|
|
98
|
+
} else {
|
|
99
|
+
pgn = parseActisense(msg)
|
|
100
|
+
|
|
101
|
+
if ( isNaN(pgn.prio) || isNaN(pgn.pgn) || isNaN(pgn.dst) || isNaN(pgn.src) ) {
|
|
102
|
+
console.error('invalid input: ' + line)
|
|
103
|
+
return
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
canid = encodeCanId(pgn)
|
|
107
|
+
buffer = pgn.data
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
pgn.timestamp = new Date().toISOString()
|
|
111
|
+
|
|
112
|
+
if ( buffer.length > 8 || pgn.pgn == 126720 ) {
|
|
113
|
+
var pgns = getPlainPGNs(buffer)
|
|
114
|
+
pgns.forEach(pbuffer => {
|
|
115
|
+
if ( !test ) {
|
|
116
|
+
channel.send({id: canid, ext:true, data: pbuffer})
|
|
117
|
+
}
|
|
118
|
+
if ( logOut ) {
|
|
119
|
+
console.log(binToActisense(pgn, pbuffer, pbuffer.length))
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
} else {
|
|
123
|
+
if ( !test ) {
|
|
124
|
+
channel.send({id: canid, ext:true, data: buffer})
|
|
125
|
+
}
|
|
126
|
+
if ( logOut ) {
|
|
127
|
+
console.log(binToActisense(pgn, buffer, buffer.length))
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
})
|