-const char trbnet_version[] = "$Revision: 2.47 $";
+const char trbnet_version[] = "$Revision: 2.48 $";
#include <stdio.h>
#include <stdlib.h>
}
enum FIFO_READ_MODE {
- FIFO_MODE_NONE,
+ FIFO_MODE_TERM_ONLY,
FIFO_MODE_REG_READ,
FIFO_MODE_REG_READ_MEM,
FIFO_MODE_REG_WRITE,
fprintf(stderr, "-------------------------------------------------\n");
}
-
if (trb_lazy == 0) {
/* First package: headerType must be HDR or TRM */
if (packageCtr == 0) {
- if (!((headerType == HEADER_HDR) | (headerType == HEADER_TRM))) {
+ if (!((headerType == HEADER_HDR) || (headerType == HEADER_TRM))) {
fifo_flush(channel);
trb_errno = TRB_FIFO_INVALID_HEADER;
return -1;
/* Get Data F0 - F3 and store it in User-Data-Buffer if requested */
switch (mode) {
- case FIFO_MODE_NONE:
+ case FIFO_MODE_TERM_ONLY:
+ if (packageCtr > 0) {
+ fifo_flush(channel);
+ trb_errno = TRB_INVALID_PKG_NUMBER;
+ return -1;
+ }
+ if (headerType != HEADER_TRM) {
+ fifo_flush(channel);
+ trb_errno = TRB_FIFO_INVALID_HEADER;
+ return -1;
+ }
break;
case FIFO_MODE_REG_READ:
SEM_UNDO /* */
};
- /* Unblock Signals */
- sigprocmask(SIG_SETMASK, &blockSetOld, NULL);
-
/* Release semaphore */
if (semop(semid, &sops, 1) == -1) {
trb_errno = TRB_SEMAPHORE;
return -1;
}
+ /* Unblock Signals */
+ sigprocmask(SIG_SETMASK, &blockSetOld, NULL);
+
return 0;
}
}
/* Check for replay packets (trigger) */
- status = trb_fifo_read(0, FIFO_MODE_NONE, NULL, 0);
+ status = trb_fifo_read(0, FIFO_MODE_TERM_ONLY, NULL, 0);
if (unlockPorts() == -1) return -1;
}
/* Check for replay packets (slowcontrol) */
- status = trb_fifo_read(3, FIFO_MODE_NONE, NULL, 0);
+ status = trb_fifo_read(3, FIFO_MODE_TERM_ONLY, NULL, 0);
if (status == -1) {
fifo_flush(0);
unlockPorts();
}
/* Check for replay packets (trigger) */
- status = trb_fifo_read(0, FIFO_MODE_NONE, NULL, 0);
+ status = trb_fifo_read(0, FIFO_MODE_TERM_ONLY, NULL, 0);
if (unlockPorts() == -1) return -1;