Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 56de550

Browse files
committed
Add power_management_monitor_
1 parent 7a704cf commit 56de550

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

src/core/grabber/include/grabber/device_grabber.hpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <nod/nod.hpp>
3131
#include <pqrs/karabiner/driverkit/virtual_hid_device_driver.hpp>
3232
#include <pqrs/osx/iokit_hid_manager.hpp>
33+
#include <pqrs/osx/iokit_power_management.hpp>
3334
#include <pqrs/osx/system_preferences.hpp>
3435
#include <pqrs/spdlog.hpp>
3536
#include <string_view>
@@ -347,12 +348,59 @@ class device_grabber final : public pqrs::dispatcher::extra::dispatcher_client {
347348
logger::get_logger()->error("{0}: {1}", message, kern_return.to_string());
348349
logger_unique_filter_.reset();
349350
});
351+
352+
//
353+
// power_management_monitor_
354+
//
355+
356+
power_management_monitor_ = std::make_unique<pqrs::osx::iokit_power_management::monitor>(weak_dispatcher_,
357+
pqrs::cf::run_loop_thread::extra::get_shared_run_loop_thread());
358+
359+
power_management_monitor_->system_will_sleep.connect([](auto&& kernel_port,
360+
auto&& notification_id,
361+
auto&& wait) {
362+
logger::get_logger()->info("system_will_sleep");
363+
364+
IOAllowPowerChange(kernel_port, notification_id);
365+
366+
wait->notify();
367+
});
368+
369+
power_management_monitor_->system_will_power_on.connect([] {
370+
logger::get_logger()->info("system_will_power_on");
371+
});
372+
373+
power_management_monitor_->system_has_powered_on.connect([] {
374+
logger::get_logger()->info("system_has_powered_on");
375+
});
376+
377+
power_management_monitor_->can_system_sleep.connect([](auto&& kernel_port,
378+
auto&& notification_id,
379+
auto&& wait) {
380+
logger::get_logger()->info("can_system_sleep");
381+
382+
IOAllowPowerChange(kernel_port, notification_id);
383+
384+
wait->notify();
385+
});
386+
387+
power_management_monitor_->system_will_not_sleep.connect([] {
388+
logger::get_logger()->info("system_will_not_sleepod");
389+
});
390+
391+
power_management_monitor_->error_occurred.connect([](auto&& message) {
392+
logger::get_logger()->error("power_management_monitor_ error: {0}", message);
393+
});
394+
395+
power_management_monitor_->async_start();
350396
}
351397

352398
virtual ~device_grabber(void) {
353399
detach_from_dispatcher([this] {
354400
stop();
355401

402+
power_management_monitor_ = nullptr;
403+
356404
hid_manager_ = nullptr;
357405

358406
external_signal_connections_.clear();
@@ -1003,6 +1051,8 @@ class device_grabber final : public pqrs::dispatcher::extra::dispatcher_client {
10031051
std::unordered_map<device_id, std::shared_ptr<device_grabber_details::entry>> entries_;
10041052
hid_queue_values_converter hid_queue_values_converter_;
10051053

1054+
std::unique_ptr<pqrs::osx::iokit_power_management::monitor> power_management_monitor_;
1055+
10061056
core_configuration::details::profile profile_;
10071057
pqrs::osx::system_preferences::properties system_preferences_properties_;
10081058

0 commit comments

Comments
 (0)