]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/unix/serial.cpp
Use vectors for storage in Poller
[libs/core.git] / source / io / unix / serial.cpp
index 49d9e9c138da1afaad12cc485b331b96a117bb32..70286b7ddd34294a98eea656704849501c681c85 100644 (file)
@@ -33,14 +33,14 @@ void Serial::platform_init(const string &port)
 }
 
 
-void Serial::DeviceState::get_from(const Handle &handle)
+void Serial::DeviceState::get_from(const Handle &h)
 {
-       tcgetattr(*handle, &state);
+       tcgetattr(*h, &state);
 }
 
-void Serial::DeviceState::apply_to(const Handle &handle)
+void Serial::DeviceState::apply_to(const Handle &h)
 {
-       if(tcsetattr(*handle, TCSADRAIN, &state)==-1)
+       if(tcsetattr(*h, TCSADRAIN, &state)==-1)
                throw system_error("tcsetattr");
 }
 
@@ -65,14 +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 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)