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