| 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
|
|
|