15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef DEVICE_SERIAL_TEST_SERIAL_IO_HANDLER_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define DEVICE_SERIAL_TEST_SERIAL_IO_HANDLER_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string>
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/callback.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "device/serial/serial.mojom.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "device/serial/serial_io_handler.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace device {
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class TestSerialIoHandler : public SerialIoHandler {
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  TestSerialIoHandler();
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static scoped_refptr<SerialIoHandler> Create();
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // SerialIoHandler overrides.
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Open(const std::string& port,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    const OpenCompleteCallback& callback) OVERRIDE;
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool ConfigurePort(const serial::ConnectionOptions& options) OVERRIDE;
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ReadImpl() OVERRIDE;
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void CancelReadImpl() OVERRIDE;
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void WriteImpl() OVERRIDE;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void CancelWriteImpl() OVERRIDE;
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual serial::DeviceControlSignalsPtr GetControlSignals() const OVERRIDE;
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual serial::ConnectionInfoPtr GetPortInfo() const OVERRIDE;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool Flush() const OVERRIDE;
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool SetControlSignals(
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const serial::HostControlSignals& signals) OVERRIDE;
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  serial::ConnectionInfo* connection_info() { return &info_; }
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  serial::DeviceControlSignals* device_control_signals() {
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return &device_control_signals_;
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool dtr() { return dtr_; }
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool rts() { return rts_; }
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  int flushes() { return flushes_; }
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // This callback will be called when this IoHandler processes its next write,
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // instead of the normal behavior of echoing the data to reads.
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void set_send_callback(const base::Closure& callback) {
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    send_callback_ = callback;
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~TestSerialIoHandler();
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool opened_;
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  serial::ConnectionInfo info_;
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  serial::DeviceControlSignals device_control_signals_;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool dtr_;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool rts_;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable int flushes_;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string buffer_;
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::Closure send_callback_;
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestSerialIoHandler);
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace device
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // DEVICE_SERIAL_TEST_SERIAL_IO_HANDLER_H_
68