From a4aed0a91a2615e3710ad347296e7c4a6ead4b32 Mon Sep 17 00:00:00 2001 From: Luc Patiny Date: Sun, 5 Jun 2022 15:21:40 +0200 Subject: [PATCH] feat!: add createMultiLog The createCompactLog was renamed to createMultiLog createCompactLog is now compatible with the 'uc' format --- ...actLogTest.js => createCompactLog.test.js} | 2 +- src/creator/__tests__/createMultiLog.test.js | 24 ++++++++++++ src/creator/createCompactLog.js | 8 ---- src/creator/createMultiLog.js | 37 +++++++++++++++++++ src/index.js | 1 + 5 files changed, 63 insertions(+), 9 deletions(-) rename src/creator/__tests__/{createCompactLogTest.js => createCompactLog.test.js} (86%) create mode 100644 src/creator/__tests__/createMultiLog.test.js create mode 100644 src/creator/createMultiLog.js diff --git a/src/creator/__tests__/createCompactLogTest.js b/src/creator/__tests__/createCompactLog.test.js similarity index 86% rename from src/creator/__tests__/createCompactLogTest.js rename to src/creator/__tests__/createCompactLog.test.js index b18f849..cbcdcb8 100644 --- a/src/creator/__tests__/createCompactLogTest.js +++ b/src/creator/__tests__/createCompactLog.test.js @@ -20,5 +20,5 @@ test('createCompactLog', () => { }, 4, ), - ).toBe('0000FFFF00007FFF000100020003000400050006AAAA87'); + ).toBe('00007FFF0001000200030004AAAA84'); }); diff --git a/src/creator/__tests__/createMultiLog.test.js b/src/creator/__tests__/createMultiLog.test.js new file mode 100644 index 0000000..58eb83b --- /dev/null +++ b/src/creator/__tests__/createMultiLog.test.js @@ -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'); +}); diff --git a/src/creator/createCompactLog.js b/src/creator/createCompactLog.js index 3cca01c..4211074 100644 --- a/src/creator/createCompactLog.js +++ b/src/creator/createCompactLog.js @@ -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) * @@ -20,9 +17,6 @@ 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'); @@ -30,8 +24,6 @@ module.exports = function createCompactLog(data = {}, numberParameters = 26) { 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(); diff --git a/src/creator/createMultiLog.js b/src/creator/createMultiLog.js new file mode 100644 index 0000000..c13dc17 --- /dev/null +++ b/src/creator/createMultiLog.js @@ -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(); +}; diff --git a/src/index.js b/src/index.js index c914569..4683323 100644 --- a/src/index.js +++ b/src/index.js @@ -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'),