From d827ccc1156ef246b2d10ed0814de34ab0c51032 Mon Sep 17 00:00:00 2001 From: Leonardo Sala Date: Tue, 8 Aug 2017 06:55:52 +0200 Subject: [PATCH] backported changes implemented in 2.3.2.rest --- slsReceiverSoftware/gitInfo.txt | 14 +- slsReceiverSoftware/include/gitInfoReceiver.h | 10 +- .../src/UDPRESTImplementation.cpp | 170 ++++++++++++------ 3 files changed, 128 insertions(+), 66 deletions(-) diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index 24b606ddf..2dba67fed 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware -URL: origin git@git.psi.ch:sls_detectors_software/sls_receiver_software.git -Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_receiver_software.git -Repsitory UUID: 6aedda5c374e0d0e9347b491fc451f3d4d4398b1 -Revision: 617 -Branch: 3.0-rc +URL: origin https://git.psi.ch/sls_detectors_software/sls_receiver_software.git +Repository Root: origin https://git.psi.ch/sls_detectors_software/sls_receiver_software.git +Repsitory UUID: ea88893da4c4272c5ee12c6b17f839cb33472ffa +Revision: 619 +Branch: (detached Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 622 -Last Changed Date: 2017-08-04 14:28:08.000000002 +0200 ./CMakeLists.txt +Last Changed Rev: 624 +Last Changed Date: 2017-08-08 06:30:01.884909364 +0200 ./src/UDPRESTImplementation.cpp diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index be003015c..212bb2d27 100644 --- a/slsReceiverSoftware/include/gitInfoReceiver.h +++ b/slsReceiverSoftware/include/gitInfoReceiver.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@git.psi.ch:sls_detectors_software/sls_receiver_software.git" +#define SVNURL "https://git.psi.ch/sls_detectors_software/sls_receiver_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "6aedda5c374e0d0e9347b491fc451f3d4d4398b1" -//#define SVNREV 0x622 +#define SVNREPUUID "ea88893da4c4272c5ee12c6b17f839cb33472ffa" +//#define SVNREV 0x624 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x622 -#define SVNDATE 0x20170804 +#define SVNREV 0x624 +#define SVNDATE 0x20170808 // diff --git a/slsReceiverSoftware/src/UDPRESTImplementation.cpp b/slsReceiverSoftware/src/UDPRESTImplementation.cpp index 683afee9f..32ef9a6ae 100644 --- a/slsReceiverSoftware/src/UDPRESTImplementation.cpp +++ b/slsReceiverSoftware/src/UDPRESTImplementation.cpp @@ -24,7 +24,7 @@ using namespace std; UDPRESTImplementation::UDPRESTImplementation(){ - FILE_LOG(logDEBUG) << "PID: " << getpid() << __AT__ << " called"; + FILE_LOG(logINFO) << "PID: " + __AT__ + " called"; //TODO I do not really know what to do with bottom... // Default values @@ -43,20 +43,29 @@ UDPRESTImplementation::~UDPRESTImplementation(){ void UDPRESTImplementation::configure(map config_map){ // am I ever getting there? - FILE_LOG(logWARNING) << __AT__ << " called"; + FILE_LOG(logINFO) << __AT__ << " called"; map::const_iterator pos; + pos = config_map.find("rest_hostname"); if (pos != config_map.end() ){ - string host_port_str = pos->second; + rest_hostname = config_map["rest_hostname"]; + /* + string host_port_str = pos->second; std::size_t pos = host_port_str.find(":"); // position of "live" in str if(pos != string::npos){ istringstream (host_port_str.substr (pos)) >> rest_port; rest_hostname = host_port_str.substr(0, pos); - } + std::cout << "YEEEEEEEEEEEEEEEE" << rest_hostname << " " << rest_port << std::endl; + + } */ + std::cout << "YEEEEEEEEEEEEEEEE" << rest_hostname << std::endl; + } + //initialize_REST(); + /* for(map::const_iterator i=config_map.begin(); i != config_map.end(); i++){ std::cout << i->first << " " << i->second<< std::endl; @@ -71,11 +80,13 @@ string UDPRESTImplementation::get_rest_state(RestHelper * rest/*, string *rest_s JsonBox::Value answer; string rest_state = ""; - int code = rest->get_json("v1/state", &answer); + int code = rest->get_json("api/v1/state", &answer); if ( code != -1 ){ - rest_state = answer["global_state"].getString(); + //rest_state = answer["global_state"].getString(); + rest_state = answer["state"]["status"].getString(); } //rest_state = *prs; + std::cout << "REST STATE " << rest_state << std::endl; return rest_state; } @@ -83,8 +94,8 @@ string UDPRESTImplementation::get_rest_state(RestHelper * rest/*, string *rest_s void UDPRESTImplementation::initialize_REST(){ - FILE_LOG(logDEBUG) << __AT__ << " called"; - FILE_LOG(logDEBUG) << __AT__ << " REST status is initialized: " << isInitialized; + FILE_LOG(logDEBUG1) << __AT__ << " called"; + FILE_LOG(logINFO) << __AT__ << " REST status is initialized: " + std::string(isInitialized ? "True" : "False"); string rest_state = ""; @@ -96,19 +107,22 @@ void UDPRESTImplementation::initialize_REST(){ * it i set by the client before calling initialize() */ string filename = getFileName(); + int code; + + if (filename.substr(filename.length() - 2) == "d0"){ is_main_receiver = true; } if (rest_hostname.empty()) { - FILE_LOG(logDEBUG) << __AT__ <<"can't initialize with empty string or NULL for detectorHostname"; + FILE_LOG(logWARNING) << __AT__ << "can't initialize with empty string or NULL for detectorHostname"; throw; } rest = new RestHelper() ; - rest->init(rest_hostname, rest_port); + std::cout << rest_hostname << " - " << rest_port << std::endl; + rest->init(rest_hostname); rest->set_connection_params(1, 3); - int code; if (!is_main_receiver){ isInitialized = true; @@ -117,29 +131,32 @@ void UDPRESTImplementation::initialize_REST(){ } if (isInitialized == true) { - FILE_LOG(logDEBUG) << __AT__ << "already initialized, can't initialize several times"; + FILE_LOG(logWARNING) << "already initialized, can't initialize several times"; } else { - FILE_LOG(logDEBUG) << __AT__ << "with receiverHostName=" << rest_hostname << ":" << rest_port; + FILE_LOG(logINFO) << "with receiverHostName=" << rest_hostname; try{ rest_state = get_rest_state(rest); if (rest_state == ""){ - FILE_LOG(logERROR) << __AT__ << " REST state returned: " << rest_state; + FILE_LOG(logERROR) << " REST state returned: " << rest_state; throw; } else{ isInitialized = true; status = slsReceiverDefs::IDLE; } - FILE_LOG(logDEBUG) << __func__ << "Answer: " << answer; + FILE_LOG(logDEBUG1) << "Answer: " << answer; } catch(std::string e){ - FILE_LOG(logERROR) << __func__ << ": " << e; + FILE_LOG(logERROR) << __AT__ << ": " << e; throw; } - + + // HORRIBLE FIX to get the main receiver + string filename = getFileName(); + int code; //JsonBox::Object json_object; //json_object["configfile"] = JsonBox::Value("FILENAME"); @@ -156,22 +173,22 @@ void UDPRESTImplementation::initialize_REST(){ rest_state = get_rest_state(rest); - //code = rest->get_json("v1/state", &answer); - FILE_LOG(logDEBUG) << __AT__ << " state got " << code << " " << answer << "\n"; + //code = rest->get_json("api/v1/state", &answer); + //FILE_LOG(logDEBUG1, __AT__ << " state got " + std::string(code) << " " + answer + "\n"; if (rest_state != "INITIALIZED"){ test = "{\"path\":\"" + string( getFilePath() ) + "\", \"n_frames\":10}"; - code = rest->post_json("v1/state/initialize", &answer, test); + code = rest->post_json("api/v1/initialize", &answer, test); } else{ test = "{\"path\":\"" + string( getFilePath() ) + "\"}"; test = "{\"path\":\"" + string( getFilePath() ) + "\", \"n_frames\":10}"; - code = rest->post_json("v1/state/configure", &answer, test); + code = rest->post_json("api/v1/configure", &answer, test); } - FILE_LOG(logDEBUG) << __AT__ << " state/configure got " << code; + //FILE_LOG(logDEBUG1) + " state/configure got " + std::string(code)).c_str()); rest_state = get_rest_state(rest); - FILE_LOG(logDEBUG) << __AT__ << " state got " << rest_state << "\n"; + FILE_LOG(logINFO) << " state got " + std::string(rest_state) << "\n"; /* @@ -181,7 +198,7 @@ void UDPRESTImplementation::initialize_REST(){ std::cout << "JSON " << json_value["status"] << std::endl; */ } - FILE_LOG(logDEBUG) << __func__ << ": initialize() done"; + FILE_LOG(logDEBUG1) << ": configure() done"; } @@ -194,9 +211,9 @@ void UDPRESTImplementation::initialize_REST(){ int UDPRESTImplementation::startReceiver(char message[]){ int i; - FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " starting"; + FILE_LOG(logINFO) << " starting"; initialize_REST(); - FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " initialized"; + FILE_LOG(logINFO) << " initialized"; std::string answer; int code; @@ -210,19 +227,22 @@ int UDPRESTImplementation::startReceiver(char message[]){ ss2 << getNumberOfFrames(); string str_n = ss2.str(); + stringstream ss3; + ss3 << acquisitionPeriod; + string sAP = ss3.str(); string rest_state = ""; - std::string request_body = "{\"settings\": {\"bit_depth\": " + str_dr + ", \"n_frames\": " + str_n + "}}"; + std::string request_body = "{\"settings\": {\"bit_depth\": " + str_dr + ", \"n_frames\": " + str_n + ", \"period\": " + sAP + "}}"; //std::string request_body = "{\"settings\": {\"nimages\":1, \"scanid\":999, \"bit_depth\":16}}"; if(is_main_receiver){ - FILE_LOG(logDEBUG) << __FILE__ << "::" << " sending this configuration body: " << request_body; - code = rest->post_json("v1/state/configure", &answer, request_body); - code = rest->get_json("v1/state", &answer); - FILE_LOG(logDEBUG) << __FILE__ << "::" << " got: " << answer; + FILE_LOG(logDEBUG1) << " sending this configuration body: " << request_body; + code = rest->post_json("api/v1/configure", &answer, request_body); + code = rest->get_json("api/v1/state", &answer); + FILE_LOG(logDEBUG1) << " got: " << answer; rest_state = get_rest_state(rest); - code = rest->post_json("v1/state/open", &answer); + code = rest->post_json("api/v1/open", &answer); } status = RUNNING; @@ -235,7 +255,7 @@ int UDPRESTImplementation::startReceiver(char message[]){ void UDPRESTImplementation::stopReceiver(){ - FILE_LOG(logDEBUG) << __AT__ << "called"; + FILE_LOG(logINFO) << "called"; if(status == RUNNING) startReadout(); @@ -251,7 +271,8 @@ void UDPRESTImplementation::stopReceiver(){ //change status status = IDLE; - FILE_LOG(logDEBUG) << __AT__ << "exited, status " << endl; + FILE_LOG(logDEBUG1) << "exited, status IDLE"; + } @@ -259,13 +280,13 @@ void UDPRESTImplementation::stopReceiver(){ void UDPRESTImplementation::startReadout(){ - FILE_LOG(logDEBUG) << __AT__ << " starting"; + FILE_LOG(logINFO) << " starting"; - status = TRANSMITTING; - - //kill udp socket to tell the listening thread to push last packet - shutDownUDPSockets(); - FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " done"; + status = TRANSMITTING; + + //kill udp socket to tell the listening thread to push last packet + shutDownUDPSockets(); + FILE_LOG(logDEBUG1) << " done"; } @@ -277,15 +298,15 @@ void UDPRESTImplementation::startReadout(){ * Its also called by TCP in case of illegal shut down such as Ctrl + c. * Upto you what you want to do with it. */ -int UDPRESTImplementation::shutDownUDPSockets(){ +void UDPRESTImplementation::shutDownUDPSockets(){ - FILE_LOG(logDEBUG) << __AT__ << "called"; + FILE_LOG(logDEBUG1) << "called"; // this is just to be sure, it could be removed /* for(int i=0;iShutDownSocket(); delete udpSocket[i]; udpSocket[i] = NULL; @@ -296,10 +317,10 @@ int UDPRESTImplementation::shutDownUDPSockets(){ int code; string rest_state = ""; - //FILE_LOG(logDEBUG) << __AT__ << " numListeningThreads=" << numListeningThreads; + //FILE_LOG(logDEBUG1) << __AT__ << " numListeningThreads=" << numListeningThreads; if (rest == NULL){ - FILE_LOG(logWARNING) << __AT__ << "No REST object initialized, closing..."; - return OK; + FILE_LOG(logWARNING) << "No REST object initialized, closing..."; + //return OK; } // getting the state @@ -307,35 +328,76 @@ int UDPRESTImplementation::shutDownUDPSockets(){ FILE_LOG(logWARNING) << "PLEASE WAIT WHILE CHECKING AND SHUTTING DOWN ALL CONNECTIONS!"; rest_state = get_rest_state(rest); - + std::cout << rest_state << std::endl; while (rest_state != "OPEN"){ rest_state = get_rest_state(rest); - usleep(10000); + std::cout << rest_state << std::endl; + usleep(1000000); } //while (rest_state != "TRANSIENT"){ // rest_state = get_rest_state(rest); // usleep(10000); //} - code = rest->post_json("v1/state/close", &answer); - code = rest->post_json("v1/state/reset", &answer); + code = rest->post_json("api/v1/close", &answer); + rest_state = get_rest_state(rest); + std::cout << rest_state << std::endl; + + while (rest_state != "CLOSED"){ + rest_state = get_rest_state(rest); + std::cout << rest_state << std::endl; + usleep(1000000); + } + std::cout << "After close" << rest_state << std::endl; + code = rest->post_json("api/v1/reset", &answer); //rest_state = get_rest_state(rest); - //std::cout << rest_state << std::endl; + std::cout << rest_state << std::endl; + std::cout << "After reset" << rest_state << std::endl; } status = slsReceiverDefs::RUN_FINISHED; //LEO: not sure it's needed //delete rest; - FILE_LOG(logDEBUG) << __AT__ << "finished"; - return OK; + FILE_LOG(logDEBUG1) << "finished"; + // Leo: how state is handled now? + //return OK; } +/* FIXME + * do you really need this, this is called if registerDataCallback() is activated + * in your gui to get data from receiver. you probably have a different way + * of reconstructing complete data set from all receivers + */ +/* +void UDPRESTImplementation::readFrame(char* c,char** raw, uint64_t &startAcq, uint64_t &startFrame){ + FILE_LOG(logDEBUG1) << " called"; + strcpy(c,""); + *raw = NULL; +} +*/ + + + + +/* FIXME + * Its called by TCP in case of illegal shut down such as Ctrl + c. + * Upto you what you want to do with it. + */ + +// Leo: not in the base class +/* +void UDPRESTImplementation::closeFiles(){ + FILE_LOG(logDEBUG1) << "called for thread "; + FILE_LOG(logDEBUG1) << "exited for thread "; +} +*/ + uint64_t UDPRESTImplementation::getTotalFramesCaught() const{ - FILE_LOG(logDEBUG) << __AT__ << " starting"; + FILE_LOG(logDEBUG1) << " starting"; return (0); }