Search code examples
c++qtuart

UART doesn't receive all sent values in Qt


I'm triying to send data from a PSoc via UART to my PC where a want to store data with Qt. The PSoc sends 3 bytes of data. Theses 3 bytes are repeatet with a frequency of 2.5Hz. When I check the signals with my oscilloscope everything is fine. When I receive the data with the software HTerm also everything is as expected. When I use my code written in c++ with Qt I get the problem that not all data are received in Qt, only one third is in the memory. I expected that the signal readyRead is emitted with every new byte? But it seems that the signal is only emitted at the begin of the package of the 3 bytes. Also my qDebug output doesn't react on changes from the PSoc. So when I change values at PSoc the output in qDebug doesn't change.

I already tried reading 3 Bytes (serial->read(3)) and then I first received some single bytes and after a few readings I get the 3 bytes I sended but this is not so reproducible.

    connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));

    serial->setPortName(gui->ui->comboBox->currentData().toString());
    serial->setBaudRate(QSerialPort::Baud115200);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);

    void uart::readData()
    {
        QByteArray data = serial->read(1); 
        qDebug() << data;
    }

I expect an output like "0x01" "0x02" "0x03" 2.5 times a second, but I get only "0x01"


Solution

  • I just found the solution! You have to set the read-buffer size to the right value. So for reading a package of three bytes I must set:

    serial->setReadBufferSize(3);