From e59776172b126f7b972e993cf11005af562af7fc Mon Sep 17 00:00:00 2001 From: John Date: Fri, 5 Nov 2021 10:33:39 +0100 Subject: [PATCH] fix missing length in dump for data types with more than one length variant --- src/lib/ebus/datatype.cpp | 25 +++++++++++++------------ src/lib/ebus/datatype.h | 5 ++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/ebus/datatype.cpp b/src/lib/ebus/datatype.cpp index 7a3424c9..3d6f251b 100755 --- a/src/lib/ebus/datatype.cpp +++ b/src/lib/ebus/datatype.cpp @@ -53,11 +53,12 @@ bool DataType::dump(OutputFormat outputFormat, size_t length, bool appendDivisor } } else { *output << m_id; - if (isAdjustableLength()) { + if (isAdjustableLength() || hasFlag(WLS)) { + *output << LENGTH_SEPARATOR; if (length == REMAIN_LEN) { - *output << ":*"; + *output << "*"; } else { - *output << ":" << static_cast(length); + *output << static_cast(length); } } if (appendDivisor) { @@ -986,7 +987,7 @@ DataTypeList::DataTypeList() { // WW is weekday Mon=0x01 - Sun=0x07, replacement 0xff) add(new DateTimeDataType("BDA", 32, BCD, 0xff, true, false, 0)); // date in BCD, 01.01.2000 - 31.12.2099 (0x01,0x01,0x00 - 0x31,0x12,0x99, replacement 0xff) - add(new DateTimeDataType("BDA", 24, BCD, 0xff, true, false, 0)); + add(new DateTimeDataType("BDA", 24, BCD|WLS, 0xff, true, false, 0)); // date with zero-based weekday in BCD, 01.01.2000 - 31.12.2099 (0x01,0x01,WZ,0x00 - 0x31,0x12,WZ,0x99, // WZ is zero-based weekday Mon=0x00 - Sun=0x06, replacement 0xff) add(new DateTimeDataType("BDZ", 32, BCD|SPE, 0xff, true, false, 0)); @@ -994,7 +995,7 @@ DataTypeList::DataTypeList() { // WW is weekday Mon=0x01 - Sun=0x07, replacement 0xff) add(new DateTimeDataType("HDA", 32, 0, 0xff, true, false, 0)); // date, 01.01.2000 - 31.12.2099 (0x01,0x01,0x00 - 0x1f,0x0c,0x63, replacement 0xff) - add(new DateTimeDataType("HDA", 24, 0, 0xff, true, false, 0)); + add(new DateTimeDataType("HDA", 24, WLS, 0xff, true, false, 0)); // date, days since 01.01.1900, 01.01.1900 - 06.06.2079 (0x00,0x00 - 0xff,0xff) add(new DateTimeDataType("DAY", 16, 0, 0xff, true, false, 0)); // date+time in minutes since 01.01.2009, 01.01.2009 - 31.12.2099 (0x00,0x00,0x00,0x00 - 0x02,0xda,0x4e,0x1f) @@ -1022,13 +1023,13 @@ DataTypeList::DataTypeList() { add(new NumberDataType("BDY", 8, DAY, 0x07, 0, 6, 1)); // weekday, "Mon" - "Sun" (0x00 - 0x06) [eBUS type] add(new NumberDataType("HDY", 8, DAY, 0x00, 1, 7, 1)); // weekday, "Mon" - "Sun" (0x01 - 0x07) [Vaillant type] add(new NumberDataType("BCD", 8, BCD, 0xff, 0, 99, 1)); // unsigned decimal in BCD, 0 - 99 - add(new NumberDataType("BCD", 16, BCD, 0xffff, 0, 9999, 1)); // unsigned decimal in BCD, 0 - 9999 - add(new NumberDataType("BCD", 24, BCD, 0xffffff, 0, 999999, 1)); // unsigned decimal in BCD, 0 - 999999 - add(new NumberDataType("BCD", 32, BCD, 0xffffffff, 0, 99999999, 1)); // unsigned decimal in BCD, 0 - 99999999 + add(new NumberDataType("BCD", 16, BCD|WLS, 0xffff, 0, 9999, 1)); // unsigned decimal in BCD, 0 - 9999 + add(new NumberDataType("BCD", 24, BCD|WLS, 0xffffff, 0, 999999, 1)); // unsigned decimal in BCD, 0 - 999999 + add(new NumberDataType("BCD", 32, BCD|WLS, 0xffffffff, 0, 99999999, 1)); // unsigned decimal in BCD, 0 - 99999999 add(new NumberDataType("HCD", 32, HCD|BCD|REQ, 0, 0, 99999999, 1)); // unsigned decimal in HCD, 0 - 99999999 - add(new NumberDataType("HCD", 8, HCD|BCD|REQ, 0, 0, 99, 1)); // unsigned decimal in HCD, 0 - 99 - add(new NumberDataType("HCD", 16, HCD|BCD|REQ, 0, 0, 9999, 1)); // unsigned decimal in HCD, 0 - 9999 - add(new NumberDataType("HCD", 24, HCD|BCD|REQ, 0, 0, 999999, 1)); // unsigned decimal in HCD, 0 - 999999 + add(new NumberDataType("HCD", 8, HCD|BCD|REQ|WLS, 0, 0, 99, 1)); // unsigned decimal in HCD, 0 - 99 + add(new NumberDataType("HCD", 16, HCD|BCD|REQ|WLS, 0, 0, 9999, 1)); // unsigned decimal in HCD, 0 - 9999 + add(new NumberDataType("HCD", 24, HCD|BCD|REQ|WLS, 0, 0, 999999, 1)); // unsigned decimal in HCD, 0 - 999999 add(new NumberDataType("SCH", 8, SIG, 0x80, 0x81, 0x7f, 1)); // signed integer, -127 - +127 add(new NumberDataType("D1B", 8, SIG, 0x80, 0x81, 0x7f, 1)); // signed integer, -127 - +127 // unsigned number (fraction 1/2), 0 - 100 (0x00 - 0xc8, replacement 0xff) @@ -1093,7 +1094,7 @@ void DataTypeList::clear() { } result_t DataTypeList::add(const DataType* dataType) { - if (!dataType->isAdjustableLength()) { + if (!dataType->isAdjustableLength() && dataType->hasFlag(WLS)) { ostringstream str; size_t bitCount = dataType->getBitCount(); str << dataType->getId() << LENGTH_SEPARATOR << static_cast(bitCount >= 8?bitCount/8:bitCount); diff --git a/src/lib/ebus/datatype.h b/src/lib/ebus/datatype.h index 825493bb..a3094ac0 100755 --- a/src/lib/ebus/datatype.h +++ b/src/lib/ebus/datatype.h @@ -178,9 +178,8 @@ enum PartType { /** bit flag for @a DataType: special marker for certain types. */ #define SPE 0x800 -/** bit flag for @a DataType: marker for a constant value. */ -#define CON 0x1000 - +/** bit flag for @a DataType: stored and dumped with length suffix (only when not @a ADJ). */ +#define WLS 0x1000 /** * Base class for all kinds of data types.