From 6a46e8cbdb61dd77a786bd8a01c09f0510efd85c Mon Sep 17 00:00:00 2001 From: john30 Date: Fri, 26 Dec 2014 13:57:28 +0100 Subject: [PATCH] added BCD:2 BCD:3 BCD:4 --- src/lib/ebus/data.cpp | 7 +++++-- src/lib/ebus/test/test_data.cpp | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index 6957c99c..ddcf9238 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -57,6 +57,9 @@ static const dataType_t dataTypes[] = { {"BDY", 8, bt_num, DAY|LST, 0x07, 0, 6, 1, 0}, // weekday, "Mon" - "Sun" (0x00 - 0x06) [ebus type] {"HDY", 8, bt_num, DAY|LST, 0x00, 1, 7, 1, 0}, // weekday, "Mon" - "Sun" (0x01 - 0x07) [Vaillant type] {"BCD", 8, bt_num, BCD|LST, 0xff, 0, 0x99, 1, 0}, // unsigned decimal in BCD, 0 - 99 + {"BCD", 16, bt_num, BCD|LST, 0xffff, 0, 0x9999, 1, 0}, // unsigned decimal in BCD, 0 - 9999 + {"BCD", 24, bt_num, BCD|LST, 0xffffff, 0, 0x999999, 1, 0}, // unsigned decimal in BCD, 0 - 999999 + {"BCD", 32, bt_num, BCD|LST, 0xffffffff, 0, 0x99999999, 1, 0}, // unsigned decimal in BCD, 0 - 99999999 pinDataType, uchDataType, {"SCH", 8, bt_num, SIG, 0x80, 0x81, 0x7f, 1, 0}, // signed integer, -127 - +127 @@ -729,7 +732,7 @@ result_t NumericDataField::readRawValue(SymbolString& input, for (size_t offset = start, i = 0, exp = 1; i < count; offset += incr, i++) { ch = input[baseOffset + offset]; if ((m_dataType.flags & BCD) != 0) { - if (ch == m_dataType.replacement) { + if (ch == (m_dataType.replacement & 0xff)) { value = m_dataType.replacement; return RESULT_OK; } @@ -776,7 +779,7 @@ result_t NumericDataField::writeRawValue(unsigned int value, for (size_t offset = start, i = 0, exp = 1; i < count; offset += incr, i++) { if ((m_dataType.flags & BCD) != 0) { if (value == m_dataType.replacement) - ch = m_dataType.replacement; + ch = m_dataType.replacement & 0xff; else { ch = (value / exp) % 100; ch = ((ch / 10) << 4) | (ch % 10); diff --git a/src/lib/ebus/test/test_data.cpp b/src/lib/ebus/test/test_data.cpp index cf88a52d..3ddd4f9b 100644 --- a/src/lib/ebus/test/test_data.cpp +++ b/src/lib/ebus/test/test_data.cpp @@ -97,6 +97,21 @@ int main() {"x,,bcd", "99", "10feffff0199", "00", ""}, {"x,,bcd", "-", "10feffff01ff", "00", ""}, {"x,,bcd", "", "10feffff019a", "00", "rw"}, + {"x,,bcd:2","126", "10feffff012601", "00", ""}, + {"x,,bcd:2","0", "10feffff010000", "00", ""}, + {"x,,bcd:2","9999", "10feffff019999", "00", ""}, + {"x,,bcd:2","-", "10feffff01ffff", "00", ""}, + {"x,,bcd:2","", "10feffff019a00", "00", "rw"}, + {"x,,bcd:3","12346", "10feffff01462301", "00", ""}, + {"x,,bcd:3","0", "10feffff01000000", "00", ""}, + {"x,,bcd:3","999999", "10feffff01999999", "00", ""}, + {"x,,bcd:3","-", "10feffff01ffffff", "00", ""}, + {"x,,bcd:3","", "10feffff01009a00", "00", "rw"}, + {"x,,bcd:4","1234567", "10feffff0167452301", "00", ""}, + {"x,,bcd:4","0", "10feffff0100000000", "00", ""}, + {"x,,bcd:4","99999999", "10feffff0199999999", "00", ""}, + {"x,,bcd:4","-", "10feffff01ffffffff", "00", ""}, + {"x,,bcd:4","", "10feffff0100009a00", "00", "rw"}, {"x,,str:16", "0123456789ABCDEF", "10feffff1130313233343536373839414243444546", "00", ""}, {"x,,uch:17", "", "10feffff00", "00", "c"}, {"x,s,uch", "0", "1025ffff0310111213", "0300010203", "W"},