| Index: device/serial/serial_connection.cc
|
| diff --git a/device/serial/serial_connection.cc b/device/serial/serial_connection.cc
|
| index c59aad205f5e223fd26731d099e99cc79d766df9..0d3e4171c84b64a74c2f9807322448548ecff5bd 100644
|
| --- a/device/serial/serial_connection.cc
|
| +++ b/device/serial/serial_connection.cc
|
| @@ -4,15 +4,38 @@
|
|
|
| #include "device/serial/serial_connection.h"
|
|
|
| +#include "base/bind.h"
|
| +#include "device/serial/buffer.h"
|
| +#include "device/serial/data_sink_receiver.h"
|
| +#include "device/serial/data_source_sender.h"
|
| #include "device/serial/serial_io_handler.h"
|
|
|
| namespace device {
|
|
|
| -SerialConnection::SerialConnection(scoped_refptr<SerialIoHandler> io_handler)
|
| +SerialConnection::SerialConnection(
|
| + scoped_refptr<SerialIoHandler> io_handler,
|
| + mojo::InterfaceRequest<serial::DataSink> sink,
|
| + mojo::InterfaceRequest<serial::DataSource> source)
|
| : io_handler_(io_handler) {
|
| + receiver_ = mojo::WeakBindToRequest(
|
| + new DataSinkReceiver(base::Bind(&SerialConnection::OnSendPipeReady,
|
| + base::Unretained(this)),
|
| + base::Bind(&SerialConnection::OnSendCancelled,
|
| + base::Unretained(this)),
|
| + base::Bind(base::DoNothing)),
|
| + &sink);
|
| + sender_ = mojo::WeakBindToRequest(
|
| + new DataSourceSender(base::Bind(&SerialConnection::OnReceivePipeReady,
|
| + base::Unretained(this)),
|
| + base::Bind(base::DoNothing)),
|
| + &source);
|
| }
|
|
|
| SerialConnection::~SerialConnection() {
|
| + receiver_->ShutDown();
|
| + sender_->ShutDown();
|
| + io_handler_->CancelRead(serial::RECEIVE_ERROR_DISCONNECTED);
|
| + io_handler_->CancelWrite(serial::SEND_ERROR_DISCONNECTED);
|
| }
|
|
|
| void SerialConnection::GetInfo(
|
| @@ -41,4 +64,16 @@ void SerialConnection::Flush(const mojo::Callback<void(bool)>& callback) {
|
| callback.Run(io_handler_->Flush());
|
| }
|
|
|
| +void SerialConnection::OnSendCancelled(int32_t error) {
|
| + io_handler_->CancelWrite(static_cast<serial::SendError>(error));
|
| +}
|
| +
|
| +void SerialConnection::OnSendPipeReady(scoped_ptr<ReadOnlyBuffer> buffer) {
|
| + io_handler_->Write(buffer.Pass());
|
| +}
|
| +
|
| +void SerialConnection::OnReceivePipeReady(scoped_ptr<WritableBuffer> buffer) {
|
| + io_handler_->Read(buffer.Pass());
|
| +}
|
| +
|
| } // namespace device
|
|
|