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