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; }
コメントをかく