OLD | NEW |
| (Empty) |
1 // Copyright 2016 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 DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_WIN_H_ | |
6 #define DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_WIN_H_ | |
7 | |
8 #include <SensorsApi.h> | |
9 | |
10 #include "base/win/scoped_comptr.h" | |
11 #include "device/generic_sensor/generic_sensor_export.h" | |
12 #include "device/generic_sensor/platform_sensor_provider.h" | |
13 | |
14 namespace base { | |
15 template <typename T> | |
16 struct DefaultSingletonTraits; | |
17 class Thread; | |
18 } | |
19 | |
20 namespace device { | |
21 | |
22 class PlatformSensorReaderWin; | |
23 | |
24 // Implementation of PlatformSensorProvider for Windows platform. | |
25 // PlatformSensorProviderWin is responsible for following tasks: | |
26 // - Starts sensor thread and stops it when there are no active sensors. | |
27 // - Initialises ISensorManager and creates sensor reader on sensor thread. | |
28 // - Constructs PlatformSensorWin on IPC thread and returns it to requester. | |
29 class DEVICE_GENERIC_SENSOR_EXPORT PlatformSensorProviderWin final | |
30 : public PlatformSensorProvider { | |
31 public: | |
32 static PlatformSensorProviderWin* GetInstance(); | |
33 | |
34 // Overrides ISensorManager COM interface provided by the system, used | |
35 // only for testing purposes. | |
36 void SetSensorManagerForTesting( | |
37 base::win::ScopedComPtr<ISensorManager> sensor_manager); | |
38 | |
39 protected: | |
40 ~PlatformSensorProviderWin() override; | |
41 | |
42 // PlatformSensorProvider interface implementation. | |
43 void AllSensorsRemoved() override; | |
44 void CreateSensorInternal(mojom::SensorType type, | |
45 mojo::ScopedSharedBufferMapping mapping, | |
46 const CreateSensorCallback& callback) override; | |
47 | |
48 private: | |
49 PlatformSensorProviderWin(); | |
50 | |
51 bool InitializeSensorManager(); | |
52 bool StartSensorThread(); | |
53 void StopSensorThread(); | |
54 std::unique_ptr<PlatformSensorReaderWin> CreateSensorReader( | |
55 mojom::SensorType type); | |
56 void SensorReaderCreated( | |
57 mojom::SensorType type, | |
58 mojo::ScopedSharedBufferMapping mapping, | |
59 const CreateSensorCallback& callback, | |
60 std::unique_ptr<PlatformSensorReaderWin> sensor_reader); | |
61 | |
62 private: | |
63 friend struct base::DefaultSingletonTraits<PlatformSensorProviderWin>; | |
64 | |
65 base::win::ScopedComPtr<ISensorManager> sensor_manager_; | |
66 std::unique_ptr<base::Thread> sensor_thread_; | |
67 | |
68 DISALLOW_COPY_AND_ASSIGN(PlatformSensorProviderWin); | |
69 }; | |
70 | |
71 } // namespace device | |
72 | |
73 #endif // DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_WIN_H_ | |
OLD | NEW |