blob: 931142da0cc949dd840d034afe7819a101dd3aa0 [file] [log] [blame]
/**
* Copyright © 2021 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 "power_control.hpp"
#include "types.hpp"
#include <fmt/format.h>
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
#include <sdeventplus/event.hpp>
#include <sdeventplus/utility/timer.hpp>
#include <chrono>
#include <exception>
using namespace phosphor::logging;
namespace phosphor::power::sequencer
{
PowerControl::PowerControl(sdbusplus::bus::bus& bus,
const sdeventplus::Event& event) :
PowerObject{bus, POWER_OBJ_PATH, true},
bus{bus}, timer{event, std::bind(&PowerControl::pollPgood, this),
pollInterval}
{
// Obtain dbus service name
bus.request_name(POWER_IFACE);
}
int PowerControl::getPgood() const
{
return pgood;
}
int PowerControl::getPgoodTimeout() const
{
return timeout.count();
}
int PowerControl::getState() const
{
return state;
}
void PowerControl::pollPgood()
{}
void PowerControl::setPgoodTimeout(int t)
{
if (timeout.count() != t)
{
timeout = std::chrono::seconds(t);
emitPropertyChangedSignal("pgood_timeout");
}
}
void PowerControl::setState(int s)
{
if (state == s)
{
log<level::INFO>(
fmt::format("Power already at requested state: {}", state).c_str());
return;
}
log<level::INFO>(fmt::format("setState: {}", s).c_str());
state = s;
emitPropertyChangedSignal("state");
}
} // namespace phosphor::power::sequencer