@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 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: require('./lib/pgns').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
- if (!field.value2name) {
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: flow(getPgn, first),
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
- if (!field.name2value) {
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canboat/canboatjs",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Native javascript version of canboat",
5
5
  "main": "index.js",
6
6
  "scripts": {