signal handler and termios
2018. 4. 9. 11:50ㆍIT
반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <termios.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/signal.h> #include <sys/types.h> #include <stdlib.h> #define BAUDRATE B9600 #define MODEMDEVICE "/dev/pts/15" #define _POSIX_SOURCE 1 #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; void signal_handler_IO (int status); int wait_flag=TRUE; int main() { int fd, c, res, write_res, count = 0; struct termios oldtio, newtio; struct sigaction saio; char buf[255]; fd = open(MODEMDEVICE, O_RDWR | O_NONBLOCK); if(fd < 0) {perror(MODEMDEVICE); exit(-1);} saio.sa_handler = signal_handler_IO; //saio.sa_mask = 0; sigemptyset(&saio.sa_mask); sigaddset(&saio.sa_mask, 0); saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO, &saio, NULL); fcntl(fd, F_SETOWN, getpid()); fcntl(fd, F_SETFL, FASYNC); tcgetattr(fd, &oldtio); newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; newtio.c_cc[VMIN] = 1; newtio.c_cc[VTIME] = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); while(STOP == FALSE) { printf("., %d\n", count); usleep(500000); count++; if(wait_flag == FALSE && count < 10) { res = read(fd, buf, 255); buf[res] = 0; printf(":%s:%d\n", buf, res); if(res ==1) { STOP = TRUE; } wait_flag = TRUE; } if(count == 10) { char *buf2 = "Answer me!"; write_res = write(fd, buf2, strlen(buf2)); sleep(3); if(write_res >= 0) printf("Send message succeed."); sleep(3); count = 0; } } tcsetattr(fd, TCSANOW, &oldtio); } void signal_handler_IO(int status) { printf("received SIGIO signal. \n"); wait_flag = FALSE; } | cs |
socat -d -d pty pty 로 임시 serial port open 하고
이 소스로.. 저기 위에 포트만 변경해주고. send write 하고 signal 로 인터럽트 잡고. minicom으로 열어서 데이터 들어오나 확인하고
728x90
반응형
'IT' 카테고리의 다른 글
SNORT (0) | 2018.05.10 |
---|---|
find command (0) | 2018.05.10 |
undefined reference to 'pthread_create/join' (0) | 2018.03.26 |
시리얼통신 (0) | 2018.03.22 |
우분투 자동업데이트 끄기 / 메모리풀 커널이미지 정리 (0) | 2018.03.22 |