|
HANDLE m_hPort[20];
BOOL ccomm32::opencomm(int nport, DWORD dwbrate)
{
COMMTIMEOUTS commtimeouts;
DCB dcb;
char port[5];
wsprintf(port, "COM%d", nport);
m_hPort[nport-1] = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
... 중략
}
이런식으로 Open 하구요.
데이타 읽는 함수에 인자로 port를 추가했습니다.
DWORD ccomm32::readcomm(BYTE *by, int nlen, int n_port)
{
if(getconnected())
{
COMSTAT comstat;
DWORD dwerrflgs, dwbytesread;
ClearCommError(m_hPort[n_port], &dwerrflgs, &comstat);
dwbytesread = min(nlen, RXQUEUE);
if(dwbytesread > 0)
{
ReadFile(m_hPort[n_port], by, dwbytesread, &dwbytesread, NULL);
return dwbytesread;
}
}
return false;
}
//---------------------------------------------------------------------------
readcomm(BYTE *by, int nlen, int n_port) 함수 호출은 아래와 같이 했습니다.
(Timer로 주기적으로 호출합니다.)
void CPoll::Rev_Chk()
{
// RXQUEUE 은 define으로 1024로 잡았습니다.
DWORD dw_Len;
BYTE by[RXQUEUE];
String str;
for(int i = 0; i < 20; i++)
{
if( (dw_Len = readcomm(by, RXQUEUE, i)) != 0)
{
str = "포트 " + IntToStr(i+1) + " 에서 데이타 읽음";
ShowMessage(str);
}
}
}
PC에서 COM1,COM2를 번갈아 시험해봤는데 잘 들어옵니다.
WARSHIP 님이 올려주셨던 글들을 보고 해결했습니다.
다시 한번 감사드립니다.
|