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

Side by Side Diff: device/serial/serial_io_handler_posix.cc

Issue 1527183003: Change mojo enums to be scoped enums in the generated C++ bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-binding-equals
Patch Set: rebase Created 4 years, 11 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
« no previous file with comments | « device/serial/serial_io_handler.cc ('k') | device/serial/serial_io_handler_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/serial_io_handler_posix.h" 5 #include "device/serial/serial_io_handler_posix.h"
6 6
7 #include <sys/ioctl.h> 7 #include <sys/ioctl.h>
8 #include <termios.h> 8 #include <termios.h>
9 9
10 #include "base/posix/eintr_wrapper.h" 10 #include "base/posix/eintr_wrapper.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 #elif defined(OS_MACOSX) 192 #elif defined(OS_MACOSX)
193 // cfsetispeed and cfsetospeed sometimes work for custom baud rates on OS 193 // cfsetispeed and cfsetospeed sometimes work for custom baud rates on OS
194 // X but the IOSSIOSPEED ioctl is more reliable but has to be done after 194 // X but the IOSSIOSPEED ioctl is more reliable but has to be done after
195 // the rest of the port parameters are set or else it will be overwritten. 195 // the rest of the port parameters are set or else it will be overwritten.
196 need_iossiospeed = true; 196 need_iossiospeed = true;
197 #else 197 #else
198 return false; 198 return false;
199 #endif 199 #endif
200 } 200 }
201 201
202 DCHECK(options().data_bits != serial::DATA_BITS_NONE); 202 DCHECK(options().data_bits != serial::DataBits::NONE);
203 config.c_cflag &= ~CSIZE; 203 config.c_cflag &= ~CSIZE;
204 switch (options().data_bits) { 204 switch (options().data_bits) {
205 case serial::DATA_BITS_SEVEN: 205 case serial::DataBits::SEVEN:
206 config.c_cflag |= CS7; 206 config.c_cflag |= CS7;
207 break; 207 break;
208 case serial::DATA_BITS_EIGHT: 208 case serial::DataBits::EIGHT:
209 default: 209 default:
210 config.c_cflag |= CS8; 210 config.c_cflag |= CS8;
211 break; 211 break;
212 } 212 }
213 213
214 DCHECK(options().parity_bit != serial::PARITY_BIT_NONE); 214 DCHECK(options().parity_bit != serial::ParityBit::NONE);
215 switch (options().parity_bit) { 215 switch (options().parity_bit) {
216 case serial::PARITY_BIT_EVEN: 216 case serial::ParityBit::EVEN:
217 config.c_cflag |= PARENB; 217 config.c_cflag |= PARENB;
218 config.c_cflag &= ~PARODD; 218 config.c_cflag &= ~PARODD;
219 break; 219 break;
220 case serial::PARITY_BIT_ODD: 220 case serial::ParityBit::ODD:
221 config.c_cflag |= (PARODD | PARENB); 221 config.c_cflag |= (PARODD | PARENB);
222 break; 222 break;
223 case serial::PARITY_BIT_NO: 223 case serial::ParityBit::NO:
224 default: 224 default:
225 config.c_cflag &= ~(PARODD | PARENB); 225 config.c_cflag &= ~(PARODD | PARENB);
226 break; 226 break;
227 } 227 }
228 228
229 error_detect_state_ = ErrorDetectState::NO_ERROR; 229 error_detect_state_ = ErrorDetectState::NO_ERROR;
230 num_chars_stashed_ = 0; 230 num_chars_stashed_ = 0;
231 231
232 if (config.c_cflag & PARENB) { 232 if (config.c_cflag & PARENB) {
233 config.c_iflag &= ~IGNPAR; 233 config.c_iflag &= ~IGNPAR;
234 config.c_iflag |= INPCK; 234 config.c_iflag |= INPCK;
235 parity_check_enabled_ = true; 235 parity_check_enabled_ = true;
236 } else { 236 } else {
237 config.c_iflag |= IGNPAR; 237 config.c_iflag |= IGNPAR;
238 config.c_iflag &= ~INPCK; 238 config.c_iflag &= ~INPCK;
239 parity_check_enabled_ = false; 239 parity_check_enabled_ = false;
240 } 240 }
241 241
242 DCHECK(options().stop_bits != serial::STOP_BITS_NONE); 242 DCHECK(options().stop_bits != serial::StopBits::NONE);
243 switch (options().stop_bits) { 243 switch (options().stop_bits) {
244 case serial::STOP_BITS_TWO: 244 case serial::StopBits::TWO:
245 config.c_cflag |= CSTOPB; 245 config.c_cflag |= CSTOPB;
246 break; 246 break;
247 case serial::STOP_BITS_ONE: 247 case serial::StopBits::ONE:
248 default: 248 default:
249 config.c_cflag &= ~CSTOPB; 249 config.c_cflag &= ~CSTOPB;
250 break; 250 break;
251 } 251 }
252 252
253 DCHECK(options().has_cts_flow_control); 253 DCHECK(options().has_cts_flow_control);
254 if (options().cts_flow_control) { 254 if (options().cts_flow_control) {
255 config.c_cflag |= CRTSCTS; 255 config.c_cflag |= CRTSCTS;
256 } else { 256 } else {
257 config.c_cflag &= ~CRTSCTS; 257 config.c_cflag &= ~CRTSCTS;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 void SerialIoHandlerPosix::OnFileCanReadWithoutBlocking(int fd) { 293 void SerialIoHandlerPosix::OnFileCanReadWithoutBlocking(int fd) {
294 DCHECK(CalledOnValidThread()); 294 DCHECK(CalledOnValidThread());
295 DCHECK_EQ(fd, file().GetPlatformFile()); 295 DCHECK_EQ(fd, file().GetPlatformFile());
296 296
297 if (pending_read_buffer()) { 297 if (pending_read_buffer()) {
298 int bytes_read = HANDLE_EINTR(read(file().GetPlatformFile(), 298 int bytes_read = HANDLE_EINTR(read(file().GetPlatformFile(),
299 pending_read_buffer(), 299 pending_read_buffer(),
300 pending_read_buffer_len())); 300 pending_read_buffer_len()));
301 if (bytes_read < 0) { 301 if (bytes_read < 0) {
302 if (errno == ENXIO) { 302 if (errno == ENXIO) {
303 ReadCompleted(0, serial::RECEIVE_ERROR_DEVICE_LOST); 303 ReadCompleted(0, serial::ReceiveError::DEVICE_LOST);
304 } else { 304 } else {
305 ReadCompleted(0, serial::RECEIVE_ERROR_SYSTEM_ERROR); 305 ReadCompleted(0, serial::ReceiveError::SYSTEM_ERROR);
306 } 306 }
307 } else if (bytes_read == 0) { 307 } else if (bytes_read == 0) {
308 ReadCompleted(0, serial::RECEIVE_ERROR_DEVICE_LOST); 308 ReadCompleted(0, serial::ReceiveError::DEVICE_LOST);
309 } else { 309 } else {
310 bool break_detected = false; 310 bool break_detected = false;
311 bool parity_error_detected = false; 311 bool parity_error_detected = false;
312 int new_bytes_read = 312 int new_bytes_read =
313 CheckReceiveError(pending_read_buffer(), pending_read_buffer_len(), 313 CheckReceiveError(pending_read_buffer(), pending_read_buffer_len(),
314 bytes_read, break_detected, parity_error_detected); 314 bytes_read, break_detected, parity_error_detected);
315 315
316 if (break_detected) { 316 if (break_detected) {
317 ReadCompleted(new_bytes_read, serial::RECEIVE_ERROR_BREAK); 317 ReadCompleted(new_bytes_read, serial::ReceiveError::BREAK);
318 } else if (parity_error_detected) { 318 } else if (parity_error_detected) {
319 ReadCompleted(new_bytes_read, serial::RECEIVE_ERROR_PARITY_ERROR); 319 ReadCompleted(new_bytes_read, serial::ReceiveError::PARITY_ERROR);
320 } else { 320 } else {
321 ReadCompleted(new_bytes_read, serial::RECEIVE_ERROR_NONE); 321 ReadCompleted(new_bytes_read, serial::ReceiveError::NONE);
322 } 322 }
323 } 323 }
324 } else { 324 } else {
325 // Stop watching the fd if we get notifications with no pending 325 // Stop watching the fd if we get notifications with no pending
326 // reads or writes to avoid starving the message loop. 326 // reads or writes to avoid starving the message loop.
327 is_watching_reads_ = false; 327 is_watching_reads_ = false;
328 file_read_watcher_.StopWatchingFileDescriptor(); 328 file_read_watcher_.StopWatchingFileDescriptor();
329 } 329 }
330 } 330 }
331 331
332 void SerialIoHandlerPosix::OnFileCanWriteWithoutBlocking(int fd) { 332 void SerialIoHandlerPosix::OnFileCanWriteWithoutBlocking(int fd) {
333 DCHECK(CalledOnValidThread()); 333 DCHECK(CalledOnValidThread());
334 DCHECK_EQ(fd, file().GetPlatformFile()); 334 DCHECK_EQ(fd, file().GetPlatformFile());
335 335
336 if (pending_write_buffer()) { 336 if (pending_write_buffer()) {
337 int bytes_written = HANDLE_EINTR(write(file().GetPlatformFile(), 337 int bytes_written = HANDLE_EINTR(write(file().GetPlatformFile(),
338 pending_write_buffer(), 338 pending_write_buffer(),
339 pending_write_buffer_len())); 339 pending_write_buffer_len()));
340 if (bytes_written < 0) { 340 if (bytes_written < 0) {
341 WriteCompleted(0, serial::SEND_ERROR_SYSTEM_ERROR); 341 WriteCompleted(0, serial::SendError::SYSTEM_ERROR);
342 } else { 342 } else {
343 WriteCompleted(bytes_written, serial::SEND_ERROR_NONE); 343 WriteCompleted(bytes_written, serial::SendError::NONE);
344 } 344 }
345 } else { 345 } else {
346 // Stop watching the fd if we get notifications with no pending 346 // Stop watching the fd if we get notifications with no pending
347 // writes to avoid starving the message loop. 347 // writes to avoid starving the message loop.
348 is_watching_writes_ = false; 348 is_watching_writes_ = false;
349 file_write_watcher_.StopWatchingFileDescriptor(); 349 file_write_watcher_.StopWatchingFileDescriptor();
350 } 350 }
351 } 351 }
352 352
353 void SerialIoHandlerPosix::EnsureWatchingReads() { 353 void SerialIoHandlerPosix::EnsureWatchingReads() {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 int bitrate = 0; 456 int bitrate = 0;
457 if (SpeedConstantToBitrate(ispeed, &bitrate)) { 457 if (SpeedConstantToBitrate(ispeed, &bitrate)) {
458 info->bitrate = bitrate; 458 info->bitrate = bitrate;
459 } else if (ispeed > 0) { 459 } else if (ispeed > 0) {
460 info->bitrate = static_cast<int>(ispeed); 460 info->bitrate = static_cast<int>(ispeed);
461 } 461 }
462 } 462 }
463 #endif 463 #endif
464 464
465 if ((config.c_cflag & CSIZE) == CS7) { 465 if ((config.c_cflag & CSIZE) == CS7) {
466 info->data_bits = serial::DATA_BITS_SEVEN; 466 info->data_bits = serial::DataBits::SEVEN;
467 } else if ((config.c_cflag & CSIZE) == CS8) { 467 } else if ((config.c_cflag & CSIZE) == CS8) {
468 info->data_bits = serial::DATA_BITS_EIGHT; 468 info->data_bits = serial::DataBits::EIGHT;
469 } else { 469 } else {
470 info->data_bits = serial::DATA_BITS_NONE; 470 info->data_bits = serial::DataBits::NONE;
471 } 471 }
472 if (config.c_cflag & PARENB) { 472 if (config.c_cflag & PARENB) {
473 info->parity_bit = (config.c_cflag & PARODD) ? serial::PARITY_BIT_ODD 473 info->parity_bit = (config.c_cflag & PARODD) ? serial::ParityBit::ODD
474 : serial::PARITY_BIT_EVEN; 474 : serial::ParityBit::EVEN;
475 } else { 475 } else {
476 info->parity_bit = serial::PARITY_BIT_NO; 476 info->parity_bit = serial::ParityBit::NO;
477 } 477 }
478 info->stop_bits = 478 info->stop_bits =
479 (config.c_cflag & CSTOPB) ? serial::STOP_BITS_TWO : serial::STOP_BITS_ONE; 479 (config.c_cflag & CSTOPB) ? serial::StopBits::TWO : serial::StopBits::ONE;
480 info->cts_flow_control = (config.c_cflag & CRTSCTS) != 0; 480 info->cts_flow_control = (config.c_cflag & CRTSCTS) != 0;
481 return info; 481 return info;
482 } 482 }
483 483
484 bool SerialIoHandlerPosix::SetBreak() { 484 bool SerialIoHandlerPosix::SetBreak() {
485 if (ioctl(file().GetPlatformFile(), TIOCSBRK, 0) != 0) { 485 if (ioctl(file().GetPlatformFile(), TIOCSBRK, 0) != 0) {
486 VPLOG(1) << "Failed to set break"; 486 VPLOG(1) << "Failed to set break";
487 return false; 487 return false;
488 } 488 }
489 489
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 memcpy(buffer, chars_stashed_, std::min(new_bytes_read, 2)); 612 memcpy(buffer, chars_stashed_, std::min(new_bytes_read, 2));
613 memcpy(chars_stashed_, tmp, num_chars_stashed_); 613 memcpy(chars_stashed_, tmp, num_chars_stashed_);
614 return new_bytes_read; 614 return new_bytes_read;
615 } 615 }
616 616
617 std::string SerialIoHandler::MaybeFixUpPortName(const std::string& port_name) { 617 std::string SerialIoHandler::MaybeFixUpPortName(const std::string& port_name) {
618 return port_name; 618 return port_name;
619 } 619 }
620 620
621 } // namespace device 621 } // namespace device
OLDNEW
« no previous file with comments | « device/serial/serial_io_handler.cc ('k') | device/serial/serial_io_handler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698