diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-08-22 11:18:19 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-08-23 16:33:36 -0500 |
commit | 6ad28430764b7d16ee7abcb9965b76ea5583008f (patch) | |
tree | 8eb3bc7cf78b1d7807a240b5e20c739f97e1db4e /monitor/argument.cpp | |
parent | d953bb25955584410bb29ddac97587b3b633d4bd (diff) | |
download | phosphor-fan-presence-6ad28430764b7d16ee7abcb9965b76ea5583008f.tar.gz phosphor-fan-presence-6ad28430764b7d16ee7abcb9965b76ea5583008f.zip |
Create fan monitor init mode
Allowing fan monitor to run in an init mode will set the fans to a
functional state at each poweron for fans that were non-functional at
poweroff. Then fan monitor can be started in monitor mode after the fans
have ramped up to full speed and can begin being monitored for faults.
This also allows for the removal of fan monitor doing a sd_notify prior
to fan control starting.
Change-Id: I634c9b4ec8bb30860dea54c8abd1cd6c56831d25
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'monitor/argument.cpp')
-rw-r--r-- | monitor/argument.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/monitor/argument.cpp b/monitor/argument.cpp new file mode 100644 index 0000000..2fbef68 --- /dev/null +++ b/monitor/argument.cpp @@ -0,0 +1,90 @@ +/** + * Copyright © 2017 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 <iostream> +#include <iterator> +#include <algorithm> +#include "argument.hpp" + +namespace phosphor +{ +namespace fan +{ +namespace util +{ + +ArgumentParser::ArgumentParser(int argc, char** argv) +{ + auto option = 0; + while (-1 != (option = getopt_long(argc, argv, optionstr, options, NULL))) + { + if ((option == '?') || (option == 'h')) + { + usage(argv); + exit(-1); + } + + auto i = &options[0]; + while ((i->val != option) && (i->val != 0)) + { + ++i; + } + + if (i->val) + { + arguments[i->name] = (i->has_arg ? optarg : true_string); + } + } +} + +const std::string& ArgumentParser::operator[](const std::string& opt) +{ + auto i = arguments.find(opt); + if (i == arguments.end()) + { + return empty_string; + } + else + { + return i->second; + } +} + +void ArgumentParser::usage(char** argv) +{ + std::cerr << "Usage: " << argv[0] << " [options]\n"; + std::cerr << "Options:\n"; + std::cerr << " --help Print this menu\n"; + std::cerr << " --init Set fans to functional\n"; + std::cerr << " --monitor Start fan funcitonal monitoring\n"; + std::cerr << std::flush; +} + +const option ArgumentParser::options[] = +{ + { "init", no_argument, NULL, 'i' }, + { "monitor", no_argument, NULL, 'm' }, + { "help", no_argument, NULL, 'h' }, + { 0, 0, 0, 0 }, +}; + +const char* ArgumentParser::optionstr = "imh?"; + +const std::string ArgumentParser::true_string = "true"; +const std::string ArgumentParser::empty_string = ""; + +} +} +} |