Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. setBaudRate() does not actually set custom baud rate?

setBaudRate() does not actually set custom baud rate?

Scheduled Pinned Locked Moved Unsolved General and Desktop
2 Posts 2 Posters 1.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    Elliott
    wrote on last edited by
    #1

    Hi,

    I'm running into an issue using a serial port on Linux, and trying to set a custom baud rate. When I started having the issue I was using Qt 5.9.3; I've since updated to 5.9.4 but am having the same issue.

    Specifically, I'm using the modbus device class, so I have a line:

    m_ptModbus->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, Qserialport::Baud115200);
    

    … this works, it sets the baud rate to 115200. If I choose any of the other enumerated baud rates, they work as well.

    I know that the qserialport class will accept an arbitrary qint32 for baud rate, and if it's not in the list of standard rates in termios.h, it creates a termios2 struct in QSerialPortPrivate::setCustomBaudRate() and will use that to attempt to set the custom rate. I need to set a rate of 250k, so I need to take advantage of that. But if I just put down

    m_ptModbus->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, 250000);
    

    ... it doesn't work; my baud rate will not change from whatever it was last time I ran the program.

    Next I tried customizing the qserialbus class, so that I can add some qDebug()s and see what's going on. While I was at it, for good measure, I adjusted the QModbusDevice class to handle m_baudRate as a qint32 instead of a QSerialPort::BaudRate. What I see is that if I set a standard baud rate (e.g. 115200 or 57600), the whole setup works fine. If I put any number that isn't one of the standard rates, qSerialPort will report that it successfully set the baud rate, and if I query the baud rate (by m_serialPort->baudRate() within qmodbusdevice.cpp) it will tell me that the port is configured as the custom rate I put in, but the actual baud rate is whatever the last successful configuration was - so if I set it to 57600 and test, the rate is 57600; if I then set it to 250000, it will claim success but the actual baud rate of what's coming off the serial port is still 57600.

    I have also confirmed that if I set a custom baud rate, within the qserialport class it gets to QSerialPortPrivate::setCustomBaudRate() and returns after running first full attempt at setting the baud rate:

    struct termios2 tio2;
    
        if (::ioctl(descriptor, TCGETS2, &tio2) != -1) {
            tio2.c_cflag &= ~CBAUD;
            tio2.c_cflag |= BOTHER;
    
            tio2.c_ispeed = baudRate;
            tio2.c_ospeed = baudRate;
    
            if (::ioctl(descriptor, TCSETS2, &tio2) != -1
                    && ::ioctl(descriptor, TCGETS2, &tio2) != -1) {
                return true;
            }
        }
    

    (from qserialport_unix.cpp, QSerialPortPrivate::setCustomBaudRate())
    this chunk of code executes, and returns true. So it really thinks it's setting the baud rate, but it's not.

    Any thoughts on what might be going on here?

    Thanks!

    1 Reply Last reply
    0
    • K Offline
      K Offline
      kuzulis
      Qt Champions 2020
      wrote on last edited by kuzulis
      #2

      Could you please modify a QSP code as following:

      ...
              if (::ioctl(descriptor, TCSETS2, &tio2) != -1
                      && ::ioctl(descriptor, TCGETS2, &tio2) != -1) {
                  qDebug() << "ispeed:" << tio2.c_ispeed << "ospeed:" << tio2.c_ospeed;
                  return true;
              }
      ...
      

      and to see an output?

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved