⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qserial.cpp

📁 基于qt 2.3.10的串口类
💻 CPP
字号:
/**************************************************************************** ** $Id: qt/examples/lineedits/lineedits.cpp   2.3.2   edited 2001-01-26 $ ** ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved. ** ** This file is part of an example program for Qt.  This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/#include "qserial.h"int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,	B38400, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300,	38400,  19200,  9600, 4800, 2400, 1200,  300, };QSerial::QSerial( ){	len = 0;	fd = 0;}QSerial::~QSerial( ){	close(fd);}int QSerial::init(QSerialSt *st){	int ret;	ret = openDev(st->dev);	if( -1 == ret )	{		return -1;	}	setSpeed(st->speed);		ret = setParity(st->databits, st->stopbits, st->parity);		if( -1 == ret)	{		return -1;	}	return 1;	}int QSerial::openDev(const char* dev){	fd = open( dev, O_RDWR );         //| O_NOCTTY | O_NDELAY	if(-1 == fd)	{		perror("Can't Open Serial Port");		return -1;	}	return 1;}void QSerial::setSpeed(int speed){	int   i;	int   status;	struct termios   Opt;	tcgetattr(fd, &Opt);	for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)	{		if  (speed == name_arr[i])		{			tcflush(fd, TCIOFLUSH);			cfsetispeed(&Opt, speed_arr[i]);			cfsetospeed(&Opt, speed_arr[i]);			status = tcsetattr(fd, TCSANOW, &Opt);			if  (status != 0)				perror("tcsetattr fd1");			return;		}		tcflush(fd,TCIOFLUSH);	}}int QSerial::setParity(int databits,int stopbits,int parity){	struct termios options;	if  ( tcgetattr( fd,&options)  !=  0)	{		perror("SetupSerial 1");		return -1;	}	options.c_cflag &= ~CSIZE;	switch (databits) 	{		case 7:			options.c_cflag |= CS7;			break;		case 8:			options.c_cflag |= CS8;			break;		default:			printf("Unsupported data size\n");			return -1;	}	switch (parity)	{		case 'n':		case 'N':			options.c_cflag &= ~PARENB;   /* Clear parity enable */			options.c_iflag &= ~INPCK;     /* Enable parity checking */			break;		case 'o':		case 'O':			options.c_cflag |= (PARODD | PARENB);  			options.c_iflag |= INPCK;             /* Disnable parity checking */			break;		case 'e':		case 'E':			options.c_cflag |= PARENB;     /* Enable parity */			options.c_cflag &= ~PARODD;   			options.c_iflag |= INPCK;       /* Disnable parity checking */			break;		case 'S':		case 's':  /*as no parity*/			options.c_cflag &= ~PARENB;			options.c_cflag &= ~CSTOPB;			break;		default:			printf("Unsupported parity\n");			return -1;	}	switch (stopbits)	{		case 1:			options.c_cflag &= ~CSTOPB;			break;		case 2:			options.c_cflag |= CSTOPB;			break;		default:			printf("Unsupported stop bits\n");			return -1;	}	/* Set input parity option */	if (parity != 'n')		options.c_iflag |= INPCK;	options.c_cc[VTIME] = 0; 	options.c_cc[VMIN] = 1;//block read until 1 char read	options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/	options.c_oflag &= ~OPOST;   /*Output*/	tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */	if (tcsetattr(fd,TCSANOW,&options) != 0)	{		perror("SetupSerial 3");		return 0;	}	return 1;}void QSerial::setNotifier(){	sn = new QSocketNotifier( fd, QSocketNotifier::Read );	QObject::connect( sn, SIGNAL(activated(int)),		      this, SLOT(dataRead()) );}void QSerial::writeBlock(const char* data, int len){	int i;	i = write(fd, data, len);	printf("\n%d write", i);}void QSerial::dataRead(){	len = read(fd, sbuf, 100);		emit readyRead(sbuf, len);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -