-const char trbnet_version[] = "$Revision: 2.93 $";
+const char trbnet_version[] = "$Revision: 2.94 $";
#include <stdlib.h>
#include <signal.h>
/* ---------------------------------------------------------------------- */
-/* Used for blocking Signals SIGINT and SIGTERM */
+/* Used for blocking Signals */
static sigset_t blockSet;
static sigset_t blockSetOld;
clrbitsPC(0x30000);
usleep(100);
- // Reset FifoToggleBit
+ /* Reset FifoToggleBit */
fifoToggleBit = 0;
}
return -1;
}
- /* Check receiver FIFO empty*/
+ /* Check receiver FIFO empty */
read32_from_FPGA(CHANNEL_N_RECEIVER_FIFO_STATUS | ((channel * 2 + 1) << 4),
&tmp);
if ((tmp & MASK_FIFO_EMPTY) == 0) {
FIFO_MODE_REGTIME_READ,
FIFO_MODE_REG_READ_MEM,
FIFO_MODE_REGTIME_READ_MEM,
+ FIFO_MODE_REG_WRITE,
FIFO_MODE_IPU_DATA,
FIFO_MODE_UID,
FIFO_MODE_SET_ADDRESS
}
break;
+ case FIFO_MODE_REG_WRITE:
+ switch (headerType) {
+ case HEADER_HDR:
+ case HEADER_DAT:
+ case HEADER_TRM:
+ break;
+
+ default:
+ fifo_flush(channel);
+ trb_errno = TRB_FIFO_INVALID_HEADER;
+ return -1;
+ }
+ break;
+
case FIFO_MODE_IPU_DATA:
{
unsigned int i;
trb_errno = TRB_INVALID_PKG_NUMBER;
return -1;
}
-
+
switch (headerType) {
case HEADER_HDR:
break;
static int unlockPorts(int masterLock)
{
struct sembuf sops = {
- 0, /* sem_num: We only use one track */
+ 0, /* sem_num: We only use one track */
1, /* sem_op: increment semaphore by 1, i.e. unlock it */
- SEM_UNDO /* */
+ SEM_UNDO /* sem_flg: remove lock if process gets killed */
};
if ((master_lock == 1) && (masterLock == 0)) {
fprintf(stderr, "CMD_REGISTER_WRITE started.\n");
}
- status = trb_fifo_read(3, FIFO_MODE_TERM_ONLY, NULL, 0);
+ status = trb_fifo_read(3, FIFO_MODE_REG_WRITE, NULL, 0);
if (unlockPorts(0) == -1) return -1;
fprintf(stderr, "CMD_REGISTER_WRITE_MEM started %d.\n", len);
}
- status = trb_fifo_read(3, FIFO_MODE_TERM_ONLY, NULL, 0);
+ status = trb_fifo_read(3, FIFO_MODE_REG_WRITE, NULL, 0);
}
if (unlockPorts(0) == -1) return -1;
return -1;
}
- /* Now set bits on all endpoints */
+ /* Now set bits on all endpoints */
/* check, whether all registers are the same */
singleWrite = 1;
value = data[1];
return 0;
}
-