OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROMEOS_ACCELEROMETER_ACCELEROMETER_READER_H_ | |
6 #define CHROMEOS_ACCELEROMETER_ACCELEROMETER_READER_H_ | |
7 | |
8 #include <vector> | |
9 | |
10 #include "base/memory/ref_counted.h" | |
11 #include "base/memory/weak_ptr.h" | |
12 #include "base/observer_list.h" | |
13 #include "chromeos/chromeos_export.h" | |
14 #include "ui/gfx/geometry/vector3d_f.h" | |
15 | |
16 namespace base { | |
17 class TaskRunner; | |
18 } | |
19 | |
20 namespace chromeos { | |
21 | |
22 // Reads an accelerometer device and reports data back to an | |
23 // AccelerometerDelegate. | |
24 class CHROMEOS_EXPORT AccelerometerReader { | |
25 public: | |
26 // Configuration structure for accelerometer device. | |
27 struct ConfigurationData { | |
Daniel Erat
2014/04/02 18:11:57
can you just forward-declare this in the header an
flackr
2014/04/02 18:52:55
Unfortunately I don't think I can forward the type
| |
28 ConfigurationData(); | |
29 ~ConfigurationData(); | |
30 | |
31 // Scale of accelerometers (i.e. raw value * 1.0f / scale = G's). | |
32 unsigned int base_scale; | |
33 unsigned int lid_scale; | |
34 | |
35 // Index of each accelerometer axis in data stream. | |
36 std::vector<unsigned int> index; | |
37 }; | |
38 typedef base::RefCountedData<ConfigurationData> Configuration; | |
39 typedef base::RefCountedData<char[12]> Reading; | |
Daniel Erat
2014/04/02 18:11:57
can you turn this '12' into a constant in the .cc
flackr
2014/04/02 18:52:55
Same for this. I could move the definition of the
flackr
2014/04/02 18:57:42
Or define the length in this .h and assert that th
| |
40 | |
41 // An interface to receive data from the AccelerometerReader. | |
42 class Delegate { | |
43 public: | |
44 virtual void HandleAccelerometerReading(const gfx::Vector3dF& base, | |
45 const gfx::Vector3dF& lid) = 0; | |
46 }; | |
47 | |
48 AccelerometerReader(base::TaskRunner* blocking_task_runner, | |
49 Delegate* delegate); | |
50 ~AccelerometerReader(); | |
51 | |
52 private: | |
53 // Dispatched when initialization is complete. If |success|, |configuration| | |
54 // provides the details of the detected accelerometer. | |
55 void OnInitialized(scoped_refptr<Configuration> configuration, bool success); | |
56 | |
57 // Triggers an asynchronous read from the accelerometer, signalling | |
58 // OnDataRead with the result. | |
59 void TriggerRead(); | |
60 | |
61 // If |success|, converts the raw reading to a pair of Vector3dF | |
62 // values and notifies the |delegate_| with the new readings. | |
63 // Triggers another read from the accelerometer at the current sampling rate. | |
64 void OnDataRead(scoped_refptr<Reading> reading, bool success); | |
65 | |
66 // The task runner to use for blocking tasks. | |
67 scoped_refptr<base::TaskRunner> task_runner_; | |
68 | |
69 // A weak pointer to the delegate to send accelerometer readings to. | |
70 Delegate* delegate_; | |
71 | |
72 // The accelerometer configuration. | |
73 scoped_refptr<Configuration> configuration_; | |
74 | |
75 base::WeakPtrFactory<AccelerometerReader> weak_factory_; | |
76 | |
77 DISALLOW_COPY_AND_ASSIGN(AccelerometerReader); | |
78 }; | |
79 | |
80 } // namespace chromeos | |
81 | |
82 #endif // CHROMEOS_ACCELEROMETER_ACCELEROMETER_READER_H_ | |
OLD | NEW |