boost::asio を使用してアプリケーションを作成する際に、目的に合わせて例を適応させました。
しかし、それを機能させた後、私は今それをより良く機能させようとしています。そのためには、何らかの方法でシリアル デバイスをリセットする必要があります。同様のアプリケーションでは、これはbreak
シグナルの送信によって行われます。
何らかの理由で、例外を取得せずにこれを行うことはできないようです。
私はvoid send_break()
関数を使用していますが、これが問題である可能性があります。これは、常にエラーがスローされるように思われるためです。
これはブーストコードです:
/// Send a break sequence to the serial port.
/**
* This function causes a break sequence of platform-specific duration to be
* sent out the serial port.
*
* @throws boost::system::system_error Thrown on failure.
*/
void send_break()
{
boost::system::error_code ec;
this->get_service().send_break(this->get_implementation(), ec);
boost::asio::detail::throw_error(ec, "send_break");
}
/// Send a break sequence to the serial port.
/**
* This function causes a break sequence of platform-specific duration to be
* sent out the serial port.
*
* @param ec Set to indicate what error occurred, if any.
*/
boost::system::error_code send_break(boost::system::error_code& ec)
{
return this->get_service().send_break(this->get_implementation(), ec);
}
これは、関数を呼び出そうとするコードです。
class minicom_client
{
public:
minicom_client(boost::asio::io_service& io_service, unsigned int baud, const string& device)
: active_(true),
io_service_(io_service),
serialPort(io_service, device)
{
if (!serialPort.is_open())
{
cerr << "Failed to open serial port\n";
return;
}
boost::asio::serial_port_base::baud_rate baud_option(baud);
serialPort.set_option(baud_option); // set the baud rate after the port has been opened
serialPort.send_break();
read_start();
}
編集:
しばらくこれで遊んだ後、私が得ているエラーコードはboost::asio::error::operation_not_supported;
-しかし、これが組み込み関数である場合、どうすればよいでしょうか?!
*win_iocp_serial_port_service.hpp* から:
// Send a break sequence to the serial port.
boost::system::error_code send_break(implementation_type&,
boost::system::error_code& ec)
{
ec = boost::asio::error::operation_not_supported;
return ec;
}
今、私はここで本当に迷っています。