From c36c1a2d444f759bffaa3007cb899e8c09ba8248 Mon Sep 17 00:00:00 2001 From: Ludwig Maier Date: Mon, 5 Aug 2013 23:13:23 +0200 Subject: [PATCH] TRB3 UDP bugfix --- libtrbnet/trberror.c | 5 +++-- libtrbnet/trberror.h | 3 ++- libtrbnet/trbnet.c | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/libtrbnet/trberror.c b/libtrbnet/trberror.c index 0b82483..2e3ff64 100644 --- a/libtrbnet/trberror.c +++ b/libtrbnet/trberror.c @@ -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) { diff --git a/libtrbnet/trberror.h b/libtrbnet/trberror.h index 7ffb998..542581e 100644 --- a/libtrbnet/trberror.h +++ b/libtrbnet/trberror.h @@ -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 */ diff --git a/libtrbnet/trbnet.c b/libtrbnet/trbnet.c index 8cfc2cb..06c5b10 100644 --- a/libtrbnet/trbnet.c +++ b/libtrbnet/trbnet.c @@ -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 -- 2.43.0