У меня странная проблема с boost :: asio и boost :: asio :: serial_port.Код наконец-то работает довольно хорошо с асинхронным чтением и прочим, но я не могу понять, как изменить скорость последовательного порта на лету.
То, что я сейчас пытаюсь сделать, это просто сказать устройству, подключенному к моему последовательному порту, изменить скорость последовательного порта, чтобы сказать 38400 бод, затем я устанавливаю последовательный порт моего компьютера на ту же скорость через:
port_.set_option(boost::asio::serial_port_base::baud_rate(rate));
Но в действительности происходит то, что, если я выполняю часть set_option, устройство никогда не получит команду на изменение скорости.Если я не выполняю часть set_option, устройство корректно меняет скорость.Из того, что я понял, происходит то, что (блокирующая, синхронная) запись помещает данные в аппаратный буфер на моем компьютере и возвращает их, затем выполняет set_option, который отбрасывает буфер (до того, как он успел отправить данные на устройство).Поэтому мне нужно придумать способ проверить, пуст ли аппаратный буфер и действительно ли устройство получило команду на изменение скорости, прежде чем перенастраивать последовательный порт моего компьютера.Я также не могу найти информацию о том, нужно ли делать close () и open () для порта, чтобы изменение скорости вступило в силу.Мне также интересно, сбрасывает ли close () содержимое буфера или нет ... Я использую адаптер последовательного порта USB->, и моя платформа - Ubuntu 10.10, если это имеет какое-то значение.