win32-патч от rust3028 для коррекции таймаутов

pull/38/head
forth32 9 years ago
parent bdf0e0ba5b
commit c0802f4eec

@ -101,10 +101,8 @@ replylen=read(siofd,replybuf,1024);
FlushFileBuffers(hSerial); FlushFileBuffers(hSerial);
t = GetTickCount(); t = GetTickCount();
csum(cmdbuf,len);
do { do {
ReadFile(hSerial, replybuf, len, (LPDWORD)&replylen, NULL); ReadFile(hSerial, replybuf, 1024, (LPDWORD)&replylen, NULL);
} while (replylen == 0 && GetTickCount() - t < 1000); } while (replylen == 0 && GetTickCount() - t < 1000);
#endif #endif
if ((replylen == 0) || (replybuf[0] == 0xaa)) return 1; if ((replylen == 0) || (replybuf[0] == 0xaa)) return 1;
@ -125,6 +123,7 @@ struct termios sioparm;
#else #else
char device[20] = "\\\\.\\COM"; char device[20] = "\\\\.\\COM";
DCB dcbSerialParams = {0}; DCB dcbSerialParams = {0};
COMMTIMEOUTS CommTimeouts;
#endif #endif
//char* lptr; //char* lptr;
unsigned int i,res,opt,datasize,pktcount,adr; unsigned int i,res,opt,datasize,pktcount,adr;
@ -207,20 +206,30 @@ tcflush(siofd,TCIOFLUSH); // очистка выходного буфера
return; return;
} }
ZeroMemory(&dcbSerialParams, sizeof(dcbSerialParams));
dcbSerialParams.DCBlength=sizeof(dcbSerialParams); dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams))
{
CloseHandle(hSerial);
printf("\n - Ошибка при инициализайии COM-порта\n", devname);
return;
}
dcbSerialParams.BaudRate = CBR_115200; dcbSerialParams.BaudRate = CBR_115200;
dcbSerialParams.ByteSize = 8; dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT; dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY; dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.fBinary = TRUE;
dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
if (!SetCommState(hSerial, &dcbSerialParams)) if (!SetCommState(hSerial, &dcbSerialParams))
{ {
printf("\n - Ошибка при инициализайии COM-порта\n", devname); printf("\n - Ошибка при инициализации COM-порта\n", devname);
CloseHandle(hSerial);
return;
}
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
if (!SetCommTimeouts(hSerial, &CommTimeouts))
{
printf("\n - Ошибка при инициализации COM-порта\n", devname);
CloseHandle(hSerial); CloseHandle(hSerial);
return; return;
} }

Loading…
Cancel
Save