Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct


    Qt World Summit: Early-Bird Tickets

    Solved how to echo directly from dynamic input

    General and Desktop
    4
    22
    954
    Loading More Posts
    • 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.
    • Mijaz
      Mijaz last edited by Mijaz

      This code worked fine:

      system("cd /sys/bus/iio/devices/iio:device1/; echo 1111 > out_altvoltage1_TX_LO_frequency");
      QProcess process1;
      process1.start("cat /sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
      process1.waitForFinished(-1); // will wait forever until finished
      QString stdout1 = process1.readAllStandardOutput();
      qDebug() << stdout1;
      ui->lineEdit_3->setText(stdout1);
      

      // output display in lineEdit_3 : 1111 (this is correct)

      This code not working correctly:
      QString input = ui->lineEdit_1->text();
      // entered value 2222 to the lineEdit_1 in GUI
      ui->lineEdit_2->setText(input);
      // diplay lineEdit_2 : 2222 (this is correct)
      // I want to directly echo the input as given below but this not updating the (out_altvoltage1_TX_LO_frequency) register value.

      system("cd /sys/bus/iio/devices/iio:device1/; echo input > out_altvoltage1_TX_LO_frequency");   
      QProcess process1;
      process1.start("cat /sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
      process1.waitForFinished(-1); // will wait forever until finished
      QString stdout1 = process1.readAllStandardOutput();
      qDebug() << stdout1;
      ui->lineEdit_3->setText(stdout1);
      

      // output display in lineEdit_3 : 1111 (this is not correct)

      jsulm 1 Reply Last reply Reply Quote 0
      • jsulm
        jsulm Lifetime Qt Champion @Mijaz last edited by

        @Mijaz OK, that means you want to write to /sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency file, because

        cd /sys/bus/iio/devices/iio:device1/
        echo 111111 > out_altvoltage1_TX_LO_frequency
        

        does exactly that.
        Then simply use QFile to write:

        QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
        if (f.open(QIODevice::WriteOnly | QIODevice::Text)) {
            f.write(ui->lineEdit_2->text().toLatin1());
            f.close();
        }
        

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        Mijaz 2 Replies Last reply Reply Quote 1
        • jsulm
          jsulm Lifetime Qt Champion @Mijaz last edited by

          @Mijaz This looks really overcomplicated: why don't you simply use QFile to read from /sys/bus... instead of spawning a process for such a simple task? There is really no need to use cat in a process to read a file...

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          Mijaz 1 Reply Last reply Reply Quote 2
          • Mijaz
            Mijaz @jsulm last edited by

            Hi @jsulm yes, you are correct I can read from QFile also. But here main problem is
            echo input > out_altvoltage1_TX_LO_frequency;
            How can do this in qt;

            jsulm 1 Reply Last reply Reply Quote 0
            • jsulm
              jsulm Lifetime Qt Champion @Mijaz last edited by

              @Mijaz said in how to echo directly from dynamic input:

              How can do this in qt;

              This writes into a file, you can do it also with QFile.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              Mijaz 1 Reply Last reply Reply Quote 1
              • Mijaz
                Mijaz @jsulm last edited by Mijaz

                @jsulm
                Do you mean like this?

                QFile f("echo /sys/bus/iio/devices/iio:device1/input > out_altvoltage1_TX_LO_frequency");
                if (f.open(QIODevice::ReadOnly | QIODevice::Text))
                {
                QByteArray ba = f.readAll();
                ui->lineEdit_3->setText(QString(ba));
                f.close();
                }
                Selection_022.png

                jsulm 2 Replies Last reply Reply Quote 0
                • jsulm
                  jsulm Lifetime Qt Champion @Mijaz last edited by

                  @Mijaz said in how to echo directly from dynamic input:

                  you mean like this?

                  No, I don't.
                  Just open the file using QFile and read/write from/to it:

                  QFile f("/sys/bus/iio/devices/iio:device1/input");
                  if (f.open(QIODevice::ReadOnly | QIODevice::Text)) {
                      QByteArray ba = f.readAll();
                      ui->lineEdit_3->setText(QString(ba));
                      f.close();
                  }
                  

                  Be careful with QIODevice::Text: don't use it if file contains binary data.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  Mijaz 1 Reply Last reply Reply Quote 0
                  • jsulm
                    jsulm Lifetime Qt Champion @Mijaz last edited by jsulm

                    @Mijaz The line where you get that error does not make any sense.
                    I don't know what you are trying to do there...

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    Mijaz 1 Reply Last reply Reply Quote 1
                    • Mijaz
                      Mijaz @jsulm last edited by

                      @jsulm
                      QFile f("/sys/bus/iio/devices/iio:device1/input");
                      if (f.open(QIODevice::ReadOnly | QIODevice::Text)) {
                      QByteArray ba = f.readAll();
                      ui->lineEdit_3->setText(QString(ba));
                      f.close();
                      }

                      I executed above your code, no any output display.

                      jsulm 1 Reply Last reply Reply Quote 0
                      • jsulm
                        jsulm Lifetime Qt Champion @Mijaz last edited by

                        @Mijaz said in how to echo directly from dynamic input:

                        /sys/bus/iio/devices/iio:device1/input

                        Is this a valid path?
                        Did you check return value of open()?
                        Did you check what https://doc.qt.io/qt-5/qiodevice.html#errorString returns?
                        Does /sys/bus/iio/devices/iio:device1/input contain text or binary data?

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply Reply Quote 1
                        • Mijaz
                          Mijaz @jsulm last edited by

                          @jsulm
                          I want to update register (out_altvoltage1_TX_LO_frequency) with the new value;
                          In real time when I will enter new value to lineEdit_1 then it should be display in lineEdit_2 as well as update the register (out_altvoltage1_TX_LO_frequency) which will recheck in lineEdit_3.

                          QString input = ui->lineEdit_1->text();
                          ui->lineEdit_2->setText(input);
                          QFile f("/sys/bus/iio/devices/iio:device1/input");
                          if (f.open(QIODevice::ReadOnly | QIODevice::Text))
                          {
                          QByteArray ba = f.readAll();
                          ui->lineEdit_3->setText(QString(ba));
                          f.close();
                          }

                          jsulm 1 Reply Last reply Reply Quote 0
                          • jsulm
                            jsulm Lifetime Qt Champion @Mijaz last edited by

                            @Mijaz You did not answer my questions from my previous post.
                            Do you mean you want to update out_altvoltage1_TX_LO_frequency inside /sys/bus/iio/devices/iio:device1/input ?
                            Because this:

                            echo /sys/bus/iio/devices/iio:device1/input > out_altvoltage1_TX_LO_frequency
                            

                            would write the content of /sys/bus/iio/devices/iio:device1/input into file out_altvoltage1_TX_LO_frequency in current working directory.

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            Mijaz 1 Reply Last reply Reply Quote 0
                            • Mijaz
                              Mijaz @jsulm last edited by

                              @jsulm
                              No input is not a directory it is the string in which I have stored value in about command like this:

                              QString input = ui->lineEdit_1->text();
                              ui->lineEdit_2->setText(input);
                              Now I want to use this "input" in which I already stored value to update my out_altvoltage1_TX_LO_frequency.
                              //
                              Detail explenation of my work:
                              Step 1:
                              I firstly executed following commands on my board where I am deploying my project like this:

                              cd /sys/bus/iio/devices/iio:device1/
                              echo 111111 > out_altvoltage1_TX_LO_frequency
                              This worked fine;
                              Step 2:
                              I create project on my PC using following commands and GUI.

                              system("cd /sys/bus/iio/devices/iio:device1/; echo 222222 > out_altvoltage1_TX_LO_frequency");
                              QProcess process1;
                              process1.start("cat /sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                              process1.waitForFinished(-1); // will wait forever until finished
                              QString stdout1 = process1.readAllStandardOutput();
                              qDebug() << stdout1;
                              ui->lineEdit_3->setText(stdout1);
                              This also work correctly.
                              Step 3:
                              Now, because it is my task requirement that I need update register (out_altvoltage1_TX_LO_frequency) value at real-time, depends on the situation not remained fixed like (222222), therefore I update code like this:

                              QString input = ui->lineEdit_1->text();
                              ui->lineEdit_2->setText(input);
                              QFile f("/sys/bus/iio/devices/iio:device1/input");
                              if (f.open(QIODevice::ReadOnly | QIODevice::Text))
                              {
                              QByteArray ba = f.readAll();
                              ui->lineEdit_3->setText(QString(ba));
                              f.close();
                              }

                              whenever I will enter a new value to lineEdit_1 that should update register (out_altvoltage1_TX_LO_frequency) immediately,

                              this code not working as my requirements.

                              jsulm 1 Reply Last reply Reply Quote 0
                              • jsulm
                                jsulm Lifetime Qt Champion @Mijaz last edited by

                                @Mijaz OK, that means you want to write to /sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency file, because

                                cd /sys/bus/iio/devices/iio:device1/
                                echo 111111 > out_altvoltage1_TX_LO_frequency
                                

                                does exactly that.
                                Then simply use QFile to write:

                                QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                                if (f.open(QIODevice::WriteOnly | QIODevice::Text)) {
                                    f.write(ui->lineEdit_2->text().toLatin1());
                                    f.close();
                                }
                                

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                Mijaz 2 Replies Last reply Reply Quote 1
                                • Mijaz
                                  Mijaz @jsulm last edited by

                                  @jsulm

                                  QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                                  if (f.open(QIODevice::WriteOnly | QIODevice::Text))
                                  {
                                  f.write(ui->lineEdit_2->text().toLatin1());
                                  f.close();
                                  }

                                  this still not updating register ( out_altvoltage1_TX_LO_frequency) value.

                                  jsulm 1 Reply Last reply Reply Quote 0
                                  • jsulm
                                    jsulm Lifetime Qt Champion @Mijaz last edited by

                                    @Mijaz You still did not answer any of my previous questions?
                                    Did you check what happens? Please use debugger and see whether your if block was executed at all.
                                    Did you check return value of open()?
                                    Did you check what https://doc.qt.io/qt-5/qiodevice.html#errorString returns?

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    JonB Mijaz 2 Replies Last reply Reply Quote 2
                                    • JonB
                                      JonB @jsulm last edited by JonB

                                      @jsulm
                                      Do you realise this thread is just a rehash of @Mijaz's own https://forum.qt.io/topic/107974/system-vs-process-command/ ? He asks exactly the same question there. You will see the same questions about the cat command and the same answers about using QFile, the same issue about the current directory and paths, .... I tried to help, but he chose not to supply the necessary information, and is just going through the same stuff again. It gets so frustrating here when people choose not to follow through the advice they are given when they do not like it, and instead create a new thread to get the information all over again...

                                      jsulm 1 Reply Last reply Reply Quote 0
                                      • jsulm
                                        jsulm Lifetime Qt Champion @JonB last edited by

                                        @JonB Yes, I saw that thread and I agree that it is very frustrating if people do not answer questions and do not follow advices - what's the point to ask then in a forum? But it is how it is...

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        1 Reply Last reply Reply Quote 0
                                        • Mijaz
                                          Mijaz @jsulm last edited by

                                          @jsulm
                                          Thank you so much for your kind help to find a proper solution.

                                          jsulm 1 Reply Last reply Reply Quote 1
                                          • jsulm
                                            jsulm Lifetime Qt Champion @Mijaz last edited by

                                            @Mijaz Does it work now?

                                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                                            Mijaz 1 Reply Last reply Reply Quote 0
                                            • Mijaz
                                              Mijaz @jsulm last edited by

                                              @jsulm
                                              yes, it is working correctly.

                                              1 Reply Last reply Reply Quote 0
                                              • First post
                                                Last post