Mr。Best …★

공지 사항

WinCE 2008.06.12 21:21 by 주방 백화점

2) COM Monitor Event 설정

COM Port를 Open하고 나면 이제 COM Port에서 발생하는 이벤트 중 어떤 이벤트를 사용할 지를 결정해 주어야만 합니다. 이것을 해주는 함수는 SetCommMask()입니다.

BOOL SetCommMask(     
     HANDLE hFile,       // Device 파일의 핸들
     DWORD dwEvtMask  // 가능한 이벤트 중 사용할 것만 마스크 시킨다.
     );


hFile은 위의 CreateFile에서 리턴된 파일 핸들 입니다.
dwEvtMask는 사용가능 한 이벤트 중 어느 것을 사용할 지 설정해주는 정보이며 EV_BREAK,
EV_CTS, EV_DSR, EV_ERR, EV_RING, EV_RLSD, EV_RXCHAR, EV_RXFLAG, EV_TXEMPTY      
같은 값들을 조합하여 만들어 줄 수 있습니다. 본 예제에서는 단순히 데이터가 들어오는 지만 체크하므로 RXCHAR만 사용하지만 보다 정교한 제어를 원하는 경우엔 필요로 하는 플래그를 추가하여 처리 할
수 있습니다.

3) 입출력 버퍼 크기 설정
다음으로 해 줄 일은 입출력 큐의 크기를 정해주는 것입니다. 입출력 큐의 크기를 정해주는 함수는 SetupComm() 입니다.

BOOL SetupComm(      
      HANDLE hFile,       // Device 파일의 핸들      
      DWORD dwInQueue,  // 입력 buffer의 크기      
      DWORD dwOutQueue // 출력 buffer의 크기      
      );
입출력 버퍼의 크기는 주고받는 데이터의 량에 따라 결정되겠지만 일반적으로 4096 (80*25*4) 정도의          크기로 설정해 주는 것이 좋습니다. 80*25는 VT100 단말기의 모니터 사이즈입니다.


4) 입출력 버퍼의 초기화
처음 버퍼를 생성하고 난 후에는 시리얼 포트에 대기하고 있던 모든 입출력 데이터를 제거하고 전송이나    수신하기 위해 대기하고 있던 것들을 없애 주어야 합니다. 이 일을 해주는 함수가 PurgeComm()입니다.
BOOL PurgeComm(
      HANDLE hFile,    // Device 파일의 핸들
      DWORD dwFlags  // 수행 작업
      );
dwFlags는 초기화 시 수행할 작업들을 설정해 주는 것으로 다음과 같습니다.

PURGE_TXABORT : Overapped 전송 작업을 취소 합니다.
PURGE_RXABORT : Overapped 전송 작업을 취소 합니다.
PURGE_TXCLEAR : 출력 버퍼를 클리어
PURGE_RXCLEAR : 입력 버퍼를 클리어
   
5) 타임아웃 값 설정
이제 읽기 쓰기 Overapped I/O를 위한 Time Out 값들을 설정해 주어야할 단계입니다. MFC에서             Serial Port의 Timeout 값을 설정해 주기 위해 사용하는 structure는 COMMTIMEOUTS입니다.
typedef struct _COMMTIMEOUTS {  
 DWORD ReadIntervalTimeout;  
 DWORD ReadTotalTimeoutMultiplier;  
 DWORD ReadTotalTimeoutConstant;  
 DWORD WriteTotalTimeoutMultiplier;  
 DWORD WriteTotalTimeoutConstant;  
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

ReadIntervalTimeout : 데이터가 들어올 때 두 바이트의 입력이 이루어지는 시간으로 이 이상의  
시간 만큼 다음 바이트의 입력이 없을 경우 입력 값을 리턴하고 RX_CHAR Message를 발생시킵니다.
ReadTotalTimeoutMultiplier*ReadTotalTimeoutConstant :  읽기 동작에 걸리는 총 시간으로 이 값이         
0이면 사용하지 않는다는 뜻입니다.
WriteTotalTimeoutMultiplier*WriteTotalTimeoutConstant : 쓰기 동작에 걸리는 총 시간으로 이 값이         
0이면 사용하지 않는 다는 뜻입니다.

위의 값들을 설정한 후 SetCommTimeouts() 함수를 호출하여 Timeout값을 설정합니다.
BOOL SetCommTimeouts(
      HANDLE hFile,  // Device 파일의 핸들
      LPCOMMTIMEOUTS lpCommTimeouts // COMMTIMEOUTS
      );

즉, ReadIntervalTimeout만큼 기다리다 다음 데이터가 없으면 읽은 데이터를 리턴하고,
ReadTotalTimeoutMultiplier * ReadTotalTimeoutConstant의 시간만큼 기다려도 읽기로한 데이터             사이즈만큼 읽지 못하거나 WriteTotalTimeoutMultiplier * WriteTotalTimeoutConstant 시간 안에
전송을 못할 경우 에러 이벤트를 발생시키도록 설정하는 것입니다.

신고
TAG
1 ··· 14 15 16 17 18 19 20 21 22 ··· 31 
BLOG main image
Mr。Best …★

by 주방 백화점

카테고리

분류 전체보기 (31)
Window (24)
WinCE (2)
Linux (0)
Web (0)
기초 Programming (5)

달력

«   2017/05   »
  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      
tistory!get rss Tistory Tistory 가입하기!

티스토리 툴바