• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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