boost::asio::serial_portを使う.
Windows環境だと,send_breakが未実装.
future.wait_forを使えばタイムアウトは簡単.
書式,終端文字が決まっている場合のサンプル.
Windows環境だと,send_breakが未実装.
future.wait_forを使えばタイムアウトは簡単.
書式,終端文字が決まっている場合のサンプル.
std::vector<char> SerialPort::Impl::Read()
{
auto recv_future = std::async(std::launch::async, &SerialPort::Impl::InternalRead, this);
if( timeout != 0 )
{
auto recv_status = recv_future.wait_for(std::chrono::milliseconds(timeout));
if( recv_status == std::future::timeout )
{
throw std::exception("Timeout");
}
}
return recv_future.get();
}
std::vector<char> SerialPort::Impl::InternalRead()
{
std::vector<char> data;
for(size_t number_of_read = 0; number_of_read < max_read; ++number_of_read)
{
char got;
asio::read(*port_, asio::buffer(&got, 1));
if( use_termination_character_ && got == termination_character_ )
{
break;
}
data.push_back(got);
}
data.push_back('\0');
return data;
}

コメントをかく