diff --git a/src/wmbus.h b/src/wmbus.h index e6034fb..6807411 100644 --- a/src/wmbus.h +++ b/src/wmbus.h @@ -27,6 +27,8 @@ #define LIST_OF_LINK_MODES \ X(Any,--anylinkmode) \ X(C1,--c1) \ + X(S1,--s1) \ + X(S1m,--s1m) \ X(T1,--t1) \ X(N1a,--n1a) \ X(N1b,--n1b) \ diff --git a/src/wmbus_amb8465.cc b/src/wmbus_amb8465.cc index f2bdf20..5e1448c 100644 --- a/src/wmbus_amb8465.cc +++ b/src/wmbus_amb8465.cc @@ -196,6 +196,8 @@ void WMBusAmber::getConfiguration() void WMBusAmber::setLinkMode(LinkMode lm) { if (lm != LinkMode::C1 && + lm != LinkMode::S1 && + lm != LinkMode::S1m && lm != LinkMode::T1) { error("LinkMode %d is not implemented for amb8465\n", (int)lm); @@ -209,9 +211,16 @@ void WMBusAmber::setLinkMode(LinkMode lm) { sent_command_ = msg[1]; msg[2] = 1; // Len if (lm == LinkMode::C1) { - msg[3] = 0x0E; // Reception of C1 and C2 messages - } if (lm == LinkMode::T1) { - msg[3] = 0x05; // T1-Meter + msg[3] = 0x0E; + } else + if (lm == LinkMode::S1) { + msg[3] = 0x01; + } else + if (lm == LinkMode::S1m) { + msg[3] = 0x02; + } else + if (lm == LinkMode::T1) { + msg[3] = 0x05; } msg[4] = xorChecksum(msg, 4); diff --git a/src/wmbus_im871a.cc b/src/wmbus_im871a.cc index bc5aa6c..7430b4b 100644 --- a/src/wmbus_im871a.cc +++ b/src/wmbus_im871a.cc @@ -166,6 +166,12 @@ LinkMode WMBusIM871A::getLinkMode() { if (received_payload_[offset] == (int)LinkModeIM871A::C1a) { lm = LinkMode::C1; } + if (received_payload_[offset] == (int)LinkModeIM871A::S1) { + lm = LinkMode::S1; + } + if (received_payload_[offset] == (int)LinkModeIM871A::S1m) { + lm = LinkMode::S1m; + } if (received_payload_[offset] == (int)LinkModeIM871A::T1) { lm = LinkMode::T1; } @@ -268,6 +274,8 @@ LinkMode WMBusIM871A::getLinkMode() { void WMBusIM871A::setLinkMode(LinkMode lm) { if (lm != LinkMode::C1 && + lm != LinkMode::S1 && + lm != LinkMode::S1m && lm != LinkMode::T1 && lm != LinkMode::N1a && lm != LinkMode::N1b && @@ -289,6 +297,10 @@ void WMBusIM871A::setLinkMode(LinkMode lm) msg[5] = 2; // iff1 bits: Set Radio Mode if (lm == LinkMode::C1) { msg[6] = (int)LinkModeIM871A::C1a; + } else if (lm == LinkMode::S1) { + msg[6] = (int)LinkModeIM871A::S1; + } else if (lm == LinkMode::S1m) { + msg[6] = (int)LinkModeIM871A::S1m; } else if (lm == LinkMode::T1) { msg[6] = (int)LinkModeIM871A::T1; } else if (lm == LinkMode::N1a) { diff --git a/src/wmbus_im871a.h b/src/wmbus_im871a.h index 2055419..9a54c89 100644 --- a/src/wmbus_im871a.h +++ b/src/wmbus_im871a.h @@ -57,6 +57,7 @@ #define HWTEST_MSG_RADIOTEST_REQ 0x01 #define HWTEST_MSG_RADIOTEST_RSP 0x02 +// LinkModeIM871A::S1 is 0, S1m is 1 etc. These numbers are what the dongle requires. #define LIST_OF_IM871A_LINK_MODES X(S1)X(S1m)X(S2)X(T1)X(T2)X(R2)X(C1a)X(C1b)X(C2a)X(C2b) \ X(N1A)X(N2A)X(N1B)X(N2B)X(N1C)X(N2C)X(N1D)X(N2D)X(N1E)X(N2E)X(N1F)X(N2F)X(UNKNOWN)