diff --git a/src/main.cc b/src/main.cc index f5dbbbc..d0e3204 100644 --- a/src/main.cc +++ b/src/main.cc @@ -46,7 +46,6 @@ using namespace std; int main(int argc, char **argv); void check_if_multiple_wmbus_meters_running(); void check_for_dead_wmbus_devices(Configuration *config); -shared_ptr create_meter(Configuration *config, MeterType type, MeterInfo *mi, const char *keymsg); shared_ptr create_printer(Configuration *config); shared_ptr create_wmbus_object(Detected *detected, Configuration *config, shared_ptr manager); enum class DetectionType { STDIN_FILE_SIMULATION, ALL }; @@ -304,31 +303,6 @@ void check_for_dead_wmbus_devices(Configuration *config) } } -shared_ptr create_meter(Configuration *config, MeterType type, MeterInfo *mi, const char *keymsg) -{ - shared_ptr newm; - - switch (type) - { -#define X(mname,link,info,type,cname) \ - case MeterType::type: \ - { \ - newm = create##cname(*mi); \ - newm->addConversions(config->conversions); \ - verbose("(main) configured \"%s\" \"" #mname "\" \"%s\" %s\n", \ - mi->name.c_str(), mi->id.c_str(), keymsg); \ - return newm; \ - } \ - break; -LIST_OF_METERS -#undef X - case MeterType::UNKNOWN: - error("No such meter type \"%s\"\n", mi->type.c_str()); - break; - } - return newm; -} - shared_ptr create_wmbus_object(Detected *detected, Configuration *config, shared_ptr manager) { @@ -717,7 +691,7 @@ void list_shell_envs(Configuration *config, string meter_type) vector envs; Telegram t; MeterInfo mi; - shared_ptr meter = create_meter(config, toMeterType(meter_type), &mi, ""); + shared_ptr meter = createMeter(config, toMeterType(meter_type), &mi); meter->printMeter(&t, &ignore1, &ignore2, config->separator, @@ -737,7 +711,7 @@ void list_shell_envs(Configuration *config, string meter_type) void list_fields(Configuration *config, string meter_type) { MeterInfo mi; - shared_ptr meter = create_meter(config, toMeterType(meter_type), &mi, ""); + shared_ptr meter = createMeter(config, toMeterType(meter_type), &mi); int width = 0; for (auto &p : meter->prints()) @@ -1138,8 +1112,7 @@ void setup_meters(Configuration *config, MeterManager *manager) { for (auto &m : config->meters) { - const char *keymsg = (m.key[0] == 0) ? "not-encrypted" : "encrypted"; - auto meter = create_meter(config, toMeterType(m.type), &m, keymsg); + auto meter = createMeter(config, toMeterType(m.type), &m); manager->addMeter(meter); } } diff --git a/src/meters.cc b/src/meters.cc index e1372b1..476bdaa 100644 --- a/src/meters.cc +++ b/src/meters.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2017-2020 Fredrik Öhrström + Copyright (C) 2017-2021 Fredrik Öhrström This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +15,7 @@ along with this program. If not, see . */ +#include"config.h" #include"meters.h" #include"meters_common_implementation.h" #include"units.h" @@ -736,3 +737,30 @@ METER_DETECTION return false; } + +shared_ptr createMeter(Configuration *config, MeterType type, MeterInfo *mi) +{ + shared_ptr newm; + + const char *keymsg = (mi->key[0] == 0) ? "not-encrypted" : "encrypted"; + + switch (type) + { +#define X(mname,link,info,type,cname) \ + case MeterType::type: \ + { \ + newm = create##cname(*mi); \ + newm->addConversions(config->conversions); \ + verbose("(main) configured \"%s\" \"" #mname "\" \"%s\" %s\n", \ + mi->name.c_str(), mi->id.c_str(), keymsg); \ + return newm; \ + } \ + break; +LIST_OF_METERS +#undef X + case MeterType::UNKNOWN: + error("No such meter type \"%s\"\n", mi->type.c_str()); + break; + } + return newm; +} diff --git a/src/meters.h b/src/meters.h index ce324e4..0c28976 100644 --- a/src/meters.h +++ b/src/meters.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2017-2020 Fredrik Öhrström + Copyright (C) 2017-2021 Fredrik Öhrström This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -399,4 +399,8 @@ LIST_OF_METERS Generic *createGeneric(WMBus *bus, MeterInfo &m); +struct Configuration; +struct MeterInfo; +shared_ptr createMeter(Configuration *config, MeterType type, MeterInfo *mi); + #endif