2009-05-04 10 views
6

win32 (이전 C-API)에서 RS-232 핸드 쉐이킹 라인을 직접 제어 할 수 있는지 궁금합니다.RS232 (Com-Port) RTS/CTS/DTR/DSR의 저수준 제어가 가능합니까?

외부 하드웨어와 인터페이스하고 싶습니다. 두 가지 간단한 데이터 라인으로 충분할 것입니다.

Win32 용 API를 사용하면 4 개의 상태 표시 줄을 읽고 쓸 수 있습니다. 정상 직렬 통신에서 핸드 쉐이킹 라인은 UART에 의해 자동으로 구동됩니다 (하드웨어 핸드 쉐이킹이 활성화 된 경우).

도스에서는 사소한 일이었습니다. 하나는 UART를 직접 프로그래밍해야했습니다. 이 기능은 win32에서 어떻게 든 생존 했습니까?

답변

5

SetCommState()을 사용하여 RTS와 DTR을 제어 할 수 있습니다. 또한 하드웨어 또는 드라이버가 하드웨어 흐름 제어 (CTS 및/또는 DSR)를 처리하도록 설정하거나 SetCommMask()을 사용하여 설정하여 이벤트가 변경 될 때 이벤트를 가져올 수 있습니다.

괜찮은 개요

은 여기에 있습니다 :는 Win32 시리얼 통신의 API 및/또는 드라이버가 있기 때문에 와이어에 무슨 일이 일어나고 있는지 몇 가지 디버깅을 수행 할 수 있도록 준비 몹시 신경을 쓰는 수 있다는 http://msdn.microsoft.com/en-us/library/ms810467.aspx

참고.

+0

정확히 내가 무엇을 찾고 있었습니까. 감사. –

0

디바이스 드라이버를 구현하는 데 필요한 보호 된 하드웨어를 얻는 경우에만 비슷한 유형의 프로그래밍을 수행 할 수 있습니다. 나는 이것이 1980 년대부터 똑같은 유형의 일을하고있을 때부터 더 쉬워 진 것으로 생각한다.

0

Microsoft는 실제로 하드웨어 핸드 셰이 킹을 실제로하고 있습니까? 수년간 NT, win2000 및 XP는 하드웨어에서 핸드 쉐이킹을 수행하지 않았습니다. 대신 fifo가 특정 지점에 도달하면 장치 드라이버가 수동으로 cts 행을 변경합니다. 즉, 장치 드라이버가 데이터를 잃어 버리게하고, 마우스로 창을 잡고 예를 들어 화면 주위에 원을 그리는 것이 매우 간단하다는 것을 의미합니다 (패스의 전부 또는 일부에서 화면의 왼쪽에서 창을 가져갈 수 있도록하십시오).). 전체 화면으로 /에서 명령 프롬프트를 가져 오는 Alt-Enter는 데이터 손실을 유발하는 쉬운 방법이었습니다. 또는 인터럽트 대기 시간을 충분히 유발하는 다른 것. 기본적으로 microsofts 하드웨어 흐름 제어는 하드웨어가 아니라 소프트웨어 흐름 제어입니다. 하드웨어에 하드웨어 흐름 제어 기능이 있어도 microsft의 드라이버가 그 비트를 설정하지 않았습니다. SeaLevel은 마침내 그 비트를 지원했지만, 제대로 작동하려면 SetCommState()에 관련이없는 올바른 설정을 지정해야했습니다.

신호를 제어하는 ​​프로그램에서 SetCommState()를 사용하십시오.

+0

이 작업을한지 꽤 오래되었지만 내 기억은 PC 세계의 표준 문제인 8250/16550 UART가 하드웨어 핸드 셰이 킹 온칩을 처리하지 않는다는 것입니다. 이는 Win 드라이버의 문제가 아닙니다. 하드웨어에서만 지원할 수 있습니다. 드라이버는 장치 인터럽트 동안 상태를 얻고 핸드 쉐이킹 라인 자체를 토글/감지해야합니다.SeaLevel 또는 Hayes는 지능적인 하드웨어를 보유하고 있었으며 (또는 보유하고있는) 그들의 드라이버가이를 활용할 것입니다. 또한 초기 Windows 드라이버가 실제로 정말 나빴다는 것은 사실이지만, 결국에는 다소 좋았습니다. –

2

RS232 포트와 통신하기 위해 프로젝트를 수행 할 때 this 튜토리얼을 보았습니다. 포트를 여는 방법, 타임 아웃, 읽기/쓰기 및 포트 닫기와 같은 몇 가지 속성을 설정하는 방법에 대한 완전한 예제입니다. 비록 당신의 프로젝트가 지금까지 끝났지 만, 나는 그것이 SO 아카이브에 남아 있기 때문에 이것이 유용하게 남아 있기를 바란다.

+0

당신의 this-link는 죽었습니다. 적어도 그것의 제목을 기억하십니까? – Wolf

+1

WaybackMachine 인터넷 보관함을 통해 액세스 할 수 있습니다. [Serial How-To - RobBayer.com] (http://web.archive.org/web/20081121174350/http://www.robbayer.com/serial. php) [Windows 시리얼 포트 프로그래밍 - Robertson Bayer (PDF)] (http://web.archive.org/web/20111027074853/http://www.robbayer.com/files/serial-win.pdf) –

관련 문제