1
0
mirror of https://github.com/wjwwood/serial.git synced 2026-01-22 11:44:53 +08:00

More fixes related to non-blocking read.

This commit is contained in:
William Woodall 2011-03-28 13:44:05 -05:00
parent 1b2d29f6a7
commit 5ef78ddefd

View File

@ -203,16 +203,24 @@ static const boost::posix_time::time_duration timeout_zero_comparison(boost::pos
const int Serial::read(char* buffer, int size) {
this->reading = true;
if(this->nonblocking) {// Do not wait for data
return this->serial_port->read_some(boost::asio::buffer(buffer, size));
this->serial_port->async_read_some(boost::asio::buffer(buffer, size),
boost::bind(&Serial::read_complete, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
} else { // Wait for data until size is read or timeout occurs
boost::asio::async_read(*this->serial_port, boost::asio::buffer(buffer, size), transfer_at_least_ignore_invalid_argument(size),
boost::bind(&Serial::read_complete, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
if(this->timeout > timeout_zero_comparison) { // Only set a timeout_timer if there is a valid timeout
this->timeout_timer.expires_from_now(this->timeout);
this->timeout_timer.async_wait(boost::bind(&Serial::timeout_callback, this,
boost::asio::placeholders::error));
} else if(this->nonblocking) {
this->timeout_timer.expires_from_now(boost::posix_time::milliseconds(1));
this->timeout_timer.async_wait(boost::bind(&Serial::timeout_callback, this,
boost::asio::placeholders::error));
}
while(this->reading)
@ -221,7 +229,6 @@ const int Serial::read(char* buffer, int size) {
this->bytes_to_read = size;
return this->bytes_read;
}
}
const std::string Serial::read(int size) {