Linux下QextSerialPort类编程 串口打不开
我在windows下 用的虚拟机6.5.2, Linux用的是 Fedara 12
我先前已经把 QextSerialPort-1.1 这个类 扩充到 QT下了
这是我的 主文件 CheckComDialog.cpp
#include "ui_checkcomdialog.h"
#include "qextserialport.h"
CheckComDialog::CheckComDialog(QWidget *parent)
:QDialog(parent), ui(new Ui::CheckComDialog)
{
ui->setupUi(this);
connect(ui->checkButton,SIGNAL(clicked()),this,SLOT(checkcom()));
port = new QextSerialPort("/dev/ttyS0");
port->setBaudRate(BAUD115200);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
}
CheckComDialog::~CheckComDialog()
{
delete ui;
}
void CheckComDialog::checkcom()
{
QString s= "123";
QString msg="";
// 串口OPEN
port->open(QIODevice::ReadWrite);
//串口发送一个字符串
if(port->isOpen())
{ port->write(s.toAscii(),s.lengh());
//串口接收
char buff[1024];
int numBytes;
numBytes = port->bytesAvailable();
if(numBytes > 0)
{if(numBytes > 1024) numBytes = 1024;
int i = port->read(buff,numBytes);
buff = '\0';
msg = buff;
}
//比较判断
if(s.toAscii() == msg.toAscii())
ui->textBrowser->setText("com is ok!");
else
ui->textBrowser->setText("com is wrong.");
}
else
ui->textBrowser->setText("Can't open the COM!");
}
这是 POSIX_QEXTSERIALPORT.H 文件
#ifndef _POSIX_QEXTSERIALPORT_H_
#define _POSIX_QEXTSERIALPORT_H_
#include <stdio.h>
#include <termios.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include "qextserialbase.h"
class Posix_QextSerialPort:public QextSerialBase {
public:
Posix_QextSerialPort();
Posix_QextSerialPort(const Posix_QextSerialPort& s);
Posix_QextSerialPort(const QString & name);
Posix_QextSerialPort(const PortSettings& settings);
Posix_QextSerialPort(const QString & name, const PortSettings& settings);
Posix_QextSerialPort& operator=(const Posix_QextSerialPort& s);
virtual ~Posix_QextSerialPort();
virtual void setBaudRate(BaudRateType);
virtual void setDataBits(DataBitsType);
virtual void setParity(ParityType);
virtual void setStopBits(StopBitsType);
virtual void setFlowControl(FlowType);
virtual void setTimeout(ulong, ulong);
virtual bool open(OpenMode mode=0);
virtual void close();
virtual void flush();
virtual qint64 size() const;
virtual qint64 bytesAvailable();
virtual void ungetChar(char c);
virtual void translateError(ulong error);
virtual void setDtr(bool set=true);
virtual void setRts(bool set=true);
virtual ulong lineStatus();
protected:
QFile* Posix_File;
struct termios Posix_CommConfig;
struct timeval Posix_Timeout;
struct timeval Posix_Copy_Timeout;
virtual qint64 readData(char * data, qint64 maxSize);
virtual qint64 writeData(const char * data, qint64 maxSize);
};
#endif
这是QEXTSERIALPOR.h 文件
#ifndef _QEXTSERIALPORT_H_
#define _QEXTSERIALPORT_H_
#define _TTY_POSIX_
/*POSIX CODE*/
#ifdef _TTY_POSIX_
#include "posix_qextserialport.h"
#define QextBaseType Posix_QextSerialPort
/*MS WINDOWS CODE*/
#else
#include "win_qextserialport.h"
#define QextBaseType Win_QextSerialPort
#endif
class QextSerialPort: public QextBaseType {
public:
QextSerialPort();
QextSerialPort(const QString & name);
QextSerialPort(PortSettings const& s);
QextSerialPort(const QString & name, PortSettings const& s);
QextSerialPort(const QextSerialPort& s);
QextSerialPort& operator=(const QextSerialPort&);
virtual ~QextSerialPort();
};
#endif
在ROOT用户下 运行 有时串口有时能收到 有时收不到,收不到时就是串口读不到,到numBytes = port->bytesAvailabl()时 numBytes=-1 , 郁闷。
请大家指教 谢谢!