Александр! Так о том и речь, что невозможно открыть СОМ-порт, используя
OVERLAPPED!!
т.е, что бы предыдущий пример заработал, надо, кроме того, что бы поместить его в отдельный поток, еще и открыть порт примерно таким образом:
PHP код:
BOOL CAddIn::InitComm(int nCommPort, int nCommSpeed)
{
DCB dcb;
CString szCommPort;
switch(nCommPort)
{
case 0: szCommPort.Format(_T("COM1"));break;
case 1: szCommPort.Format(_T("COM2"));break;
case 2: szCommPort.Format(_T("COM3"));break;
case 3: szCommPort.Format(_T("COM4"));break;
case 4: szCommPort.Format(_T("COM5"));break;
case 5: szCommPort.Format(_T("COM6"));break;
case 6: szCommPort.Format(_T("COM7"));break;
case 7: szCommPort.Format(_T("COM8"));break;
default: szCommPort.Format(_T("COM1"));break;
}
m_hComm = CreateFile(szCommPort, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (::m_hComm == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("?хтючьюцэю юЄъЁ?Є№ COM яюЁЄ"));
return FALSE;
}
if(ov.hEvent == INVALID_HANDLE_VALUE) ov.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
GetCommState(::m_hComm,&dcb);
SetupComm (::m_hComm, 256, 256); // allocate transmit & receive buffer
switch(nCommSpeed)
{
case 0: dcb.BaudRate = CBR_115200;break;
case 1: dcb.BaudRate = CBR_57600;break;
case 2: dcb.BaudRate = CBR_38400;break;
case 3: dcb.BaudRate = CBR_19200;break;
case 4: dcb.BaudRate = CBR_9600;break;
case 5: dcb.BaudRate = CBR_4800;break;
case 6: dcb.BaudRate = CBR_2400;break;
default: dcb.BaudRate = CBR_9600;break;
}
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
SetCommState (::m_hComm, &dcb);
SetCommMask(::m_hComm, EV_BREAK | EV_RXCHAR);
return TRUE;
}
И как Вы собираетесь выставить параметры СОМ порта?
Я, в принципе, знаю, что куда надо записать.... UART он во всем мире одинаков
т.е. как в регистрах UART выставить соответствующие значения? 0011001
(то, что, в принципе и делает SetCommState)