OLD | NEW |
1 // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdlib.h> | 5 #include <stdlib.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <dbus/dbus-shared.h> | 7 #include <dbus/dbus-shared.h> |
8 #include <errno.h> | 8 #include <errno.h> |
9 #include <fcntl.h> | 9 #include <fcntl.h> |
10 #include <linux/vt.h> | 10 #include <linux/vt.h> |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 namespace power_manager { | 26 namespace power_manager { |
27 | 27 |
28 static const int kCheckLidClosedSeconds = 10; | 28 static const int kCheckLidClosedSeconds = 10; |
29 static const unsigned int kCancelDBusLidOpenedSecs = 5; | 29 static const unsigned int kCancelDBusLidOpenedSecs = 5; |
30 | 30 |
31 PowerManDaemon::PowerManDaemon(PowerPrefs* prefs, | 31 PowerManDaemon::PowerManDaemon(PowerPrefs* prefs, |
32 MetricsLibraryInterface* metrics_lib, | 32 MetricsLibraryInterface* metrics_lib, |
33 const FilePath& run_dir) | 33 const FilePath& run_dir) |
34 : loop_(NULL), | 34 : loop_(NULL), |
| 35 use_input_for_lid_(1), |
35 prefs_(prefs), | 36 prefs_(prefs), |
36 lidstate_(kLidOpened), | 37 lidstate_(kLidOpened), |
37 metrics_lib_(metrics_lib), | 38 metrics_lib_(metrics_lib), |
38 power_button_state_(false), | 39 power_button_state_(false), |
39 retry_suspend_count_(0), | 40 retry_suspend_count_(0), |
40 suspend_pid_(0), | 41 suspend_pid_(0), |
41 lid_id_(0), | 42 lid_id_(0), |
42 powerd_id_(0), | 43 powerd_id_(0), |
43 powerd_state_(kPowerManagerUnknown), | 44 powerd_state_(kPowerManagerUnknown), |
44 run_dir_(run_dir), | 45 run_dir_(run_dir), |
45 console_fd_(-1) {} | 46 console_fd_(-1) {} |
46 | 47 |
47 PowerManDaemon::~PowerManDaemon() { | 48 PowerManDaemon::~PowerManDaemon() { |
48 if (console_fd_ >= 0) { | 49 if (console_fd_ >= 0) { |
49 close(console_fd_); | 50 close(console_fd_); |
50 } | 51 } |
51 } | 52 } |
52 | 53 |
53 void PowerManDaemon::Init() { | 54 void PowerManDaemon::Init() { |
54 int input_lidstate = 0; | 55 int input_lidstate = 0; |
| 56 int64 use_input_for_lid; |
55 CHECK(prefs_->GetInt64(kRetrySuspendMs, &retry_suspend_ms_)); | 57 CHECK(prefs_->GetInt64(kRetrySuspendMs, &retry_suspend_ms_)); |
56 CHECK(prefs_->GetInt64(kRetrySuspendAttempts, &retry_suspend_attempts_)); | 58 CHECK(prefs_->GetInt64(kRetrySuspendAttempts, &retry_suspend_attempts_)); |
| 59 CHECK(prefs_->GetInt64(kUseLid, &use_input_for_lid)); |
57 // Retrys will occur no more than once a minute. | 60 // Retrys will occur no more than once a minute. |
58 CHECK_GE(retry_suspend_ms_, 60000); | 61 CHECK_GE(retry_suspend_ms_, 60000); |
59 // Only 1-10 retries prior to just shutting down. | 62 // Only 1-10 retries prior to just shutting down. |
60 CHECK_GT(retry_suspend_attempts_, 0); | 63 CHECK_GT(retry_suspend_attempts_, 0); |
61 CHECK_LE(retry_suspend_attempts_, 10); | 64 CHECK_LE(retry_suspend_attempts_, 10); |
| 65 use_input_for_lid_ = 1 == use_input_for_lid; |
62 loop_ = g_main_loop_new(NULL, false); | 66 loop_ = g_main_loop_new(NULL, false); |
63 // Acquire a handle to the console for VT switch locking ioctl. | 67 // Acquire a handle to the console for VT switch locking ioctl. |
64 CHECK(GetConsole()); | 68 CHECK(GetConsole()); |
65 input_.RegisterHandler(&(PowerManDaemon::OnInputEvent), this); | 69 input_.RegisterHandler(&(PowerManDaemon::OnInputEvent), this); |
66 CHECK(input_.Init()) << "Cannot initialize input interface."; | 70 CHECK(input_.Init()) << "Cannot initialize input interface."; |
67 lid_open_file_ = FilePath(run_dir_).Append(util::kLidOpenFile); | 71 lid_open_file_ = FilePath(run_dir_).Append(util::kLidOpenFile); |
68 if (input_.num_lid_events() > 0) { | 72 if (input_.num_lid_events() > 0) { |
69 input_.QueryLidState(&input_lidstate); | 73 input_.QueryLidState(&input_lidstate); |
70 lidstate_ = GetLidState(input_lidstate); | 74 lidstate_ = GetLidState(input_lidstate); |
71 lid_ticks_ = TimeTicks::Now(); | 75 lid_ticks_ = TimeTicks::Now(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 case LID: { | 126 case LID: { |
123 daemon->lidstate_ = daemon->GetLidState(value); | 127 daemon->lidstate_ = daemon->GetLidState(value); |
124 daemon->lid_id_++; | 128 daemon->lid_id_++; |
125 daemon->lid_ticks_ = TimeTicks::Now(); | 129 daemon->lid_ticks_ = TimeTicks::Now(); |
126 LOG(INFO) << "PowerM Daemon - lid " | 130 LOG(INFO) << "PowerM Daemon - lid " |
127 << (daemon->lidstate_ == kLidClosed?"closed.":"opened.") | 131 << (daemon->lidstate_ == kLidClosed?"closed.":"opened.") |
128 << " powerd " | 132 << " powerd " |
129 << (daemon->powerd_state_ == kPowerManagerDead? | 133 << (daemon->powerd_state_ == kPowerManagerDead? |
130 "dead":(daemon->powerd_state_ == kPowerManagerAlive? | 134 "dead":(daemon->powerd_state_ == kPowerManagerAlive? |
131 "alive":"unknown")); | 135 "alive":"unknown")); |
| 136 if (!daemon->use_input_for_lid_) { |
| 137 LOG(INFO) << "Ignoring lid."; |
| 138 break; |
| 139 } |
132 if (daemon->lidstate_ == kLidClosed) { | 140 if (daemon->lidstate_ == kLidClosed) { |
133 if (daemon->powerd_state_ != kPowerManagerAlive) { | 141 if (daemon->powerd_state_ != kPowerManagerAlive) { |
134 // powerd is not alive so act on its behalf. | 142 // powerd is not alive so act on its behalf. |
135 LOG(INFO) << "Forced suspend, powerd is not alive"; | 143 LOG(INFO) << "Forced suspend, powerd is not alive"; |
136 daemon->Suspend(); | 144 daemon->Suspend(); |
137 } else { | 145 } else { |
138 util::SendSignalToPowerD(util::kLidClosed); | 146 util::SendSignalToPowerD(util::kLidClosed); |
139 // Check that powerd stuck around to act on this event. If not, | 147 // Check that powerd stuck around to act on this event. If not, |
140 // callback will assume suspend responsibilities. | 148 // callback will assume suspend responsibilities. |
141 g_timeout_add_seconds(kCheckLidClosedSeconds, CheckLidClosedThunk, | 149 g_timeout_add_seconds(kCheckLidClosedSeconds, CheckLidClosedThunk, |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 retval = false; | 373 retval = false; |
366 } | 374 } |
367 else { | 375 else { |
368 LOG(INFO) << "Opened console " << file_path.value().c_str() | 376 LOG(INFO) << "Opened console " << file_path.value().c_str() |
369 << " with file id = " << console_fd_; | 377 << " with file id = " << console_fd_; |
370 } | 378 } |
371 return retval; | 379 return retval; |
372 } | 380 } |
373 | 381 |
374 } // namespace power_manager | 382 } // namespace power_manager |
OLD | NEW |