📄 tty.c
字号:
/************************************************
* TTY SERIAL ROUTES
* use ttyS1 to ctrol GPRS
* by Zou jian guo <ah_zou@163.com>
* 2004-11-02
*
* edited by wbin <wbinbuaa@163.com>
* 2005-01-19
*
*************************************************/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#define BAUDRATE B9600 //默认波特率
#define COM3 "/dev/ttyS2"
static int fd;
static struct termios oldtio,newtio;
//==初始化串口==================================================
int tty_init()
{
fd = open(COM3, O_RDWR );
if (fd <0)
{
perror(COM3);
exit(-1);
}
tcgetattr(fd,&oldtio); //保存当前设置
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | /*CRTSCTS |*/ CS8 | CLOCAL | CREAD ;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
newtio.c_cc[VINTR] = 0; /* Ctrl-c */
newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */
newtio.c_cc[VERASE] = 0; /* del */
newtio.c_cc[VKILL] = 0; /* @ */
newtio.c_cc[VEOF] = 4; /* Ctrl-d */
newtio.c_cc[VTIME] = 0; /* 不使用分割字元组的计时器 */
newtio.c_cc[VMIN] = 1; /* 在读取到 1 个字元前先停止 */
newtio.c_cc[VSWTC] = 0; /* '\0' */
newtio.c_cc[VSTART] = 0; /* Ctrl-q */
newtio.c_cc[VSTOP] = 0; /* Ctrl-s */
newtio.c_cc[VSUSP] = 0; /* Ctrl-z */
newtio.c_cc[VEOL] = 0; /* '\0' */
newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */
newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */
newtio.c_cc[VWERASE] = 0; /* Ctrl-w */
newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */
newtio.c_cc[VEOL2] = 0; /* '\0' */
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio); //设置新参数
return 0;
}
//==============================================================
//读gprs串口数据
int tty_read(char *buf,int nbytes)
{
int num;
num = read(fd,buf,nbytes);
/*for (i=0;i<num;i++)
{
printf("%c",buf[i]);
}
*/
return num;
}
//==============================================================
//写gprs串口数据
int tty_write(char *buf,int nbytes)
{
int i;
for(i=0; i<nbytes; i++)
{
write(fd,&buf[i],1);
usleep(100);
}
//等待所有输出都被发送
return tcdrain(fd);
}
//==============================================================
//写gprs串口命令
int tty_writecmd(char *buf,int nbytes)
{
int i;
for(i=0; i<nbytes; i++)
{
write(fd,&buf[i],1);
usleep(100);
}
write(fd,"\r",1);
usleep(300000);
//等待所有输出都被发送
return tcdrain(fd);
}
//==============================================================
//恢复并关闭gprs串口
int tty_end()
{
//恢复旧设置
tcsetattr(fd,TCSANOW,&oldtio);
//关闭串口
close(fd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -