added BCD:2 BCD:3 BCD:4
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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"},
|
||||
|
||||
Reference in New Issue
Block a user