我使用的是mini6410 Qt4和qtopia编程开发指南里的串口通讯例程,但是出现了诡异的一幕,电脑的超级终端可以发生信息至mini2440,但是mini2440无法发生信息至电脑的超级终端
附上main_form.cpp,其余资料在附件。希望有高手能解答!!
#include "main_form.h"
#include <qmultilineedit.h>
#include <qprogressbar.h>
#include <qtimer.h>
#include <qapplication.h>
#include <qmessagebox.h>
#include <qstringlist.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fs.h>
#include <errno.h>
#include <string.h>
#include <termio.h>
TMainForm::TMainForm(QWidget * parent, const char * name, WFlags f):TMainFormBase(parent, name, f), m_notifier(0)
{
m_fd = openSerialPort();
if (m_fd < 0) {
QMessageBox::warning(this, tr("Error"), tr("Fail to open serial port!"));
return ;
}
m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect (m_notifier, SIGNAL(activated(int)), this, SLOT(remoteDataIncoming()));
}
TMainForm::~TMainForm()
{
if (m_notifier) {
delete m_notifier;
m_notifier = 0;
}
if (m_fd >= 0) {
::close(m_fd);
m_fd = -1;
}
}
void TMainForm::sendButtonClicked()
{
QString text( m_sendEdit->text() );
if (text.isEmpty()) {
return ;
}
::write(m_fd, text.latin1(), text.length());
m_sendEdit->setText("");
}
int TMainForm::openSerialPort()
{
int fd = -1;
const char *devName = "/dev/ttySAC2";
fd = ::open(devName, O_RDWR|O_NONBLOCK);
if (fd < 0) {
return -1;
}
termios serialAttr;
memset(&serialAttr, 0, sizeof serialAttr);
serialAttr.c_iflag = IGNPAR;
serialAttr.c_cflag = B115200 | HUPCL | CS8 | CREAD | CLOCAL;
serialAttr.c_cc[VMIN] = 1;
if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) {
return -1;
}
return fd;
}
void TMainForm::remoteDataIncoming()
{
char c;
if (read(m_fd, &c, sizeof c) != 1) {
QMessageBox::warning(this, tr("Error"), tr("Receive error!"));
return;
}
m_receiveEdit->insert(QString(QChar(c)));
}