diff --git a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c index 14dd66871..85ac9b940 100755 --- a/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/gotthardDetectorServer/firmware_funcs.c @@ -755,9 +755,9 @@ int startReceiver(int start) { bus_w(CONFIG_REG,reg&(~CPU_OR_RECEIVER_BIT)); reg=bus_r(addr); -#ifdef VERBOSE +//#ifdef VERBOSE printf("Config Reg %x\n", reg); -#endif +//#endif int d =reg&CPU_OR_RECEIVER_BIT; if(d!=0) d=1; if(d!=start) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 6c0e3efa7..59698838a 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -4610,17 +4610,24 @@ int slsDetector::setUDPConnection(){ //if no udp ip given, use hostname if(!strcmp(thisDetector->receiverUDPIP,"none")){ - //hostname is an ip address - if(strchr(thisDetector->receiver_hostname,'.')!=NULL) - strcpy(thisDetector->receiverUDPIP,thisDetector->receiver_hostname); - //if hostname not ip, convert it to ip - else{ - struct hostent *he = gethostbyname(thisDetector->receiver_hostname); - if (he == NULL){ - std::cout << "no rx_udpip given and could not convert receiver hostname to ip" << endl; - return FAIL; - }else - strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); + if(!strcmp(thisDetector->receiver_hostname,"localhost")){ + string temp = genericSocket::ipToName("localhost"); + strcpy(thisDetector->receiverUDPIP,temp.c_str()); + temp = genericSocket::nameToMac(genericSocket::ipToName(temp)); + strcpy(thisDetector->receiverUDPMAC,temp.c_str()); + }else{ + //hostname is an ip address + if(strchr(thisDetector->receiver_hostname,'.')!=NULL) + strcpy(thisDetector->receiverUDPIP,thisDetector->receiver_hostname); + //if hostname not ip, convert it to ip + else{ + struct hostent *he = gethostbyname(thisDetector->receiver_hostname); + if (he == NULL){ + std::cout << "no rx_udpip given and could not convert receiver hostname to ip" << endl; + return FAIL; + }else + strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); + } } } @@ -4630,29 +4637,37 @@ int slsDetector::setUDPConnection(){ sprintf(args[1],"%d",thisDetector->receiverUDPPort); - //set up receiver for UDP Connection and get receivermac address if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){ #ifdef VERBOSE - std::cout << "Setting up UDP Connection for Receiver " << arg[0] << "\t" << arg[1] << std::endl; + std::cout << "Setting up UDP Connection for Receiver " << args[0] << "\t" << args[1] << std::endl; #endif - ret=thisReceiver->sendUDPDetails(fnum,retval,args); - if(ret!=FAIL){ + //already have mac address if localhost + if(!strcmp(thisDetector->receiver_hostname,"localhost")) + ret=OK; + + //get mac address from receiver + else{ + ret=thisReceiver->sendUDPDetails(fnum,retval,args); + if(ret!=FAIL){ + strcpy(thisDetector->receiverUDPMAC,retval); + } + if(ret==FORCE_UPDATE) + updateReceiver(); + } + #ifdef VERBOSE - std::cout << "Receiver mac address: " << retval << std::endl; + std::cout << "Receiver mac address: " << thisDetector->receiverUDPMAC << std::endl; #endif - strcpy(thisDetector->receiverUDPMAC,retval); - //configure detector with udp details + //configure detector with udp details + if(ret!=FAIL){ if(configureMAC()!=OK){ setReceiverOnline(OFFLINE_FLAG); std::cout << "could not configure mac" << endl; } } - - if(ret==FORCE_UPDATE) - updateReceiver(); }else{ ret=FAIL; std::cout << "cannot connect to receiver" << endl; @@ -4674,17 +4689,25 @@ int slsDetector::configureMAC(int adc){ //if udpip wasnt initialized in config file if(!(strcmp(thisDetector->receiverUDPIP,"none"))){ - //hostname is an ip address - if(strchr(thisDetector->receiver_hostname,'.')!=NULL) - strcpy(thisDetector->receiverUDPIP,thisDetector->receiver_hostname); - //if hostname not ip, convert it to ip - else{ - struct hostent *he = gethostbyname(thisDetector->receiver_hostname); - if (he != NULL) - strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); + //if localhost + if(!strcmp(thisDetector->receiver_hostname,"localhost")){ + string temp = genericSocket::ipToName("localhost"); + strcpy(thisDetector->receiverUDPIP,temp.c_str()); + temp = genericSocket::nameToMac(genericSocket::ipToName(temp)); + strcpy(thisDetector->receiverUDPMAC,temp.c_str()); + }else{ + //hostname is an ip address + if(strchr(thisDetector->receiver_hostname,'.')!=NULL) + strcpy(thisDetector->receiverUDPIP,thisDetector->receiver_hostname); + //if hostname not ip, convert it to ip else{ - std::cout << "no rx_udpip given and invalid receiver hostname" << endl; - return FAIL; + struct hostent *he = gethostbyname(thisDetector->receiver_hostname); + if (he != NULL) + strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); + else{ + std::cout << "no rx_udpip given and invalid receiver hostname" << endl; + return FAIL; + } } } } diff --git a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp index 368b24329..5cecd7ec2 100644 --- a/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp +++ b/slsDetectorSoftware/slsReceiver/slsReceiverFunctionList.cpp @@ -233,10 +233,11 @@ int slsReceiverFunctionList::startListening(){ do { if(!strlen(eth)){ - cout<<"error:eth is empty:"<getErrorStatus()){ break; }