Linux下QextSerialPort类编程 串口打不开

liutao9 2010-04-22 10:41:59
我在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 , 郁闷。
请大家指教 谢谢!
...全文
373 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tingsking18 2010-04-24
  • 打赏
  • 举报
回复
用端口检测工具PORTMON.EXE跟踪一下下发的指令,看看设置项对不对
MicroSky2813 2010-04-24
  • 打赏
  • 举报
回复
接受速率设置好了吗?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧