| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/crosapi/cec_private_ash.h" |
| |
| #include "chromeos/ash/components/dbus/cec_service/cec_service_client.h" |
| |
| using crosapi::mojom::PowerState; |
| |
| namespace { |
| |
| PowerState ConvertCecServiceClientPowerState( |
| ash::CecServiceClient::PowerState power_state) { |
| switch (power_state) { |
| case ash::CecServiceClient::PowerState::kError: |
| return PowerState::kError; |
| case ash::CecServiceClient::PowerState::kAdapterNotConfigured: |
| return PowerState::kAdapterNotConfigured; |
| case ash::CecServiceClient::PowerState::kNoDevice: |
| return PowerState::kNoDevice; |
| case ash::CecServiceClient::PowerState::kOn: |
| return PowerState::kOn; |
| case ash::CecServiceClient::PowerState::kStandBy: |
| return PowerState::kStandBy; |
| case ash::CecServiceClient::PowerState::kTransitioningToOn: |
| return PowerState::kTransitioningToOn; |
| case ash::CecServiceClient::PowerState::kTransitioningToStandBy: |
| return PowerState::kTransitioningToStandBy; |
| case ash::CecServiceClient::PowerState::kUnknown: |
| return PowerState::kUnknown; |
| } |
| |
| NOTREACHED(); |
| } |
| |
| } // namespace |
| |
| namespace crosapi { |
| |
| CecPrivateAsh::CecPrivateAsh() = default; |
| CecPrivateAsh::~CecPrivateAsh() = default; |
| |
| void CecPrivateAsh::BindReceiver( |
| mojo::PendingReceiver<mojom::CecPrivate> receiver) { |
| receivers_.Add(this, std::move(receiver)); |
| } |
| |
| void CecPrivateAsh::SendStandBy(SendStandByCallback callback) { |
| ash::CecServiceClient* dbus_client = ash::CecServiceClient::Get(); |
| if (!dbus_client) { |
| LOG(WARNING) |
| << "CecPrivate crosapi invoked before dbus client became available."; |
| } else { |
| dbus_client->SendStandBy(); |
| } |
| std::move(callback).Run(); |
| } |
| |
| void CecPrivateAsh::SendWakeUp(SendWakeUpCallback callback) { |
| ash::CecServiceClient* dbus_client = ash::CecServiceClient::Get(); |
| if (!dbus_client) { |
| LOG(WARNING) |
| << "CecPrivate crosapi invoked before dbus client became available."; |
| } else { |
| dbus_client->SendWakeUp(); |
| } |
| std::move(callback).Run(); |
| } |
| |
| void CecPrivateAsh::QueryDisplayCecPowerState( |
| QueryDisplayCecPowerStateCallback callback) { |
| ash::CecServiceClient* dbus_client = ash::CecServiceClient::Get(); |
| if (!dbus_client) { |
| LOG(WARNING) |
| << "CecPrivate crosapi invoked before dbus client became available."; |
| std::move(callback).Run({}); |
| return; |
| } |
| dbus_client->QueryDisplayCecPowerState( |
| base::BindOnce([](const std::vector<ash::CecServiceClient::PowerState>& |
| power_states) { |
| std::vector<PowerState> converted_states; |
| for (const ash::CecServiceClient::PowerState& state : power_states) { |
| converted_states.push_back(ConvertCecServiceClientPowerState(state)); |
| } |
| return converted_states; |
| }).Then(std::move(callback))); |
| } |
| |
| } // namespace crosapi |