| Index: device/serial/serial_io_handler.cc
|
| diff --git a/device/serial/serial_io_handler.cc b/device/serial/serial_io_handler.cc
|
| index 8945455a220f8aff6d0b792e2510c5a1e45dbade..379dee3f1bfc38fe767ef2085c5edfbaa1d92734 100644
|
| --- a/device/serial/serial_io_handler.cc
|
| +++ b/device/serial/serial_io_handler.cc
|
| @@ -13,9 +13,7 @@ namespace device {
|
|
|
| SerialIoHandler::SerialIoHandler(
|
| scoped_refptr<base::MessageLoopProxy> file_thread_message_loop)
|
| - : pending_read_buffer_len_(0),
|
| - pending_write_buffer_len_(0),
|
| - file_thread_message_loop_(file_thread_message_loop) {
|
| + : file_thread_message_loop_(file_thread_message_loop) {
|
| }
|
|
|
| SerialIoHandler::~SerialIoHandler() {
|
| @@ -23,13 +21,6 @@ SerialIoHandler::~SerialIoHandler() {
|
| Close();
|
| }
|
|
|
| -void SerialIoHandler::Initialize(const ReadCompleteCallback& read_callback,
|
| - const WriteCompleteCallback& write_callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - read_complete_ = read_callback;
|
| - write_complete_ = write_callback;
|
| -}
|
| -
|
| void SerialIoHandler::Open(const std::string& port,
|
| const OpenCompleteCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
| @@ -101,23 +92,19 @@ void SerialIoHandler::DoClose(base::File port) {
|
| // port closed by destructor.
|
| }
|
|
|
| -void SerialIoHandler::Read(int max_bytes) {
|
| +void SerialIoHandler::Read(scoped_ptr<WritableBuffer> buffer) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(!IsReadPending());
|
| - pending_read_buffer_ = new net::IOBuffer(max_bytes);
|
| - pending_read_buffer_len_ = max_bytes;
|
| + pending_read_buffer_ = buffer.Pass();
|
| read_canceled_ = false;
|
| AddRef();
|
| ReadImpl();
|
| }
|
|
|
| -void SerialIoHandler::Write(const std::string& data) {
|
| +void SerialIoHandler::Write(scoped_ptr<ReadOnlyBuffer> buffer) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(!IsWritePending());
|
| - int length = static_cast<int>(data.length());
|
| - pending_write_buffer_ = new net::IOBuffer(length);
|
| - pending_write_buffer_len_ = length;
|
| - memcpy(pending_write_buffer_->data(), data.data(), pending_write_buffer_len_);
|
| + pending_write_buffer_ = buffer.Pass();
|
| write_canceled_ = false;
|
| AddRef();
|
| WriteImpl();
|
| @@ -127,10 +114,12 @@ void SerialIoHandler::ReadCompleted(int bytes_read,
|
| serial::ReceiveError error) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(IsReadPending());
|
| - read_complete_.Run(std::string(pending_read_buffer_->data(), bytes_read),
|
| - error);
|
| - pending_read_buffer_ = NULL;
|
| - pending_read_buffer_len_ = 0;
|
| + if (error == serial::RECEIVE_ERROR_NONE) {
|
| + pending_read_buffer_->Done(bytes_read);
|
| + } else {
|
| + pending_read_buffer_->DoneWithError(bytes_read, error);
|
| + }
|
| + pending_read_buffer_.reset();
|
| Release();
|
| }
|
|
|
| @@ -138,9 +127,12 @@ void SerialIoHandler::WriteCompleted(int bytes_written,
|
| serial::SendError error) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(IsWritePending());
|
| - write_complete_.Run(bytes_written, error);
|
| - pending_write_buffer_ = NULL;
|
| - pending_write_buffer_len_ = 0;
|
| + if (error == serial::SEND_ERROR_NONE) {
|
| + pending_write_buffer_->Done(bytes_written);
|
| + } else {
|
| + pending_write_buffer_->DoneWithError(bytes_written, error);
|
| + }
|
| + pending_write_buffer_.reset();
|
| Release();
|
| }
|
|
|
|
|