Chromium Code Reviews| 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)), |
|
raymes
2014/08/22 04:57:43
Do we really not care about the error callbacks he
Sam McNally
2014/08/22 08:12:12
I don't think there's anything meaningful for the
|
| + &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 |