blob: 45c782d5f95f708b495adc9b2f82c89955d923c7 [file] [log] [blame]
[email protected]26958d12014-02-27 17:29:101// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]125724f2014-01-31 20:13:232// 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]bca53b02014-04-10 15:11:148#include "base/compiler_specific.h"
[email protected]125724f2014-01-31 20:13:239#include "base/macros.h"
[email protected]03b640fd2014-07-26 18:25:3810#include "base/memory/weak_ptr.h"
[email protected]125724f2014-01-31 20:13:2311#include "device/hid/hid_device_info.h"
12#include "device/hid/hid_service.h"
13
reillyge6aead12015-07-10 21:36:1014namespace dbus {
15class FileDescriptor;
16}
17
[email protected]125724f2014-01-31 20:13:2318namespace device {
19
20class HidConnection;
21
reillyg56868de2014-12-04 00:26:2722class HidServiceLinux : public HidService {
[email protected]125724f2014-01-31 20:13:2323 public:
rockot1a51b922014-09-05 08:02:4424 HidServiceLinux(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
reillyg33338fc02015-08-28 23:41:0925 ~HidServiceLinux() override;
[email protected]125724f2014-01-31 20:13:2326
dcheng07c34a12014-10-29 18:55:1027 void Connect(const HidDeviceId& device_id,
28 const ConnectCallback& callback) override;
[email protected]125724f2014-01-31 20:13:2329
[email protected]125724f2014-01-31 20:13:2330 private:
reillyg56868de2014-12-04 00:26:2731 struct ConnectParams;
reillyg3497d2262015-01-12 22:05:4332 class FileThreadHelper;
reillyg56868de2014-12-04 00:26:2733
reillyg56868de2014-12-04 00:26:2734 // 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)
reillyge6aead12015-07-10 21:36:1039 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]03b640fd2014-07-26 18:25:3848
reillyg7832a4e2014-10-11 01:52:4749 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
reillyg56868de2014-12-04 00:26:2750 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
[email protected]03b640fd2014-07-26 18:25:3851
reillyg56868de2014-12-04 00:26:2752 // The helper lives on the FILE thread and holds a weak reference back to the
53 // service that owns it.
reillyg87ac8da2015-08-25 18:22:5054 FileThreadHelper* helper_;
dmichael23a8043352014-12-12 19:01:4755 base::WeakPtrFactory<HidServiceLinux> weak_factory_;
[email protected]03b640fd2014-07-26 18:25:3856
[email protected]125724f2014-01-31 20:13:2357 DISALLOW_COPY_AND_ASSIGN(HidServiceLinux);
58};
59
60} // namespace device
61
62#endif // DEVICE_HID_HID_SERVICE_LINUX_H_