[해결] 시리얼 통신 코드 질문요..;;
글쓴이: 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:


암도 답글은 안달아줘서 혼자 해결 중
이거 지우고 하니까 되네요.. 흐름제어 땜시...몇일을 고생 했는지..;;;
댓글 달기