[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 | |||||
reillyg | e6aead1 | 2015-07-10 21:36:10 | [diff] [blame^] | 14 | namespace dbus { |
15 | class FileDescriptor; | ||||
16 | } | ||||
17 | |||||
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 18 | namespace device { |
19 | |||||
20 | class HidConnection; | ||||
21 | |||||
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 22 | class HidServiceLinux : public HidService { |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 23 | public: |
rockot | 1a51b92 | 2014-09-05 08:02:44 | [diff] [blame] | 24 | HidServiceLinux(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 25 | |
dcheng | 07c34a1 | 2014-10-29 18:55:10 | [diff] [blame] | 26 | void Connect(const HidDeviceId& device_id, |
27 | const ConnectCallback& callback) override; | ||||
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 28 | |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 29 | private: |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 30 | struct ConnectParams; |
reillyg | 3497d226 | 2015-01-12 22:05:43 | [diff] [blame] | 31 | class FileThreadHelper; |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 32 | |
dcheng | 07c34a1 | 2014-10-29 18:55:10 | [diff] [blame] | 33 | ~HidServiceLinux() override; |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 34 | |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 35 | // Constructs this services helper object that lives on the FILE thread. |
36 | static void StartHelper( | ||||
37 | base::WeakPtr<HidServiceLinux> weak_ptr, | ||||
38 | scoped_refptr<base::SingleThreadTaskRunner> task_runner); | ||||
39 | |||||
40 | // These functions implement the process of locating, requesting access to and | ||||
41 | // opening a device. Because this operation crosses multiple threads these | ||||
42 | // functions are static and the necessary parameters are passed as a single | ||||
43 | // struct. | ||||
44 | #if defined(OS_CHROMEOS) | ||||
reillyg | e6aead1 | 2015-07-10 21:36:10 | [diff] [blame^] | 45 | static void OnPathOpened(scoped_ptr<ConnectParams> params, |
46 | dbus::FileDescriptor fd); | ||||
47 | static void ValidateFdOnBlockingThread(scoped_ptr<ConnectParams> params, | ||||
48 | dbus::FileDescriptor fd); | ||||
49 | #else | ||||
50 | static void OpenOnBlockingThread(scoped_ptr<ConnectParams> params); | ||||
51 | #endif | ||||
52 | static void FinishOpen(scoped_ptr<ConnectParams> params); | ||||
53 | static void CreateConnection(scoped_ptr<ConnectParams> params); | ||||
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 54 | |
reillyg | 7832a4e | 2014-10-11 01:52:47 | [diff] [blame] | 55 | scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 56 | scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 57 | |
reillyg | 56868de | 2014-12-04 00:26:27 | [diff] [blame] | 58 | // The helper lives on the FILE thread and holds a weak reference back to the |
59 | // service that owns it. | ||||
reillyg | 3497d226 | 2015-01-12 22:05:43 | [diff] [blame] | 60 | scoped_ptr<FileThreadHelper> helper_; |
dmichael | 23a804335 | 2014-12-12 19:01:47 | [diff] [blame] | 61 | base::WeakPtrFactory<HidServiceLinux> weak_factory_; |
[email protected] | 03b640fd | 2014-07-26 18:25:38 | [diff] [blame] | 62 | |
[email protected] | 125724f | 2014-01-31 20:13:23 | [diff] [blame] | 63 | DISALLOW_COPY_AND_ASSIGN(HidServiceLinux); |
64 | }; | ||||
65 | |||||
66 | } // namespace device | ||||
67 | |||||
68 | #endif // DEVICE_HID_HID_SERVICE_LINUX_H_ |