From e55ef3d8f27c3b9989ef2e3ca174195abff407eb Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Mon, 19 Dec 2016 09:12:40 -0500 Subject: Remove main loop from application file Isolate main in its own file for maximum flexibility when linking. Change-Id: I7b1f591386d69a7044c65e7aab2116626166e4ff Signed-off-by: Brad Bishop --- Makefile.am | 3 ++- mainloop.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mainloop.hpp | 3 +++ readd.cpp | 52 ++----------------------------------------- 4 files changed, 80 insertions(+), 51 deletions(-) create mode 100644 mainloop.cpp create mode 100644 mainloop.hpp diff --git a/Makefile.am b/Makefile.am index 2ded4bf..cbe848d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,4 +7,5 @@ noinst_LTLIBRARIES = libhwmon.la libhwmon_la_SOURCES = \ argument.cpp \ directory.cpp \ - sensorset.cpp + sensorset.cpp \ + mainloop.cpp diff --git a/mainloop.cpp b/mainloop.cpp new file mode 100644 index 0000000..6244b91 --- /dev/null +++ b/mainloop.cpp @@ -0,0 +1,73 @@ +/** + * Copyright © 2016 IBM Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include "sensorset.hpp" +#include "sensorcache.hpp" +#include "hwmon.hpp" +#include "sysfs.hpp" + +int serverMain(const char* path) +{ + // Check sysfs for available sensors. + auto sensors = std::make_unique(path); + auto sensor_cache = std::make_unique(); + + // TODO: Issue#3 - Need to make calls to the dbus sensor cache here to + // ensure the objects all exist? + + // Polling loop. + while (true) + { + // Iterate through all the sensors. + for (auto& i : *sensors) + { + if (i.second.find(hwmon::entry::input) != i.second.end()) + { + // Read value from sensor. + int value = 0; + read_sysfs(make_sysfs_path(path, + i.first.first, i.first.second, + hwmon::entry::input), + value); + + // Update sensor cache. + if (sensor_cache->update(i.first, value)) + { + // TODO: Issue#4 - dbus event here. + std::cout << i.first.first << i.first.second << " = " + << value << std::endl; + } + } + } + + // Sleep until next interval. + // TODO: Issue#5 - Make this configurable. + // TODO: Issue#6 - Optionally look at polling interval sysfs entry. + { + using namespace std::literals::chrono_literals; + std::this_thread::sleep_for(1s); + } + + // TODO: Issue#7 - Should probably periodically check the SensorSet + // for new entries. + } + + return 0; +} + +// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/mainloop.hpp b/mainloop.hpp new file mode 100644 index 0000000..d3a5f96 --- /dev/null +++ b/mainloop.hpp @@ -0,0 +1,3 @@ +#pragma once + +int serverMain(const char* path); diff --git a/readd.cpp b/readd.cpp index ed32b0a..1ac5ddc 100644 --- a/readd.cpp +++ b/readd.cpp @@ -15,12 +15,8 @@ */ #include #include -#include #include "argument.hpp" -#include "sensorset.hpp" -#include "sensorcache.hpp" -#include "hwmon.hpp" -#include "sysfs.hpp" +#include "mainloop.hpp" static void exit_with_error(const char* err, char** argv) { @@ -45,51 +41,7 @@ int main(int argc, char** argv) // Finished getting options out, so cleanup the parser. options.reset(); - // Check sysfs for available sensors. - auto sensors = std::make_unique(path); - auto sensor_cache = std::make_unique(); - - // TODO: Issue#3 - Need to make calls to the dbus sensor cache here to - // ensure the objects all exist? - - // Polling loop. - while (true) - { - // Iterate through all the sensors. - for (auto& i : *sensors) - { - if (i.second.find(hwmon::entry::input) != i.second.end()) - { - // Read value from sensor. - int value = 0; - read_sysfs(make_sysfs_path(path, - i.first.first, i.first.second, - hwmon::entry::input), - value); - - // Update sensor cache. - if (sensor_cache->update(i.first, value)) - { - // TODO: Issue#4 - dbus event here. - std::cout << i.first.first << i.first.second << " = " - << value << std::endl; - } - } - } - - // Sleep until next interval. - // TODO: Issue#5 - Make this configurable. - // TODO: Issue#6 - Optionally look at polling interval sysfs entry. - { - using namespace std::literals::chrono_literals; - std::this_thread::sleep_for(1s); - } - - // TODO: Issue#7 - Should probably periodically check the SensorSet - // for new entries. - } - - return 0; + return serverMain(path.c_str()); } // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 -- cgit v1.2.1