]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
update
authorhadaq <hadaq>
Fri, 8 Jun 2012 19:17:25 +0000 (19:17 +0000)
committerhadaq <hadaq>
Fri, 8 Jun 2012 19:17:25 +0000 (19:17 +0000)
libtrbnet/trberror.c
libtrbnet/trberror.h
libtrbnet/trbnet.c

index 2b5d46029cb60045984eabfe08353be3666d905e..017b19a2802d158f9701673fdca43569a080be55 100644 (file)
@@ -6,7 +6,7 @@
 #include "trberror.h"
 
 /* Error Handling */
-
+#define NUM_ERRORS 39
 int trb_errno = TRB_NONE;
 
 TRB_TERM trb_term = {0, 0, 0, 0}; 
@@ -90,10 +90,11 @@ const char* trb_errorstr(int trberrno)
     "Pexor Device Error ioctl call, Lost Credential(s)",
     "Pexor Device Error ioctl call, FIFO Transfer Error",
     "Command is not supported by TRB3",
-    "TRB3 Socket Error"
+    "TRB3 Socket Error",
+    "TRB3 Socket Timeout"
   };
   
-  if (trberrno < 38) {
+  if (trberrno < NUM_ERRORS) {
     return errorstring[trberrno];
   }
   if (trberrno >= 256) {
index dde90c36dee005ab638de386508f1c7e710a0231..1acb8662a6ba783d196ee1c0e3410e89fa8e9384 100644 (file)
@@ -45,7 +45,8 @@ typedef enum {
   TRB_PEXOR_DEVICE_LOST_CREDENTIAL = 34,
   TRB_PEXOR_DEVICE_FIFO_TRANSFER = 35,
   TRB_TRB3_CMD_NOT_SUPPORTED = 36,
-  TRB_TRB3_SOCKET_ERROR = 37
+  TRB_TRB3_SOCKET_ERROR = 37,
+  TRB_TRB3_SOCKET_TIMEOUT = 38
 } TRB_ERROR;
 
 /* last TRBNet-TermPackage */
index 752c2eb25a20678c75f4576d91ece2fc153273af..44165cac909889ddbc074b982897ef47f0824c9e 100644 (file)
@@ -1,4 +1,4 @@
-const char trbnet_version[] = "$Revision: 4.22 $  Local";
+const char trbnet_version[] = "$Revision: 4.23 $  Local";
 
 #include <stdlib.h>
 #include <signal.h>
@@ -380,7 +380,9 @@ static int getUDPPackage()
   /* GetData */
   status = recv(trb3_sockfd_in, (void*)dataBuffer, 1500, 0);
   if (status == -1) {
-    trb_errno = TRB_TRB3_SOCKET_ERROR;
+    trb_errno = errno == EAGAIN 
+      ? TRB_TRB3_SOCKET_TIMEOUT 
+      : TRB_TRB3_SOCKET_ERROR;
     return -1;
   }
   dataBufferSize = status / 2;
@@ -407,6 +409,9 @@ static int sendTrbPackage(size_t size)
   /* Adjust endianess ... */
   for (i = 0; i < size; i++) {
     if (trb_debug > 2) {
+      if (i == 0) {
+        fprintf(stderr, "udp sent:\n");
+      }
       fprintf(stderr, "%d  0x%04x\n", i, udpBuffer[i]);
     }
     udpBuffer[i] = htons(udpBuffer[i]);
@@ -1240,8 +1245,10 @@ int trb_fifo_read(uint8_t channel,
       if (getUDPPackage() <= 0) {
         return -1;
       }
-    }      
-    tmp = dataBuffer;
+      tmp = dataBuffer;
+    } else {      
+      tmp++;
+    }
 #endif    
   } /* end while () */
 
@@ -1521,6 +1528,7 @@ int init_ports()
   struct sockaddr_in sender_addr;
   struct sockaddr_in receiver_addr;
   struct hostent* host = NULL;
+  struct timeval tv;
 
   trb_errno = TRB_NONE;
   
@@ -1565,6 +1573,13 @@ int init_ports()
     trb_errno = TRB_TRB3_SOCKET_ERROR;
     return -1;
   }
+
+  /* Set Socket Timepout */
+  tv.tv_sec = 10;  /* 30 Secs Timeout */
+  tv.tv_usec = 0;  // Not init'ing this can cause strange errors
+  setsockopt(trb3_sockfd_in, SOL_SOCKET, SO_RCVTIMEO, 
+             (char *)&tv,sizeof(struct timeval));
+
   receiver_addr.sin_family = AF_INET;
   receiver_addr.sin_port = htons(trb3_port);  
   receiver_addr.sin_addr.s_addr = htonl(INADDR_ANY);