📄 term.c
字号:
/************************************************ * serial communication demo * by Zou jian guo <ah_zou@163.com> * 2003-12-22 **************************************************/#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#define BAUDRATE B115200#define COM1 "/dev/ttyS0"#define COM2 "/dev/ttyS1"#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s){ printf("stop!!!\n"); STOP=TRUE;}/*--------------------------------------------------------*/void* keyboard(void * data){ int c; for (;;){ c=getchar(); if( c== ENDMINITERM){ STOP=TRUE; break ; } } return NULL;}/*--------------------------------------------------------*//* modem input handler */void* receive(void * data){ int c; printf("read modem\n"); while (STOP==FALSE) { read(fd,&c,1); /* com port */ write(1,&c,1); /* stdout */ } printf("exit from reading modem\n"); return NULL; }/*--------------------------------------------------------*/void* send(void * data){ int c='0'; printf("send data\n"); while (STOP==FALSE) { c++; c %= 255; write(fd,&c,1); /* stdout */ usleep(100000); } return NULL; /* wait for child to die or it will become a zombie */}/*--------------------------------------------------------*/int main(int argc,char** argv){ struct termios oldtio,newtio,oldstdtio,newstdtio; struct sigaction sa; int ok; pthread_t th_a, th_b, th_c; void * retval; if( argc > 1) fd = open(COM2, O_RDWR ); else fd = open(COM1, O_RDWR ); //| O_NOCTTY |O_NONBLOCK); if (fd <0) { perror(COM1); exit(-1); } tcgetattr(0,&oldstdtio); tcgetattr(fd,&oldtio); /* save current modem settings */ tcgetattr(fd,&newstdtio); /* get working stdtio */ newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;/*ctrol flag*/ newtio.c_iflag = IGNPAR; /*input flag*/ newtio.c_oflag = 0; /*output flag*/ newtio.c_lflag = 0; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; /* now clean the modem line and activate the settings for modem */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio);/*set attrib */ sa.sa_handler = child_handler; sa.sa_flags = 0; sigaction(SIGCHLD,&sa,NULL); /* handle dying child */ pthread_create(&th_a, NULL, keyboard, 0); pthread_create(&th_b, NULL, receive, 0); pthread_create(&th_c, NULL, send, 0); pthread_join(th_a, &retval); pthread_join(th_b, &retval); pthread_join(th_c, &retval); tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */ tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */ close(fd); exit(0); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -