From: Mikko Rasa Date: Sun, 5 Oct 2014 10:48:57 +0000 (+0300) Subject: Use direct constant values for non-POSIX baud rates X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=5a940cb77994f0a86bb039931f4d18033222bf16;p=libs%2Fcore.git Use direct constant values for non-POSIX baud rates Not all systems (particularly older ones) have #defines for the extended baud rates, and the standard doesn't provide anything to check their existence either. --- diff --git a/source/io/unix/serial.cpp b/source/io/unix/serial.cpp index 2be5dc5..70286b7 100644 --- a/source/io/unix/serial.cpp +++ b/source/io/unix/serial.cpp @@ -65,26 +65,29 @@ void Serial::DeviceState::set_baud_rate(unsigned baud) case 9600: speed = B9600; break; case 19200: speed = B19200; break; case 38400: speed = B38400; break; - case 57600: speed = B57600; break; - case 115200: speed = B115200; break; - case 230400: speed = B230400; break; - case 460800: speed = B460800; break; - case 500000: speed = B500000; break; - case 576000: speed = B576000; break; - case 921600: speed = B921600; break; - case 1000000: speed = B1000000; break; - case 1152000: speed = B1152000; break; - case 1500000: speed = B1500000; break; - case 2000000: speed = B2000000; break; - case 2500000: speed = B2500000; break; - case 3000000: speed = B3000000; break; - case 3500000: speed = B3500000; break; - case 4000000: speed = B4000000; break; + case 57600: speed = 0010001; break; + case 115200: speed = 0010002; break; + case 230400: speed = 0010003; break; + case 460800: speed = 0010004; break; + case 500000: speed = 0010005; break; + case 576000: speed = 0010006; break; + case 921600: speed = 0010007; break; + case 1000000: speed = 0010010; break; + case 1152000: speed = 0010011; break; + case 1500000: speed = 0010012; break; + case 2000000: speed = 0010013; break; + case 2500000: speed = 0010014; break; + case 3000000: speed = 0010015; break; + case 3500000: speed = 0010016; break; + case 4000000: speed = 0010017; break; default: throw invalid_argument("set_baud_rate"); } - cfsetospeed(&state, speed); - cfsetispeed(&state, speed); + int ret = cfsetospeed(&state, speed); + if(ret==0) + ret = cfsetispeed(&state, speed); + if(ret<0) + throw invalid_argument("set_baud_rate"); } void Serial::DeviceState::set_data_bits(unsigned bits)