Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QserialPortInfo::availablePorts() do not give information about „/dev/ttyGS0“
Forum Updated to NodeBB v4.3 + New Features

QserialPortInfo::availablePorts() do not give information about „/dev/ttyGS0“

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
16 Posts 4 Posters 1.9k Views 2 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.
  • S Offline
    S Offline
    saurabh162
    wrote on last edited by saurabh162
    #7

    Hello @SGaist , @aha_1980, @kuzulis

    Thank you very much for your help

    I will surely install Qt5.9 on my Beaglebone black and compile cross tool chain on host machine corresponding to it but at this moment I cannot do it due to other priorities.

    Following are the answers to questions asked by @kuzulis

    1. do you have the /dev/ttyGS0 in a filesystem in reality?

    Ans) Yes, I have it and I am manually opening this port using following code in Beagebone black and doing communication which is also working perfectly.

    isBBBSerialOpened = co2SerialPortobject.OpenConfigureCO2HW("/dev/ttyGS0" ,
                                             co2SerialPortobject.ReadWrite,
                                             co2SerialPortobject.Baud9600,
                                             co2SerialPortobject.Data8,
                                             co2SerialPortobject.NoParity,
                                             co2SerialPortobject.OneStop,
                                             co2SerialPortobject.NoFlowControl);
    
    1. try this comamnd: udevadm info --name=/dev/ttyGS0 and paste an output here ?

    Ans)

    
    udevadm info --name=/dev/ttyGS0
    P: /devices/virtual/tty/ttyGS0
    N: ttyGS0
    E: DEVNAME=/dev/ttyGS0
    E: DEVPATH=/devices/virtual/tty/ttyGS0
    E: MAJOR=243
    E: MINOR=0
    E: SUBSYSTEM=tty
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=32563390
    E: net.ifnames=0
    

    Q) try compile and run the following code (what is it return? true/false?): ?

    #include <linux/serial.h> 
    
    bool foo()
    {
        const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
        const int fd = ::open("/dev/ttyGS0", flags);
        if (fd != -1) {
            struct serial_struct serinfo;
            const int retval = ::ioctl(fd, TIOCGSERIAL, &serinfo);
            ::close(fd);
            if (retval != -1 && serinfo.type != PORT_UNKNOWN)
                return true;
        }
        return false;
    }
    

    Ans) After compiling above code I got following errors

    test.c:3:1: error: unknown type name ��‘bool��’
     bool foo()
     ^~~~
    test.c: In function ��‘foo��’:
    test.c:5:11: error: unknown type name ��‘mode_t��’
         const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
               ^~~~~~
    test.c:5:26: error: ��‘O_RDWR��’ undeclared (first use in this function)
         const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                              ^~~~~~
    test.c:5:26: note: each undeclared identifier is reported only once for each function it appears in
    test.c:5:35: error: ��‘O_NONBLOCK��’ undeclared (first use in this function)
         const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                                       ^~~~~~~~~~
    test.c:5:48: error: ��‘O_NOCTTY��’ undeclared (first use in this function)
         const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                                                    ^~~~~~~~
    test.c:6:20: error: expected expression before ��‘:��’ token
         const int fd = ::open("/dev/ttyGS0", flags);
                        ^
    test.c:9:28: error: expected expression before ��‘:��’ token
             const int retval = ::ioctl(fd, TIOCGSERIAL, &serinfo);
                                ^
    test.c:10:9: error: expected expression before ��‘:��’ token
             ::close(fd);
             ^
    test.c:12:20: error: ��‘true��’ undeclared (first use in this function)
                 return true;
                        ^~~~
    test.c:14:12: error: ��‘false��’ undeclared (first use in this function)
         return false;
    

    Please inform me if you need any other information from me.

    many thanks :)

    aha_1980A 1 Reply Last reply
    0
    • SGaistS SGaist

      It's a bit an old version but IIRC, it should be good to access the device...

      Can you check if it is a symlink ?

      S Offline
      S Offline
      saurabh162
      wrote on last edited by
      #8

      @SGaist said in QserialPortInfo::availablePorts() do not give information about „/dev/ttyGS0“:

      IIRC

      Hello @SGaist, Thank you very much. I checked but "ttyGS0" is not symlink following the command I used to check it.

      root@beaglebone:/dev# ls -l ttyGS0
      crw--w---- 1 root tty 243, 0 Apr 17 10:08 ttyGS0
      
      
      1 Reply Last reply
      0
      • S saurabh162

        Hello @SGaist , @aha_1980, @kuzulis

        Thank you very much for your help

        I will surely install Qt5.9 on my Beaglebone black and compile cross tool chain on host machine corresponding to it but at this moment I cannot do it due to other priorities.

        Following are the answers to questions asked by @kuzulis

        1. do you have the /dev/ttyGS0 in a filesystem in reality?

        Ans) Yes, I have it and I am manually opening this port using following code in Beagebone black and doing communication which is also working perfectly.

        isBBBSerialOpened = co2SerialPortobject.OpenConfigureCO2HW("/dev/ttyGS0" ,
                                                 co2SerialPortobject.ReadWrite,
                                                 co2SerialPortobject.Baud9600,
                                                 co2SerialPortobject.Data8,
                                                 co2SerialPortobject.NoParity,
                                                 co2SerialPortobject.OneStop,
                                                 co2SerialPortobject.NoFlowControl);
        
        1. try this comamnd: udevadm info --name=/dev/ttyGS0 and paste an output here ?

        Ans)

        
        udevadm info --name=/dev/ttyGS0
        P: /devices/virtual/tty/ttyGS0
        N: ttyGS0
        E: DEVNAME=/dev/ttyGS0
        E: DEVPATH=/devices/virtual/tty/ttyGS0
        E: MAJOR=243
        E: MINOR=0
        E: SUBSYSTEM=tty
        E: TAGS=:systemd:
        E: USEC_INITIALIZED=32563390
        E: net.ifnames=0
        

        Q) try compile and run the following code (what is it return? true/false?): ?

        #include <linux/serial.h> 
        
        bool foo()
        {
            const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
            const int fd = ::open("/dev/ttyGS0", flags);
            if (fd != -1) {
                struct serial_struct serinfo;
                const int retval = ::ioctl(fd, TIOCGSERIAL, &serinfo);
                ::close(fd);
                if (retval != -1 && serinfo.type != PORT_UNKNOWN)
                    return true;
            }
            return false;
        }
        

        Ans) After compiling above code I got following errors

        test.c:3:1: error: unknown type name ��‘bool��’
         bool foo()
         ^~~~
        test.c: In function ��‘foo��’:
        test.c:5:11: error: unknown type name ��‘mode_t��’
             const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                   ^~~~~~
        test.c:5:26: error: ��‘O_RDWR��’ undeclared (first use in this function)
             const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                                  ^~~~~~
        test.c:5:26: note: each undeclared identifier is reported only once for each function it appears in
        test.c:5:35: error: ��‘O_NONBLOCK��’ undeclared (first use in this function)
             const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                                           ^~~~~~~~~~
        test.c:5:48: error: ��‘O_NOCTTY��’ undeclared (first use in this function)
             const mode_t flags = O_RDWR | O_NONBLOCK | O_NOCTTY;
                                                        ^~~~~~~~
        test.c:6:20: error: expected expression before ��‘:��’ token
             const int fd = ::open("/dev/ttyGS0", flags);
                            ^
        test.c:9:28: error: expected expression before ��‘:��’ token
                 const int retval = ::ioctl(fd, TIOCGSERIAL, &serinfo);
                                    ^
        test.c:10:9: error: expected expression before ��‘:��’ token
                 ::close(fd);
                 ^
        test.c:12:20: error: ��‘true��’ undeclared (first use in this function)
                     return true;
                            ^~~~
        test.c:14:12: error: ��‘false��’ undeclared (first use in this function)
             return false;
        

        Please inform me if you need any other information from me.

        many thanks :)

        aha_1980A Offline
        aha_1980A Offline
        aha_1980
        Lifetime Qt Champion
        wrote on last edited by
        #9

        @saurabh162

        For your code: replace bool with int and true with 1 resp. false with 0. Or simply use a C++ instead a C file.

        For the other errors you will need some more includes, Google should help you there.

        Qt has to stay free or it will die.

        1 Reply Last reply
        1
        • S Offline
          S Offline
          saurabh162
          wrote on last edited by
          #10

          Hello @aha_1980

          Thank you very much for the help ..I will try to compile it again and will update you

          1 Reply Last reply
          0
          • S Offline
            S Offline
            saurabh162
            wrote on last edited by saurabh162
            #11

            Hello @aha_1980,

            I have run above function foo() and got

            retval = -1 from following statement

            const int retval = ::ioctl(fd, TIOCGSERIAL, &serinfo);
            

            Additionally when I print value of variable errno after calling above statement, then it comes out to be 25.

            Moreover value of serinfo.type variable is 2(#define PORT_16450 2)

            can you please inform me what can be reasons for it and how can I solve it ?

            I am also trying to solve this problem at my side and will update you if I get any progress.

            Many thanks :)

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

              @saurabh162 ,

              Hmm.. Seems, need to debug the QSerialPortInfo class to see what happens there.

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

                Please see a fix: https://codereview.qt-project.org/#/c/260832/

                1 Reply Last reply
                2
                • S Offline
                  S Offline
                  saurabh162
                  wrote on last edited by saurabh162
                  #14

                  Hello @kuzulis

                  Thank you very much..Can you please inform me how can I apply this fix to my Qt.

                  Regards

                  Saurabh

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

                    @saurabh162 said in QserialPortInfo::availablePorts() do not give information about „/dev/ttyGS0“:

                    Can you please inform me how can I apply this fix to my Qt.

                    Just modify that file in a qtserialport sources and rebuild it. Or, just wait for a next Qt release (seems to 5.12.4).

                    1 Reply Last reply
                    2
                    • S Offline
                      S Offline
                      saurabh162
                      wrote on last edited by
                      #16

                      Hello Kuzulis,

                      Thanks a lot for your update ...

                      I think using latest fixed version of Qt release (seems to 5.12.4) will be better choice. Please inform me, what should I do with this query should I close it or leave it open till I test it with Qt release (seems to 5.12.4).

                      Regards Saurabh

                      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