Re: [Boost-users] [boost.asio] Flush serial port buffers?

No ideas on this one?
Hi everyone
My program currently writes some characters to a device connected over the serial interface and subsequently changes the baud rate, followed by sending some more characters.
The problem is that the first transfer does not seem to complete before the baud rate switch and thus is sent with the new baud rate, which is not supposed to happen. What I am looking for is something like a flush() before changing the baud rate. Using:
boost::asio::write(*port, buffer(buf, size), transfer_all());
does not seem to work. Any suggestions?
Thanks and best regards Pascal

The problem is that the first transfer does not seem to complete before the baud rate switch and thus is sent with the new baud rate, which is not supposed to happen.
If you use blocking write(), it doesn't return until the data is sent. If your write is asynchronous, you should use its handler to get notified when the data is sent. But the fact that the data was sent, does not mean that it was received by the device. I'm not familiar with serial interfaces, but maybe there's some buffering at the protocol/OS/driver level, which is out of ASIO control. Perhaps, you have to define some acknowledge that the device would send when it receives the data - and only after you get this ack you'll change the baud-rate.
participants (2)
-
Igor R
-
Pascal Kesseli