@canboat/canboatjs 2.0.1 → 2.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.
- package/index.js +5 -1
- package/lib/fromPgn.js +2 -9
- package/lib/pgns.js +72 -1
- package/lib/toPgn.js +2 -8
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
const pgns = require('./lib/pgns')
|
|
20
|
+
|
|
19
21
|
module.exports = {
|
|
20
22
|
FromPgn: require('./lib/fromPgn').Parser,
|
|
21
23
|
parseN2kString: require('./lib/stringMsg').parseN2kString,
|
|
@@ -37,7 +39,9 @@ module.exports = {
|
|
|
37
39
|
VenusMQTT: require('./lib/venus-mqtt'),
|
|
38
40
|
discover: require('./lib/discovery'),
|
|
39
41
|
SimpleCan: require('./lib/simpleCan'),
|
|
40
|
-
addCustomPgn:
|
|
42
|
+
addCustomPgn: pgns.addCustomPgn,
|
|
43
|
+
lookupEnumerationValue: pgns.lookupEnumerationValue,
|
|
44
|
+
lookupEnumerationName: pgns.lookupEnumerationName
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
try {
|
package/lib/fromPgn.js
CHANGED
|
@@ -19,7 +19,7 @@ const trace = require('debug')('canboatjs:fromPgn:trace')
|
|
|
19
19
|
const EventEmitter = require('events')
|
|
20
20
|
const pkg = require('../package.json')
|
|
21
21
|
const _ = require('lodash')
|
|
22
|
-
const { pgns, getCustomPgn, addCustomPgn } = require('./pgns')
|
|
22
|
+
const { pgns, getCustomPgn, addCustomPgn, lookupEnumNameForField } = require('./pgns')
|
|
23
23
|
const BitStream = require('bit-buffer').BitStream
|
|
24
24
|
const BitView = require('bit-buffer').BitView
|
|
25
25
|
const Int64LE = require('int64-buffer').Int64LE
|
|
@@ -543,15 +543,8 @@ function pad(n, p, c)
|
|
|
543
543
|
}
|
|
544
544
|
|
|
545
545
|
function lookup(field, value) {
|
|
546
|
-
|
|
547
|
-
field.value2name = {};
|
|
548
|
-
field.EnumValues.forEach(function(enumPair) {
|
|
549
|
-
field.value2name[Number(enumPair.value)] = enumPair.name
|
|
550
|
-
})
|
|
551
|
-
}
|
|
552
|
-
var name = field.value2name[value]
|
|
546
|
+
var name = lookupEnumNameForField(field, value)
|
|
553
547
|
return name ? name : value
|
|
554
|
-
//return name
|
|
555
548
|
}
|
|
556
549
|
|
|
557
550
|
function lookupBitField(field, value) {
|
package/lib/pgns.js
CHANGED
|
@@ -35,14 +35,83 @@ function organizePGNs() {
|
|
|
35
35
|
return res
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/** doing this for now, when we move to the new canboat.json, we'll get from there*/
|
|
39
|
+
const enumMappings = {
|
|
40
|
+
SHIP_TYPE: {
|
|
41
|
+
pgn: 129040,
|
|
42
|
+
field: 'Type of ship'
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getField(pgn, name) {
|
|
47
|
+
return pgn.Fields.find(f => f.Name === name)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function lookupEnumerationName(enumName, value) {
|
|
51
|
+
let mapping = enumMappings[enumName]
|
|
52
|
+
if ( mapping ) {
|
|
53
|
+
let pgn = getPgn0(mapping.pgn)
|
|
54
|
+
if ( pgn ) {
|
|
55
|
+
let field = getField(pgn, mapping.field)
|
|
56
|
+
return field && lookupEnumNameForField(field, value)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function lookupEnumerationValue(enumName, name) {
|
|
62
|
+
let mapping = enumMappings[enumName]
|
|
63
|
+
if ( mapping ) {
|
|
64
|
+
let pgn = getPgn0(mapping.pgn)
|
|
65
|
+
if ( pgn ) {
|
|
66
|
+
let field = getField(pgn, mapping.field)
|
|
67
|
+
return field && lookupEnumValueForField(field, name)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getValue2Name(field) {
|
|
73
|
+
if (!field.value2name && field.EnumValues) {
|
|
74
|
+
field.value2name = {};
|
|
75
|
+
field.EnumValues.forEach(function(enumPair) {
|
|
76
|
+
field.value2name[Number(enumPair.value)] = enumPair.name
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
return field.value2name
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function getName2Value(field) {
|
|
83
|
+
if (!field.name2value && field.EnumValues) {
|
|
84
|
+
field.name2value = {};
|
|
85
|
+
field.EnumValues.forEach(function(enumPair) {
|
|
86
|
+
field.name2value[enumPair.name] = Number(enumPair.value)
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
return field.name2value
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function lookupEnumNameForField(field, value) {
|
|
93
|
+
let value2name = getValue2Name(field)
|
|
94
|
+
return value2name && value2name[value]
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function lookupEnumValueForField(field, stringValue) {
|
|
98
|
+
let name2value = getName2Value(field)
|
|
99
|
+
return name2value && name2value[stringValue]
|
|
100
|
+
}
|
|
101
|
+
|
|
38
102
|
const organizedPGNs = organizePGNs()
|
|
39
103
|
const getPgn = pgn => organizedPGNs[pgn]
|
|
104
|
+
const getPgn0 = flow(getPgn, first)
|
|
40
105
|
const customPgns = {}
|
|
41
106
|
|
|
42
107
|
module.exports = {
|
|
43
108
|
getPgn,
|
|
44
|
-
getPgn0
|
|
109
|
+
getPgn0,
|
|
45
110
|
pgns: organizedPGNs,
|
|
111
|
+
lookupEnumValueForField,
|
|
112
|
+
lookupEnumNameForField,
|
|
113
|
+
lookupEnumerationName,
|
|
114
|
+
lookupEnumerationValue,
|
|
46
115
|
addCustomPgn: (pgn) => {
|
|
47
116
|
if ( !customPgns[pgn.PGN] ) {
|
|
48
117
|
customPgns[pgn.PGN] = {
|
|
@@ -62,5 +131,7 @@ module.exports = {
|
|
|
62
131
|
},
|
|
63
132
|
getCustomPgn: (pgnNum) => {
|
|
64
133
|
return customPgns[pgnNum]
|
|
134
|
+
},
|
|
135
|
+
getEnumForField: (pgnNumber, fieldName) => {
|
|
65
136
|
}
|
|
66
137
|
}
|
package/lib/toPgn.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
const { getField } = require('./fromPgn')
|
|
18
|
-
const { pgns, getCustomPgn } = require('./pgns')
|
|
18
|
+
const { pgns, getCustomPgn, lookupEnumValueForField } = require('./pgns')
|
|
19
19
|
const _ = require('lodash')
|
|
20
20
|
const BitStream = require('bit-buffer').BitStream
|
|
21
21
|
const Int64LE = require('int64-buffer').Int64LE
|
|
@@ -270,13 +270,7 @@ function writeVariableLengthField(bs, pgn_number, pgn, field, value) {
|
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
function lookup(field, stringValue) {
|
|
273
|
-
|
|
274
|
-
field.name2value = {};
|
|
275
|
-
field.EnumValues.forEach(function(enumPair) {
|
|
276
|
-
field.name2value[enumPair.name] = Number(enumPair.value)
|
|
277
|
-
})
|
|
278
|
-
}
|
|
279
|
-
var res = field.name2value[stringValue];
|
|
273
|
+
var res = lookupEnumValueForField(field, stringValue)
|
|
280
274
|
return _.isUndefined(res) ? stringValue : res
|
|
281
275
|
}
|
|
282
276
|
|