Home | History | Annotate | Download | only in serial
      1 // Copyright 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_SERIAL_SERIAL_IO_HANDLER_POSIX_H_
      6 #define DEVICE_SERIAL_SERIAL_IO_HANDLER_POSIX_H_
      7 
      8 #include "base/message_loop/message_loop.h"
      9 #include "device/serial/serial_io_handler.h"
     10 
     11 namespace device {
     12 
     13 class SerialIoHandlerPosix : public SerialIoHandler,
     14                              public base::MessageLoopForIO::Watcher {
     15  protected:
     16   // SerialIoHandler impl.
     17   virtual void ReadImpl() OVERRIDE;
     18   virtual void WriteImpl() OVERRIDE;
     19   virtual void CancelReadImpl() OVERRIDE;
     20   virtual void CancelWriteImpl() OVERRIDE;
     21   virtual bool Flush() const OVERRIDE;
     22   virtual serial::DeviceControlSignalsPtr GetControlSignals() const OVERRIDE;
     23   virtual bool SetControlSignals(
     24       const serial::HostControlSignals& control_signals) OVERRIDE;
     25   virtual bool ConfigurePort(const serial::ConnectionOptions& options) OVERRIDE;
     26   virtual serial::ConnectionInfoPtr GetPortInfo() const OVERRIDE;
     27   virtual bool PostOpen() OVERRIDE;
     28 
     29  private:
     30   friend class SerialIoHandler;
     31 
     32   SerialIoHandlerPosix(
     33       scoped_refptr<base::MessageLoopProxy> file_thread_message_loop);
     34   virtual ~SerialIoHandlerPosix();
     35 
     36   // base::MessageLoopForIO::Watcher implementation.
     37   virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
     38   virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
     39 
     40   void EnsureWatchingReads();
     41   void EnsureWatchingWrites();
     42 
     43   base::MessageLoopForIO::FileDescriptorWatcher file_read_watcher_;
     44   base::MessageLoopForIO::FileDescriptorWatcher file_write_watcher_;
     45 
     46   // Flags indicating if the message loop is watching the device for IO events.
     47   bool is_watching_reads_;
     48   bool is_watching_writes_;
     49 
     50   DISALLOW_COPY_AND_ASSIGN(SerialIoHandlerPosix);
     51 };
     52 
     53 }  // namespace device
     54 
     55 #endif  // DEVICE_SERIAL_SERIAL_IO_HANDLER_POSIX_H_
     56