boost::asio ライブラリを使用して、シリアル接続でモーターを制御しています。問題は、boost::asio::serial_port::read() 関数が、デバイスが何も送信しない場合にプログラムをフリーズさせることです。
デバイスがポートを介して通知する情報を持っているかどうかを確認するにはどうすればよいですか?
デバイスにコマンドを送信すると、問題なく応答を返すことができます。しかし、コマンドを送信せずに何かを送信したかどうかを知る方法はありますか? または、コマンドが送信されたコマンドへの応答としてのみ受信されるシリアル接続では意味がありませんか?
私のコードを確認してください
try
{
port = new boost::asio::serial_port(io_serial, comPort.c_str());
}
char rcvd;
std::string res;
while(1)
{
boost::asio::read(*port,boost::asio::buffer(&rcvd, 1)); //here it freezes till something is read
std::cout<<rcvd<<std::endl; //I know it froze in the last line because nothing was written from here
if(rcvd == '\r' || rcvd == '\0')
{
break;
}
res.push_back(rcvd);
}
return res;
ご尽力いただきありがとうございます。