OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium 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 "chromeos/accelerometer/accelerometer_reader.h" | 5 #include "chromeos/accelerometer/accelerometer_reader.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 | 51 |
52 // The size of individual values. | 52 // The size of individual values. |
53 const size_t kDataSize = 2; | 53 const size_t kDataSize = 2; |
54 | 54 |
55 // The time to wait between reading the accelerometer. | 55 // The time to wait between reading the accelerometer. |
56 const int kDelayBetweenReadsMs = 100; | 56 const int kDelayBetweenReadsMs = 100; |
57 | 57 |
58 // The mean acceleration due to gravity on Earth in m/s^2. | 58 // The mean acceleration due to gravity on Earth in m/s^2. |
59 const float kMeanGravity = 9.80665f; | 59 const float kMeanGravity = 9.80665f; |
60 | 60 |
| 61 // The maximum deviation from the acceleration expected due to gravity under |
| 62 // which to detect hinge angle and screen rotation in m/s^2 |
| 63 const float kDeviationFromGravityThreshold = 1.0f; |
| 64 |
61 // Reads |path| to the unsigned int pointed to by |value|. Returns true on | 65 // Reads |path| to the unsigned int pointed to by |value|. Returns true on |
62 // success or false on failure. | 66 // success or false on failure. |
63 bool ReadFileToInt(const base::FilePath& path, int* value) { | 67 bool ReadFileToInt(const base::FilePath& path, int* value) { |
64 std::string s; | 68 std::string s; |
65 DCHECK(value); | 69 DCHECK(value); |
66 if (!base::ReadFileToString(path, &s, kMaxAsciiUintLength)) { | 70 if (!base::ReadFileToString(path, &s, kMaxAsciiUintLength)) { |
67 return false; | 71 return false; |
68 } | 72 } |
69 base::TrimWhitespaceASCII(s, base::TRIM_ALL, &s); | 73 base::TrimWhitespaceASCII(s, base::TRIM_ALL, &s); |
70 if (!base::StringToInt(s, value)) { | 74 if (!base::StringToInt(s, value)) { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 // startup. | 203 // startup. |
200 base::PostTaskAndReplyWithResult( | 204 base::PostTaskAndReplyWithResult( |
201 task_runner_.get(), FROM_HERE, | 205 task_runner_.get(), FROM_HERE, |
202 base::Bind(&DetectAndReadAccelerometerConfiguration, configuration_), | 206 base::Bind(&DetectAndReadAccelerometerConfiguration, configuration_), |
203 base::Bind(&AccelerometerReader::OnInitialized, | 207 base::Bind(&AccelerometerReader::OnInitialized, |
204 weak_factory_.GetWeakPtr(), configuration_)); | 208 weak_factory_.GetWeakPtr(), configuration_)); |
205 } | 209 } |
206 | 210 |
207 void AccelerometerReader::AddObserver(Observer* observer) { | 211 void AccelerometerReader::AddObserver(Observer* observer) { |
208 observers_.AddObserver(observer); | 212 observers_.AddObserver(observer); |
| 213 observer->OnAccelerometerUpdated(update_); |
209 } | 214 } |
210 | 215 |
211 void AccelerometerReader::RemoveObserver(Observer* observer) { | 216 void AccelerometerReader::RemoveObserver(Observer* observer) { |
212 observers_.RemoveObserver(observer); | 217 observers_.RemoveObserver(observer); |
213 } | 218 } |
214 | 219 |
| 220 bool AccelerometerReader::IsReadingStable(const ui::AccelerometerUpdate& update, |
| 221 ui::AccelerometerSource source) { |
| 222 return update.has(source) && |
| 223 std::abs(update.get(source).Length() - kMeanGravity) <= |
| 224 kDeviationFromGravityThreshold; |
| 225 } |
| 226 |
215 void AccelerometerReader::OnInitialized( | 227 void AccelerometerReader::OnInitialized( |
216 scoped_refptr<AccelerometerReader::Configuration> configuration, | 228 scoped_refptr<AccelerometerReader::Configuration> configuration, |
217 bool success) { | 229 bool success) { |
218 if (success) | 230 if (success) |
219 TriggerRead(); | 231 TriggerRead(); |
220 } | 232 } |
221 | 233 |
222 void AccelerometerReader::TriggerRead() { | 234 void AccelerometerReader::TriggerRead() { |
223 DCHECK(!task_runner_->RunsTasksOnCurrentThread()); | 235 DCHECK(!task_runner_->RunsTasksOnCurrentThread()); |
224 | 236 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 | 269 |
258 // Trigger another read after the current sampling delay. | 270 // Trigger another read after the current sampling delay. |
259 base::MessageLoop::current()->PostDelayedTask( | 271 base::MessageLoop::current()->PostDelayedTask( |
260 FROM_HERE, | 272 FROM_HERE, |
261 base::Bind(&AccelerometerReader::TriggerRead, | 273 base::Bind(&AccelerometerReader::TriggerRead, |
262 weak_factory_.GetWeakPtr()), | 274 weak_factory_.GetWeakPtr()), |
263 base::TimeDelta::FromMilliseconds(kDelayBetweenReadsMs)); | 275 base::TimeDelta::FromMilliseconds(kDelayBetweenReadsMs)); |
264 } | 276 } |
265 | 277 |
266 } // namespace chromeos | 278 } // namespace chromeos |
OLD | NEW |