PDA

View Full Version : QextSerialPort writeData/readData



another_one
24th January 2010, 12:28
Hello!

I need some support in the following situation:

I'm trying to use QextSerialPort Class in communication between PC and Device application.

The question is in about read/write operations.

what I have done:

Header:


#include <QMainWindow>
#include "qextserialport.h"


namespace Ui {
class CAN_transfer;

}

class CAN_transfer : public QMainWindow {
Q_OBJECT

public:
CAN_transfer(QWidget *parent = 0);
~CAN_transfer();

protected:
void changeEvent(QEvent *e);

private:
Ui::CAN_transfer *ui;
QextSerialPort* _comPort;
unsigned char mas[64];
unsigned char* DATA_pointer;

private slots:



source:



#include "can_transfer.h"
#include "ui_can_transfer.h"
#include "qextserialport.h"
#include "win_qextserialport.h"


CAN_transfer::CAN_transfer(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::CAN_transfer)
{
ui->setupUi(this);
ui->logw->setReadOnly(true);
ui->logw->setTextColor(Qt::red);
ui->logw->append(tr("before using this software be sure to set connection between Device and PC via COM1 port"));
ui->logw->setTextColor(Qt::black);
ui->spinBox_1->setMaximum(8);
ui->spinBox_2->setMaximum(8);
ui->spinBox_3->setMaximum(8);
ui->spinBox_4->setMaximum(8);
ui->spinBox_5->setMaximum(8);
ui->spinBox_6->setMaximum(8);
ui->spinBox_7->setMaximum(8);
ui->spinBox_8->setMaximum(8);
QString s="COM1";
_comPort = new QextSerialPort(s);
DATA_pointer = &mas[0];
}

CAN_transfer::~CAN_transfer()
{

delete(_comPort);
delete ui;
}

void CAN_transfer::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}



void CAN_transfer::on_connectbutton_clicked()
{
ui->logw->append(tr("COM1 configurating...."));
_comPort->setBaudRate(BAUD9600);
_comPort->setFlowControl(FLOW_OFF);
_comPort->setParity(PAR_NONE);
_comPort->setDataBits(DATA_8);
_comPort->setStopBits(STOP_1);
_comPort->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
ui->logw->append(tr("conneting...."));
/*
*DATA_pointer = 0x55;
DATA_pointer++;
*DATA_pointer = 0xAA;
DATA_pointer++;
*DATA_pointer = 0xFF;
DATA_pointer -2;
*DATA_pointer = 0;


if(_comPort->writeData(DATA_pointer, 3))
{
while(!(readData(DATA_pointer,1)));
if(*DATA_pointer==0x55)
ui->logw->append(tr("connection established!"));
statusBar()->showMessage(tr("Connected"));
}

*/
_comPort->close();
}


commented code in source is a reason of many errors, which are:

can_transfer.cpp: In member function 'void CAN_transfer::on_connectbutton_clicked()':
can_transfer.cpp:71: warning: statement has no effect
can_transfer.cpp:75: error: invalid conversion from 'int' to 'unsigned char*'
can_transfer.cpp:80: warning: statement has no effect
win_qextserialport.h:47: error: 'virtual qint64 Win_QextSerialPort::writeData(const char*, qint64)' is protected
can_transfer.cpp:84: error: within this context
can_transfer.cpp:84: error: invalid conversion from 'unsigned char*' to 'const char*'
can_transfer.cpp:84: error: initializing argument 1 of 'virtual qint64 Win_QextSerialPort::writeData(const char*, qint64)'
can_transfer.cpp:86: error: 'readData' was not declared in this scope


Hope somebody helps in eliminating of this errors.


Thanks in advance

waynew
27th January 2010, 23:06
I have no experience with QextSerialPort, but QSerialDevice works fine with my application, built as a static library.
You might try it.
Good luck with your code.

another_one
28th January 2010, 10:09
Thank you for your supporting.

Luckily, I solved this problem with help from knowing people.

Now it looks like that:



#include "can_transfer.h"
#include "ui_can_transfer.h"
#include "qextserialport.h"
#include "win_qextserialport.h"


CAN_transfer::CAN_transfer(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::CAN_transfer)
{
ui->setupUi(this);
ui->logw->setReadOnly(true);
ui->logw->setTextColor(Qt::red);
ui->logw->append(tr("before using this software be sure to set connection between Device and PC via COM1 port"));
ui->logw->setTextColor(Qt::black);
ui->spinBox_1->setMaximum(8);
ui->spinBox_2->setMaximum(8);
ui->spinBox_3->setMaximum(8);
ui->spinBox_4->setMaximum(8);
ui->spinBox_5->setMaximum(8);
ui->spinBox_6->setMaximum(8);
ui->spinBox_7->setMaximum(8);
ui->spinBox_8->setMaximum(8);
QString s="COM1";
_comPort = new QextSerialPort(s);
_comPort->setBaudRate(BAUD9600);
_comPort->setFlowControl(FLOW_OFF);
_comPort->setParity(PAR_NONE);
_comPort->setDataBits(DATA_8);
_comPort->setStopBits(STOP_1);
DATA_pointer = &mas[0];
}

CAN_transfer::~CAN_transfer()
{
_comPort->close();
delete(_comPort);
delete ui;
}

void CAN_transfer::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void CAN_transfer::on_connectbutton_clicked()
{
ui->logw->append(tr("COM1 configurating...."));
_comPort->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
ui->logw->append(tr("conneting...."));
*DATA_pointer = 0x55;
DATA_pointer++;
*DATA_pointer = 0xAA;
DATA_pointer++;
*DATA_pointer = 0xFF;
DATA_pointer -= 2;
if(_comPort->write((const char*)DATA_pointer, 3))
{
while(!(_comPort->read((char*)DATA_pointer,1)));
if(*DATA_pointer==0x55)
ui->logw->append(tr("connection established!"));
}
statusBar()->showMessage(tr("Connected"));
_comPort->close();
}