Skip to content

Commit

Permalink
feat!: add createMultiLog
Browse files Browse the repository at this point in the history
The createCompactLog was renamed to createMultiLog

createCompactLog is now compatible with the 'uc' format
  • Loading branch information
lpatiny committed Jun 5, 2022
1 parent 5b039ed commit a4aed0a
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ test('createCompactLog', () => {
},
4,
),
).toBe('0000FFFF00007FFF000100020003000400050006AAAA87');
).toBe('00007FFF0001000200030004AAAA84');
});
24 changes: 24 additions & 0 deletions src/creator/__tests__/createMultiLog.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';

const createMultiLog = require('../createMultiLog');

test('createMultiLog', () => {
expect(
createMultiLog(
{
id: 65535,
epoch: 32767,
parameters: {
A: 1,
B: 2,
C: 3,
D: 4,
},
eventId: 5,
eventValue: 6,
deviceId: 0xaaaa - 65536,
},
4,
),
).toBe('0000FFFF00007FFF000100020003000400050006AAAA87');
});
8 changes: 0 additions & 8 deletions src/creator/createCompactLog.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@

/**
* A log entry is a hexadecimal line composed of :
* - a sequential ID (8)
* - epoch (8)
* - a list of parameters values (n * 4)
* - a log event ID (4)
* - a log event value (4)
* - a device ID (4)
* - a checkdigit (2)
*
Expand All @@ -20,18 +17,13 @@ const numberToLabel = require('../util/numberToLabel');
module.exports = function createCompactLog(data = {}, numberParameters = 26) {
if (!data.parameters) data.parameters = [];
let result = '';
result += Number(data.id | 0)
.toString(16)
.padStart(8, '0');
result += Number(data.epoch | 0)
.toString(16)
.padStart(8, '0');
for (let i = 0; i < numberParameters; i++) {
let label = numberToLabel(i);
result += int16ToHex(data.parameters[label]);
}
result += int16ToHex(data.eventId);
result += int16ToHex(data.eventValue);
result += int16ToHex(data.deviceId);
result += calculateCheckDigit(result).toString(16).padStart(2, '0');
return result.toUpperCase();
Expand Down
37 changes: 37 additions & 0 deletions src/creator/createMultiLog.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict';

/**
* A log entry is a hexadecimal line composed of :
* - a sequential ID (8)
* - epoch (8)
* - a list of parameters values (n * 4)
* - a log event value (4)
* - a device ID (4)
* - a check digit (2)
*
* This means that for 26 parameters, the length of a log is 134 hexadecimal characters.
*/

const calculateCheckDigit = require('../util/calculateCheckDigit');
const int16ToHex = require('../util/int16ToHex');
const numberToLabel = require('../util/numberToLabel');

module.exports = function createCompactLog(data = {}, numberParameters = 26) {
if (!data.parameters) data.parameters = [];
let result = '';
result += Number(data.id | 0)
.toString(16)
.padStart(8, '0');
result += Number(data.epoch | 0)
.toString(16)
.padStart(8, '0');
for (let i = 0; i < numberParameters; i++) {
let label = numberToLabel(i);
result += int16ToHex(data.parameters[label]);
}
result += int16ToHex(data.eventId);
result += int16ToHex(data.eventValue);
result += int16ToHex(data.deviceId);
result += calculateCheckDigit(result).toString(16).padStart(2, '0');
return result.toUpperCase();
};
1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module.exports = {
calculateCheckDigit: require('./util/calculateCheckDigit'),
valueToRawNumber: require('./util/valueToRawNumber'),
createCompactLog: require('./creator/createCompactLog'),
createMultiLog: require('./creator/createMultiLog'),
DevicesInfo: require('legoino-device-information'),
labelToNumber: require('./util/labelToNumber'),
numberToLabel: require('./util/numberToLabel'),
Expand Down

0 comments on commit a4aed0a

Please sign in to comment.