power: Add OnNewUdevDevice for Init/OnUdevEvent in sar_watcher
Add OnNewUdevDevice() to handle new udev device in Init() and
OnUdevEvent() in sar_watcher.
BUG=b:123434029
TEST=FEASURES="test" emerge-octopus power_manager
Change-Id: I9fca8a10dfb60cc0dd01c218d0a69623c8565c68
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2432144
Commit-Queue: Ching-Kang Yen <chingkang@chromium.org>
Tested-by: Ching-Kang Yen <chingkang@chromium.org>
Reviewed-by: Puthikorn Voravootivat <puthik@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
Reviewed-by: Heng-ruey Hsu <henryhsu@chromium.org>
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
diff --git a/power_manager/powerd/system/sar_watcher.cc b/power_manager/powerd/system/sar_watcher.cc
index c7488f9..f4c7f54 100644
--- a/power_manager/powerd/system/sar_watcher.cc
+++ b/power_manager/powerd/system/sar_watcher.cc
@@ -13,6 +13,7 @@
#include <sys/types.h>
#include <unistd.h>
+#include <memory>
#include <utility>
#include <vector>
@@ -87,15 +88,8 @@
return false;
}
- for (auto const& iio_dev : iio_devices) {
- std::string devlink;
- if (!IsIioProximitySensor(iio_dev, &devlink))
- continue;
- if (!OnSensorDetected(iio_dev.syspath, devlink)) {
- LOG(ERROR) << "Unable to set up proximity sensor " << iio_dev.syspath;
- }
- }
-
+ for (auto const& iio_dev : iio_devices)
+ OnNewUdevDevice(iio_dev);
return true;
}
@@ -118,14 +112,7 @@
void SarWatcher::OnUdevEvent(const UdevEvent& event) {
if (event.action != UdevEvent::Action::ADD)
return;
-
- std::string devlink;
- if (!IsIioProximitySensor(event.device_info, &devlink))
- return;
-
- if (!OnSensorDetected(event.device_info.syspath, devlink))
- LOG(ERROR) << "Unable to setup proximity sensor "
- << event.device_info.syspath;
+ OnNewUdevDevice(event.device_info);
}
void SarWatcher::OnFileCanReadWithoutBlocking(int fd) {
@@ -363,5 +350,13 @@
return true;
}
+void SarWatcher::OnNewUdevDevice(const UdevDeviceInfo& device_info) {
+ std::string devlink;
+ if (!IsIioProximitySensor(device_info, &devlink))
+ return;
+ if (!OnSensorDetected(device_info.syspath, devlink))
+ LOG(ERROR) << "Unable to setup proximity sensor " << device_info.syspath;
+}
+
} // namespace system
} // namespace power_manager
diff --git a/power_manager/powerd/system/sar_watcher.h b/power_manager/powerd/system/sar_watcher.h
index e71802b..b9d231c 100644
--- a/power_manager/powerd/system/sar_watcher.h
+++ b/power_manager/powerd/system/sar_watcher.h
@@ -104,6 +104,10 @@
// valid proximity sensor exists.
bool OnSensorDetected(const std::string& syspath, const std::string& devlink);
+ // Check new udev device. If the device of |device_info| is a proximity
+ // sensor, start listening to proximity events for it.
+ void OnNewUdevDevice(const UdevDeviceInfo& device_info);
+
OpenIioEventsFunc open_iio_events_func_;
UdevInterface* udev_ = nullptr; // non-owned