Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. QExtSerialPort && waitForReadyRead
Forum Updated to NodeBB v4.3 + New Features

QExtSerialPort && waitForReadyRead

Scheduled Pinned Locked Moved 3rd Party Software
15 Posts 4 Posters 13.8k 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.
  • L Offline
    L Offline
    luca
    wrote on last edited by
    #1

    Hi all,
    I'm communicating with an RS-485 device via QExtSerialPort .
    I'd like to have a working waitForReadyRead in my project but it isn't supported by QExtSerialPort.

    Do someone know if it's possible to implement a waitForReadyRead using QExtSerialPort ?

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      ZapB
      wrote on last edited by
      #2

      I think we had this issue too and we hacked in a basic support for it using QSocketNotifier's on the Linux side of things. I can't recall if we got it working on Windows - I would have to check.

      Are you using the very latest version of "qextserialport":http://code.google.com/p/qextserialport/? If that still doesn't contain support fo rthis I can see if I can extract the necessary parts form our internal copy and make them available upstream. In fact, this has been on my todo list for ages but never very far up it ;-)

      Nokia Certified Qt Specialist
      Interested in hearing about Qt related work

      1 Reply Last reply
      0
      • L Offline
        L Offline
        luca
        wrote on last edited by
        #3

        I think I'm not using the last alpha version.
        I'll try with it and I'll tell you.

        Thanks.

        1 Reply Last reply
        0
        • L Offline
          L Offline
          luca
          wrote on last edited by
          #4

          I confirm you.
          The 1.2-alpha version has the same problem.

          1 Reply Last reply
          0
          • S Offline
            S Offline
            stukdev
            wrote on last edited by
            #5

            Have you look this project? "https://gitorious.org/qserialdevice":https://gitorious.org/qserialdevice

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre
              wrote on last edited by
              #6

              Would spinning an eventloop while waiting for the signal be a solution for you? Or just use QxtSignalWaiter?

              1 Reply Last reply
              0
              • L Offline
                L Offline
                luca
                wrote on last edited by
                #7

                [quote author="stuk" date="1304425688"]Have you look this project? "https://gitorious.org/qserialdevice":https://gitorious.org/qserialdevice[/quote]

                I didn't know this, I'll try.

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  luca
                  wrote on last edited by
                  #8

                  [quote author="Andre" date="1304426868"]Would spinning an eventloop while waiting for the signal be a solution for you? Or just use QxtSignalWaiter?[/quote]

                  I have the function to read from serial port in a second thread so form me there isn't the problem of blocking event loop. I'd like to do this:
                  @
                  serialPort->write("123456\r\n");
                  serialPort->waitForReadyRead(10000);
                  int num_byte =serialPort->bytesAvailable();
                  if(num_byte>=10)
                  {
                  qDebug() << "Num BYTE: " << num_byte;
                  qDebug() << serialPort->read(num_byte);
                  }
                  @

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    andre
                    wrote on last edited by
                    #9

                    It was mend as a work-around for the problem that waitForReadyRead doesn't work for you. I understand that it is not ideal, but it may just do the trick.

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      luca
                      wrote on last edited by
                      #10

                      [quote author="Andre" date="1304429607"]It was mend as a work-around for the problem that waitForReadyRead doesn't work for you. I understand that it is not ideal, but it may just do the trick. [/quote]

                      So sorry, I didn't understand you question.

                      As work-around I'll use this:
                      @
                      serialPort->write("123456\r\n");
                      while(1)
                      {
                      int num_byte =serialPort->bytesAvailable();
                      if(num_byte>=10)
                      {
                      qDebug() << "Num BYTE: " << num_byte;
                      qDebug() << serialPort->read(num_byte);
                      break;
                      }
                      }
                      @

                      or something similar.

                      1 Reply Last reply
                      0
                      • L Offline
                        L Offline
                        luca
                        wrote on last edited by
                        #11

                        [quote author="stuk" date="1304425688"]Have you look this project? "https://gitorious.org/qserialdevice":https://gitorious.org/qserialdevice[/quote]

                        Thanks, It seems to works. I must do some tests but it goes in the right way.

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          andre
                          wrote on last edited by
                          #12

                          [quote]As work-around I’ll use this:
                          @
                          serialPort->write("123456\r\n");
                          while(1)
                          {
                          int num_byte =serialPort->bytesAvailable();
                          if(num_byte>=10)
                          {
                          qDebug() << "Num BYTE: " << num_byte;
                          qDebug() << serialPort->read(num_byte);
                          break;
                          }
                          }
                          @

                          or something similar.[/quote]

                          I would not do that. That will keep the eventloop occupied, and that in turn may interfere with the working of the serial port you're interested in. Not a good plan.

                          How about something like this:
                          @
                          QxtSignalWaiter waiter(serialPort, SIGNAL(readyRead());
                          serialPort->write("123456\r\n");
                          if (waiter.wait(10000)) {
                          int num_byte =serialPort->bytesAvailable();
                          if(num_byte>=10)
                          {
                          qDebug() << "Num BYTE: " << num_byte;
                          qDebug() << serialPort->read(num_byte);
                          }
                          } else {
                          //timeout waiting...
                          }
                          @

                          Edit: if another serial port implementation works better, then that is obviously a much better solution than messing around with hacks like QxtSignalWaiter.

                          1 Reply Last reply
                          0
                          • L Offline
                            L Offline
                            luca
                            wrote on last edited by
                            #13

                            Thanks Andre, I never used QxtSignalWaiter but it seems very useful .

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              andre
                              wrote on last edited by
                              #14

                              It is, but it does have its limitations. This is important to realize:

                              [quote]
                              Note: QxtSignalWaiter is not reentrant. In particular, only one QxtSignalWaiter object per thread can be safely waiting at a time. If a second QxtSignalWaiter is used while the first is waiting, the first will not return until the second has timed out or successfully caught its signal.[/quote]

                              Please be aware of those before using it. Also, often the use can be worked around, and if you can, that is often the better approach.

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                stukdev
                                wrote on last edited by
                                #15

                                This project is not very popular but for me is better than Qextserialport.

                                [quote author="Luca" date="1304430744"]
                                [quote author="stuk" date="1304425688"]Have you look this project? "https://gitorious.org/qserialdevice":https://gitorious.org/qserialdevice[/quote]

                                Thanks, It seems to works. I must do some tests but it goes in the right way.[/quote]

                                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