diff --git a/slsDetectorSoftware/commonFiles/communication_funcs.c b/slsDetectorSoftware/commonFiles/communication_funcs.c index 487b2c66e..73e4da200 100755 --- a/slsDetectorSoftware/commonFiles/communication_funcs.c +++ b/slsDetectorSoftware/commonFiles/communication_funcs.c @@ -31,6 +31,9 @@ int myport=-1; //struct sockaddr_in address; //#define VERBOSE +#define BLACKFIN_DRVR_SND_LMT 30000 // rough limit +#define BLACKFIN_RSND_PCKT_LOOP 10 +#define BLACKFIN_RSND_WAIT_US (10 * 1000) int bindSocket(unsigned short int port_number) { int i; @@ -314,13 +317,46 @@ int receiveData(int file_des, void* buf,int length, intType itype){ return ret; } - - int sendDataOnly(int file_des, void* buf,int length) { +int sendDataOnly(int file_des, void* buf,int length) { if (!length) return 0; - int ret = write(file_des, buf, length); //value of -1 is other end socket crash as sigpipe is ignored - if (ret < 0) cprintf(BG_RED, "Error writing to socket. Possible socket crash\n"); - return ret; + + + int bytesSent = 0; + int retry = 0; // retry index when buffer is blocked (write returns 0) + while (bytesSent < length) { + + // setting a max packet size for blackfin driver (and network driver does not do a check if packets sent) + int bytesToSend = length - bytesSent; + if (bytesToSend > BLACKFIN_DRVR_SND_LMT) + bytesToSend = BLACKFIN_DRVR_SND_LMT; + + // send + int rc = write(file_des, (char*)buf + bytesSent, bytesToSend); + // error + if (rc < 0) { + cprintf(BG_RED, "Error writing to socket. Possible socket crash\n"); + return bytesSent; + } + // also error, wrote nothing, buffer blocked up, too fast sending for client + if (rc == 0) { + cprintf(RED, "Error writing to socket. Buffer full. Retry: %d\n", retry); + ++retry; + // wrote nothing for many loops + if (retry >= BLACKFIN_RSND_PCKT_LOOP) { + cprintf(BG_RED, "Error writing to socket. Buffer full! Too fast! No more.\n"); + return bytesSent; + } + usleep(BLACKFIN_RSND_WAIT_US); + } + // wrote something, reset retry + else { + retry = 0; + } + bytesSent += rc; + } + + return bytesSent; } diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt index 25b2dbb68..9580403d0 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 83600fcb15c8261173ab15a8ba8d1009693f2d23 -Revision: 27 -Branch: anna -Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3962 -Last Changed Date: 2018-09-04 11:59:37.000000002 +0200 ./firmware_funcs.c +Repsitory UUID: 40dedb8b07886171334c85a6f0035f02f868ac6d +Revision: 28 +Branch: developer +Last Changed Author: Gemma_Tinti +Last Changed Rev: 4052 +Last Changed Date: 2018-11-21 11:31:54.000000002 +0100 ./server_funcs.c diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h index 19ef72360..b058ce2e2 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "83600fcb15c8261173ab15a8ba8d1009693f2d23" -#define GITAUTH "Anna_Bergamaschi" -#define GITREV 0x3962 -#define GITDATE 0x20180904 -#define GITBRANCH "anna" +#define GITREPUUID "40dedb8b07886171334c85a6f0035f02f868ac6d" +#define GITAUTH "Gemma_Tinti" +#define GITREV 0x4052 +#define GITDATE 0x20181121 +#define GITBRANCH "developer" diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c index 8df2a8c72..e54c3c562 100644 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c @@ -1877,6 +1877,7 @@ int start_acquisition(int file_des) { ret=FAIL; sprintf(mess,"Detector locked by %s\n",lastClientIP); } else { + nframes = 0; ret=startStateMachine(); } if (ret==FAIL) @@ -2057,7 +2058,7 @@ int read_frame(int file_des) { printf("sending pointer %x of size %d\n",(unsigned int)(dataretval),dataBytes); #endif n=sendDataOnly(file_des,dataretval,dataBytes); - printf("Sent %d bytes\n",n); + printf("Frame %d, Sent %d bytes\n", nframes, n); } else { if (getFrames()>-1) { dataret=FAIL; @@ -2122,7 +2123,7 @@ int start_and_read_all(int file_des) { return dataret; } - + nframes = 0; startStateMachine(); /* ret=startStateMachine();