Home | History | Annotate | Download | only in hid
      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/message_loop/message_pump_libevent.h"
     12 #include "device/hid/hid_connection.h"
     13 
     14 namespace device {
     15 
     16 class HidConnectionLinux : public HidConnection,
     17                            public base::MessagePumpLibevent::Watcher {
     18  public:
     19   HidConnectionLinux(HidDeviceInfo device_info, std::string dev_node);
     20 
     21  private:
     22   friend class base::RefCountedThreadSafe<HidConnectionLinux>;
     23   virtual ~HidConnectionLinux();
     24 
     25   // HidConnection implementation.
     26   virtual void PlatformClose() OVERRIDE;
     27   virtual void PlatformRead(const ReadCallback& callback) OVERRIDE;
     28   virtual void PlatformWrite(scoped_refptr<net::IOBuffer> buffer,
     29                              size_t size,
     30                              const WriteCallback& callback) OVERRIDE;
     31   virtual void PlatformGetFeatureReport(uint8_t report_id,
     32                                         const ReadCallback& callback) OVERRIDE;
     33   virtual void PlatformSendFeatureReport(
     34       scoped_refptr<net::IOBuffer> buffer,
     35       size_t size,
     36       const WriteCallback& callback) OVERRIDE;
     37 
     38   // base::MessagePumpLibevent::Watcher implementation.
     39   virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
     40   virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
     41 
     42   void Disconnect();
     43 
     44   void Flush();
     45   void ProcessInputReport(scoped_refptr<net::IOBuffer> buffer, size_t size);
     46   void ProcessReadQueue();
     47 
     48   base::File device_file_;
     49   base::MessagePumpLibevent::FileDescriptorWatcher device_file_watcher_;
     50 
     51   std::queue<PendingHidReport> pending_reports_;
     52   std::queue<PendingHidRead> pending_reads_;
     53 
     54   DISALLOW_COPY_AND_ASSIGN(HidConnectionLinux);
     55 };
     56 
     57 }  // namespace device
     58 
     59 #endif  // DEVICE_HID_HID_CONNECTION_LINUX_H_
     60