-const char trbnet_version[] = "$Revision: 2.86 $";
+const char trbnet_version[] = "$Revision: 2.87 $";
#include <stdlib.h>
#include <signal.h>
int userBufferOvf = 0;
unsigned int timeout = 0;
+ uint32_t* lastHeader = NULL; /* used by FIFO_MODE_REG_READ_MEM Mode */
+ uint32_t memLen = 0; /* used by FIFO_MODE_REG_READ_MEM
+ and FIFO_MODE_IPU_DATA Mode */
+
/* Determin FIFO-Address */
if (channel >= 4) {
trb_errno = TRB_INVALID_CHANNEL;
/* Read FIFO-Buffer, copy to User-Buffer */
while ((*tmp & MASK_FIFO_VALID) != 0) {
- uint32_t* lastHeader = NULL; /* used by FIFO_MODE_REG_READ_MEM Mode */
- uint32_t memLen = 0; /* used by FIFO_MODE_REG_READ_MEM
- and FIFO_MODE_IPU_DATA Mode */
+
fifoDebugCtr++;
if (((*tmp & MASK_FIFO_TYPE) >> SHIFT_FIFO_TYPE) == FIFO_TYPE_IS_HEADER) {
break;
case FIFO_MODE_REG_READ_MEM:
- {
switch (headerType) {
case HEADER_HDR:
if (dataCtr < dsize) {
case HEADER_TRM:
if (lastHeader != NULL) {
*lastHeader |= (memLen << 16);
- lastHeader = NULL;
}
break;
trb_errno = TRB_FIFO_INVALID_HEADER;
return -1;
}
- }
- break;
+ break;
case FIFO_MODE_REGTIME_READ_MEM:
- {
- switch (headerType) {
- case HEADER_HDR:
- if (dataCtr < dsize) {
- if (lastHeader != NULL) {
- *lastHeader |= (memLen << 16);
- }
- memLen = 0;
- lastHeader = &data[dataCtr];
- data[dataCtr++] = (uint32_t)package.F0;
+ switch (headerType) {
+ case HEADER_HDR:
+ if (dataCtr < dsize) {
+ if (lastHeader != NULL) {
+ *lastHeader |= (memLen << 16);
+ }
+ memLen = 0;
+ lastHeader = &data[dataCtr];
+ data[dataCtr++] = (uint32_t)package.F0;
#ifdef TRB_DEBUGGER
- fprintf(stderr, "D: H: 0x%04x\n", data[dataCtr - 1]);
+ fprintf(stderr, "D: H: 0x%04x\n", data[dataCtr - 1]);
#endif
- } else {
- userBufferOvf = 1;
- }
- break;
-
- case HEADER_DAT:
- if (dataCtr + 1< dsize) {
- if (package.F0 == 0x0000) break; /* it a hack, ask Jan */
- data[dataCtr++] = (((uint32_t)package.F1 << 16) |
- ((uint32_t)package.F2));
- data[dataCtr++] = (uint32_t)package.F3;
+ } else {
+ userBufferOvf = 1;
+ }
+ break;
+
+ case HEADER_DAT:
+ if (dataCtr + 1< dsize) {
+ if (package.F0 == 0x0000) break; /* it a hack, ask Jan */
+ data[dataCtr++] = (((uint32_t)package.F1 << 16) |
+ ((uint32_t)package.F2));
+ data[dataCtr++] = (uint32_t)package.F3;
#ifdef TRB_DEBUGGER
- fprintf(stderr,
- "D: 0x%04x 0x%08x\n", memLen, data[dataCtr - 1]);
+ fprintf(stderr,
+ "D: 0x%04x 0x%08x\n", memLen, data[dataCtr - 1]);
#endif
- memLen++;
- } else {
- userBufferOvf = 1;
- }
- break;
-
- case HEADER_TRM:
- if (lastHeader != NULL) {
- *lastHeader |= (memLen << 16);
- lastHeader = NULL;
- }
- break;
-
- default:
- fifo_flush(channel);
- trb_errno = TRB_FIFO_INVALID_HEADER;
- return -1;
+ memLen++;
+ } else {
+ userBufferOvf = 1;
+ }
+ break;
+
+ case HEADER_TRM:
+ if (lastHeader != NULL) {
+ *lastHeader |= (memLen << 16);
}
+ break;
+
+ default:
+ fifo_flush(channel);
+ trb_errno = TRB_FIFO_INVALID_HEADER;
+ return -1;
}
break;
-
+
case FIFO_MODE_REG_WRITE:
if (headerType == HEADER_TRM) break;
break;
-
+
case FIFO_MODE_IPU_DATA:
{
unsigned int i;
return 0;
}
+