[email protected] | 26958d1 | 2014-02-27 17:29:10 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 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_HID_HID_SERVICE_LINUX_H_ | ||||
6 | #define DEVICE_HID_HID_SERVICE_LINUX_H_ | ||||
7 | |||||
[email protected] | bca53b0 | 2014-04-10 15:11:14 | [diff] [blame] | 8 | #include "base/compiler_specific.h" |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 9 | #include "base/macros.h" |
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 10 | #include "base/memory/weak_ptr.h" |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 11 | #include "device/hid/hid_device_info.h" |
12 | #include "device/hid/hid_service.h" | ||||
13 | |||||
14 | namespace device { | ||||
15 | |||||
16 | class HidConnection; | ||||
17 | |||||
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 18 | class HidServiceLinux : public HidService { |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 19 | public: |
rockot | 1a51b92 | 2014-09-05 08:02:44 | [diff] [blame] | 20 | HidServiceLinux(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 21 | |
dcheng | 07c34a1 | 2014-10-29 18:55:10 | [diff] [blame] | 22 | void Connect(const HidDeviceId& device_id, |
23 | const ConnectCallback& callback) override; | ||||
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 24 | |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 25 | private: |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 26 | struct ConnectParams; |
27 | class Helper; | ||||
28 | friend class Helper; | ||||
29 | |||||
dcheng | 07c34a1 | 2014-10-29 18:55:10 | [diff] [blame] | 30 | ~HidServiceLinux() override; |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 31 | |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 32 | // Constructs this services helper object that lives on the FILE thread. |
33 | static void StartHelper( | ||||
34 | base::WeakPtr<HidServiceLinux> weak_ptr, | ||||
35 | scoped_refptr<base::SingleThreadTaskRunner> task_runner); | ||||
36 | |||||
37 | // These functions implement the process of locating, requesting access to and | ||||
38 | // opening a device. Because this operation crosses multiple threads these | ||||
39 | // functions are static and the necessary parameters are passed as a single | ||||
40 | // struct. | ||||
41 | #if defined(OS_CHROMEOS) | ||||
42 | static void OnRequestPathAccessComplete(scoped_ptr<ConnectParams> params, | ||||
43 | bool success); | ||||
44 | #endif // defined(OS_CHROMEOS) | ||||
45 | static void OpenDevice(scoped_ptr<ConnectParams> params); | ||||
46 | static void ConnectImpl(scoped_ptr<ConnectParams> params); | ||||
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 47 | |
reillyg | 7832a4e | 2014-10-11 01:52:47 | [diff] [blame] | 48 | scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 49 | scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 50 | |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 51 | // The helper lives on the FILE thread and holds a weak reference back to the |
52 | // service that owns it. | ||||
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 53 | base::WeakPtrFactory<HidServiceLinux> weak_factory_; |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame^] | 54 | scoped_ptr<Helper> helper_; |
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 55 | |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 56 | DISALLOW_COPY_AND_ASSIGN(HidServiceLinux); |
57 | }; | ||||
58 | |||||
59 | } // namespace device | ||||
60 | |||||
61 | #endif // DEVICE_HID_HID_SERVICE_LINUX_H_ |