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

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

@ -96,15 +96,13 @@ replylen=read(siofd,replybuf,1024);
DWORD bytes_written = 0; DWORD bytes_written = 0;
DWORD t; DWORD t;
csum(cmdbuf,len); csum(cmdbuf, len);
WriteFile(hSerial, cmdbuf, len, &bytes_written, NULL); WriteFile(hSerial, cmdbuf, len, &bytes_written, NULL);
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;
@ -147,7 +146,7 @@ unsigned char devname[50]="/dev/ttyUSB0";
#else #else
char devname[50]=""; char devname[50]="";
#endif #endif
while ((opt = getopt(argc, argv, "hp:sa:")) != -1) { while ((opt = getopt(argc, argv, "hp:sa:")) != -1) {
switch (opt) { switch (opt) {
case 'h': case 'h':
@ -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)) dcbSerialParams.BaudRate = CBR_115200;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.fBinary = TRUE;
dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
dcbSerialParams.fRtsControl = RTS_CONTROL_ENABLE;
if (!SetCommState(hSerial, &dcbSerialParams))
{ {
printf("\n - Ошибка при инициализации COM-порта\n", devname);
CloseHandle(hSerial); CloseHandle(hSerial);
printf("\n - Ошибка при инициализайии COM-порта\n", devname);
return; return;
} }
dcbSerialParams.BaudRate=CBR_115200;
dcbSerialParams.ByteSize=8; CommTimeouts.ReadIntervalTimeout = MAXDWORD;
dcbSerialParams.StopBits=ONESTOPBIT; CommTimeouts.ReadTotalTimeoutConstant = 0;
dcbSerialParams.Parity=NOPARITY; CommTimeouts.ReadTotalTimeoutMultiplier = 0;
if(!SetCommState(hSerial, &dcbSerialParams)) CommTimeouts.WriteTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
if (!SetCommTimeouts(hSerial, &CommTimeouts))
{ {
printf("\n - Ошибка при инициализайии COM-порта\n", devname); printf("\n - Ошибка при инициализации COM-порта\n", devname);
CloseHandle(hSerial); CloseHandle(hSerial);
return; return;
} }

Loading…
Cancel
Save