From c0802f4eec2443b7e38be5c8d40829384ffa69ba Mon Sep 17 00:00:00 2001 From: forth32 Date: Mon, 15 Jun 2015 16:34:27 +0300 Subject: [PATCH] =?UTF-8?q?win32-=D0=BF=D0=B0=D1=82=D1=87=20=D0=BE=D1=82?= =?UTF-8?q?=20rust3028=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- balong-usbdload.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/balong-usbdload.c b/balong-usbdload.c index 488a7c8..1d753b3 100644 --- a/balong-usbdload.c +++ b/balong-usbdload.c @@ -96,15 +96,13 @@ replylen=read(siofd,replybuf,1024); DWORD bytes_written = 0; DWORD t; - csum(cmdbuf,len); + csum(cmdbuf, len); WriteFile(hSerial, cmdbuf, len, &bytes_written, NULL); FlushFileBuffers(hSerial); t = GetTickCount(); - csum(cmdbuf,len); - do { - ReadFile(hSerial, replybuf, len, (LPDWORD)&replylen, NULL); + ReadFile(hSerial, replybuf, 1024, (LPDWORD)&replylen, NULL); } while (replylen == 0 && GetTickCount() - t < 1000); #endif if ((replylen == 0) || (replybuf[0] == 0xaa)) return 1; @@ -125,6 +123,7 @@ struct termios sioparm; #else char device[20] = "\\\\.\\COM"; DCB dcbSerialParams = {0}; + COMMTIMEOUTS CommTimeouts; #endif //char* lptr; unsigned int i,res,opt,datasize,pktcount,adr; @@ -147,7 +146,7 @@ unsigned char devname[50]="/dev/ttyUSB0"; #else char devname[50]=""; #endif - + while ((opt = getopt(argc, argv, "hp:sa:")) != -1) { switch (opt) { case 'h': @@ -207,20 +206,30 @@ tcflush(siofd,TCIOFLUSH); // очистка выходного буфера return; } + ZeroMemory(&dcbSerialParams, 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); - printf("\n - Ошибка при инициализайии COM-порта\n", devname); return; } - dcbSerialParams.BaudRate=CBR_115200; - dcbSerialParams.ByteSize=8; - dcbSerialParams.StopBits=ONESTOPBIT; - dcbSerialParams.Parity=NOPARITY; - if(!SetCommState(hSerial, &dcbSerialParams)) + + CommTimeouts.ReadIntervalTimeout = MAXDWORD; + CommTimeouts.ReadTotalTimeoutConstant = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.WriteTotalTimeoutConstant = 0; + CommTimeouts.WriteTotalTimeoutMultiplier = 0; + if (!SetCommTimeouts(hSerial, &CommTimeouts)) { - printf("\n - Ошибка при инициализайии COM-порта\n", devname); + printf("\n - Ошибка при инициализации COM-порта\n", devname); CloseHandle(hSerial); return; }