| // 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 |