blob: 79766f3973461b02ca111bf9d37050c07d1a7a00 [file] [log] [blame]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <base/logging.h>
#include <base/observer_list.h>
#include <base/observer_list_types.h>
#include <power_manager/dbus-proxies.h>
#include "libec/ec_usb_device_monitor.h"
namespace ec {
EcUsbDeviceMonitor::EcUsbDeviceMonitor(scoped_refptr<dbus::Bus> bus)
: power_manager_proxy_(
std::make_unique<org::chromium::PowerManagerProxy>(bus)) {
power_manager_proxy_->RegisterSuspendDoneSignalHandler(
base::BindRepeating(&EcUsbDeviceMonitor::OnSuspendDone,
weak_factory_.GetWeakPtr()),
base::BindOnce(&EcUsbDeviceMonitor::OnSignalConnected,
weak_factory_.GetWeakPtr()));
}
void EcUsbDeviceMonitor::OnSuspendDone(
const std::vector<uint8_t>& serialized_proto) {
for (auto& observer : observers_) {
observer.OnDeviceReconnected();
}
}
void EcUsbDeviceMonitor::OnSignalConnected(const std::string& interface_name,
const std::string& signal_name,
bool success) {
if (!success) {
LOG(ERROR) << "Failed to connect signal " << signal_name << " to interface "
<< interface_name;
}
}
void EcUsbDeviceMonitor::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void EcUsbDeviceMonitor::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
} // namespace ec