블로그 이전했습니다. 새로운 블로그는 http://miruel.tistory.com 입니다.

정말 작은 리눅스용 시리얼 통신 프로그램. 개선하기... Linux


이전 포스트에서 소개했던 정말 작은 시리얼 통신 프로그램을 사용하다보니 좀 답답한게 있다.
바로 캡쳐가 안되는 문제가 있었다. 

그래서 고쳐봤다. 

com.c 코드 중 transfer_byte() 함수의 내용에 아래의 Bold 처리한 부분을 추가하면,
출력을 stdout 으로도 보내게 되어 pipe 또는 redirection이 가능해져 다음과 같이 사용이 가능하다.

수정하는데 걸린 시간 대략 1분?

한가지 단점이 있는데, 캡쳐를 사용하지 않으면 AABBCC 형식으로 화면에 두번 출력된다는 것이다. 
이를 해결하는 방법은... 음... 그냥 실행파일을 두개 쓰기로 했다.


$ com /dev/ttyUSB0 115200 > test.log


int transfer_byte(int from, int to, int is_control)
{
char c;
int ret;
do
{
ret = read(from, &c, 1);
} while (ret < 0 && errno == EINTR);
if (ret == 1)
{
if (is_control)
{
if (c == '\x01')
{ // C-a
return -1;
}
else if (c == '\x18')
{ // C-x
print_status(to);
return 0;
}
}
while (write(to, &c, 1) == -1)
{
if (errno != EAGAIN && errno != EINTR)
{
perror("write failed");
break;
}
}

/*
* send also to stdout.
*/
if(to == STDIN_FILENO)
{
while (write(STDOUT_FILENO, &c, 1) == -1)
{
if (errno != EAGAIN && errno != EINTR)
{
perror("write failed");
break;
}
}
}
}
else
{
fprintf(stderr, "\nnothing to read. probably port disconnected.\n");
return -2;
}
return 0;
}

끗~





구글검색창

맞춤검색