transmission delay added

This commit is contained in:
Dhanya Maliakal
2016-08-03 17:03:37 +02:00
parent 1db5ef4fd4
commit d28d737fb9
15 changed files with 243 additions and 52 deletions

View File

@@ -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;

View File

@@ -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,

View File

@@ -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();