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.
5 #ifndef DEVICE_HID_HID_CONNECTION_LINUX_H_
6 #define DEVICE_HID_HID_CONNECTION_LINUX_H_
10 #include "base/files/file.h"
11 #include "base/message_loop/message_pump_libevent.h"
12 #include "device/hid/hid_connection.h"
16 class HidConnectionLinux
: public HidConnection
,
17 public base::MessagePumpLibevent::Watcher
{
19 HidConnectionLinux(HidDeviceInfo device_info
, std::string dev_node
);
22 friend class base::RefCountedThreadSafe
<HidConnectionLinux
>;
23 virtual ~HidConnectionLinux();
25 // HidConnection implementation.
26 virtual void PlatformRead(const ReadCallback
& callback
) OVERRIDE
;
27 virtual void PlatformWrite(scoped_refptr
<net::IOBuffer
> buffer
,
29 const WriteCallback
& callback
) OVERRIDE
;
30 virtual void PlatformGetFeatureReport(uint8_t report_id
,
31 const ReadCallback
& callback
) OVERRIDE
;
32 virtual void PlatformSendFeatureReport(
33 scoped_refptr
<net::IOBuffer
> buffer
,
35 const WriteCallback
& callback
) OVERRIDE
;
37 // base::MessagePumpLibevent::Watcher implementation.
38 virtual void OnFileCanReadWithoutBlocking(int fd
) OVERRIDE
;
39 virtual void OnFileCanWriteWithoutBlocking(int fd
) OVERRIDE
;
44 void ProcessInputReport(scoped_refptr
<net::IOBuffer
> buffer
, size_t size
);
45 void ProcessReadQueue();
47 base::File device_file_
;
48 base::MessagePumpLibevent::FileDescriptorWatcher device_file_watcher_
;
50 std::queue
<PendingHidReport
> pending_reports_
;
51 std::queue
<PendingHidRead
> pending_reads_
;
53 DISALLOW_COPY_AND_ASSIGN(HidConnectionLinux
);
58 #endif // DEVICE_HID_HID_CONNECTION_LINUX_H_