[해결] 시리얼 통신 코드 질문요..;;
글쓴이: pronet11 / 작성시간: 월, 2010/02/01 - 9:30오후
보드랑 걍 시리얼 양방향 통신을 할려고 하는데요.
보드에 초기 화면은 읽어 와서 로그인 할려는데 입력이 안되네요..;;
걍 putty 로 하니까 송신은 되던데..
login :
다음에 root 엔터 하면 입력 되게 어케 하면 될까요?ㅎㅎ
도움좀 부탁 드립니다.
이 코드는 걍 떠도는거 수정 한 것입니다~
#include <termios.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/signal.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/poll.h> //#define BAUDRATE B9600 //#define MODEMDEVICE "/dev/ttySNX0" #define ENDMINITERM 2 #define _POSIX_SOURCE 1 #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; void child_handler(int s) { STOP=TRUE; } int open_serial(char *dev_name, int baud) { int fd; fd = open(dev_name, O_RDWR | O_NOCTTY); if(fd < 0) { printf("Device open fail\n"); return -1; } return fd; } int main( int arg, char **argv) //int main (int arg) { int fd, c, baud, res1, res2; char dev_name[256]; struct termios oldtio,newtio,oldstdtio,newstdtio; struct sigaction sa; char buf1[255], buf2[255]; strcpy(dev_name, argv[1]); // strcpy(dev_name, argv); baud = strtoul(argv[2], NULL, 10); // baud = 115200; fd = open_serial(dev_name, baud); if (fd <0) { exit(-1); } tcgetattr(fd,&oldtio); newtio.c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD | B115200; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); // tcsetattr(1,TCSANOW,&newtio); tcgetattr(0,&oldstdtio); tcgetattr(0,&newstdtio); newstdtio.c_lflag &= ~(ICANON | ECHO); tcsetattr(0,TCSANOW,&newstdtio); switch (fork()) { case 0: close(1); for (c=getchar(); c!= ENDMINITERM ; c=getchar()) // res2 = write(fd,buf2,1); // printf("%s",res2); // write(fd,&c,1); tcsetattr(fd,TCSANOW,&oldtio); tcsetattr(0,TCSANOW,&oldstdtio); close(fd); exit(-1); case -1: perror("fork"); tcsetattr(fd,TCSANOW,&oldtio); close(fd); exit(-1); default: close(0); // sa.sa_handler = child_handler; // sa.sa_flags = 0; // sigaction(SIGCHLD,&sa,NULL); while (STOP==FALSE) { res1 = read(fd,buf1,255); buf1[res1] = 0; printf("%s", buf1); // write(1,&c,1); write(0,buf1,1); } wait(NULL); break; } }
Forums:
암도 답글은 안달아줘서 혼자 해결 중
이거 지우고 하니까 되네요.. 흐름제어 땜시...몇일을 고생 했는지..;;;
댓글 달기