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.
5 #ifndef DEVICE_SERIAL_SERIAL_IO_HANDLER_WIN_H_
6 #define DEVICE_SERIAL_SERIAL_IO_HANDLER_WIN_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "device/serial/serial_io_handler.h"
16 class SerialIoHandlerWin
: public SerialIoHandler
,
17 public base::MessageLoopForIO::IOHandler
{
19 // SerialIoHandler implementation.
20 void ReadImpl() override
;
21 void WriteImpl() override
;
22 void CancelReadImpl() override
;
23 void CancelWriteImpl() override
;
24 bool ConfigurePortImpl() override
;
25 bool Flush() const override
;
26 serial::DeviceControlSignalsPtr
GetControlSignals() const override
;
27 bool SetControlSignals(
28 const serial::HostControlSignals
& control_signals
) override
;
29 serial::ConnectionInfoPtr
GetPortInfo() const override
;
30 bool SetBreak() override
;
31 bool ClearBreak() override
;
32 bool PostOpen() override
;
35 friend class SerialIoHandler
;
37 explicit SerialIoHandlerWin(
38 scoped_refptr
<base::SingleThreadTaskRunner
> file_thread_task_runner
,
39 scoped_refptr
<base::SingleThreadTaskRunner
> ui_thread_task_runner
);
40 ~SerialIoHandlerWin() override
;
42 // base::MessageLoopForIO::IOHandler implementation.
43 void OnIOCompleted(base::MessageLoopForIO::IOContext
* context
,
44 DWORD bytes_transfered
,
45 DWORD error
) override
;
47 // Context used for asynchronous WaitCommEvent calls.
48 scoped_ptr
<base::MessageLoopForIO::IOContext
> comm_context_
;
50 // Context used for overlapped reads.
51 scoped_ptr
<base::MessageLoopForIO::IOContext
> read_context_
;
53 // Context used for overlapped writes.
54 scoped_ptr
<base::MessageLoopForIO::IOContext
> write_context_
;
56 // Asynchronous event mask state
59 // Indicates if a pending read is waiting on initial data arrival via
60 // WaitCommEvent, as opposed to waiting on actual ReadFile completion
61 // after a corresponding WaitCommEvent has completed.
62 bool is_comm_pending_
;
64 DISALLOW_COPY_AND_ASSIGN(SerialIoHandlerWin
);
69 #endif // DEVICE_SERIAL_SERIAL_IO_HANDLER_WIN_H_