LINUX.ORG.RU

QtSerialPort смена скорости порта

 ,


0

3

Доброго всем времени суток.

Пишу на qt программу опроса устройства, использую этот самый QtSerialPort в потоке. Вот так его открываю

if (port->open(QIODevice::ReadWrite)) {
        switch (_connParam.iIndexBaudrate){
            case 0: port->setBaudRate(QSerialPort::Baud1200); break;
            case 1: port->setBaudRate(QSerialPort::Baud2400); break;
            case 2: port->setBaudRate(QSerialPort::Baud4800); break;
            case 3: port->setBaudRate(QSerialPort::Baud9600); break;
            case 4: port->setBaudRate(QSerialPort::Baud19200); break;
        }
        port->setDataBits(QSerialPort::Data8);
        port->setParity(QSerialPort::NoParity);
        port->setStopBits(QSerialPort::OneStop);
        port->setFlowControl(QSerialPort::NoFlowControl);
        port->open(QIODevice::ReadWrite);

запись в порт

port->clear(QSerialPort::AllDirections);
port->write(buf);

чтение порта

    int iDelay=(int)(80*1000*11/port->baudRate());
    do {
        buf.append(port->readAll());
    } while (port->waitForReadyRead(iDelay));

однако это работает только если не трогать настройки порта в процессе работы программы. Если поменять скорость, то приёмный буфер будет пустой при чтении, но если перезапустить программу и запустить чтение на новой скорости, то всё пройдёт нормально. Никто с таким не сталкивался?

Если поменять скорость

а потом сделать port->close() и снова port->open() - верно?

dib2 ★★★★★ ()

QtSerialPort в потоке.

Проблема наблюдается и для одного потока, или только для нескольких?

ZUKMAN ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.