串口编程--本地层开发demo
来源:互联网 发布:sql distinct 用法 编辑:程序博客网 时间:2024/05/16 23:35
{
int fd = -1;
int res = 0;
fd = open(uart[port], O_RDWR | O_NOCTTY | O_NDELAY);
if (fd > 0)
{
fcntl(fd, F_SETFL, 0);
if (set_serial_opts(fd, baud, 8, 'N', 1) == -1)
{
return -1;
}
}
return fd;
}
static int set_serial_opts(int fd, int nSpeed, int nBits, char nEvent, int nStop)
{
int ret = -1;
if (fd < 0) {
return -1;
}
if (tcgetattr(fd, &serial_oldtio) != 0)
{
goto fail;
}
bzero(&serial_newtio, sizeof(serial_newtio));
serial_newtio.c_cflag |= CLOCAL | CREAD;
serial_newtio.c_cflag &= ~CSIZE;
serial_newtio.c_cflag &= ~CRTSCTS;
serial_newtio.c_lflag &= ~(ICANON | ECHOE |ECHO|ISIG);
serial_newtio.c_oflag &= ~OPOST;
switch (nBits)
{
case 7:
serial_newtio.c_cflag |= CS7;
break;
case 8:
serial_newtio.c_cflag |= CS8;
break;
default:
serial_newtio.c_cflag |= CS8;
break;
}
switch (nEvent)
{
case 'O':
serial_newtio.c_cflag |= PARENB;
serial_newtio.c_cflag |= PARODD;
serial_newtio.c_iflag |= (INPCK|ISTRIP);
break;
case 'E':
serial_newtio.c_cflag |= PARENB;
serial_newtio.c_cflag &= ~PARODD;
serial_newtio.c_iflag |= (INPCK|ISTRIP);
break;
case 'N':
serial_newtio.c_cflag &= ~PARENB;
//serial_newtio.c_iflag |= INPCK;
serial_newtio.c_iflag &= ~INPCK;
break;
default:
serial_newtio.c_cflag &= ~PARENB;
//serial_newtio.c_iflag |= INPCK;
serial_newtio.c_iflag &= ~INPCK;
break;
}
switch (nSpeed)
{
case 9600:
cfsetispeed(&serial_newtio, B9600);
cfsetospeed(&serial_newtio, B9600);
break;
case 57600:
cfsetispeed(&serial_newtio, B57600);
cfsetospeed(&serial_newtio, B57600);
break;
case 115200:
cfsetispeed(&serial_newtio, B115200);
cfsetospeed(&serial_newtio, B115200);
break;
default:
cfsetispeed(&serial_newtio, B9600);
cfsetospeed(&serial_newtio, B9600);
break;
}
if (nStop == 1)
serial_newtio.c_cflag &= ~CSTOPB;
else if (nStop == 2)
serial_newtio.c_cflag = CSTOPB;
tcflush(fd, TCIFLUSH);
serial_newtio.c_cc[VTIME] = 100;
serial_newtio.c_cc[VMIN] = 10;
if (tcsetattr(fd, TCSANOW, &serial_newtio) != 0)
{
goto fail;
}
ret = 0;
fail:
return ret;
}
long serial_read(int fd, char *buf, int len,int time)
{
long ret = -1;
int i;
int size,vlen=0;
//IO_READ read;
struct timeval tv_timeout;
//tcflush(fd, TCIFLUSH);
FD_ZERO(&read_fds);
FD_SET(fd, &read_fds);
tv_timeout.tv_sec = time;
tv_timeout.tv_usec = 0;
//switch (select(fd+1, &read_fds, NULL, NULL, &tv_timeout))
switch (select(fd+1, &read_fds, NULL, NULL, NULL))
{
case -1:
tcflush(fd, TCIOFLUSH);
break;
case 0:
tcflush(fd, TCIOFLUSH);
break;
default:
if (FD_ISSET(fd, &read_fds))
{
// ioctl(fd, FIONREAD,&size);
ret = read(fd, buf,len);
//ret = read(fd, buf,0xff);
if (ret > 0)
{
//tcflush(fd, TCIOFLUSH);
return ret;
}
else
{
return -1;
}
}
break;
}
return 0;
}
- 串口编程--本地层开发demo
- 串口编程--java层开发demo
- C#串口编程(简单Demo)
- linux下串口编程本地显示问题
- VB 串口编程 开发心得
- VB 串口编程 开发心得
- 串口开发知识总结之Win32串口编程
- Linux 串口编程<四> 串口设备程序开发
- 深入浅出VC++串口编程--短信应用开发
- android开发---8.framework层的java应用接口demo
- SSH整合开发Demo--酒店预订系统-->DAO层设计
- 串口调试小节之三 Linux串口应用层编程注意
- 串口调试小节之三 Linux串口应用层编程注意
- iOS开发实战-时光记账Demo 本地数据库版
- iOS开发实战-时光记账Demo 本地数据库版
- 串口通信Demo
- C#串口 Demo
- 串口同步操作DEMO
- 【贪心算法】Huffman Tree
- 进程线程的理解
- Ubuntu 14.04 source list: http://cn.archive.ubuntu.com
- CristalReport(水晶报表)插件整合Eclipse开发
- LeetCode之Valid Anagram
- 串口编程--本地层开发demo
- 蓝牙连接断开超时时间设置
- 【springmvc+mybatis项目实战】杰信商贸-1.项目背景
- Source Insight 的应用技巧
- LXC1.0.7-- lxc-start 源码分析 02
- Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】
- Struts流程图
- 233 Sort it【模拟】
- 【线性表】之链式存储结构