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

Side by Side 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, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/serial/test_serial_io_handler.h" 5 #include "device/serial/test_serial_io_handler.h"
6 6
7 #include <algorithm>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "device/serial/serial.mojom.h" 10 #include "device/serial/serial.mojom.h"
9 11
10 namespace device { 12 namespace device {
11 13
12 TestSerialIoHandler::TestSerialIoHandler() 14 TestSerialIoHandler::TestSerialIoHandler()
13 : SerialIoHandler(NULL), 15 : SerialIoHandler(NULL),
14 opened_(false), 16 opened_(false),
15 dtr_(false), 17 dtr_(false),
16 rts_(false), 18 rts_(false),
(...skipping 20 matching lines...) Expand all
37 if (options.parity_bit != serial::PARITY_BIT_NONE) 39 if (options.parity_bit != serial::PARITY_BIT_NONE)
38 info_.parity_bit = options.parity_bit; 40 info_.parity_bit = options.parity_bit;
39 if (options.stop_bits != serial::STOP_BITS_NONE) 41 if (options.stop_bits != serial::STOP_BITS_NONE)
40 info_.stop_bits = options.stop_bits; 42 info_.stop_bits = options.stop_bits;
41 if (options.has_cts_flow_control) 43 if (options.has_cts_flow_control)
42 info_.cts_flow_control = options.cts_flow_control; 44 info_.cts_flow_control = options.cts_flow_control;
43 return true; 45 return true;
44 } 46 }
45 47
46 void TestSerialIoHandler::ReadImpl() { 48 void TestSerialIoHandler::ReadImpl() {
49 if (!pending_read_buffer())
50 return;
51 if (buffer_.empty())
52 return;
53
54 size_t num_bytes =
55 std::min(buffer_.size(), static_cast<size_t>(pending_read_buffer_len()));
56 memcpy(pending_read_buffer(), buffer_.c_str(), num_bytes);
57 buffer_ = buffer_.substr(num_bytes);
58 ReadCompleted(static_cast<uint32_t>(num_bytes), serial::RECEIVE_ERROR_NONE);
47 } 59 }
48 60
49 void TestSerialIoHandler::CancelReadImpl() { 61 void TestSerialIoHandler::CancelReadImpl() {
50 QueueReadCompleted(0, read_cancel_reason()); 62 ReadCompleted(0, read_cancel_reason());
51 } 63 }
52 64
53 void TestSerialIoHandler::WriteImpl() { 65 void TestSerialIoHandler::WriteImpl() {
54 DCHECK(pending_read_buffer()); 66 if (!send_callback_.is_null()) {
55 DCHECK_LE(pending_write_buffer_len(), pending_read_buffer_len()); 67 base::Closure callback = send_callback_;
56 memcpy(pending_read_buffer(), 68 send_callback_.Reset();
57 pending_write_buffer(), 69 callback.Run();
58 pending_write_buffer_len()); 70 return;
59 QueueReadCompleted(pending_write_buffer_len(), serial::RECEIVE_ERROR_NONE); 71 }
60 QueueWriteCompleted(pending_write_buffer_len(), serial::SEND_ERROR_NONE); 72 buffer_ += std::string(pending_write_buffer(), pending_write_buffer_len());
73 WriteCompleted(pending_write_buffer_len(), serial::SEND_ERROR_NONE);
74 if (pending_read_buffer())
75 ReadImpl();
61 } 76 }
62 77
63 void TestSerialIoHandler::CancelWriteImpl() { 78 void TestSerialIoHandler::CancelWriteImpl() {
64 QueueWriteCompleted(0, write_cancel_reason()); 79 WriteCompleted(0, write_cancel_reason());
65 } 80 }
66 81
67 serial::DeviceControlSignalsPtr TestSerialIoHandler::GetControlSignals() const { 82 serial::DeviceControlSignalsPtr TestSerialIoHandler::GetControlSignals() const {
68 serial::DeviceControlSignalsPtr signals(serial::DeviceControlSignals::New()); 83 serial::DeviceControlSignalsPtr signals(serial::DeviceControlSignals::New());
69 *signals = device_control_signals_; 84 *signals = device_control_signals_;
70 return signals.Pass(); 85 return signals.Pass();
71 } 86 }
72 87
73 serial::ConnectionInfoPtr TestSerialIoHandler::GetPortInfo() const { 88 serial::ConnectionInfoPtr TestSerialIoHandler::GetPortInfo() const {
74 serial::ConnectionInfoPtr info(serial::ConnectionInfo::New()); 89 serial::ConnectionInfoPtr info(serial::ConnectionInfo::New());
(...skipping 12 matching lines...) Expand all
87 dtr_ = signals.dtr; 102 dtr_ = signals.dtr;
88 if (signals.has_rts) 103 if (signals.has_rts)
89 rts_ = signals.rts; 104 rts_ = signals.rts;
90 return true; 105 return true;
91 } 106 }
92 107
93 TestSerialIoHandler::~TestSerialIoHandler() { 108 TestSerialIoHandler::~TestSerialIoHandler() {
94 } 109 }
95 110
96 } // namespace device 111 } // namespace device
OLDNEW
« 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