virtual, adding veto command

This commit is contained in:
maliakal_d 2020-05-27 14:37:52 +02:00
parent 46daa7e2de
commit 4300e95a8e
6 changed files with 80 additions and 10 deletions

View File

@ -89,6 +89,8 @@
#define CONFIG_VETO_ENBL_OFST (0)
#define CONFIG_VETO_ENBL_MSK (0x00000001 << CONFIG_VETO_ENBL_OFST)
#define CONFIG_VETO_CH_10GB_ENBL_OFST (1)
#define CONFIG_VETO_CH_10GB_ENBL_MSK (0x00000001 << CONFIG_VETO_CH_10GB_ENBL_OFST)
/* Control RW register */
#define CONTROL_REG (0x21 * REG_OFFSET + BASE_CONTROL)

View File

@ -1295,23 +1295,21 @@ void setNumberofUDPInterfaces(int val) {
// 2 interfaces (enable veto)
if (val > 1) {
LOG(logINFOBLUE,
("Setting #Interfaces: 2 (enabling veto streaming)\n"));
bus_w(addr, bus_r(addr) | CONFIG_VETO_ENBL_MSK);
LOG(logINFOBLUE, ("Setting #Interfaces: 2 (10gbps veto streaming)\n"));
bus_w(addr, bus_r(addr) | CONFIG_VETO_CH_10GB_ENBL_MSK);
}
// 1 interface (disable veto)
else {
LOG(logINFOBLUE,
("Setting #Interfaces: 1 (disabling veto streaming)\n"));
bus_w(addr, bus_r(addr) & ~CONFIG_VETO_ENBL_MSK);
LOG(logINFOBLUE, ("Setting #Interfaces: 1 (2.5gbps veto streaming)\n"));
bus_w(addr, bus_r(addr) & ~CONFIG_VETO_CH_10GB_ENBL_MSK);
}
LOG(logDEBUG, ("config reg:0x%x\n", bus_r(addr)));
}
int getNumberofUDPInterfaces() {
LOG(logDEBUG, ("config reg:0x%x\n", bus_r(CONFIG_REG)));
// return 2 if veto enabled, else 1
return ((bus_r(CONFIG_REG) & CONFIG_VETO_ENBL_MSK) ? 2 : 1);
// return 2 if 10gbps veto streaming enabled, else 1
return ((bus_r(CONFIG_REG) & CONFIG_VETO_CH_10GB_ENBL_MSK) ? 2 : 1);
}
void setupHeader(int iRxEntry, int vetoInterface, uint32_t destip,
@ -2207,6 +2205,27 @@ enum timingSourceType getTimingSource() {
return TIMING_INTERNAL;
}
void setVeto(int enable) {
if (enable >= 0) {
uint32_t addr = CONFIG_REG;
if (enable) {
LOG(logINFOBLUE, ("Enabling veto streaming\n"));
bus_w(addr, bus_r(addr) | CONFIG_VETO_ENBL_MSK);
} else {
LOG(logINFOBLUE, ("Disabling veto streaming\n"));
bus_w(addr, bus_r(addr) & ~CONFIG_VETO_ENBL_MSK);
}
LOG(logDEBUG, ("config reg:0x%x\n", bus_r(addr)));
}
}
int getVeto() {
LOG(logDEBUG, ("config reg:0x%x\n", bus_r(CONFIG_REG)));
return ((bus_r(CONFIG_REG) & CONFIG_VETO_ENBL_MSK) >>
CONFIG_VETO_ENBL_OFST);
}
/* aquisition */
int startStateMachine() {

View File

@ -518,6 +518,8 @@ void setCurrentSource(int value);
int getCurrentSource();
void setTimingSource(enum timingSourceType value);
enum timingSourceType getTimingSource();
void setVeto(int enable);
int getVeto();
#endif
#if defined(JUNGFRAUD) || defined(EIGERD)

View File

@ -224,4 +224,6 @@ int get_num_gates(int);
int set_gate_delay(int);
int get_gate_delay(int);
int get_exptime_all_gates(int);
int get_gate_delay_all_gates(int);
int get_gate_delay_all_gates(int);
int get_veto(int);
int set_veto(int);

View File

@ -336,6 +336,8 @@ void function_table() {
flist[F_GET_GATE_DELAY] = &get_gate_delay;
flist[F_GET_EXPTIME_ALL_GATES] = &get_exptime_all_gates;
flist[F_GET_GATE_DELAY_ALL_GATES] = &get_gate_delay_all_gates;
flist[F_GET_VETO] = &get_veto;
flist[F_SET_VETO] = &set_veto;
// check
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
@ -7420,3 +7422,43 @@ int get_gate_delay_all_gates(int file_des) {
#endif
return Server_SendResult(file_des, INT64, retvals, sizeof(retvals));
}
int get_veto(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
LOG(logDEBUG1, ("Getting veto\n"));
#ifndef GOTTHARD2D
functionNotImplemented();
#else
// get only
retval = getVeto();
LOG(logDEBUG1, ("veto mode retval: %u\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
int set_veto(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int arg = 0;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
LOG(logINFO, ("Setting veto mode: %u\n", arg));
#ifndef GOTTHARD2D
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
setVeto(arg);
int retval = getVeto();
LOG(logDEBUG1, ("veto mode retval: %u\n", retval));
validate(arg, retval, "set veto mode", DEC);
}
#endif
return Server_SendResult(file_des, INT32, NULL, 0);
}

View File

@ -205,6 +205,8 @@ enum detFuncs {
F_GET_GATE_DELAY,
F_GET_EXPTIME_ALL_GATES,
F_GET_GATE_DELAY_ALL_GATES,
F_GET_VETO,
F_SET_VETO,
NUM_DET_FUNCTIONS,
RECEIVER_ENUM_START = 256, /**< detector function should not exceed this
@ -508,7 +510,8 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
case F_GET_GATE_DELAY: return "F_GET_GATE_DELAY";
case F_GET_EXPTIME_ALL_GATES: return "F_GET_EXPTIME_ALL_GATES";
case F_GET_GATE_DELAY_ALL_GATES: return "F_GET_GATE_DELAY_ALL_GATES";
case F_GET_VETO: return "F_GET_VETO";
case F_SET_VETO: return "F_SET_VETO";
case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS";
case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START";