// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "device/serial/test_serial_io_handler.h" #include "base/bind.h" #include "device/serial/serial.mojom.h" namespace device { TestSerialIoHandler::TestSerialIoHandler() : SerialIoHandler(NULL), opened_(false), dtr_(false), rts_(false), flushes_(0) { } scoped_refptr TestSerialIoHandler::Create() { return scoped_refptr(new TestSerialIoHandler); } void TestSerialIoHandler::Open(const std::string& port, const OpenCompleteCallback& callback) { DCHECK(!opened_); opened_ = true; callback.Run(true); } bool TestSerialIoHandler::ConfigurePort( const serial::ConnectionOptions& options) { if (options.bitrate) info_.bitrate = options.bitrate; if (options.data_bits != serial::DATA_BITS_NONE) info_.data_bits = options.data_bits; if (options.parity_bit != serial::PARITY_BIT_NONE) info_.parity_bit = options.parity_bit; if (options.stop_bits != serial::STOP_BITS_NONE) info_.stop_bits = options.stop_bits; if (options.has_cts_flow_control) info_.cts_flow_control = options.cts_flow_control; return true; } void TestSerialIoHandler::ReadImpl() { } void TestSerialIoHandler::CancelReadImpl() { QueueReadCompleted(0, read_cancel_reason()); } void TestSerialIoHandler::WriteImpl() { DCHECK(pending_read_buffer()); DCHECK_LE(pending_write_buffer_len(), pending_read_buffer_len()); memcpy(pending_read_buffer()->data(), pending_write_buffer()->data(), pending_write_buffer_len()); QueueReadCompleted(pending_write_buffer_len(), serial::RECEIVE_ERROR_NONE); QueueWriteCompleted(pending_write_buffer_len(), serial::SEND_ERROR_NONE); } void TestSerialIoHandler::CancelWriteImpl() { QueueWriteCompleted(0, write_cancel_reason()); } serial::DeviceControlSignalsPtr TestSerialIoHandler::GetControlSignals() const { serial::DeviceControlSignalsPtr signals(serial::DeviceControlSignals::New()); *signals = device_control_signals_; return signals.Pass(); } serial::ConnectionInfoPtr TestSerialIoHandler::GetPortInfo() const { serial::ConnectionInfoPtr info(serial::ConnectionInfo::New()); *info = info_; return info.Pass(); } bool TestSerialIoHandler::Flush() const { flushes_++; return true; } bool TestSerialIoHandler::SetControlSignals( const serial::HostControlSignals& signals) { if (signals.has_dtr) dtr_ = signals.dtr; if (signals.has_rts) rts_ = signals.rts; return true; } TestSerialIoHandler::~TestSerialIoHandler() { } } // namespace device