Move mfct specific bits from driverinfo into meter constructor.

pull/736/head
Fredrik Öhrström 2022-12-11 18:29:45 +01:00
rodzic bda349bcd2
commit 601b28332b
7 zmienionych plików z 30 dodań i 27 usunięć

Wyświetl plik

@ -30,17 +30,18 @@ namespace
di.setMeterType(MeterType::SmokeDetector);
di.addLinkMode(LinkMode::T1);
di.addDetection(MANUFACTURER_EIE, 0x1a, 0x0c);
di.addMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x04 ,"RTC_INVALID", TestBit::Set))));
di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new Driver(mi, di)); });
});
Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di)
{
setMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x04 ,"RTC_INVALID", TestBit::Set))));
addStringFieldWithExtractorAndLookup(
"status",
"Meter error flags. IMPORTANT! Smoke alarm is NOT reported here! You MUST check last alarm date and counter!",

Wyświetl plik

@ -31,17 +31,18 @@ namespace
di.setMeterType(MeterType::HeatMeter);
di.addLinkMode(LinkMode::T1);
di.addDetection(MANUFACTURER_BMT, 0x0d, 0x0b);
di.addMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x80 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new Driver(mi, di)); });
});
Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di)
{
setMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x80 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
addStringField(
"status",
"Meter status from tpl status field.",

Wyświetl plik

@ -32,17 +32,18 @@ namespace
di.addDetection(MANUFACTURER_LAS, 0x00, 0x14);
di.addDetection(MANUFACTURER_LAS, 0x00, 0x1b);
di.addDetection(MANUFACTURER_LAS, 0x02, 0x0b);
di.addMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x40 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new Driver(mi, di)); });
});
Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di)
{
setMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x40 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
addStringField(
"status",
"Meter status from tpl status field.",

Wyświetl plik

@ -30,17 +30,18 @@ namespace
di.setDefaultFields("name,id,current_temperature_c,current_relative_humidity_rh,timestamp");
di.setMeterType(MeterType::TempHygroMeter);
di.addDetection(MANUFACTURER_LAS, 0x1b, 0x07);
di.addMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x40 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
di.setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new Driver(mi, di)); });
});
Driver::Driver(MeterInfo &mi, DriverInfo &di) : MeterCommonImplementation(mi, di)
{
setMfctTPLStatusBits(
Translate::Lookup()
.add(Translate::Rule("TPL_STS", Translate::Type::BitToString)
.set(MaskBits(0xe0))
.set(DefaultMessage("OK"))
.add(Translate::Map(0x40 ,"SABOTAGE_ENCLOSURE", TestBit::Set))));
addStringField(
"status",
"Meter status from tpl status field.",

Wyświetl plik

@ -286,7 +286,7 @@ void MeterCommonImplementation::addLinkMode(LinkMode lm)
link_modes_.addLinkMode(lm);
}
void MeterCommonImplementation::addMfctTPLStatusBits(Translate::Lookup &lookup)
void MeterCommonImplementation::setMfctTPLStatusBits(Translate::Lookup &lookup)
{
mfct_tpl_status_bits_ = lookup;
}

Wyświetl plik

@ -191,7 +191,6 @@ public:
void setDefaultFields(string f) { default_fields_ = splitString(f, ','); }
void addLinkMode(LinkMode lm) { linkmodes_.addLinkMode(lm); }
void forceMfctIndex(int i) { force_mfct_index_ = i; }
void addMfctTPLStatusBits(Translate::Lookup &lookup) { mfct_tpl_status_bits_ = lookup; }
void setConstructor(function<shared_ptr<Meter>(MeterInfo&,DriverInfo&)> c) { constructor_ = c; }
void addDetection(uint16_t mfct, uchar type, uchar ver) { detect_.push_back({ mfct, type, ver }); }
vector<DriverDetect> &detect() { return detect_; }

Wyświetl plik

@ -98,7 +98,7 @@ protected:
std::vector<std::string> &meterExtraConstantFields();
void setMeterType(MeterType mt);
void addLinkMode(LinkMode lm);
void addMfctTPLStatusBits(Translate::Lookup &lookup);
void setMfctTPLStatusBits(Translate::Lookup &lookup);
// Print with the default unit for this quantity.
void addPrint(string vname, Quantity vquantity,