C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75220] Re:Cport Open 후 장치 제거시 에러
빌더(TWx) [builder] 3116 읽음    2018-12-20 13:36
허니 님이 쓰신 글 :
: USB to RS232 젠더로 통신을 하는데요.
:
: Cport open 하고 사용 중 USB 를 강제 제거하면 Cport 에서 error 가 발생하여
: 프로그램을 강제 종료해야하네요.
:
: 이부분 해결방법이 있을까요?
:
: 제가 하고싶은 방법은
:
: Open 된 포트가 사라지면 Cport close 하고
: 다시 장치가 나타나면 Open 하려고 합니다.
:
: 장치 제거되었을때 감지하는 부분은 찾았는데
: Cport->close() 하면 에러가 발생하여 프로그램을 강제 종료해야하네요.




답변:


델파이 컴포넌트 들은 OS 에서 리턴하는 에러코드를 디테일 하게 처리하지 않고
거의 대부분 단순히 예외를 던지는 구조로 대충 만들어져 있고, cport도 마찬가지 입니다.
델파이 컴포넌트에 의존하지 말고 시리얼 포트 라이브러리 코드를  PnP 지원하도록 따로 만드세요.

PnP (Plug and Play)를 지원하도록 하려면 WM_DEVICECHANGE 윈도우 메세지와
SetupDiGetClassDevs 등의 SetupDixxx API 를 이용해서 디바이스 arrive / remove 등을 처리해야 합니다.


GUID usbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72,
                      0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 };

GUID FTDIx_GUID = { 0x219d0508, 0x57a8, 0x4ff5, {0x97, 0xa1, 0xbd, 0x86, 0x58, 0x7c, 0x6c, 0x7e   } };

GUID FTDI_VCP_GUID = {0x86e0d1e0L, 0x8089, 0x11d0, {0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73   } };


USB to Serial 젠더에 사용되는 칩이 종류가 다양하므로...
OS에 의해서 COM 포트 카테고리에 해당하는 디바이스의 WM_DEVICECHANGE 메세지 핸들러가 호출되게 하려면...

위의 3개의 Device Interface GUID를 RegisterDeviceNotification() API 이용해서 등록 하세요.
하나의 단일 윈도우 핸들에 대해서 다른 Device Inteface GUID로 복수의 RegisterDeviceNotification() 호출이 가능 함.

물리적으로 해당 디바이스가 enable 되어 있는가, 제조사 모델명, 포트 네임 등은 SetupDixxx() API 이용해서 Enumerate
하면 됩니다. SetupDixxx API 사용법은 디바이스 드라이버 개발 키트에 있는 UsbView 소스 참고하세요.

시리얼 포트 라이브러리 코드의 초기화 부분에서 SetupDixxx api 이용해서 COM 포트 카테고리의 디바이스들 아이디를
리스트 구조에 넣고, WM_DEVICECHANGE 메세지 핸들러에서 리스트 구조를 비교해서 arrive와 remove를 판단해서 처리.



+ -

관련 글 리스트
75217 Cport Open 후 장치 제거시 에러 허니 2703 2018/12/18
75220     Re:Cport Open 후 장치 제거시 에러 빌더(TWx) 3116 2018/12/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.