Problem with QextSerialport Receive in BeagleboardXM



  • I am trying QextSerialport with beagleboard xM to send and receive data. I connected the readyread() signal to a slot. I am connecting the beagleboard to a controller which transmits a string of characters serially.But my receive slot is not getting executed, while my transmit is working properly.

    Following is my code:

    SerialThread.h
    @
    #ifndef SERIALTHREAD_H
    #define SERIALTHREAD_H

    #include"qextserialport.h"
    #include "qextserialenumerator.h"

    class SerialThread : public QThread
    {
    Q_OBJECT

    signals:
    void SendSerialValues(QByteArray Values);
    void SendReceivedValues(QByteArray Val);

    public slots:
    void Write_To_SerialPort(void);
    void Config_Serial_Parameters(int brate);
    void Serial_Receive(void);
    private:
    QextSerialPort *port_on_thread;
    QextSerialEnumerator *enumerator;
    };

    #endif
    @

    SerialThread.cpp
    @
    #include"SerialThread.h"
    #include<QtCore>
    #include<QDebug>
    #include"mainwindow.h"
    #include<QDebug>
    #include"qextserialport.h"
    #include "qextserialenumerator.h"

    void SerialThread::run()
    {
    qDebug() << "hello from Serial thread " << thread()->currentThreadId();
    exec();
    }

    SerialThread::SerialThread(QObject *parent ):QThread(parent){
    moveToThread(this);
    }

    QByteArray Values_1;

    void SerialThread::Write_To_SerialPort(void)
    {

    Values_1[0]='a';
    Values_1[1]='b';
    Values_1[2]='c';
    Values_1[3]='d';
    
    
        port_on_thread->write(Values_1,sizeof(Values_1));
        emit SendSerialValues(Values_1);//emitting signal
    

    }

    void SerialThread::Config_Serial_Parameters(int brate)
    {
    PortSettings settings = {BAUD4800, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
    port_on_thread=new QextSerialPort("ttyO2",settings,QextSerialPort::EventDriven);
    if(brate == 0)
    port_on_thread->setBaudRate(BAUD1200);

    if(brate == 1)
        port_on_thread->setBaudRate(BAUD2400);
    
    if(brate == 2)
        port_on_thread->setBaudRate(BAUD4800);
    
    if(brate == 3)
        port_on_thread->setBaudRate(BAUD9600);
    
    if(brate == 4)
        port_on_thread->setBaudRate(BAUD19200);
    
    if(brate == 5)
        port_on_thread->setBaudRate(BAUD115200);
    
      port_on_thread->open(QIODevice::ReadWrite);
      connect(port_on_thread,SIGNAL(readyRead()),SLOT(Serial_Receive()));
    

    }

    void SerialThread::Serial_Receive()
    {
    QByteArray Received_Data;
    Received_Data=port_on_thread->readAll();
    emit SendReceivedValues(Received_Data);
    }

    @

    MainWindow.h
    @
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include"common.h"
    class QextSerialPort;
    class QextSerialEnumerator;
    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();
    

    signals:
    void SendSignal(QByteArray t);
    void SendSerialParameters(int brate);

    private slots:

    void Get_From_SpinBox(void);
    void ValuesFromUSB(int t1,int t2,int t3);
    void ValuesFromSD(int t1,int t2,int t3);
    void UpdateWriteSerial(QByteArray v);
    void UpdateRecvSerial(QByteArray val);
    void onButtonClicked();
    // void onBaudRateChanged(int idx);

    private:
    Ui::MainWindow *ui;
    ProcessThread p;
    SerialThread s;

    };

    #endif // MAINWINDOW_

    @

    MainWindow.cpp

    @
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QDebug>
    #include<QDir>
    #include<QFile>
    #include<QString>
    #include "ProcessThread.h"
    #include"SerialThread.h"
    #include<QLabel>
    #include<QThread>
    #include<QObject>

    int baud_value;
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(Get_From_SpinBox()));
    connect(this,SIGNAL(SendSignal(QByteArray)),&p,SLOT(Store_Temperatures(QByteArray)),Qt::QueuedConnection);
    connect(ui->pushButton_2,SIGNAL(clicked()),&p,SLOT(WriteFileToUSB()));
    connect(ui->pushButton_3,SIGNAL(clicked()),&p,SLOT(WriteFileToSD()));
    connect(ui->pushButton_4,SIGNAL(clicked()),&p,SLOT(LoadValuesFromUSB()));
    connect(ui->pushButton_5,SIGNAL(clicked()),&p,SLOT(LoadValuesFromSD()));
    connect(&p,SIGNAL(SendStoredTempValues(int,int,int)),this,SLOT(ValuesFromUSB(int,int,int)));
    connect(&p,SIGNAL(SendStoredTempValuesSD(int,int,int)),this,SLOT(ValuesFromSD(int,int,int)));

    ui->BaudRateBox->addItem("1200", BAUD1200);
    ui->BaudRateBox->addItem("2400", BAUD2400);
    ui->BaudRateBox->addItem("4800", BAUD4800);
    ui->BaudRateBox->addItem("9600", BAUD9600);
    ui->BaudRateBox->addItem("19200", BAUD19200);
    ui->BaudRateBox->addItem("115200",BAUD115200);
    

    //configuring of serial port
    connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(onButtonClicked()));
    connect(this,SIGNAL(SendSerialParameters(int)),&s,SLOT(Config_Serial_Parameters(int)));

    //transmit
    connect(ui->pushButton_6,SIGNAL(clicked()),&s,SLOT(Write_To_SerialPort()),Qt::QueuedConnection);
    connect(&s,SIGNAL(SendSerialValues(QByteArray)),this,SLOT(UpdateWriteSerial(QByteArray)));

    //receive

    connect(&s,SIGNAL(SendReceivedValues(QByteArray)),this,SLOT(UpdateRecvSerial()));
    
    p.start();
    s.start();
    

    }

    void MainWindow::UpdateWriteSerial(QByteArray v)
    {
    ui->textEdit->insertPlainText(v);

    }

    void MainWindow::UpdateRecvSerial(QByteArray val)
    {

    ui->textEdit_2->insertPlainText(val);
    

    }

    int baudrate;
    void MainWindow::onButtonClicked()
    {

    baudrate=ui->BaudRateBox->currentIndex();
    emit SendSerialParameters(baudrate);
    

    }

    @



  • Sorry guys, that was a problem with the hardware and now its working properly!!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.