blob: b9c1d8155c6741ea48cad823866a7ac3b4c24cc9 [file] [log] [blame]
Matt Spinlere567dd22017-04-27 12:27:17 -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 */
Matt Spinlerc36168a2017-04-27 14:32:43 -050016#include <phosphor-logging/log.hpp>
17#include <sdbusplus/bus.hpp>
Matt Spinlera5763ff2017-06-14 15:54:12 -050018#include <systemd/sd-daemon.h>
Matt Spinlere824f982017-05-11 10:07:55 -050019#include "event.hpp"
Matt Spinlerc36168a2017-04-27 14:32:43 -050020#include "fan.hpp"
21#include "fan_defs.hpp"
Matt Spinlere567dd22017-04-27 12:27:17 -050022
Matt Spinlerc36168a2017-04-27 14:32:43 -050023using namespace phosphor::fan::monitor;
24using namespace phosphor::logging;
25
26
Matt Spinlere567dd22017-04-27 12:27:17 -050027int main()
28{
Matt Spinlerc36168a2017-04-27 14:32:43 -050029 auto bus = sdbusplus::bus::new_default();
30 sd_event* events = nullptr;
Matt Spinler84201112017-05-12 11:31:53 -050031 std::vector<std::unique_ptr<Fan>> fans;
Matt Spinlerc36168a2017-04-27 14:32:43 -050032
33 auto r = sd_event_default(&events);
34 if (r < 0)
35 {
36 log<level::ERR>("Failed call to sd_event_default()",
37 entry("ERROR=%s", strerror(-r)));
38 return -1;
39 }
40
Matt Spinlere824f982017-05-11 10:07:55 -050041 phosphor::fan::event::EventPtr eventPtr{events};
Matt Spinlerc36168a2017-04-27 14:32:43 -050042
43 //Attach the event object to the bus object so we can
44 //handle both sd_events (for the timers) and dbus signals.
45 bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
46
47 for (const auto& fanDef : fanDefinitions)
48 {
Matt Spinler84201112017-05-12 11:31:53 -050049 fans.emplace_back(std::make_unique<Fan>(bus, eventPtr, fanDef));
Matt Spinlerc36168a2017-04-27 14:32:43 -050050 }
51
Matt Spinlera5763ff2017-06-14 15:54:12 -050052 //Tell systemd we are initialized
53 r = sd_notify(0, "READY=1");
54 if (r < 1) // 0 = nothing sent, < 0 is a failure
55 {
56 log<level::ERR>("sd_notify did not send anything",
57 entry("ERROR=%d", r));
58 return -1;
59 }
60
Matt Spinlerc36168a2017-04-27 14:32:43 -050061 r = sd_event_loop(eventPtr.get());
62 if (r < 0)
63 {
64 log<level::ERR>("Failed call to sd_event_loop",
65 entry("ERROR=%s", strerror(-r)));
66 }
67
68 return -1;
Matt Spinlere567dd22017-04-27 12:27:17 -050069}