0

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;
  }

今、私はここで本当に迷っています。

4

1 に答える 1