blob: bf8fbb1334ac6840795a31bad358df60917b8a1f [file] [log] [blame]
// 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<SerialIoHandler> TestSerialIoHandler::Create() {
return scoped_refptr<SerialIoHandler>(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