blob: 911d67012fcb1c1c005dd39b82c82ce64fd131a7 [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "rmad/system/power_manager_client_impl.h"
#include <base/logging.h>
#include <dbus/message.h>
#include <dbus/object_proxy.h>
#include <dbus/power_manager/dbus-constants.h>
namespace {
constexpr int kDefaultTimeoutMs = 10 * 1000; // 10 seconds.
} // namespace
namespace rmad {
PowerManagerClientImpl::PowerManagerClientImpl(
const scoped_refptr<dbus::Bus>& bus) {
proxy_ = bus->GetObjectProxy(
power_manager::kPowerManagerServiceName,
dbus::ObjectPath(power_manager::kPowerManagerServicePath));
}
bool PowerManagerClientImpl::Restart() {
dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
power_manager::kRequestRestartMethod);
dbus::MessageWriter writer(&method_call);
writer.AppendInt32(power_manager::REQUEST_RESTART_OTHER);
writer.AppendString("rmad request restart");
std::unique_ptr<dbus::Response> response =
proxy_->CallMethodAndBlock(&method_call, kDefaultTimeoutMs);
if (!response.get()) {
LOG(ERROR) << "Failed to call powerd service";
return false;
}
return true;
}
bool PowerManagerClientImpl::Shutdown() {
dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
power_manager::kRequestShutdownMethod);
dbus::MessageWriter writer(&method_call);
writer.AppendInt32(power_manager::REQUEST_SHUTDOWN_OTHER);
writer.AppendString("rmad request shutdown");
std::unique_ptr<dbus::Response> response =
proxy_->CallMethodAndBlock(&method_call, kDefaultTimeoutMs);
if (!response.get()) {
LOG(ERROR) << "Failed to call powerd service";
return false;
}
return true;
}
} // namespace rmad