revise UART speed setting in setRaw()
not only Apple but also *BSD uses raw baudrate for cfset[io]speed(). If cfset[io]speed can accept raw value, set m_speed directly. Otherwise (Linux) use bitmask like B115200.
This commit is contained in:
parent
a9fbbc1d2c
commit
fc836f3812
|
@ -294,53 +294,77 @@ bool CUARTController::setRaw()
|
||||||
termios.c_cc[VTIME] = 10;
|
termios.c_cc[VTIME] = 10;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(B38400) || (B38400 != 38400)
|
||||||
switch (m_speed) {
|
switch (m_speed) {
|
||||||
|
#if defined(B1200)
|
||||||
case 1200U:
|
case 1200U:
|
||||||
::cfsetospeed(&termios, B1200);
|
::cfsetospeed(&termios, B1200);
|
||||||
::cfsetispeed(&termios, B1200);
|
::cfsetispeed(&termios, B1200);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B1200*/
|
||||||
|
#if defined(B2400)
|
||||||
case 2400U:
|
case 2400U:
|
||||||
::cfsetospeed(&termios, B2400);
|
::cfsetospeed(&termios, B2400);
|
||||||
::cfsetispeed(&termios, B2400);
|
::cfsetispeed(&termios, B2400);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B2400*/
|
||||||
|
#if defined(B4800)
|
||||||
case 4800U:
|
case 4800U:
|
||||||
::cfsetospeed(&termios, B4800);
|
::cfsetospeed(&termios, B4800);
|
||||||
::cfsetispeed(&termios, B4800);
|
::cfsetispeed(&termios, B4800);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B4800*/
|
||||||
|
#if defined(B9600)
|
||||||
case 9600U:
|
case 9600U:
|
||||||
::cfsetospeed(&termios, B9600);
|
::cfsetospeed(&termios, B9600);
|
||||||
::cfsetispeed(&termios, B9600);
|
::cfsetispeed(&termios, B9600);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B9600*/
|
||||||
|
#if defined(B19200)
|
||||||
case 19200U:
|
case 19200U:
|
||||||
::cfsetospeed(&termios, B19200);
|
::cfsetospeed(&termios, B19200);
|
||||||
::cfsetispeed(&termios, B19200);
|
::cfsetispeed(&termios, B19200);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B19200*/
|
||||||
|
#if defined(B38400)
|
||||||
case 38400U:
|
case 38400U:
|
||||||
::cfsetospeed(&termios, B38400);
|
::cfsetospeed(&termios, B38400);
|
||||||
::cfsetispeed(&termios, B38400);
|
::cfsetispeed(&termios, B38400);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B38400*/
|
||||||
|
#if defined(B57600)
|
||||||
|
case 57600U:
|
||||||
|
::cfsetospeed(&termios, B57600);
|
||||||
|
::cfsetispeed(&termios, B57600);
|
||||||
|
break;
|
||||||
|
#endif /*B57600*/
|
||||||
|
#if defined(B115200)
|
||||||
case 115200U:
|
case 115200U:
|
||||||
::cfsetospeed(&termios, B115200);
|
::cfsetospeed(&termios, B115200);
|
||||||
::cfsetispeed(&termios, B115200);
|
::cfsetispeed(&termios, B115200);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B115200*/
|
||||||
|
#if defined(B230400)
|
||||||
case 230400U:
|
case 230400U:
|
||||||
::cfsetospeed(&termios, B230400);
|
::cfsetospeed(&termios, B230400);
|
||||||
::cfsetispeed(&termios, B230400);
|
::cfsetispeed(&termios, B230400);
|
||||||
break;
|
break;
|
||||||
|
#endif /*B230400*/
|
||||||
|
#if defined(B460800)
|
||||||
case 460800U:
|
case 460800U:
|
||||||
#if defined(__APPLE__)
|
|
||||||
::cfsetospeed(&termios, 460800);
|
|
||||||
::cfsetispeed(&termios, 460800);
|
|
||||||
#else
|
|
||||||
::cfsetospeed(&termios, B460800);
|
::cfsetospeed(&termios, B460800);
|
||||||
::cfsetispeed(&termios, B460800);
|
::cfsetispeed(&termios, B460800);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
#endif /*B460800*/
|
||||||
default:
|
default:
|
||||||
LogError("Unsupported serial port speed - %u", m_speed);
|
LogError("Unsupported serial port speed - %u", m_speed);
|
||||||
::close(m_fd);
|
::close(m_fd);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
::cfsetospeed(&termios, m_speed);
|
||||||
|
::cfsetispeed(&termios, m_speed);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (::tcsetattr(m_fd, TCSANOW, &termios) < 0) {
|
if (::tcsetattr(m_fd, TCSANOW, &termios) < 0) {
|
||||||
LogError("Cannot set the attributes for %s", m_device.c_str());
|
LogError("Cannot set the attributes for %s", m_device.c_str());
|
||||||
|
|
Loading…
Reference in a new issue