diff --git a/ahbuartplugin/ahbuartplugin.cpp b/ahbuartplugin/ahbuartplugin.cpp --- a/ahbuartplugin/ahbuartplugin.cpp +++ b/ahbuartplugin/ahbuartplugin.cpp @@ -111,11 +111,19 @@ bool ahbuartplugin::checkConnection() usleep(1000); #endif timeout.restart(); - while(read!=4) + int avail = 0; + do { - read += rs232read(this->port,test2,4-read); - if(timeout.elapsed()>1000) break; - } + avail = rs232availablebytes(this->port); + if(timeout.elapsed()>1000) + { + if(avail) + rs232read(this->port,test2,avail); + SocExplorerEngine::message(this,"Connection Error",2); + return false; + } + }while(avail<4); + read = rs232read(this->port,test2,avail); if(read>0) { SocExplorerEngine::message(this,"Connection Ok",2); @@ -126,7 +134,6 @@ bool ahbuartplugin::checkConnection() SocExplorerEngine::message(this,"Connection Error",2); return false; } - } void ahbuartplugin::connectPort(QString PortName, int baudrate) @@ -256,10 +263,20 @@ unsigned int ahbuartplugin::Read(unsigne CMD[3] = (char)((address>>8)&0xFF); CMD[4] = (char)((address)&0xFF); SAFEWRITE(CMD,5,timeout,1000,return 0); -#ifdef WIN32 - usleep(1000); -#endif - SAFEREAD(result+((cnt-count)*4),32*4,timeout,1000,return 0); + timeout.restart(); + int avail=0; + do{ + avail=rs232availablebytes(this->port); + if(timeout.elapsed()>1000) + { + rs232close(this->port); + this->port = (rs232port_t)NULL; + this->Connected = false; + emit this->activateSig(false); + return 0; + } + }while(avail<(32*4)); + rs232read(this->port,result+((cnt-count)*4),32*4); count-=32; address+=32*4; if(cnt>128) @@ -281,10 +298,20 @@ unsigned int ahbuartplugin::Read(unsigne CMD[3] = (char)((address>>8)&0xFF); CMD[4] = (char)((address)&0xFF); SAFEWRITE(CMD,5,timeout,1000,return 0); -#ifdef WIN32 - usleep(1000); -#endif - SAFEREAD(result+((cnt-count)*4),(count*4),timeout,1000,return 0); + timeout.restart(); + int avail=0; + do{ + avail=rs232availablebytes(this->port); + if(timeout.elapsed()>1000) + { + rs232close(this->port); + this->port = (rs232port_t)NULL; + this->Connected = false; + emit this->activateSig(false); + return 0; + } + }while(avail<(count*4)); + rs232read(this->port,result+((cnt-count)*4),count*4); } if(cnt>128) { diff --git a/ahbuartplugin/ahbuartplugin.h b/ahbuartplugin/ahbuartplugin.h --- a/ahbuartplugin/ahbuartplugin.h +++ b/ahbuartplugin/ahbuartplugin.h @@ -32,42 +32,29 @@ #include #include "ahbuartpluginui.h" #include +#include #define SAFEWRITE(data,count,timer,timeout,error) \ -while(1)\ + while(1)\ {\ unsigned int __writen__=0; \ (timer).restart(); \ while(__writen__!=(count)) \ - {\ - __writen__ += rs232write(this->port,((data)+__writen__),((count)-__writen__)); \ - if((timer).elapsed()>(timeout)) \ - {\ - this->port = (rs232port_t)NULL; \ - this->Connected = false; \ - emit this->activateSig(false); \ - error; \ - } \ +{\ + __writen__ += rs232write(this->port,((data)+__writen__),((count)-__writen__)); \ + if((timer).elapsed()>(timeout)) \ +{\ + this->port = (rs232port_t)NULL; \ + this->Connected = false; \ + emit this->activateSig(false); \ + error; \ + } \ } \ break;\ -} + } -#define SAFEREAD(data,count,timer,timeout,error) \ -unsigned int __read__=0; \ -(timer).restart(); \ - while(__read__ != (count)) \ -{ \ - __read__+=rs232read(this->port,((data)+__read__),((count)-__read__)); \ - if((timer).elapsed()>(timeout)) \ - { \ - this->Connected = false; \ - emit this->activateSig(false); \ - this->portMutex->unlock(); \ - error; \ - } \ -} \