mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-16 19:15:54 +01:00
transmission delay added
This commit is contained in:
@@ -5366,8 +5366,13 @@ char* slsDetector::setNetworkParameter(networkParameter index, string value) {
|
||||
if(thisDetector->myDetectorType == EIGER)
|
||||
return getReceiverUDPPort2();
|
||||
return getReceiverUDPPort();
|
||||
case DETECTOR_TXN_DELAY_LEFT:
|
||||
case DETECTOR_TXN_DELAY_RIGHT:
|
||||
case DETECTOR_TXN_DELAY_FRAME:
|
||||
sscanf(value.c_str(),"%d",&i);
|
||||
return setTransmissionDelay(index, i);
|
||||
default:
|
||||
return ("unknown network parameter");
|
||||
return (char*)("unknown network parameter");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5398,15 +5403,16 @@ char* slsDetector::getNetworkParameter(networkParameter index) {
|
||||
case RECEIVER_UDP_PORT2:
|
||||
return getReceiverUDPPort2();
|
||||
break;
|
||||
case DETECTOR_TXN_DELAY_LEFT:
|
||||
case DETECTOR_TXN_DELAY_RIGHT:
|
||||
case DETECTOR_TXN_DELAY_FRAME:
|
||||
return setTransmissionDelay(index, -1);
|
||||
default:
|
||||
return ("unknown network parameter");
|
||||
return (char*)("unknown network parameter");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
char* slsDetector::setDetectorMAC(string detectorMAC){
|
||||
if(detectorMAC.length()==17){
|
||||
if((detectorMAC[2]==':')&&(detectorMAC[5]==':')&&(detectorMAC[8]==':')&&
|
||||
@@ -5587,6 +5593,43 @@ int slsDetector::setReceiverUDPPort2(int udpport){
|
||||
}
|
||||
|
||||
|
||||
char* slsDetector::setTransmissionDelay(networkParameter index, int delay){
|
||||
int fnum = F_SET_TRANSMISSION_DELAY;
|
||||
char* cretval = new char[MAX_STR_LENGTH];
|
||||
int ret = FAIL;
|
||||
int retval = -1;
|
||||
char mess[MAX_STR_LENGTH]="";
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Setting Transmission delay of mode "<< index << " to " << delay << std::endl;
|
||||
#endif
|
||||
if (thisDetector->onlineFlag==ONLINE_FLAG) {
|
||||
if (connectControl() == OK){
|
||||
controlSocket->SendDataOnly(&fnum,sizeof(fnum));
|
||||
controlSocket->SendDataOnly(&index,sizeof(index));
|
||||
controlSocket->SendDataOnly(&delay,sizeof(delay));
|
||||
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
||||
if (ret==FAIL) {
|
||||
controlSocket->ReceiveDataOnly(mess,sizeof(mess));
|
||||
std::cout<< "Detector returned error: " << mess << std::endl;
|
||||
setErrorMask((getErrorMask())|(TRANSMISSION_DELAY));
|
||||
} else
|
||||
controlSocket->ReceiveDataOnly(&retval,sizeof(retval));
|
||||
disconnectControl();
|
||||
if (ret==FORCE_UPDATE)
|
||||
updateDetector();
|
||||
}
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Speed set to "<< retval << std::endl;
|
||||
#endif
|
||||
|
||||
|
||||
sprintf(cretval,"%d",retval);
|
||||
return cretval;
|
||||
}
|
||||
|
||||
|
||||
int slsDetector::setUDPConnection(){
|
||||
|
||||
int ret = FAIL;
|
||||
|
||||
@@ -1673,6 +1673,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
|
||||
int setReceiverUDPPort(int udpport);
|
||||
/** sets the receiver udp port2 for Eiger \sa sharedSlsDetector */
|
||||
int setReceiverUDPPort2(int udpport);
|
||||
/** sets the transmission delay for left or right port or for an entire frame*/
|
||||
char* setTransmissionDelay(networkParameter index, int delay);
|
||||
|
||||
/** Sets the read receiver frequency
|
||||
if Receiver read upon gui request, readRxrFrequency=0,
|
||||
|
||||
@@ -363,6 +363,18 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
|
||||
i++;
|
||||
|
||||
descrToFuncMap[i].m_pFuncName="txndelay_left"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
|
||||
i++;
|
||||
|
||||
descrToFuncMap[i].m_pFuncName="txndelay_right"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
|
||||
i++;
|
||||
|
||||
descrToFuncMap[i].m_pFuncName="txndelay_frame"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdNetworkParameter;
|
||||
i++;
|
||||
|
||||
descrToFuncMap[i].m_pFuncName="configuremac"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdConfigureMac;
|
||||
i++;
|
||||
@@ -2650,41 +2662,59 @@ string slsDetectorCommand::helpScans(int narg, char *args[], int action) {
|
||||
|
||||
string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int action) {
|
||||
|
||||
networkParameter t;
|
||||
int i;
|
||||
if (action==HELP_ACTION)
|
||||
return helpNetworkParameter(narg,args,action);
|
||||
networkParameter t;
|
||||
int i;
|
||||
if (action==HELP_ACTION)
|
||||
return helpNetworkParameter(narg,args,action);
|
||||
|
||||
myDet->setOnline(ONLINE_FLAG);
|
||||
myDet->setOnline(ONLINE_FLAG);
|
||||
|
||||
if (cmd=="detectormac") {
|
||||
t=DETECTOR_MAC;
|
||||
} else if (cmd=="detectorip") {
|
||||
t=DETECTOR_IP;
|
||||
} else if (cmd=="rx_hostname") {
|
||||
t=RECEIVER_HOSTNAME;
|
||||
} else if (cmd=="rx_udpip") {
|
||||
t=RECEIVER_UDP_IP;
|
||||
} else if (cmd=="rx_udpmac") {
|
||||
t=RECEIVER_UDP_MAC;
|
||||
} else if (cmd=="rx_udpport") {
|
||||
t=RECEIVER_UDP_PORT;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else if (cmd=="rx_udpport2") {
|
||||
t=RECEIVER_UDP_PORT2;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else return ("unknown network parameter")+cmd;
|
||||
if (cmd=="detectormac") {
|
||||
t=DETECTOR_MAC;
|
||||
} else if (cmd=="detectorip") {
|
||||
t=DETECTOR_IP;
|
||||
} else if (cmd=="rx_hostname") {
|
||||
t=RECEIVER_HOSTNAME;
|
||||
} else if (cmd=="rx_udpip") {
|
||||
t=RECEIVER_UDP_IP;
|
||||
} else if (cmd=="rx_udpmac") {
|
||||
t=RECEIVER_UDP_MAC;
|
||||
} else if (cmd=="rx_udpport") {
|
||||
t=RECEIVER_UDP_PORT;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else if (cmd=="rx_udpport2") {
|
||||
t=RECEIVER_UDP_PORT2;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else if (cmd=="txndelay_left") {
|
||||
t=DETECTOR_TXN_DELAY_LEFT;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else if (cmd=="txndelay_right") {
|
||||
t=DETECTOR_TXN_DELAY_RIGHT;
|
||||
if (action==PUT_ACTION){
|
||||
if (!(sscanf(args[1],"%d",&i)))
|
||||
return ("cannot parse argument") + string(args[1]);
|
||||
}
|
||||
} else if (cmd=="txndelay_frame") {
|
||||
t=DETECTOR_TXN_DELAY_FRAME;
|
||||
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)
|
||||
myDet->setNetworkParameter(t, args[1]);
|
||||
if (action==PUT_ACTION)
|
||||
myDet->setNetworkParameter(t, args[1]);
|
||||
|
||||
return myDet->getNetworkParameter(t);
|
||||
return myDet->getNetworkParameter(t);
|
||||
|
||||
}
|
||||
|
||||
@@ -2701,6 +2731,9 @@ string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int acti
|
||||
os << "rx_udpmac mac \n sets receiver udp mac to mac"<< std::endl;
|
||||
os << "rx_udpport port \n sets receiver udp port to port"<< std::endl;
|
||||
os << "rx_udpport2 port \n sets receiver udp port to port. For Eiger, it is the second half module and for other detectors, same as rx_udpport"<< 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_frame port \n sets detector transmission delay of the entire frame"<< std::endl;
|
||||
}
|
||||
if (action==GET_ACTION || action==HELP_ACTION) {
|
||||
os << "detectormac \n gets detector mac "<< std::endl;
|
||||
@@ -2709,7 +2742,9 @@ string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int acti
|
||||
os << "rx_udpmac \n gets receiver udp mac "<< std::endl;
|
||||
os << "rx_udpport \n gets receiver udp port "<< std::endl;
|
||||
os << "rx_udpport2 \n gets receiver udp port. For Eiger, it is the second half module and for other detectors, same as rx_udpport"<< 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_frame \n gets detector transmission delay of the entire frame"<< std::endl;
|
||||
}
|
||||
return os.str();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user