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.5k 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.
  • 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