2014-02-27 7 views
1

시리얼 디바이스 (GSM 모뎀)를 열고 가상 터미널을 생성하는 어플리케이션이 있습니다. 직렬 장치에서 데이터를 필터링하고 의사 터미널을 통해 보내려고하므로 다른 프로세스에서 간단한 '원시'직렬 회선처럼 읽을 수 있습니다.
ptFd - 의사 터미널 FileDescriptor에
devFd -가상 터미널과 시리얼 디바이스 사이의 기묘한 문자 대체

내가 사용 FileDescriptor에 직렬 장치 posix_openpt(O_RDWR | O_NOCTTY), 의사 단자와 시리얼 라인에 대한 사용자 정의 설정에 대한 많은 grantpt(ptFd), unlockpt(ptFd). 첫 번째 시도를 위해 여기에 게시하지는 않겠지 만 누군가이 문제를 해결하는 데 도움이된다면 수행 할 것입니다.

읽기 devFd : 내 문제는 다음과
056405c0020001009e59
읽기 ptFd :
5e45645e45c05e425e405e415e409e59
읽기 devFd :
056405c0020001009e59
읽기 ptFd :
5e45645e45c05e425e405e415e409e59

내가 쓰고 있어요 바이트 의사 장치에있는 장치에서 가져온 바이트 :
,05 5e42
에 5e41
02 변경 5e40
01 변경 5e45
00 변경을 변경하지만 모든 바이트 (> = 16 진수) 헥사 0부터 시작되지는 잘 전달된다.

그리고 우선 ... 가상 터미널에 쓰고 똑같은 프로세스에서 읽으면 그냥 방금 쓴 바이트를 반영해서는 안됩니다. 맞습니까?
나는이 터미널에 익숙하지 않지만 터미널을 열면 ptsname 함수로 슬레이브의 이름을 얻는다고 상상한다. 다른 프로세스에서 그 이름을 열 수 있습니다 (예 :/dev/pts/3). 그 시점에서 '스트림'으로 작동합니다.

아마도 내가 틀렸지 만 간단한 설명을 해 주시겠습니까? 미리 감사드립니다.

답변

1

이것은 터미널에서 Ctrl + C를 누르면 ^C이 표시되는 것과 유사합니다. PTY 대한 동등한 문제는 그것이 다시 ^C 같은 , 0x5E 0x03으로 반향있어 상기 ASCII 문자 Ctrl + C, , 0x03으로하여 생성 된 경우 마스터 단부에 기록된다는 것이다.

이 동작은 터미널 속성의 c_lflag 필드에서 ECHOCTL 플래그를 설정 해제하여 Ctrl + C 및 다른 제어 문자에 대해 해제 할 수 있습니다.

ECHO 플래그를 설정 해제하여 완전히 에코를 비활성화 할 수도 있습니다. (나는 당신이 이것을하고 싶었는지 확실하지 않았고, 당신이하고있는 일이 무엇인지 분명하지 않았다.)

+0

'cfmakeraw' 함수는 내 목표를 달성하는 데 도움이되었지만 그 대답은 나를 이끌어 준다. :) thanks –