Здравствуйте, XorNeT, Вы писали:
XNT>Платформа в2к читаю реадфайлом предварительно вызывая SetCommState() & SetCommTimeouts()
XNT>if(hCom!= INVALID_HANDLE_VALUE){
XNT> DCB dCB;
XNT> ::GetCommState(hCom,&dCB);
XNT> dCB.DCBlength = sizeof(DCB);
XNT> dCB.BaudRate = CBR_9600;
XNT> dCB.fParity = TRUE;
XNT> dCB.Parity = NOPARITY;
XNT> dCB.ByteSize = 8;
XNT> dCB.StopBits = ONESTOPBIT;
XNT> if(!::SetCommState(hCom,&dCB)){
XNT> TRACE("Error:SetComstate(rt)-%d\n",GetLastError());
XNT> }
XNT> }
XNT> COMMTIMEOUTS pCT;
XNT> pCT.ReadIntervalTimeout = MAXDWORD;
XNT> pCT.ReadTotalTimeoutConstant = 0;
XNT> pCT.ReadTotalTimeoutMultiplier = 0;
XNT> pCT.WriteTotalTimeoutConstant = 0;
XNT> pCT.WriteTotalTimeoutMultiplier =0;
Приходилось с СОМ-портом работать этими же функциями. Ты не написал, как CreateFile вызываешь. У меня было так:
// Вызов CreateFile для открытия СОМ-порта
TCHAR sPort[10] = _T("\\\\.\\COM");
sPort[7] = ((TCHAR)nPort) + '0';
sPort[8] = 0;
// Открываем порт
m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, NULL);
if (m_hComm == INVALID_HANDLE_VALUE)
return XDCP_PORTNOTOPENED;
// Получаем текущее состояние до того как изменить его
DCB dcb;
dcb.DCBlength = sizeof(DCB);
if ( !GetCommState(m_hComm, &dcb) )
return XDCP_CANTGETSTATE;
// Ставим свои параметры
dcb.BaudRate = dwBaud; // Частота передачи
dcb.ByteSize = 8; // Биты данных
dcb.Parity = NOPARITY; // Паритет
dcb.StopBits = ONESTOPBIT; // Стоповые биты
// Делаем изменения в настройках порта
if ( !SetCommState(m_hComm, &dcb) )
return XDCP_CANTSETSTATE;
// Устанавливаем таймауты
COMMTIMEOUTS touts;
touts.ReadIntervalTimeout = 250; // Таймаут между символами
touts.ReadTotalTimeoutConstant = 250; // Таймаут добавляющийся к таймауту посылки
touts.ReadTotalTimeoutMultiplier = 25; // Множитель таймаута для каждого символа
touts.WriteTotalTimeoutConstant = 0;
touts.WriteTotalTimeoutMultiplier = 0;
if ( !SetCommTimeouts(m_hComm, &touts) )
return XDCP_CANTSETTIMEOUTS;
Это работало.