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

Side by Side Diff: chrome/browser/extensions/api/serial/serial_connection.cc

Issue 363583002: Convert SerialIoHandler to use Mojo types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove "default" case Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "chrome/browser/extensions/api/serial/serial_connection.h" 5 #include "chrome/browser/extensions/api/serial/serial_connection.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "chrome/common/extensions/api/serial.h" 11 #include "chrome/common/extensions/api/serial.h"
12 #include "extensions/browser/api/api_resource_manager.h" 12 #include "extensions/browser/api/api_resource_manager.h"
13 13
14 namespace extensions { 14 namespace extensions {
15 15
16 namespace { 16 namespace {
17 17
18 const int kDefaultBufferSize = 4096; 18 const int kDefaultBufferSize = 4096;
19
20 api::serial::SendError ConvertSendErrorFromMojo(
21 device::serial::SendError input) {
22 switch (input) {
23 case device::serial::SEND_ERROR_NONE:
24 return api::serial::SEND_ERROR_NONE;
25 case device::serial::SEND_ERROR_DISCONNECTED:
26 return api::serial::SEND_ERROR_DISCONNECTED;
27 case device::serial::SEND_ERROR_PENDING:
28 return api::serial::SEND_ERROR_PENDING;
29 case device::serial::SEND_ERROR_TIMEOUT:
30 return api::serial::SEND_ERROR_TIMEOUT;
31 case device::serial::SEND_ERROR_SYSTEM_ERROR:
32 return api::serial::SEND_ERROR_SYSTEM_ERROR;
33 }
34 return api::serial::SEND_ERROR_NONE;
19 } 35 }
20 36
37 api::serial::ReceiveError ConvertReceiveErrorFromMojo(
38 device::serial::ReceiveError input) {
39 switch (input) {
40 case device::serial::RECEIVE_ERROR_NONE:
41 return api::serial::RECEIVE_ERROR_NONE;
42 case device::serial::RECEIVE_ERROR_DISCONNECTED:
43 return api::serial::RECEIVE_ERROR_DISCONNECTED;
44 case device::serial::RECEIVE_ERROR_TIMEOUT:
45 return api::serial::RECEIVE_ERROR_TIMEOUT;
46 case device::serial::RECEIVE_ERROR_DEVICE_LOST:
47 return api::serial::RECEIVE_ERROR_DEVICE_LOST;
48 case device::serial::RECEIVE_ERROR_SYSTEM_ERROR:
49 return api::serial::RECEIVE_ERROR_SYSTEM_ERROR;
50 }
51 return api::serial::RECEIVE_ERROR_NONE;
52 }
53
54 api::serial::DataBits ConvertDataBitsFromMojo(device::serial::DataBits input) {
55 switch (input) {
56 case device::serial::DATA_BITS_NONE:
57 return api::serial::DATA_BITS_NONE;
58 case device::serial::DATA_BITS_SEVEN:
59 return api::serial::DATA_BITS_SEVEN;
60 case device::serial::DATA_BITS_EIGHT:
61 return api::serial::DATA_BITS_EIGHT;
62 }
63 return api::serial::DATA_BITS_NONE;
64 }
65
66 device::serial::DataBits ConvertDataBitsToMojo(api::serial::DataBits input) {
67 switch (input) {
68 case api::serial::DATA_BITS_NONE:
69 return device::serial::DATA_BITS_NONE;
70 case api::serial::DATA_BITS_SEVEN:
71 return device::serial::DATA_BITS_SEVEN;
72 case api::serial::DATA_BITS_EIGHT:
73 return device::serial::DATA_BITS_EIGHT;
74 }
75 return device::serial::DATA_BITS_NONE;
76 }
77
78 api::serial::ParityBit ConvertParityBitFromMojo(
79 device::serial::ParityBit input) {
80 switch (input) {
81 case device::serial::PARITY_BIT_NONE:
82 return api::serial::PARITY_BIT_NONE;
83 case device::serial::PARITY_BIT_ODD:
84 return api::serial::PARITY_BIT_ODD;
85 case device::serial::PARITY_BIT_NO:
86 return api::serial::PARITY_BIT_NO;
87 case device::serial::PARITY_BIT_EVEN:
88 return api::serial::PARITY_BIT_EVEN;
89 }
90 return api::serial::PARITY_BIT_NONE;
91 }
92
93 device::serial::ParityBit ConvertParityBitToMojo(api::serial::ParityBit input) {
94 switch (input) {
95 case api::serial::PARITY_BIT_NONE:
96 return device::serial::PARITY_BIT_NONE;
97 case api::serial::PARITY_BIT_NO:
98 return device::serial::PARITY_BIT_NO;
99 case api::serial::PARITY_BIT_ODD:
100 return device::serial::PARITY_BIT_ODD;
101 case api::serial::PARITY_BIT_EVEN:
102 return device::serial::PARITY_BIT_EVEN;
103 }
104 return device::serial::PARITY_BIT_NONE;
105 }
106
107 api::serial::StopBits ConvertStopBitsFromMojo(device::serial::StopBits input) {
108 switch (input) {
109 case device::serial::STOP_BITS_NONE:
110 return api::serial::STOP_BITS_NONE;
111 case device::serial::STOP_BITS_ONE:
112 return api::serial::STOP_BITS_ONE;
113 case device::serial::STOP_BITS_TWO:
114 return api::serial::STOP_BITS_TWO;
115 }
116 return api::serial::STOP_BITS_NONE;
117 }
118
119 device::serial::StopBits ConvertStopBitsToMojo(api::serial::StopBits input) {
120 switch (input) {
121 case api::serial::STOP_BITS_NONE:
122 return device::serial::STOP_BITS_NONE;
123 case api::serial::STOP_BITS_ONE:
124 return device::serial::STOP_BITS_ONE;
125 case api::serial::STOP_BITS_TWO:
126 return device::serial::STOP_BITS_TWO;
127 }
128 return device::serial::STOP_BITS_NONE;
129 }
130
131 } // namespace
132
21 static base::LazyInstance< 133 static base::LazyInstance<
22 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> > > 134 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> > >
23 g_factory = LAZY_INSTANCE_INITIALIZER; 135 g_factory = LAZY_INSTANCE_INITIALIZER;
24 136
25 // static 137 // static
26 template <> 138 template <>
27 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> >* 139 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> >*
28 ApiResourceManager<SerialConnection>::GetFactoryInstance() { 140 ApiResourceManager<SerialConnection>::GetFactoryInstance() {
29 return g_factory.Pointer(); 141 return g_factory.Pointer();
30 } 142 }
31 143
32 SerialConnection::SerialConnection(const std::string& port, 144 SerialConnection::SerialConnection(const std::string& port,
33 const std::string& owner_extension_id) 145 const std::string& owner_extension_id)
34 : ApiResource(owner_extension_id), 146 : ApiResource(owner_extension_id),
35 port_(port), 147 port_(port),
36 persistent_(false), 148 persistent_(false),
37 buffer_size_(kDefaultBufferSize), 149 buffer_size_(kDefaultBufferSize),
38 receive_timeout_(0), 150 receive_timeout_(0),
39 send_timeout_(0), 151 send_timeout_(0),
40 paused_(false), 152 paused_(false),
41 io_handler_(SerialIoHandler::Create()) { 153 io_handler_(SerialIoHandler::Create()) {
42 DCHECK_CURRENTLY_ON(BrowserThread::IO); 154 DCHECK_CURRENTLY_ON(BrowserThread::IO);
43 io_handler_->Initialize( 155 io_handler_->Initialize(
44 base::Bind(&SerialConnection::OnAsyncReadComplete, AsWeakPtr()), 156 base::Bind(&SerialConnection::OnAsyncReadComplete, AsWeakPtr()),
45 base::Bind(&SerialConnection::OnAsyncWriteComplete, AsWeakPtr())); 157 base::Bind(&SerialConnection::OnAsyncWriteComplete, AsWeakPtr()));
46 } 158 }
47 159
48 SerialConnection::~SerialConnection() { 160 SerialConnection::~SerialConnection() {
49 io_handler_->CancelRead(api::serial::RECEIVE_ERROR_DISCONNECTED); 161 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_DISCONNECTED);
50 io_handler_->CancelWrite(api::serial::SEND_ERROR_DISCONNECTED); 162 io_handler_->CancelWrite(device::serial::SEND_ERROR_DISCONNECTED);
51 } 163 }
52 164
53 bool SerialConnection::IsPersistent() const { return persistent(); } 165 bool SerialConnection::IsPersistent() const { return persistent(); }
54 166
55 void SerialConnection::set_buffer_size(int buffer_size) { 167 void SerialConnection::set_buffer_size(int buffer_size) {
56 buffer_size_ = buffer_size; 168 buffer_size_ = buffer_size;
57 } 169 }
58 170
59 void SerialConnection::set_receive_timeout(int receive_timeout) { 171 void SerialConnection::set_receive_timeout(int receive_timeout) {
60 receive_timeout_ = receive_timeout; 172 receive_timeout_ = receive_timeout;
61 } 173 }
62 174
63 void SerialConnection::set_send_timeout(int send_timeout) { 175 void SerialConnection::set_send_timeout(int send_timeout) {
64 send_timeout_ = send_timeout; 176 send_timeout_ = send_timeout;
65 } 177 }
66 178
67 void SerialConnection::set_paused(bool paused) { 179 void SerialConnection::set_paused(bool paused) {
68 paused_ = paused; 180 paused_ = paused;
69 if (paused) { 181 if (paused) {
70 io_handler_->CancelRead(api::serial::RECEIVE_ERROR_NONE); 182 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_NONE);
71 } 183 }
72 } 184 }
73 185
74 void SerialConnection::Open(const OpenCompleteCallback& callback) { 186 void SerialConnection::Open(const OpenCompleteCallback& callback) {
75 DCHECK_CURRENTLY_ON(BrowserThread::IO); 187 DCHECK_CURRENTLY_ON(BrowserThread::IO);
76 io_handler_->Open(port_, callback); 188 io_handler_->Open(port_, callback);
77 } 189 }
78 190
79 bool SerialConnection::Receive(const ReceiveCompleteCallback& callback) { 191 bool SerialConnection::Receive(const ReceiveCompleteCallback& callback) {
80 DCHECK_CURRENTLY_ON(BrowserThread::IO); 192 DCHECK_CURRENTLY_ON(BrowserThread::IO);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 if (options.persistent.get()) 225 if (options.persistent.get())
114 set_persistent(*options.persistent); 226 set_persistent(*options.persistent);
115 if (options.name.get()) 227 if (options.name.get())
116 set_name(*options.name); 228 set_name(*options.name);
117 if (options.buffer_size.get()) 229 if (options.buffer_size.get())
118 set_buffer_size(*options.buffer_size); 230 set_buffer_size(*options.buffer_size);
119 if (options.receive_timeout.get()) 231 if (options.receive_timeout.get())
120 set_receive_timeout(*options.receive_timeout); 232 set_receive_timeout(*options.receive_timeout);
121 if (options.send_timeout.get()) 233 if (options.send_timeout.get())
122 set_send_timeout(*options.send_timeout); 234 set_send_timeout(*options.send_timeout);
123 bool success = io_handler_->ConfigurePort(options); 235 bool success = io_handler_->ConfigurePort(
124 io_handler_->CancelRead(api::serial::RECEIVE_ERROR_NONE); 236 *device::serial::ConnectionOptions::From(options));
237 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_NONE);
125 return success; 238 return success;
126 } 239 }
127 240
128 void SerialConnection::SetIoHandlerForTest( 241 void SerialConnection::SetIoHandlerForTest(
129 scoped_refptr<SerialIoHandler> handler) { 242 scoped_refptr<SerialIoHandler> handler) {
130 io_handler_ = handler; 243 io_handler_ = handler;
131 io_handler_->Initialize( 244 io_handler_->Initialize(
132 base::Bind(&SerialConnection::OnAsyncReadComplete, AsWeakPtr()), 245 base::Bind(&SerialConnection::OnAsyncReadComplete, AsWeakPtr()),
133 base::Bind(&SerialConnection::OnAsyncWriteComplete, AsWeakPtr())); 246 base::Bind(&SerialConnection::OnAsyncWriteComplete, AsWeakPtr()));
134 } 247 }
135 248
136 bool SerialConnection::GetInfo(api::serial::ConnectionInfo* info) const { 249 bool SerialConnection::GetInfo(api::serial::ConnectionInfo* info) const {
137 DCHECK_CURRENTLY_ON(BrowserThread::IO); 250 DCHECK_CURRENTLY_ON(BrowserThread::IO);
138 info->paused = paused_; 251 info->paused = paused_;
139 info->persistent = persistent_; 252 info->persistent = persistent_;
140 info->name = name_; 253 info->name = name_;
141 info->buffer_size = buffer_size_; 254 info->buffer_size = buffer_size_;
142 info->receive_timeout = receive_timeout_; 255 info->receive_timeout = receive_timeout_;
143 info->send_timeout = send_timeout_; 256 info->send_timeout = send_timeout_;
144 return io_handler_->GetPortInfo(info); 257 device::serial::ConnectionInfoPtr port_info = io_handler_->GetPortInfo();
258 if (!port_info)
259 return false;
260
261 info->bitrate.reset(new int(port_info->bitrate));
262 info->data_bits = ConvertDataBitsFromMojo(port_info->data_bits);
263 info->parity_bit = ConvertParityBitFromMojo(port_info->parity_bit);
264 info->stop_bits = ConvertStopBitsFromMojo(port_info->stop_bits);
265 info->cts_flow_control.reset(new bool(port_info->cts_flow_control));
266 return true;
145 } 267 }
146 268
147 bool SerialConnection::Flush() const { 269 bool SerialConnection::Flush() const {
148 return io_handler_->Flush(); 270 return io_handler_->Flush();
149 } 271 }
150 272
151 bool SerialConnection::GetControlSignals( 273 bool SerialConnection::GetControlSignals(
152 api::serial::DeviceControlSignals* control_signals) const { 274 api::serial::DeviceControlSignals* control_signals) const {
153 return io_handler_->GetControlSignals(control_signals); 275 device::serial::DeviceControlSignalsPtr signals =
276 io_handler_->GetControlSignals();
277 if (!signals)
278 return false;
279
280 control_signals->dcd = signals->dcd;
281 control_signals->cts = signals->cts;
282 control_signals->ri = signals->ri;
283 control_signals->dsr = signals->dsr;
284 return true;
154 } 285 }
155 286
156 bool SerialConnection::SetControlSignals( 287 bool SerialConnection::SetControlSignals(
157 const api::serial::HostControlSignals& control_signals) { 288 const api::serial::HostControlSignals& control_signals) {
158 return io_handler_->SetControlSignals(control_signals); 289 return io_handler_->SetControlSignals(
290 *device::serial::HostControlSignals::From(control_signals));
159 } 291 }
160 292
161 void SerialConnection::OnReceiveTimeout() { 293 void SerialConnection::OnReceiveTimeout() {
162 DCHECK_CURRENTLY_ON(BrowserThread::IO); 294 DCHECK_CURRENTLY_ON(BrowserThread::IO);
163 io_handler_->CancelRead(api::serial::RECEIVE_ERROR_TIMEOUT); 295 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_TIMEOUT);
164 } 296 }
165 297
166 void SerialConnection::OnSendTimeout() { 298 void SerialConnection::OnSendTimeout() {
167 DCHECK_CURRENTLY_ON(BrowserThread::IO); 299 DCHECK_CURRENTLY_ON(BrowserThread::IO);
168 io_handler_->CancelWrite(api::serial::SEND_ERROR_TIMEOUT); 300 io_handler_->CancelWrite(device::serial::SEND_ERROR_TIMEOUT);
169 } 301 }
170 302
171 void SerialConnection::OnAsyncReadComplete(const std::string& data, 303 void SerialConnection::OnAsyncReadComplete(const std::string& data,
172 api::serial::ReceiveError error) { 304 device::serial::ReceiveError error) {
173 DCHECK_CURRENTLY_ON(BrowserThread::IO); 305 DCHECK_CURRENTLY_ON(BrowserThread::IO);
174 DCHECK(!receive_complete_.is_null()); 306 DCHECK(!receive_complete_.is_null());
175 ReceiveCompleteCallback callback = receive_complete_; 307 ReceiveCompleteCallback callback = receive_complete_;
176 receive_complete_.Reset(); 308 receive_complete_.Reset();
177 receive_timeout_task_.reset(); 309 receive_timeout_task_.reset();
178 callback.Run(data, error); 310 callback.Run(data, ConvertReceiveErrorFromMojo(error));
179 } 311 }
180 312
181 void SerialConnection::OnAsyncWriteComplete(int bytes_sent, 313 void SerialConnection::OnAsyncWriteComplete(int bytes_sent,
182 api::serial::SendError error) { 314 device::serial::SendError error) {
183 DCHECK_CURRENTLY_ON(BrowserThread::IO); 315 DCHECK_CURRENTLY_ON(BrowserThread::IO);
184 DCHECK(!send_complete_.is_null()); 316 DCHECK(!send_complete_.is_null());
185 SendCompleteCallback callback = send_complete_; 317 SendCompleteCallback callback = send_complete_;
186 send_complete_.Reset(); 318 send_complete_.Reset();
187 send_timeout_task_.reset(); 319 send_timeout_task_.reset();
188 callback.Run(bytes_sent, error); 320 callback.Run(bytes_sent, ConvertSendErrorFromMojo(error));
189 } 321 }
190 322
191 SerialConnection::TimeoutTask::TimeoutTask(const base::Closure& closure, 323 SerialConnection::TimeoutTask::TimeoutTask(const base::Closure& closure,
192 const base::TimeDelta& delay) 324 const base::TimeDelta& delay)
193 : weak_factory_(this), closure_(closure), delay_(delay) { 325 : weak_factory_(this), closure_(closure), delay_(delay) {
194 base::MessageLoop::current()->PostDelayedTask( 326 base::MessageLoop::current()->PostDelayedTask(
195 FROM_HERE, 327 FROM_HERE,
196 base::Bind(&TimeoutTask::Run, weak_factory_.GetWeakPtr()), 328 base::Bind(&TimeoutTask::Run, weak_factory_.GetWeakPtr()),
197 delay_); 329 delay_);
198 } 330 }
199 331
200 SerialConnection::TimeoutTask::~TimeoutTask() {} 332 SerialConnection::TimeoutTask::~TimeoutTask() {}
201 333
202 void SerialConnection::TimeoutTask::Run() const { closure_.Run(); } 334 void SerialConnection::TimeoutTask::Run() const { closure_.Run(); }
203 335
204 } // namespace extensions 336 } // namespace extensions
337
338 namespace mojo {
339
340 // static
341 device::serial::HostControlSignalsPtr
342 TypeConverter<device::serial::HostControlSignalsPtr,
343 extensions::api::serial::HostControlSignals>::
344 ConvertFrom(const extensions::api::serial::HostControlSignals& input) {
345 device::serial::HostControlSignalsPtr output(
346 device::serial::HostControlSignals::New());
347 if (input.dtr.get()) {
348 output->has_dtr = true;
349 output->dtr = *input.dtr;
350 }
351 if (input.rts.get()) {
352 output->has_rts = true;
353 output->rts = *input.rts;
354 }
355 return output.Pass();
356 }
357
358 // static
359 device::serial::ConnectionOptionsPtr
360 TypeConverter<device::serial::ConnectionOptionsPtr,
361 extensions::api::serial::ConnectionOptions>::
362 ConvertFrom(const extensions::api::serial::ConnectionOptions& input) {
363 device::serial::ConnectionOptionsPtr output(
364 device::serial::ConnectionOptions::New());
365 if (input.bitrate.get() && *input.bitrate > 0)
366 output->bitrate = *input.bitrate;
367 output->data_bits = extensions::ConvertDataBitsToMojo(input.data_bits);
368 output->parity_bit = extensions::ConvertParityBitToMojo(input.parity_bit);
369 output->stop_bits = extensions::ConvertStopBitsToMojo(input.stop_bits);
370 if (input.cts_flow_control.get()) {
371 output->has_cts_flow_control = true;
372 output->cts_flow_control = *input.cts_flow_control;
373 }
374 return output.Pass();
375 }
376
377 } // namespace mojo
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/serial/serial_connection.h ('k') | chrome/browser/extensions/api/serial/serial_io_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698