Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / device / hid / hid_connection_linux.h
1 // Copyright (c) 2014 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_HID_HID_CONNECTION_LINUX_H_
6 #define DEVICE_HID_HID_CONNECTION_LINUX_H_
7
8 #include <queue>
9
10 #include "base/files/file.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/message_loop/message_pump_libevent.h"
13 #include "device/hid/hid_connection.h"
14 #include "device/hid/hid_device_info.h"
15 #include "device/hid/udev_common.h"
16
17 namespace device {
18
19 class HidConnectionLinux : public HidConnection,
20                            public base::MessagePumpLibevent::Watcher {
21  public:
22   HidConnectionLinux(HidDeviceInfo device_info, std::string dev_node);
23
24   virtual void Read(scoped_refptr<net::IOBufferWithSize> buffer,
25                     const IOCallback& callback) OVERRIDE;
26   virtual void Write(uint8_t report_id,
27                      scoped_refptr<net::IOBufferWithSize> buffer,
28                      const IOCallback& callback) OVERRIDE;
29   virtual void GetFeatureReport(uint8_t report_id,
30                                 scoped_refptr<net::IOBufferWithSize> buffer,
31                                 const IOCallback& callback) OVERRIDE;
32   virtual void SendFeatureReport(uint8_t report_id,
33                                  scoped_refptr<net::IOBufferWithSize> buffer,
34                                  const IOCallback& callback) OVERRIDE;
35
36   // Implements base::MessagePumpLibevent::Watcher
37   virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
38   virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
39
40  private:
41   friend class base::RefCountedThreadSafe<HidConnectionLinux>;
42   virtual ~HidConnectionLinux();
43
44   void ProcessReadQueue();
45   void Disconnect();
46
47   base::File device_file_;
48   base::MessagePumpLibevent::FileDescriptorWatcher device_file_watcher_;
49
50   std::queue<PendingHidReport> pending_reports_;
51   std::queue<PendingHidRead> pending_reads_;
52
53   base::ThreadChecker thread_checker_;
54
55   DISALLOW_COPY_AND_ASSIGN(HidConnectionLinux);
56 };
57
58 }  // namespace device
59
60 #endif  // DEVICE_HID_HID_CONNECTION_LINUX__