]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
TRB3 UDP bugfix
authorLudwig Maier <lmaier@brett.e12.ph.tum.de>
Mon, 5 Aug 2013 21:13:23 +0000 (23:13 +0200)
committerLudwig Maier <lmaier@brett.e12.ph.tum.de>
Mon, 5 Aug 2013 21:13:23 +0000 (23:13 +0200)
libtrbnet/trberror.c
libtrbnet/trberror.h
libtrbnet/trbnet.c

index 0b82483d571d1ffe7544eccdb049d0ea86874904..2e3ff64dc53e8d919251ec1f3c96a40d03594eca 100644 (file)
@@ -6,7 +6,7 @@
 #include "trberror.h"
 
 /* Error Handling */
-#define NUM_ERRORS 40
+#define NUM_ERRORS 41
 int trb_errno = TRB_NONE;
 
 TRB_TERM trb_term = {0, 0, 0, 0}; 
@@ -92,7 +92,8 @@ const char* trb_errorstr(int trberrno)
     "Command is not supported by TRB3",
     "TRB3 Socket Error",
     "TRB3 Socket Timeout",
-    "TRB3 incomplete UDP Package, data > 64K"
+    "TRB3 incomplete UDP Package, data > 64K",
+    "TRB3 data buffer empty after UDP receive"
   };
   
   if (trberrno < NUM_ERRORS) {
index 7ffb9985828aa7ff2384f3d81c1dbed78896a51c..542581e62d5ade396ef7d6ab396d0338d11474b3 100644 (file)
@@ -47,7 +47,8 @@ typedef enum {
   TRB_TRB3_CMD_NOT_SUPPORTED = 36,
   TRB_TRB3_SOCKET_ERROR = 37,
   TRB_TRB3_SOCKET_TIMEOUT = 38,
-  TRB_TRB3_INCOMPLETE_UDP = 39
+  TRB_TRB3_INCOMPLETE_UDP = 39,
+  TRB_TRB3_DATA_ERROR = 40
 } TRB_ERROR;
 
 /* last TRBNet-TermPackage */
index 8cfc2cbe4de894509c3b2158cf932d3f37cc2c04..06c5b10437bf945b136b7e76311897c30de45821 100644 (file)
@@ -399,7 +399,9 @@ static int getUDPPackage()
   fd_set fds;      /* used by select call */  
   int status;
   int i;
-  
+
+  dataBufferSize = 0;  
+
   /* GetData */
   if (trb_debug > 2) {
     fprintf(stderr, "Wait UDP Data\n");
@@ -483,7 +485,7 @@ static int sendTrbPackage(size_t size)
     /* GetData */
     status = getUDPPackage();
     if (status > 0) break;  /* Success */
-    if (trb_errno == TRB_TRB3_SOCKET_ERROR) break; /* UDP Error */ 
+    if (trb_errno == TRB_TRB3_SOCKET_ERROR) return -1; /* UDP Error */ 
     
     /* UDP Timeout, resend request */
     timeoutCtr++;
@@ -720,7 +722,7 @@ enum FIFO_READ_MODE {
   FIFO_MODE_SET_ADDRESS
 };
 
-int trb_fifo_read(uint8_t channel,
+static int trb_fifo_read(uint8_t channel,
                          int mode,
                          uint32_t data[],
                          unsigned int dsize)
@@ -774,17 +776,23 @@ int trb_fifo_read(uint8_t channel,
   }
 #else
   if (dataBufferSize == 0) {
+    #ifdef PEXOR
     trb_errno = TRB_PEXOR_DATA_ERROR;
+    #else
+    trb_errno = TRB_TRB3_DATA_ERROR;
+    #endif
     return -1;
   }
-#ifdef PEXOR
+
+  #ifdef PEXOR
   if (read(pexorFileHandle,
            (void*)dataBuffer, dataBufferSize * 4) != dataBufferSize * 4) {
     trb_errno = TRB_PEXOR_DATA_ERROR;
     return -1;
   }
+  #endif
 #endif
-#endif
+
 #ifndef TRB3
   while ((*tmp & MASK_FIFO_VALID) != 0) {
 #else