Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1463)

Unified Diff: device/serial/test_serial_io_handler.cc

Issue 488363002: Implement the host side of serial connection I/O on data pipe. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix win x64 build Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/serial/test_serial_io_handler.h ('k') | extensions/renderer/api/serial/serial_api_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/serial/test_serial_io_handler.cc
diff --git a/device/serial/test_serial_io_handler.cc b/device/serial/test_serial_io_handler.cc
index f73197f8582caf3e6ee5fdc56502c7eb3cea827c..f4cc3bd8cb0a4ebae8bbc2ad2c53e3485613290c 100644
--- a/device/serial/test_serial_io_handler.cc
+++ b/device/serial/test_serial_io_handler.cc
@@ -4,6 +4,8 @@
#include "device/serial/test_serial_io_handler.h"
+#include <algorithm>
+
#include "base/bind.h"
#include "device/serial/serial.mojom.h"
@@ -44,24 +46,37 @@ bool TestSerialIoHandler::ConfigurePort(
}
void TestSerialIoHandler::ReadImpl() {
+ if (!pending_read_buffer())
+ return;
+ if (buffer_.empty())
+ return;
+
+ size_t num_bytes =
+ std::min(buffer_.size(), static_cast<size_t>(pending_read_buffer_len()));
+ memcpy(pending_read_buffer(), buffer_.c_str(), num_bytes);
+ buffer_ = buffer_.substr(num_bytes);
+ ReadCompleted(static_cast<uint32_t>(num_bytes), serial::RECEIVE_ERROR_NONE);
}
void TestSerialIoHandler::CancelReadImpl() {
- QueueReadCompleted(0, read_cancel_reason());
+ ReadCompleted(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(),
- pending_write_buffer(),
- pending_write_buffer_len());
- QueueReadCompleted(pending_write_buffer_len(), serial::RECEIVE_ERROR_NONE);
- QueueWriteCompleted(pending_write_buffer_len(), serial::SEND_ERROR_NONE);
+ if (!send_callback_.is_null()) {
+ base::Closure callback = send_callback_;
+ send_callback_.Reset();
+ callback.Run();
+ return;
+ }
+ buffer_ += std::string(pending_write_buffer(), pending_write_buffer_len());
+ WriteCompleted(pending_write_buffer_len(), serial::SEND_ERROR_NONE);
+ if (pending_read_buffer())
+ ReadImpl();
}
void TestSerialIoHandler::CancelWriteImpl() {
- QueueWriteCompleted(0, write_cancel_reason());
+ WriteCompleted(0, write_cancel_reason());
}
serial::DeviceControlSignalsPtr TestSerialIoHandler::GetControlSignals() const {
« no previous file with comments | « device/serial/test_serial_io_handler.h ('k') | extensions/renderer/api/serial/serial_api_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698