mbusgateway3variant/cube/User/Src/mbusParserExt.c

53 lines
1.4 KiB
C
Raw Normal View History

2020-11-17 18:13:34 +01:00
#include <mbus/mbus-protocol.h>
#include <mbusParserExt.h>
2020-11-17 18:26:11 +01:00
#include <logger.h>
2020-11-17 18:13:34 +01:00
2020-11-17 18:20:09 +01:00
#include <string.h>
2020-11-17 18:13:34 +01:00
static parsedVIB_t parseVIB_FB(mbus_value_information_block vib) {
2020-11-17 18:20:09 +01:00
parsedVIB_t parsedVIB = { .name = "FB unknown", .unit = "?", .exponent = 1 };
2020-11-17 18:13:34 +01:00
return parsedVIB;
}
static parsedVIB_t parseVIB_FD(mbus_value_information_block vib) {
2020-11-17 18:20:09 +01:00
parsedVIB_t parsedVIB = { .name = "FD unknown", .unit = "?", .exponent = 1 };
2020-11-17 18:13:34 +01:00
return parsedVIB;
}
static parsedVIB_t parseVIB_default(mbus_value_information_block vib) {
2020-11-17 18:20:09 +01:00
parsedVIB_t parsedVIB = { .name = "default unknown", .unit = "?", .exponent = 1 };
if ((vib.vif & 0b00000000) == 0b00000000) {
strcpy(parsedVIB.name, "Energy");
strcpy(parsedVIB.unit, "Wh");
2020-11-17 18:21:49 +01:00
parsedVIB.exponent = (vib.vif & 0b0111) - 3;
2020-11-17 18:26:11 +01:00
} else if ((vib.vif & 0b00101000) == 0b00101000) {
strcpy(parsedVIB.name, "Power");
strcpy(parsedVIB.unit, "W");
parsedVIB.exponent = (vib.vif & 0b0111) - 3;
} else {
coloredMsg(LOG_RED, true, "mpe pvd unknown vif 0x%02x", vib.vif);
2020-11-17 18:20:09 +01:00
}
2020-11-17 18:13:34 +01:00
return parsedVIB;
}
parsedVIB_t parseVIB(mbus_value_information_block vib) {
parsedVIB_t parsedVIB;
if (vib.vif == 0xfb) {
parsedVIB = parseVIB_FB(vib);
} else if (vib.vif == 0xfd) {
parsedVIB = parseVIB_FD(vib);
} else {
parsedVIB = parseVIB_default(vib);
}
return parsedVIB;
}