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. How to set QSerialPort::PinoutFlags and XonLimit/XoffLimit values?

How to set QSerialPort::PinoutFlags and XonLimit/XoffLimit values?

Scheduled Pinned Locked Moved General and Desktop
3 Posts 2 Posters 1.9k 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.
  • Q Offline
    Q Offline
    qtsms
    wrote on last edited by
    #1

    @QSerialPort port(port_info.name);
    if (port.open(QIODevice::ReadWrite)) {
    port.setParity(port_info.parity); //QSerialPort::NoParity
    port.setFlowControl(port_info.flow); //QSerialPort::SoftwareControl
    port.setBaudRate(port_info.baud_rate, //QSerialPort::Baud19200
    QSerialPort::AllDirections);
    port.setDataBits(port_info.data_bits); //QSerialPort::Data8
    port.setStopBits(port_info.stop_bits); //QSerialPort::OneStop
    port.setReadBufferSize(port_info.read_buffer); //8
    port.setDataTerminalReady(port_info.data_terminal_ready); //true
    port.setRequestToSend(port_info.request_to_send); //false
    if (port.isReadable() && port.isWritable()) {
    qDebug() << port.pinoutSignals();
    if (port.error() != QSerialPort::NoError) {
    qDebug() << port.errorString();
    }
    else {
    forever {
    if (!allowed_to_work) {
    break;
    }
    else {
    readLoop(port);
    writeOnceIfNeeded(port);
    }
    }
    }
    }
    }
    port.close();@

    This skel code of mine is working for many different sets of QSerialPort's properties; I can freely read from and write to some devices I'm using it with. Now I'm trying to use it with new hardware and it needs to be configured in a way I don't know how to bite.

    The above code returns no errors but also no PinoutFlags. I want my port.pingoutFlags() to return (0x80|0x40) (QSerialPort::ClearToSendSignal, DTS) but:

    I would expect the above example to return (0x40) (DTS only, no RTS) while it's returning no flags,

    I don't know how to set CTS variable because I can't find method similar to those to set DTS and RTS values,

    I found some weird output when playing with setRequestToSend() and setDataTerminalReady() methods:

    • If I set RTS to true then I'm getting (0x40) (RTS only, no DTS) no matter if I'm setting DTS to true or to false,
    • if I set RTS only, I end up with (0x4|0x40) (RTS and DTR on);
    • etc. but the isDataTerminalReady() and isRequestToSend() methods return predictable values, different than these viewable by pinoutSignals();

    Using Device Monitoring Studio I can see that the values of PinoutSignals count as "FlowReplace", not values returned by above mentioned methods - that's why I'm looking for the way to change them directly... but pinoutSignals() returns no reference, only a copy so I can't just use operator|= and hope for the best.

    Also, I can't figure the way to set XonLimit and XoffLimit values...

    1 Reply Last reply
    0
    • K Offline
      K Offline
      kuzulis
      Qt Champions 2020
      wrote on last edited by
      #2
      1. Please provide info about your OS and device type.
      2. Please check that all setXX() methods returns true!

      [quote]
      I would expect the above example to return (0×40) (DTS only, no RTS) while it’s returning no flags,
      [/quote]

      Why do you expect it?

      [quote]
      I don’t know how to set CTS variable because I can’t find method similar to those to set DTS and RTS values,
      [/quote]

      Is is impossible, since CTS is an input line.

      [quote]
      bq. If I set RTS to true then I’m getting (0×40) (RTS only, no DTS) no matter if I’m setting DTS to true or to false,
      [/quote]

      How you did " setting DTS to true or to false" ?

      [quote]
      etc. but the isDataTerminalReady() and isRequestToSend() methods return predictable values, different than these viewable by pinoutSignals();
      [/quote]

      the isDataTerminalReady() and isRequestToSend() implicitly calls of pinoutSignals() to query a desired bit.

      [quote]
      that’s why I’m looking for the way to change them directly…
      [/quote]

      You can change only RTS and DTR signals, since it is outgoing signals..

      [quote]
      Also, I can’t figure the way to set XonLimit and XoffLimit values…
      [/quote]

      This is a platform-specific thing (I suppose you talk about Windows). So you can use QSerialPort::handle() -> query the DCB -> change what you want -> update DCB.

      1 Reply Last reply
      0
      • Q Offline
        Q Offline
        qtsms
        wrote on last edited by
        #3
        1. Windows, yes. Device is home-made so I don't think it has a "type"...
        2. They are. There were "if jungle" there but I've deleted the checks before posting to make it more clear to you. Btw. isn't " if (port.error() != QSerialPort::NoError)" enough?
        3. I think I get all these flags wrong. I just deleted the part of code which was trying to set them and now everything is working... sorry for garbage topic.
        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