Index: chrome/browser/extensions/api/serial/serial_connection_posix.cc |
=================================================================== |
--- chrome/browser/extensions/api/serial/serial_connection_posix.cc (revision 218161) |
+++ chrome/browser/extensions/api/serial/serial_connection_posix.cc (working copy) |
@@ -9,103 +9,113 @@ |
namespace extensions { |
-bool SerialConnection::PostOpen() { |
- struct termios options; |
- |
- // Start with existing options and modify. |
- tcgetattr(file_, &options); |
- |
- // Bitrate (sometimes erroneously referred to as baud rate). |
- if (bitrate_ >= 0) { |
- int bitrate_opt_; |
+namespace { |
+ int getBaudRate(int bitrate_) { |
switch (bitrate_) { |
case 0: |
- bitrate_opt_ = B0; |
- break; |
+ return B0; |
case 50: |
- bitrate_opt_ = B50; |
- break; |
+ return B50; |
case 75: |
- bitrate_opt_ = B75; |
- break; |
+ return B75; |
case 110: |
- bitrate_opt_ = B110; |
- break; |
+ return B110; |
case 134: |
- bitrate_opt_ = B134; |
- break; |
+ return B134; |
case 150: |
- bitrate_opt_ = B150; |
- break; |
+ return B150; |
case 200: |
- bitrate_opt_ = B200; |
- break; |
+ return B200; |
case 300: |
- bitrate_opt_ = B300; |
- break; |
+ return B300; |
case 600: |
- bitrate_opt_ = B600; |
- break; |
+ return B600; |
case 1200: |
- bitrate_opt_ = B1200; |
- break; |
+ return B1200; |
case 1800: |
- bitrate_opt_ = B1800; |
- break; |
+ return B1800; |
case 2400: |
- bitrate_opt_ = B2400; |
- break; |
+ return B2400; |
case 4800: |
- bitrate_opt_ = B4800; |
- break; |
+ return B4800; |
case 9600: |
- bitrate_opt_ = B9600; |
- break; |
+ return B9600; |
case 19200: |
- bitrate_opt_ = B19200; |
- break; |
+ return B19200; |
case 38400: |
- bitrate_opt_ = B38400; |
- break; |
+ return B38400; |
#if defined(OS_POSIX) && !defined(OS_MACOSX) |
case 57600: |
- bitrate_opt_ = B57600; |
- break; |
+ return B57600; |
case 115200: |
- bitrate_opt_ = B115200; |
- break; |
+ return B115200; |
case 230400: |
- bitrate_opt_ = B230400; |
- break; |
+ return B230400; |
case 460800: |
- bitrate_opt_ = B460800; |
- break; |
+ return B460800; |
case 576000: |
- bitrate_opt_ = B576000; |
- break; |
+ return B576000; |
case 921600: |
- bitrate_opt_ = B921600; |
- break; |
+ return B921600; |
default: |
- bitrate_opt_ = B9600; |
+ return B9600; |
#else |
// MACOSX doesn't define constants bigger than 38400. |
// So if it is MACOSX and the value doesn't fit any of the defined constants |
// It will setup the bitrate with 'bitrate_' (just forwarding the value) |
default: |
- bitrate_opt_ = bitrate_; |
+ return bitrate_; |
#endif |
} |
+ } |
+} // namespace |
+bool SerialConnection::PostOpen() { |
+ struct termios options; |
+ |
+ // Start with existing options and modify. |
+ tcgetattr(file_, &options); |
+ |
+ // Bitrate (sometimes erroneously referred to as baud rate). |
+ if (bitrate_ >= 0) { |
+ int bitrate_opt_ = getBaudRate(bitrate_); |
+ |
cfsetispeed(&options, bitrate_opt_); |
cfsetospeed(&options, bitrate_opt_); |
} |
- // 8N1 |
- options.c_cflag &= ~PARENB; |
- options.c_cflag &= ~CSTOPB; |
options.c_cflag &= ~CSIZE; |
- options.c_cflag |= CS8; |
+ switch (databit_) { |
+ case serial::DATA_BIT_SEVENBIT: |
+ options.c_cflag |= CS7; |
+ break; |
+ case serial::DATA_BIT_EIGHTBIT: |
+ default: |
+ options.c_cflag |= CS8; |
+ break; |
+ } |
+ switch (stopbit_) { |
+ case serial::STOP_BIT_TWOSTOPBIT: |
+ options.c_cflag |= CSTOPB; |
+ break; |
+ case serial::STOP_BIT_ONESTOPBIT: |
+ default: |
+ options.c_cflag &= ~CSTOPB; |
+ break; |
+ } |
+ switch (parity_) { |
+ case serial::PARITY_BIT_EVENPARITY: |
+ options.c_cflag |= PARENB; |
+ options.c_cflag &= ~PARODD; |
+ break; |
+ case serial::PARITY_BIT_ODDPARITY: |
+ options.c_cflag |= (PARENB | PARODD); |
+ break; |
+ case serial::PARITY_BIT_NOPARITY: |
+ default: |
+ options.c_cflag &= ~(PARENB | PARODD); |
+ break; |
+ } |
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); |
// Enable receiver and set local mode |