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. QSerialPort bytesAvailable() and read() delayed, QextSerialPort works
Forum Updated to NodeBB v4.3 + New Features

QSerialPort bytesAvailable() and read() delayed, QextSerialPort works

Scheduled Pinned Locked Moved Mobile and Embedded
21 Posts 7 Posters 14.6k 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.
  • K Offline
    K Offline
    KeepGoing
    wrote on last edited by
    #9

    [quote author="mr_wallyit" date="1410691263"]Hello,

    Have you tried the simple project ("terminal") in Qt5?
    In Qt 5.3.1 we have ready serial port, I tried with Android, Windows XP, 7, 8 correctly.

    PS
    With Android I have done a workarround.[/quote]

    Hello mr_wallyit
    You said that you were able to use the Serial port with android in Qt5, could you please share with me, how this was done? I would appreciate your response. Thank you in advance.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mr_wallyit
      wrote on last edited by
      #10

      Hello,
      First, serial Port on Android works if the Kernel is builded with this module.

      Second,file System of Android is not standard,there are not standard folders for the
      serial port, so I changed the driver with a few line of code.

      I changed the method serialPortLockFilePath in the fileqserialport_unix_p.cpp

      @

      QString serialPortLockFilePath(const QString &portName)
      {

      qDebug() << __LINE__ << __FILE__;
      static const QStringList lockDirectoryPaths = QStringList()
      

      //#ifdef Q_OS_ANDROID
      #ifdef ANDROID

          << QStringLiteral("/sdcard/data/lock")
          << QStringLiteral("/sdcard/data/locks")
          << QStringLiteral("/sdcard/data/spool/locks")
          << QStringLiteral("/sdcard/data/spool/uucp")
          << QStringLiteral("/sdcard/data/tmp")
          << QStringLiteral("/data/local/tmp");
          qDebug() << __LINE__ << __FILE__;
      

      #else

          << QStringLiteral("/var/lock")
          << QStringLiteral("/etc/locks")
          << QStringLiteral("/var/spool/locks")
          << QStringLiteral("/var/spool/uucp")
          << QStringLiteral("/tmp");
          qDebug() << __LINE__ << __FILE__;
      

      #endif

      @

      Third,

      You need to create these directories:

        << QStringLiteral("/sdcard/data/lock")
          << QStringLiteral("/sdcard/data/locks")
          << QStringLiteral("/sdcard/data/spool/locks")
          << QStringLiteral("/sdcard/data/spool/uucp")
          << QStringLiteral("/sdcard/data/tmp")
      
      1 Reply Last reply
      0
      • M Offline
        M Offline
        mr_wallyit
        wrote on last edited by
        #11

        Hello,
        First, serial Port on Android works if the Kernel is builded with this module.

        Second,file System of Android is not standard,there are not standard folders for the
        serial port, so I changed the driver with a few line of code.

        I changed the method serialPortLockFilePath in the fileqserialport_unix_p.cpp

        @

        QString serialPortLockFilePath(const QString &portName)
        {

        qDebug() << __LINE__ << __FILE__;
        static const QStringList lockDirectoryPaths = QStringList()
        

        //#ifdef Q_OS_ANDROID
        #ifdef ANDROID

            << QStringLiteral("/sdcard/data/lock")
            << QStringLiteral("/sdcard/data/locks")
            << QStringLiteral("/sdcard/data/spool/locks")
            << QStringLiteral("/sdcard/data/spool/uucp")
            << QStringLiteral("/sdcard/data/tmp")
            << QStringLiteral("/data/local/tmp");
            qDebug() << __LINE__ << __FILE__;
        

        #else

            << QStringLiteral("/var/lock")
            << QStringLiteral("/etc/locks")
            << QStringLiteral("/var/spool/locks")
            << QStringLiteral("/var/spool/uucp")
            << QStringLiteral("/tmp");
            qDebug() << __LINE__ << __FILE__;
        

        #endif

        @

        Third,

        You need to create these directories:

          << QStringLiteral("/sdcard/data/lock")
            << QStringLiteral("/sdcard/data/locks")
            << QStringLiteral("/sdcard/data/spool/locks")
            << QStringLiteral("/sdcard/data/spool/uucp")
            << QStringLiteral("/sdcard/data/tmp")
        
        1 Reply Last reply
        0
        • M Offline
          M Offline
          mr_wallyit
          wrote on last edited by
          #12

          Sorry I have deleted a duplicate message

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mr_wallyit
            wrote on last edited by
            #13

            Sorry I have deleted a duplicate message

            1 Reply Last reply
            0
            • K Offline
              K Offline
              KeepGoing
              wrote on last edited by
              #14

              Hello Mr_Wallyit
              Thank you for your reply.
              My target is android. Is it the same with Android as well?

              Thank you in advance.

              1 Reply Last reply
              0
              • K Offline
                K Offline
                KeepGoing
                wrote on last edited by
                #15

                Hello Mr_Wallyit
                Thank you for your reply.
                My target is android. Is it the same with Android as well?

                Thank you in advance.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mr_wallyit
                  wrote on last edited by
                  #16

                  Hello,

                  yes of course, I use Point of sale Industrial with Android, with workarround we can use serial port.

                  Best Regards

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mr_wallyit
                    wrote on last edited by
                    #17

                    Hello,

                    yes of course, I use Point of sale Industrial with Android, with workarround we can use serial port.

                    Best Regards

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Abin
                      wrote on last edited by
                      #18

                      Hi Mr_Wallyit,

                      Thanks for sharing the details.

                      I have an android device which has serial port attached to it. The manufacturer has a sample application with it which uses the serial port. The port name is "/dev/ttyS6".

                      As you mentioned I tried to create folder in my device. My device file explorer shows files structure as "/mnt/sdcard". So I created folders as below:
                      "/mnt/sdcard/data/lock"
                      "/mnt/sdcard/data/locks"
                      "/mnt/sdcard/data/spool/locks"
                      "/mnt/sdcard/data/spool/uucp"
                      "/mnt/sdcard/data/tmp"

                      But, the folder "/mnt/data/local/tmp" is unable to create as my file explorer doesn't allow to create folder.

                      I kept my code as @QString serialPortLockFilePath(const QString &portName)
                      {
                      static const QStringList lockDirectoryPaths = QStringList()

                      #ifdef Q_OS_ANDROID
                      << QStringLiteral("/mnt/sdcard/data/lock")
                      << QStringLiteral("/mnt/sdcard/data/locks")
                      << QStringLiteral("/mnt/sdcard/data/spool/locks")
                      << QStringLiteral("/mnt/sdcard/data/spool/uucp")
                      << QStringLiteral("/mnt/sdcard/data/tmp");
                      #else
                      << QStringLiteral("/var/lock")
                      << QStringLiteral("/etc/locks")
                      << QStringLiteral("/var/spool/locks")
                      << QStringLiteral("/var/spool/uucp")
                      << QStringLiteral("/tmp");
                      #endif@

                      And I have a second device whose files structure as "/sdcard". So I created folders as below:
                      "/sdcard/data/lock"
                      "/sdcard/data/locks"
                      "/sdcard/data/spool/locks"
                      "/sdcard/data/spool/uucp"
                      "/sdcard/data/tmp"

                      But, the folder "/data/local/tmp" is unable to create as my file explorer crashes on creating folder "/data/locaal" (need to retry with different file explorer application).

                      @QString serialPortLockFilePath(const QString &portName)
                      {
                      static const QStringList lockDirectoryPaths = QStringList()

                      #ifdef Q_OS_ANDROID
                      << QStringLiteral("/sdcard/data/lock")
                      << QStringLiteral("/sdcard/data/locks")
                      << QStringLiteral("/sdcard/data/spool/locks")
                      << QStringLiteral("/sdcard/data/spool/uucp")
                      << QStringLiteral("/sdcard/data/tmp");
                      #else
                      << QStringLiteral("/var/lock")
                      << QStringLiteral("/etc/locks")
                      << QStringLiteral("/var/spool/locks")
                      << QStringLiteral("/var/spool/uucp")
                      << QStringLiteral("/tmp");
                      #endif@

                      and created a sample application which tries to access the serial port. I set the port name as @setPortName("/dev/ttyS6");@
                      But when running the application I get the error "Permission denied".

                      Could you help me to figure out where I am going wrong.

                      Thanks in advance.

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        Abin
                        wrote on last edited by
                        #19

                        Hi Mr_Wallyit,

                        Thanks for sharing the details.

                        I have an android device which has serial port attached to it. The manufacturer has a sample application with it which uses the serial port. The port name is "/dev/ttyS6".

                        As you mentioned I tried to create folder in my device. My device file explorer shows files structure as "/mnt/sdcard". So I created folders as below:
                        "/mnt/sdcard/data/lock"
                        "/mnt/sdcard/data/locks"
                        "/mnt/sdcard/data/spool/locks"
                        "/mnt/sdcard/data/spool/uucp"
                        "/mnt/sdcard/data/tmp"

                        But, the folder "/mnt/data/local/tmp" is unable to create as my file explorer doesn't allow to create folder.

                        I kept my code as @QString serialPortLockFilePath(const QString &portName)
                        {
                        static const QStringList lockDirectoryPaths = QStringList()

                        #ifdef Q_OS_ANDROID
                        << QStringLiteral("/mnt/sdcard/data/lock")
                        << QStringLiteral("/mnt/sdcard/data/locks")
                        << QStringLiteral("/mnt/sdcard/data/spool/locks")
                        << QStringLiteral("/mnt/sdcard/data/spool/uucp")
                        << QStringLiteral("/mnt/sdcard/data/tmp");
                        #else
                        << QStringLiteral("/var/lock")
                        << QStringLiteral("/etc/locks")
                        << QStringLiteral("/var/spool/locks")
                        << QStringLiteral("/var/spool/uucp")
                        << QStringLiteral("/tmp");
                        #endif@

                        And I have a second device whose files structure as "/sdcard". So I created folders as below:
                        "/sdcard/data/lock"
                        "/sdcard/data/locks"
                        "/sdcard/data/spool/locks"
                        "/sdcard/data/spool/uucp"
                        "/sdcard/data/tmp"

                        But, the folder "/data/local/tmp" is unable to create as my file explorer crashes on creating folder "/data/locaal" (need to retry with different file explorer application).

                        @QString serialPortLockFilePath(const QString &portName)
                        {
                        static const QStringList lockDirectoryPaths = QStringList()

                        #ifdef Q_OS_ANDROID
                        << QStringLiteral("/sdcard/data/lock")
                        << QStringLiteral("/sdcard/data/locks")
                        << QStringLiteral("/sdcard/data/spool/locks")
                        << QStringLiteral("/sdcard/data/spool/uucp")
                        << QStringLiteral("/sdcard/data/tmp");
                        #else
                        << QStringLiteral("/var/lock")
                        << QStringLiteral("/etc/locks")
                        << QStringLiteral("/var/spool/locks")
                        << QStringLiteral("/var/spool/uucp")
                        << QStringLiteral("/tmp");
                        #endif@

                        and created a sample application which tries to access the serial port. I set the port name as @setPortName("/dev/ttyS6");@
                        But when running the application I get the error "Permission denied".

                        Could you help me to figure out where I am going wrong.

                        Thanks in advance.

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mr_wallyit
                          wrote on last edited by
                          #20

                          Hello,

                          this is my source code, I think who is wrong “/mnt/sdcard/data/lock”.

                          @

                          bool s = true;
                          QStringList pathList;
                          

                          #ifdef ANDROID
                          pathList << "/sdcard/data";
                          pathList << "/sdcard/data/lock";
                          pathList << "/sdcard/data/locks";
                          pathList << "/sdcard/data/spool";
                          pathList << "/sdcard/data/spool/locks";
                          pathList << "/sdcard/data/spool/uucp";
                          pathList << "/sdcard/data/tmp";
                          pathList << "/sdcard/data/local";
                          pathList << "/sdcard/data/local/tmp";
                          #endif

                          QDir d;
                          foreach (const QString s, pathList) {
                              d.setPath(s);
                              if (!d.exists()){
                                  if(d.mkpath(d.absolutePath()))
                                      qCCritical() << "error create directory " << d.absolutePath();
                              }
                          }
                          

                          @

                          1 Reply Last reply
                          0
                          • M Offline
                            M Offline
                            mr_wallyit
                            wrote on last edited by
                            #21

                            Hello,

                            this is my source code, I think who is wrong “/mnt/sdcard/data/lock”.

                            @

                            bool s = true;
                            QStringList pathList;
                            

                            #ifdef ANDROID
                            pathList << "/sdcard/data";
                            pathList << "/sdcard/data/lock";
                            pathList << "/sdcard/data/locks";
                            pathList << "/sdcard/data/spool";
                            pathList << "/sdcard/data/spool/locks";
                            pathList << "/sdcard/data/spool/uucp";
                            pathList << "/sdcard/data/tmp";
                            pathList << "/sdcard/data/local";
                            pathList << "/sdcard/data/local/tmp";
                            #endif

                            QDir d;
                            foreach (const QString s, pathList) {
                                d.setPath(s);
                                if (!d.exists()){
                                    if(d.mkpath(d.absolutePath()))
                                        qCCritical() << "error create directory " << d.absolutePath();
                                }
                            }
                            

                            @

                            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