blob: dd9330d3838426688bd2c3b95a936338becffa0d [file] [log] [blame]
Matt Spinlere73446e2017-04-10 13:55:52 -05001/**
2 * Copyright © 2017 IBM Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#include <sdbusplus/bus.hpp>
Matthew Barth8600d9a2017-06-23 14:38:05 -050017#include <phosphor-logging/log.hpp>
Matt Spinleree7f6422017-05-09 11:03:14 -050018#include "argument.hpp"
Matt Spinlere10416e2017-04-10 14:15:53 -050019#include "manager.hpp"
Matthew Barth8600d9a2017-06-23 14:38:05 -050020#include "event.hpp"
Matt Spinlerba7b5fe2018-04-25 15:26:10 -050021#include "sdbusplus.hpp"
Matt Spinlere73446e2017-04-10 13:55:52 -050022
Matt Spinleree7f6422017-05-09 11:03:14 -050023using namespace phosphor::fan::control;
Matthew Barth8600d9a2017-06-23 14:38:05 -050024using namespace phosphor::logging;
Matt Spinleree7f6422017-05-09 11:03:14 -050025
Matt Spinlere73446e2017-04-10 13:55:52 -050026int main(int argc, char* argv[])
27{
28 auto bus = sdbusplus::bus::new_default();
Matthew Barth8600d9a2017-06-23 14:38:05 -050029 sd_event* events = nullptr;
Matt Spinleree7f6422017-05-09 11:03:14 -050030 phosphor::fan::util::ArgumentParser args(argc, argv);
Matt Spinlere73446e2017-04-10 13:55:52 -050031
Matt Spinleree7f6422017-05-09 11:03:14 -050032 if (argc != 2)
33 {
34 args.usage(argv);
35 exit(-1);
36 }
37
Matthew Barth14184132017-05-19 14:37:30 -050038 Mode mode;
Matt Spinleree7f6422017-05-09 11:03:14 -050039
40 if (args["init"] == "true")
41 {
Matthew Barth14184132017-05-19 14:37:30 -050042 mode = Mode::init;
Matt Spinleree7f6422017-05-09 11:03:14 -050043 }
44 else if (args["control"] == "true")
45 {
Matthew Barth14184132017-05-19 14:37:30 -050046 mode = Mode::control;
Matt Spinleree7f6422017-05-09 11:03:14 -050047 }
48 else
49 {
50 args.usage(argv);
51 exit(-1);
52 }
53
Matthew Barth8600d9a2017-06-23 14:38:05 -050054 auto r = sd_event_default(&events);
55 if (r < 0)
56 {
57 log<level::ERR>("Failed call to sd_event_default()",
58 entry("ERROR=%s", strerror(-r)));
59 return -1;
60 }
61
62 phosphor::fan::event::EventPtr eventPtr{events};
63
64 //Attach the event object to the bus object so we can
65 //handle both sd_events (for the timers) and dbus signals.
66 bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
67
Matt Spinlerba7b5fe2018-04-25 15:26:10 -050068 try
69 {
70 Manager manager(bus, eventPtr, mode);
Matt Spinleree7f6422017-05-09 11:03:14 -050071
Matt Spinlerba7b5fe2018-04-25 15:26:10 -050072 //Init mode will just set fans to max and delay
73 if (mode == Mode::init)
Matthew Barth8600d9a2017-06-23 14:38:05 -050074 {
Matt Spinlerba7b5fe2018-04-25 15:26:10 -050075 manager.doInit();
76 return 0;
Matthew Barth8600d9a2017-06-23 14:38:05 -050077 }
Matt Spinlerba7b5fe2018-04-25 15:26:10 -050078 else
79 {
80 r = sd_event_loop(eventPtr.get());
81 if (r < 0)
82 {
83 log<level::ERR>("Failed call to sd_event_loop",
84 entry("ERROR=%s", strerror(-r)));
85 }
86 }
87 }
88 //Log the useful metadata on these exceptions and let the app
89 //return -1 so it is restarted without a core dump.
90 catch (phosphor::fan::util::DBusServiceError& e)
91 {
92 log<level::ERR>("Uncaught DBus service lookup failure exception",
93 entry("PATH=%s", e.path.c_str()),
94 entry("INTERFACE=%s", e.interface.c_str()));
95 }
96 catch (phosphor::fan::util::DBusMethodError& e)
97 {
98 log<level::ERR>("Uncaught DBus method failure exception",
99 entry("BUSNAME=%s", e.busName.c_str()),
100 entry("PATH=%s", e.path.c_str()),
101 entry("INTERFACE=%s", e.interface.c_str()),
102 entry("METHOD=%s", e.method.c_str()));
Matt Spinlere73446e2017-04-10 13:55:52 -0500103 }
104
Matthew Barth8600d9a2017-06-23 14:38:05 -0500105 return -1;
Matt Spinlere73446e2017-04-10 13:55:52 -0500106}