@canboat/canboatjs 2.0.0 → 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 +5 -10
- 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
|
|
@@ -75,7 +75,7 @@ function toPgn(data) {
|
|
|
75
75
|
if ( !_.isArray(fields) ) {
|
|
76
76
|
fields = [ fields.Field ]
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
let RepeatingFields = pgnData.RepeatingFieldSet1Size ? pgnData.RepeatingFieldSet1Size : 0
|
|
79
79
|
for ( var index = 0; index < fields.length - RepeatingFields; index++ ) {
|
|
80
80
|
var field = fields[index]
|
|
81
81
|
var value = data[field.Name];
|
|
@@ -92,6 +92,7 @@ function toPgn(data) {
|
|
|
92
92
|
pgnData = pgnList[0]
|
|
93
93
|
value = pgnData.Fields[index].Match
|
|
94
94
|
fields = pgnData.Fields
|
|
95
|
+
RepeatingFields = pgnData.RepeatingFieldSet1Size ? pgnData.RepeatingFieldSet1Size : 0
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
writeField(bs, pgn_number, field, data, value)
|
|
@@ -183,7 +184,7 @@ function writeField(bs, pgn_number, field, data, value, bitLength) {
|
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
if (field.Resolution && typeof value === 'number' ) {
|
|
186
|
-
value = (value / field.Resolution).toFixed(0)
|
|
187
|
+
value = Number((value / field.Resolution).toFixed(0))
|
|
187
188
|
}
|
|
188
189
|
|
|
189
190
|
if ( field.Type && fieldTypeWriters[field.Type] ) {
|
|
@@ -269,13 +270,7 @@ function writeVariableLengthField(bs, pgn_number, pgn, field, value) {
|
|
|
269
270
|
}
|
|
270
271
|
|
|
271
272
|
function lookup(field, stringValue) {
|
|
272
|
-
|
|
273
|
-
field.name2value = {};
|
|
274
|
-
field.EnumValues.forEach(function(enumPair) {
|
|
275
|
-
field.name2value[enumPair.name] = Number(enumPair.value)
|
|
276
|
-
})
|
|
277
|
-
}
|
|
278
|
-
var res = field.name2value[stringValue];
|
|
273
|
+
var res = lookupEnumValueForField(field, stringValue)
|
|
279
274
|
return _.isUndefined(res) ? stringValue : res
|
|
280
275
|
}
|
|
281
276
|
|