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_TEST_SERIAL_IO_HANDLER_H_
6#define DEVICE_SERIAL_TEST_SERIAL_IO_HANDLER_H_
7
8#include <string>
9
10#include "base/callback.h"
11#include "device/serial/serial.mojom.h"
12#include "device/serial/serial_io_handler.h"
13
14namespace device {
15
16class TestSerialIoHandler : public SerialIoHandler {
17 public:
18  TestSerialIoHandler();
19
20  static scoped_refptr<SerialIoHandler> Create();
21
22  // SerialIoHandler overrides.
23  virtual void Open(const std::string& port,
24                    const OpenCompleteCallback& callback) OVERRIDE;
25  virtual bool ConfigurePort(const serial::ConnectionOptions& options) OVERRIDE;
26  virtual void ReadImpl() OVERRIDE;
27  virtual void CancelReadImpl() OVERRIDE;
28  virtual void WriteImpl() OVERRIDE;
29  virtual void CancelWriteImpl() OVERRIDE;
30  virtual serial::DeviceControlSignalsPtr GetControlSignals() const OVERRIDE;
31  virtual serial::ConnectionInfoPtr GetPortInfo() const OVERRIDE;
32  virtual bool Flush() const OVERRIDE;
33  virtual bool SetControlSignals(
34      const serial::HostControlSignals& signals) OVERRIDE;
35
36  serial::ConnectionInfo* connection_info() { return &info_; }
37  serial::DeviceControlSignals* device_control_signals() {
38    return &device_control_signals_;
39  }
40  bool dtr() { return dtr_; }
41  bool rts() { return rts_; }
42  int flushes() { return flushes_; }
43  // This callback will be called when this IoHandler processes its next write,
44  // instead of the normal behavior of echoing the data to reads.
45  void set_send_callback(const base::Closure& callback) {
46    send_callback_ = callback;
47  }
48
49 protected:
50  virtual ~TestSerialIoHandler();
51
52 private:
53  bool opened_;
54  serial::ConnectionInfo info_;
55  serial::DeviceControlSignals device_control_signals_;
56  bool dtr_;
57  bool rts_;
58  mutable int flushes_;
59  std::string buffer_;
60  base::Closure send_callback_;
61
62  DISALLOW_COPY_AND_ASSIGN(TestSerialIoHandler);
63};
64
65}  // namespace device
66
67#endif  // DEVICE_SERIAL_TEST_SERIAL_IO_HANDLER_H_
68