changed transmission delay commands to go through network parameters and included 10g flow control

This commit is contained in:
Dhanya Maliakal
2016-08-04 17:21:16 +02:00
parent 1e30a6a16a
commit 29ba1f4042
15 changed files with 81 additions and 53 deletions

View File

@ -59,7 +59,7 @@ using namespace std;
#define COULD_NOT_PULSE_CHIP 0x0000000000100000ULL #define COULD_NOT_PULSE_CHIP 0x0000000000100000ULL
#define COULD_NOT_SET_RATE_CORRECTION 0x0000000000200000ULL #define COULD_NOT_SET_RATE_CORRECTION 0x0000000000200000ULL
#define RATE_CORRECTION_TAU_SUBEXPOSURE 0x0000000000400000ULL #define RATE_CORRECTION_TAU_SUBEXPOSURE 0x0000000000400000ULL
#define TRANSMISSION_DELAY 0x0000000000800000ULL #define DETECTOR_NETWORK_PARAMETER 0x0000000000800000ULL
// 0x00000000FFFFFFFFULL // 0x00000000FFFFFFFFULL
/** @short class returning all error messages for error mask */ /** @short class returning all error messages for error mask */
@ -191,8 +191,8 @@ public:
if(slsErrorMask&RATE_CORRECTION_TAU_SUBEXPOSURE) if(slsErrorMask&RATE_CORRECTION_TAU_SUBEXPOSURE)
retval.append("Rate Correction Deactivated: (tau/subexptime) must be less than 0.0015\n"); retval.append("Rate Correction Deactivated: (tau/subexptime) must be less than 0.0015\n");
if(slsErrorMask&TRANSMISSION_DELAY) if(slsErrorMask&DETECTOR_NETWORK_PARAMETER)
retval.append("Could not set/get transmission delay\n"); retval.append("Could not set/get detector network parameter\n");

View File

@ -177,16 +177,19 @@ typedef struct {
*/ */
enum networkParameter { enum networkParameter {
DETECTOR_MAC, /**< detector MAC */ DETECTOR_MAC, /**< detector MAC */
DETECTOR_IP, /**< detector IP */ DETECTOR_IP, /**< detector IP */
RECEIVER_HOSTNAME, /**< receiver IP/hostname */ RECEIVER_HOSTNAME, /**< receiver IP/hostname */
RECEIVER_UDP_IP, /**< receiever UDP IP */ RECEIVER_UDP_IP, /**< receiever UDP IP */
RECEIVER_UDP_PORT, /**< receiever UDP Port */ RECEIVER_UDP_PORT, /**< receiever UDP Port */
RECEIVER_UDP_MAC, /**< receiever UDP MAC */ RECEIVER_UDP_MAC, /**< receiever UDP MAC */
RECEIVER_UDP_PORT2, /**< receiever UDP Port of second half module for eiger */ RECEIVER_UDP_PORT2, /**< receiever UDP Port of second half module for eiger */
DETECTOR_TXN_DELAY_LEFT, /**< transmission delay on the (left) port for next frame */ DETECTOR_TXN_DELAY_LEFT, /**< transmission delay on the (left) port for next frame */
DETECTOR_TXN_DELAY_RIGHT,/**< transmission delay on the right port for next frame */ DETECTOR_TXN_DELAY_RIGHT, /**< transmission delay on the right port for next frame */
DETECTOR_TXN_DELAY_FRAME /**< transmission delay of a whole frame for all the ports */ DETECTOR_TXN_DELAY_FRAME, /**< transmission delay of a whole frame for all the ports */
FLOW_CONTROL_10G, /**< flow control for 10GbE */
FLOW_CONTROL_WR_PTR, /**< memory write pointer for flow control */
FLOW_CONTROL_RD_PTR /**< memory read pointer for flow control */
}; };
/** /**

View File

@ -103,7 +103,8 @@ enum {
F_SET_RATE_CORRECT, /** < set/reset rate correction tau */ F_SET_RATE_CORRECT, /** < set/reset rate correction tau */
F_GET_RATE_CORRECT, /** < get rate correction tau */ F_GET_RATE_CORRECT, /** < get rate correction tau */
F_ACTIVATE /** < activate/deactivate readout */ F_ACTIVATE, /** < activate/deactivate readout */
F_SET_NETWORK_PARAMETER /**< set network parameters such as transmission delay, flow control */
/* Always append functions hereafter!!! */ /* Always append functions hereafter!!! */

View File

@ -268,9 +268,9 @@ int Beb_Activate(int enable){
} }
int Beb_SetTransmissionDelay(enum transmissionDelayIndex mode, int delay){ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){
//mapping new memory //mapping new memory
u_int32_t baseaddr, value = 0; u_int32_t baseaddr, valueread = 0;
u_int32_t offset = TXM_DELAY_LEFT_OFFSET; u_int32_t offset = TXM_DELAY_LEFT_OFFSET;
char modename[100] = ""; char modename[100] = "";
@ -281,35 +281,41 @@ int Beb_SetTransmissionDelay(enum transmissionDelayIndex mode, int delay){
break; break;
case TXN_RIGHT: case TXN_RIGHT:
offset = TXM_DELAY_RIGHT_OFFSET; offset = TXM_DELAY_RIGHT_OFFSET;
strcpy(modename,"Transmission Delay Right"); strcpy(modename,"Transmission Delay Right");
break; break;
case TXN_FRAME: case TXN_FRAME:
offset = TXM_DELAY_FRAME_OFFSET; offset = TXM_DELAY_FRAME_OFFSET;
strcpy(modename,"Transmission Delay Frame"); strcpy(modename,"Transmission Delay Frame");
break; break;
default: cprintf(BG_RED,"Unrecognized mode in transmission delay: %d\n",mode); return -1; case FLOWCTRL_10G:
offset = TXM_FLOW_CONTROL_10G;
strcpy(modename,"Flow Control for 10G");
if(val>0) val = 1;
break;
default: cprintf(BG_RED,"Unrecognized mode in network parameter: %d\n",mode); return -1;
} }
//open file pointer //open file pointer
int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr);
if(fd < 0){ if(fd < 0){
cprintf(BG_RED,"Deactivate FAIL\n"); cprintf(BG_RED,"Could not read register to set network parameter. FAIL\n");
return -1; return -1;
} }
else{ else{
if(delay > -1){ if(val > -1){
value = Beb_Read32(baseaddr, offset); valueread = Beb_Read32(baseaddr, offset);
cprintf(BLUE, "%s value before:%d\n",modename,value); //cprintf(BLUE, "%s value before:%d\n",modename,valueread);
Beb_Write32(baseaddr, offset,delay); Beb_Write32(baseaddr, offset,val);
cprintf(BLUE,"%s value:%d\n", modename,valueread);
} }
value = Beb_Read32(baseaddr, offset); valueread = Beb_Read32(baseaddr, offset);
cprintf(BLUE,"%s value:%d\n", modename,value); //cprintf(BLUE,"%s value:%d\n", modename,valueread);
} }
//close file pointer //close file pointer
if(fd > 0) if(fd > 0)
Beb_close(fd); Beb_close(fd);
return value; return valueread;
} }

View File

@ -50,7 +50,7 @@ struct BebInfo{
int Beb_SetMasterViaSoftware(); int Beb_SetMasterViaSoftware();
int Beb_SetSlaveViaSoftware(); int Beb_SetSlaveViaSoftware();
int Beb_Activate(int enable); int Beb_Activate(int enable);
int Beb_SetTransmissionDelay(enum transmissionDelayIndex mode, int delay); int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val);
int Beb_ResetToHardwareSettings(); int Beb_ResetToHardwareSettings();
u_int32_t Beb_GetFirmwareRevision(); u_int32_t Beb_GetFirmwareRevision();
u_int32_t Beb_GetFirmwareSoftwareAPIVersion(); u_int32_t Beb_GetFirmwareSoftwareAPIVersion();

View File

@ -125,6 +125,7 @@
#define TXM_DELAY_LEFT_OFFSET 0x180 #define TXM_DELAY_LEFT_OFFSET 0x180
#define TXM_DELAY_RIGHT_OFFSET 0x1A0 #define TXM_DELAY_RIGHT_OFFSET 0x1A0
#define TXM_DELAY_FRAME_OFFSET 0x1C0 #define TXM_DELAY_FRAME_OFFSET 0x1C0
#define TXM_FLOW_CONTROL_10G 0x140
//command memory //command memory
#define LEFT_OFFSET 0x0 #define LEFT_OFFSET 0x0

View File

@ -1313,8 +1313,8 @@ int activate(int enable){
} }
int setTransmissionDelay(enum transmissionDelayIndex mode, int delay){ int setNetworkParameter(enum detNetworkParameter mode, int value){
return Beb_SetTransmissionDelay(mode, delay); return Beb_SetNetworkParameter(mode, value);
} }
#endif #endif

View File

@ -42,7 +42,7 @@ enum detDacIndex{SVP,VTR,VRF,VRS,SVN,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,RXB_RB,R
enum detAdcIndex{TEMP_FPGAEXT, TEMP_10GE, TEMP_DCDC, TEMP_SODL, TEMP_SODR, TEMP_FPGA}; enum detAdcIndex{TEMP_FPGAEXT, TEMP_10GE, TEMP_DCDC, TEMP_SODL, TEMP_SODR, TEMP_FPGA};
enum transmissionDelayIndex{TXN_LEFT, TXN_RIGHT, TXN_FRAME}; enum detNetworkParameter{TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G};
#endif /* SLSDETECTORSERVER_DEFS_H_ */ #endif /* SLSDETECTORSERVER_DEFS_H_ */

View File

@ -5369,8 +5369,9 @@ char* slsDetector::setNetworkParameter(networkParameter index, string value) {
case DETECTOR_TXN_DELAY_LEFT: case DETECTOR_TXN_DELAY_LEFT:
case DETECTOR_TXN_DELAY_RIGHT: case DETECTOR_TXN_DELAY_RIGHT:
case DETECTOR_TXN_DELAY_FRAME: case DETECTOR_TXN_DELAY_FRAME:
case FLOW_CONTROL_10G:
sscanf(value.c_str(),"%d",&i); sscanf(value.c_str(),"%d",&i);
return setTransmissionDelay(index, i); return setDetectorNetworkParameter(index, i);
default: default:
return (char*)("unknown network parameter"); return (char*)("unknown network parameter");
} }
@ -5406,7 +5407,8 @@ char* slsDetector::getNetworkParameter(networkParameter index) {
case DETECTOR_TXN_DELAY_LEFT: case DETECTOR_TXN_DELAY_LEFT:
case DETECTOR_TXN_DELAY_RIGHT: case DETECTOR_TXN_DELAY_RIGHT:
case DETECTOR_TXN_DELAY_FRAME: case DETECTOR_TXN_DELAY_FRAME:
return setTransmissionDelay(index, -1); case FLOW_CONTROL_10G:
return setDetectorNetworkParameter(index, -1);
default: default:
return (char*)("unknown network parameter"); return (char*)("unknown network parameter");
} }
@ -5593,8 +5595,8 @@ int slsDetector::setReceiverUDPPort2(int udpport){
} }
char* slsDetector::setTransmissionDelay(networkParameter index, int delay){ char* slsDetector::setDetectorNetworkParameter(networkParameter index, int delay){
int fnum = F_SET_TRANSMISSION_DELAY; int fnum = F_SET_NETWORK_PARAMETER;
char* cretval = new char[MAX_STR_LENGTH]; char* cretval = new char[MAX_STR_LENGTH];
int ret = FAIL; int ret = FAIL;
int retval = -1; int retval = -1;
@ -5612,7 +5614,7 @@ char* slsDetector::setTransmissionDelay(networkParameter index, int delay){
if (ret==FAIL) { if (ret==FAIL) {
controlSocket->ReceiveDataOnly(mess,sizeof(mess)); controlSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned error: " << mess << std::endl; std::cout<< "Detector returned error: " << mess << std::endl;
setErrorMask((getErrorMask())|(TRANSMISSION_DELAY)); setErrorMask((getErrorMask())|(DETECTOR_NETWORK_PARAMETER));
} else } else
controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); controlSocket->ReceiveDataOnly(&retval,sizeof(retval));
disconnectControl(); disconnectControl();

View File

@ -1674,7 +1674,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** sets the receiver udp port2 for Eiger \sa sharedSlsDetector */ /** sets the receiver udp port2 for Eiger \sa sharedSlsDetector */
int setReceiverUDPPort2(int udpport); int setReceiverUDPPort2(int udpport);
/** sets the transmission delay for left or right port or for an entire frame*/ /** sets the transmission delay for left or right port or for an entire frame*/
char* setTransmissionDelay(networkParameter index, int delay); char* setDetectorNetworkParameter(networkParameter index, int delay);
/** Sets the read receiver frequency /** Sets the read receiver frequency
if Receiver read upon gui request, readRxrFrequency=0, if Receiver read upon gui request, readRxrFrequency=0,

View File

@ -375,6 +375,10 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
i++; i++;
descrToFuncMap[i].m_pFuncName="flowcontrol_10g"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
i++;
descrToFuncMap[i].m_pFuncName="configuremac"; // descrToFuncMap[i].m_pFuncName="configuremac"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdConfigureMac; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdConfigureMac;
i++; i++;
@ -2709,7 +2713,13 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio
if (!(sscanf(args[1],"%d",&i))) if (!(sscanf(args[1],"%d",&i)))
return ("cannot parse argument") + string(args[1]); return ("cannot parse argument") + string(args[1]);
} }
} else return ("unknown network parameter")+cmd; } else if (cmd=="flowcontrol_10g") {
t=FLOW_CONTROL_10G;
if (action==PUT_ACTION){
if (!(sscanf(args[1],"%d",&i)))
return ("cannot parse argument") + string(args[1]);
}
}else return ("unknown network parameter")+cmd;
if (action==PUT_ACTION) if (action==PUT_ACTION)
myDet->setNetworkParameter(t, args[1]); myDet->setNetworkParameter(t, args[1]);
@ -2734,6 +2744,7 @@ string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int acti
os << "txndelay_left port \n sets detector transmission delay of the left port"<< std::endl; os << "txndelay_left port \n sets detector transmission delay of the left port"<< std::endl;
os << "txndelay_right port \n sets detector transmission delay of the right port"<< std::endl; os << "txndelay_right port \n sets detector transmission delay of the right port"<< std::endl;
os << "txndelay_frame port \n sets detector transmission delay of the entire frame"<< std::endl; os << "txndelay_frame port \n sets detector transmission delay of the entire frame"<< std::endl;
os << "flowcontrol_10g port \n sets flow control for 10g for eiger"<< std::endl;
} }
if (action==GET_ACTION || action==HELP_ACTION) { if (action==GET_ACTION || action==HELP_ACTION) {
os << "detectormac \n gets detector mac "<< std::endl; os << "detectormac \n gets detector mac "<< std::endl;
@ -2745,6 +2756,7 @@ string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int acti
os << "txndelay_left \n gets detector transmission delay of the left port"<< std::endl; os << "txndelay_left \n gets detector transmission delay of the left port"<< std::endl;
os << "txndelay_right \n gets detector transmission delay of the right port"<< std::endl; os << "txndelay_right \n gets detector transmission delay of the right port"<< std::endl;
os << "txndelay_frame \n gets detector transmission delay of the entire frame"<< std::endl; os << "txndelay_frame \n gets detector transmission delay of the entire frame"<< std::endl;
os << "flowcontrol_10g \n sets flow control for 10g for eiger"<< std::endl;
} }
return os.str(); return os.str();

View File

@ -154,7 +154,7 @@ void setAllTrimbits(int val);
int getAllTrimbits(); int getAllTrimbits();
int getBebFPGATemp(); int getBebFPGATemp();
int activate(int enable); int activate(int enable);
int setTransmissionDelay(enum transmissionDelayIndex mode, int delay); int setNetworkParameter(enum detNetworkParameter mode, int value);
#endif #endif

View File

@ -205,7 +205,7 @@ int function_table() {
flist[F_SET_RATE_CORRECT]=&set_rate_correct; flist[F_SET_RATE_CORRECT]=&set_rate_correct;
flist[F_GET_RATE_CORRECT]=&get_rate_correct; flist[F_GET_RATE_CORRECT]=&get_rate_correct;
flist[F_ACTIVATE]=&set_activate; flist[F_ACTIVATE]=&set_activate;
flist[F_SET_TRANSMISSION_DELAY]=&set_transmission_delay; flist[F_SET_NETWORK_PARAMETER]=&set_network_parameter;
#ifdef VERBOSE #ifdef VERBOSE
@ -4092,31 +4092,31 @@ int set_activate(int file_des) {
int set_transmission_delay(int file_des) { int set_network_parameter(int file_des) {
enum transmissionDelayIndex index; enum detNetworkParameter index;
enum networkParameter mode; enum networkParameter mode;
int delay = -1; int value = -1;
int ret=OK,ret1=OK; int ret=OK,ret1=OK;
int retval = -1,n; int retval = -1,n;
sprintf(mess,"can't set transmission delay\n"); sprintf(mess,"can't set network parameter\n");
n = receiveData(file_des,&mode,sizeof(mode),INT32); n = receiveData(file_des,&mode,sizeof(mode),INT32);
if (n < 0) { if (n < 0) {
sprintf(mess,"Error reading from socket\n"); sprintf(mess,"Error reading from socket\n");
ret=FAIL; ret=FAIL;
} }
n = receiveData(file_des,&delay,sizeof(delay),INT32); n = receiveData(file_des,&value,sizeof(value),INT32);
if (n < 0) { if (n < 0) {
sprintf(mess,"Error reading from socket\n"); sprintf(mess,"Error reading from socket\n");
ret=FAIL; ret=FAIL;
} }
#ifdef VERBOSE #ifdef VERBOSE
printf("setting transmission delay mode %d to %d\n",(int)mode,delay); printf("setting network parameter mode %d to %d\n",(int)mode,value);
#endif #endif
if (ret==OK) { if (ret==OK) {
if (differentClients==1 && lockStatus==1 && delay>=0) { if (differentClients==1 && lockStatus==1 && value>=0) {
ret=FAIL; ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP); sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else { } else {
@ -4132,21 +4132,24 @@ int set_transmission_delay(int file_des) {
case DETECTOR_TXN_DELAY_FRAME: case DETECTOR_TXN_DELAY_FRAME:
index = TXN_FRAME; index = TXN_FRAME;
break; break;
case FLOW_CONTROL_10G:
index = FLOWCTRL_10G;
break;
#endif #endif
default: default:
sprintf(mess,"unknown transmission mode %d for this detector\n",mode); sprintf(mess,"unknown network parameter %d for this detector\n",mode);
ret=FAIL; ret=FAIL;
break; break;
} }
if (ret==OK) if (ret==OK)
retval=setTransmissionDelay(index, delay); retval=setNetworkParameter(index, value);
#endif #endif
} }
if (ret==OK){ if (ret==OK){
if ((retval!=delay) && (delay>=0)) { if ((retval!=value) && (value>=0)) {
ret=FAIL; ret=FAIL;
sprintf(mess,"could not change transmission mode %d: should be %d but is %d \n",index, delay, retval); sprintf(mess,"could not change network parameter mode %d: should be %d but is %d \n",index, value, retval);
printf(RED, mess); cprintf(RED, "%s",mess);
}else if (differentClients) }else if (differentClients)
ret=FORCE_UPDATE; ret=FORCE_UPDATE;
} }

View File

@ -90,6 +90,6 @@ int pulse_chip(int);
int set_rate_correct(int); int set_rate_correct(int);
int get_rate_correct(int); int get_rate_correct(int);
int set_activate(int); int set_activate(int);
int set_transmission_delay(int); int set_network_parameter(int);
#endif #endif