fixed stop server not starting up with setup variables (#949)

* m3: fixed stop server not starting up with setup variables

* all servers except eiger fixed for virtual stop server to start up with setupDetector function called

* virtual tests work

* eiger: versions print neednt be in stop server

* jungfrau: stop server (not virtual) also needs to read config file

* ensuring master is setup for virtual and real servers
This commit is contained in:
maliakal_d 2024-09-10 15:24:51 +02:00 committed by GitHub
parent 38d7fb0c38
commit c6477e0ed6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 173 additions and 156 deletions

View File

@ -449,6 +449,7 @@ void initControlServer() {
void initStopServer() { void initStopServer() {
if (!updateFlag && initError == OK) { if (!updateFlag && initError == OK) {
usleep(CTRL_SRVR_INIT_TIME_US); usleep(CTRL_SRVR_INIT_TIME_US);
LOG(logINFOBLUE, ("Configuring Stop server\n"));
if (mapCSP0() == FAIL) { if (mapCSP0() == FAIL) {
initError = FAIL; initError = FAIL;
strcpy(initErrorMessage, strcpy(initErrorMessage,
@ -458,7 +459,7 @@ void initStopServer() {
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
#endif #endif
} }
initCheckDone = 1; initCheckDone = 1;
@ -512,10 +513,16 @@ void setupDetector() {
ndSamples = 1; ndSamples = 1;
ntSamples = 1; ntSamples = 1;
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
initializePatternWord(); sharedMemory_setStatus(IDLE);
initializePatternWord();
} else {
sharedMemory_setStop(0);
}
#endif #endif
setupUDPCommParameters(); if (isControlServer) {
setupUDPCommParameters();
}
// altera pll // altera pll
ALTERA_PLL_SetDefines(PLL_CNTRL_REG, PLL_PARAM_REG, ALTERA_PLL_SetDefines(PLL_CNTRL_REG, PLL_PARAM_REG,

View File

@ -379,63 +379,7 @@ void initControlServer() {
return; return;
} }
#ifndef VIRTUAL #ifndef VIRTUAL
sharedMemory_lockLocalLink(); setupFebBeb();
Feb_Interface_FebInterface();
if (!Feb_Control_FebControl(normal)) {
initError = FAIL;
sprintf(initErrorMessage,
"Could not intitalize eiger detector sever: feb control\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
if (Feb_Control_SetMasterEffects(master, isControlServer) == FAIL) {
initError = FAIL;
sprintf(initErrorMessage, "Could not intitalize HV for eiger "
"detector server: feb control serial "
"communication\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
sharedMemory_unlockLocalLink();
LOG(logDEBUG1, ("Control server: FEB Initialization done\n"));
Beb_SetTopVariable(top);
Beb_Beb();
LOG(logDEBUG1, ("Control server: BEB Initialization done\n"));
// Getting the feb versions after initialization
char hversion[MAX_STR_LENGTH] = {0};
memset(hversion, 0, MAX_STR_LENGTH);
getHardwareVersion(hversion);
int64_t fwversion = getFirmwareVersion();
int64_t feblfwversion = getFrontEndFirmwareVersion(FRONT_LEFT);
int64_t febrfwversion = getFrontEndFirmwareVersion(FRONT_RIGHT);
LOG(logINFOBLUE,
("\n********************************************************\n"
"Feb Versions\n"
"Hardware Version : %s\n"
"Firmware (Febl) Version : %lld\n"
"Firmware (Febr) Version : %lld\n"
"********************************************************\n",
hversion, (long long int)feblfwversion,
(long long int)febrfwversion));
// ensure febl, febr and beb fw versions are the same
if (fwversion != feblfwversion || fwversion != febrfwversion) {
sprintf(
initErrorMessage,
"Inconsistent firmware versions in feb and beb. [Beb: %lld, "
"Febl: %lld Febr: %lld]\n",
(long long int)fwversion, (long long int)feblfwversion,
(long long int)febrfwversion);
LOG(logERROR, (initErrorMessage));
initError = FAIL;
return;
}
#endif #endif
// also reads config file and deactivates // also reads config file and deactivates
setupDetector(); setupDetector();
@ -449,56 +393,22 @@ void initStopServer() {
// command line) // command line)
usleep(WAIT_STOP_SERVER_START); usleep(WAIT_STOP_SERVER_START);
LOG(logINFOBLUE, ("Configuring Stop server\n")); LOG(logINFOBLUE, ("Configuring Stop server\n"));
// ismaster from variable in stop server
if (updateModuleConfiguration() == FAIL) { if (updateModuleConfiguration() == FAIL) {
initCheckDone = 1; initCheckDone = 1;
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
// force top or master if in config file
if (readConfigFile() == FAIL) {
initCheckDone = 1;
return;
}
// force top or master if in command line
if (checkCommandLineConfiguration() == FAIL) {
initCheckDone = 1;
return;
}
#else #else
// control server read config file and already set up master/top setupFebBeb();
sharedMemory_lockLocalLink();
Feb_Interface_FebInterface();
if (!Feb_Control_FebControl(normal)) {
initError = FAIL;
sprintf(initErrorMessage, "Could not intitalize feb control\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
if (Feb_Control_SetMasterEffects(master, isControlServer) == FAIL) {
initError = FAIL;
sprintf(initErrorMessage, "Could not intitalize HV for eiger "
"detector server: feb control serial "
"communication\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
sharedMemory_unlockLocalLink();
LOG(logDEBUG1, ("Stop server: FEB Initialization done\n"));
Beb_SetTopVariable(top);
Beb_Beb();
LOG(logDEBUG1, ("Control server: BEB Initialization done\n"));
#endif
// client first connect (from shm) will activate // client first connect (from shm) will activate
if (setActivate(0) == FAIL) { if (setActivate(0) == FAIL) {
initError = FAIL; initError = FAIL;
strcpy(initErrorMessage, "Could not deactivate\n"); strcpy(initErrorMessage, "Could not deactivate\n");
LOG(logERROR, (initErrorMessage)); LOG(logERROR, (initErrorMessage));
} }
#endif
} }
initCheckDone = 1; initCheckDone = 1;
} }
@ -749,6 +659,71 @@ int checkCommandLineConfiguration() {
/* set up detector */ /* set up detector */
#ifndef VIRTUAL
void setupFebBeb() {
sharedMemory_lockLocalLink();
Feb_Interface_FebInterface();
if (!Feb_Control_FebControl(normal)) {
initError = FAIL;
sprintf(initErrorMessage,
"Could not intitalize eiger detector sever: feb control\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
if (Feb_Control_SetMasterEffects(master, isControlServer) == FAIL) {
initError = FAIL;
sprintf(initErrorMessage, "Could not intitalize HV for eiger "
"detector server: feb control serial "
"communication\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
sharedMemory_unlockLocalLink();
return;
}
sharedMemory_unlockLocalLink();
LOG(logDEBUG1, ("%s server: FEB Initialization done\n",
isControlServer ? "Control" : "Stop"));
Beb_SetTopVariable(top);
Beb_Beb();
LOG(logDEBUG1, ("%s server: BEB Initialization done\n",
isControlServer ? "Control" : "Stop"));
if (isControlServer) {
// Getting the feb versions after initialization
char hversion[MAX_STR_LENGTH] = {0};
memset(hversion, 0, MAX_STR_LENGTH);
getHardwareVersion(hversion);
int64_t fwversion = getFirmwareVersion();
int64_t feblfwversion = getFrontEndFirmwareVersion(FRONT_LEFT);
int64_t febrfwversion = getFrontEndFirmwareVersion(FRONT_RIGHT);
LOG(logINFOBLUE,
("\n********************************************************\n"
"Feb Versions\n"
"Hardware Version : %s\n"
"Firmware (Febl) Version : %lld\n"
"Firmware (Febr) Version : %lld\n"
"********************************************************\n",
hversion, (long long int)feblfwversion,
(long long int)febrfwversion));
// ensure febl, febr and beb fw versions are the same
if (fwversion != feblfwversion || fwversion != febrfwversion) {
sprintf(
initErrorMessage,
"Inconsistent firmware versions in feb and beb. [Beb: %lld, "
"Febl: %lld Febr: %lld]\n",
(long long int)fwversion, (long long int)feblfwversion,
(long long int)febrfwversion);
LOG(logERROR, (initErrorMessage));
initError = FAIL;
return;
}
}
}
#endif
void allocateDetectorStructureMemory() { void allocateDetectorStructureMemory() {
LOG(logINFO, ("This Server is for 1 Eiger half module (250k)\n\n")); LOG(logINFO, ("This Server is for 1 Eiger half module (250k)\n\n"));
@ -799,8 +774,12 @@ void setupDetector() {
LOG(logINFOBLUE, ("Setting Default Parameters\n")); LOG(logINFOBLUE, ("Setting Default Parameters\n"));
resetToDefaultDacs(0); resetToDefaultDacs(0);
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
#endif #endif
// setting default measurement parameters // setting default measurement parameters

View File

@ -403,13 +403,7 @@ void initStopServer() {
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
setMaster(OW_MASTER);
if (readConfigFile() == FAIL ||
checkCommandLineConfiguration() == FAIL) {
initCheckDone = 1;
return;
}
#endif #endif
} }
initCheckDone = 1; initCheckDone = 1;
@ -460,8 +454,14 @@ void setupDetector() {
memset(vetoGainIndices, 0, sizeof(vetoGainIndices)); memset(vetoGainIndices, 0, sizeof(vetoGainIndices));
memset(adcConfiguration, 0, sizeof(adcConfiguration)); memset(adcConfiguration, 0, sizeof(adcConfiguration));
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
// ismaster from reg in stop server, so set it in virtual mode
setMaster(OW_MASTER);
#endif #endif
// pll defines // pll defines
ALTERA_PLL_C10_SetDefines(REG_OFFSET, BASE_READOUT_PLL, BASE_SYSTEM_PLL, ALTERA_PLL_C10_SetDefines(REG_OFFSET, BASE_READOUT_PLL, BASE_SYSTEM_PLL,
@ -2159,7 +2159,6 @@ int *getDetectorPosition() { return detPos; }
int checkDetectorType(char *mess) { int checkDetectorType(char *mess) {
#ifdef VIRTUAL #ifdef VIRTUAL
setMaster(OW_MASTER);
return OK; return OK;
#endif #endif
LOG(logINFO, ("Checking module type\n")); LOG(logINFO, ("Checking module type\n"));

View File

@ -14,7 +14,11 @@
#define LINKED_SERVER_NAME "gotthard2DetectorServer" #define LINKED_SERVER_NAME "gotthard2DetectorServer"
#ifdef VIRTUAL
#define CTRL_SRVR_INIT_TIME_US (3 * 1000 * 1000)
#else
#define CTRL_SRVR_INIT_TIME_US (300 * 1000) #define CTRL_SRVR_INIT_TIME_US (300 * 1000)
#endif
/* Hardware Definitions */ /* Hardware Definitions */
#define NCHAN (128) #define NCHAN (128)

View File

@ -388,14 +388,15 @@ void initStopServer() {
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
#endif #else
// to get master from file // ismaster from variable in stop server
if (readConfigFile() == FAIL || if (readConfigFile() == FAIL ||
checkCommandLineConfiguration() == FAIL) { checkCommandLineConfiguration() == FAIL) {
initCheckDone = 1; initCheckDone = 1;
return; return;
} }
#endif
} }
initCheckDone = 1; initCheckDone = 1;
} }
@ -406,8 +407,12 @@ void setupDetector() {
LOG(logINFO, ("This Server is for 1 Gotthard module (1280 channels)\n")); LOG(logINFO, ("This Server is for 1 Gotthard module (1280 channels)\n"));
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
#endif #endif
// Initialization // Initialization

View File

@ -12,7 +12,11 @@
#define LINKED_SERVER_NAME "gotthardDetectorServer" #define LINKED_SERVER_NAME "gotthardDetectorServer"
#ifdef VIRTUAL
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
#else
#define CTRL_SRVR_INIT_TIME_US (300 * 1000) #define CTRL_SRVR_INIT_TIME_US (300 * 1000)
#endif
/* Enums */ /* Enums */
enum ADCINDEX { TEMP_FPGA, TEMP_ADC }; enum ADCINDEX { TEMP_FPGA, TEMP_ADC };

View File

@ -439,15 +439,14 @@ void initStopServer() {
initCheckDone = 1; initCheckDone = 1;
return; return;
} }
#ifdef VIRTUAL
setupDetector();
#else
// chip version is a variable
if (readConfigFile() == FAIL) { if (readConfigFile() == FAIL) {
initCheckDone = 1; initCheckDone = 1;
return; return;
} }
#ifdef VIRTUAL
sharedMemory_setStop(0);
// temp threshold and reset event (read by stop server)
setThresholdTemperature(DEFAULT_TMP_THRSHLD);
setTemperatureEvent(0);
#endif #endif
} }
initCheckDone = 1; initCheckDone = 1;
@ -463,8 +462,14 @@ void setupDetector() {
} }
chipConfigured = 0; chipConfigured = 0;
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
// ismaster from reg in stop server, so set it in virtual mode
setMaster(OW_MASTER);
#endif #endif
// altera pll // altera pll

View File

@ -17,7 +17,11 @@
#define ID_FILE "detid_jungfrau.txt" #define ID_FILE "detid_jungfrau.txt"
#define LINKED_SERVER_NAME "jungfrauDetectorServer" #define LINKED_SERVER_NAME "jungfrauDetectorServer"
#ifdef VIRTUAL
#define CTRL_SRVR_INIT_TIME_US (4 * 1000 * 1000)
#else
#define CTRL_SRVR_INIT_TIME_US (300 * 1000) #define CTRL_SRVR_INIT_TIME_US (300 * 1000)
#endif
/* Hardware Definitions */ /* Hardware Definitions */
#define NCHAN (256 * 256) #define NCHAN (256 * 256)

View File

@ -420,10 +420,7 @@ void initStopServer() {
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
// temp threshold and reset event (read by stop server)
setThresholdTemperature(DEFAULT_TMP_THRSHLD);
setTemperatureEvent(0);
#endif #endif
} }
initCheckDone = 1; initCheckDone = 1;
@ -438,8 +435,14 @@ void setupDetector() {
clkPhase[i] = 0; clkPhase[i] = 0;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
// ismaster from reg in stop server, so set it in virtual mode
setMaster(OW_MASTER);
#endif #endif
// altera pll // altera pll

View File

@ -16,7 +16,11 @@
#define ID_FILE ("detid_moench.txt") #define ID_FILE ("detid_moench.txt")
#define LINKED_SERVER_NAME "moenchDetectorServer" #define LINKED_SERVER_NAME "moenchDetectorServer"
#ifdef VIRTUAL
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
#else
#define CTRL_SRVR_INIT_TIME_US (300 * 1000) #define CTRL_SRVR_INIT_TIME_US (300 * 1000)
#endif
/* Hardware Definitions */ /* Hardware Definitions */
#define NCHAN (400 * 400) #define NCHAN (400 * 400)

View File

@ -396,11 +396,7 @@ void initStopServer() {
return; return;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStop(0); setupDetector();
if (checkCommandLineConfiguration() == FAIL) {
initCheckDone = 1;
return;
}
#endif #endif
} }
initCheckDone = 1; initCheckDone = 1;
@ -466,8 +462,12 @@ void setupDetector() {
clkPhase[i] = 0; clkPhase[i] = 0;
} }
#ifdef VIRTUAL #ifdef VIRTUAL
sharedMemory_setStatus(IDLE); if (isControlServer) {
setupUDPCommParameters(); sharedMemory_setStatus(IDLE);
setupUDPCommParameters();
} else {
sharedMemory_setStop(0);
}
#endif #endif
// pll defines // pll defines

View File

@ -136,6 +136,9 @@ void checkVirtual9MFlag();
#endif #endif
// set up detector // set up detector
#if defined(EIGERD) && !defined(VIRTUAL)
void setupFebBeb();
#endif
#if defined(EIGERD) || defined(MYTHEN3D) #if defined(EIGERD) || defined(MYTHEN3D)
void allocateDetectorStructureMemory(); void allocateDetectorStructureMemory();
#endif #endif

View File

@ -1043,10 +1043,10 @@ TEST_CASE("CALLER::v_a", "[.cmdcall]") {
auto prev_val = det.getPower(defs::V_POWER_A); auto prev_val = det.getPower(defs::V_POWER_A);
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
caller.call("v_a", {"700"}, -1, PUT, oss1); caller.call("v_a", {"1200"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "v_a 700\n"); REQUIRE(oss1.str() == "v_a 1200\n");
caller.call("v_a", {}, -1, GET, oss2); caller.call("v_a", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "v_a 700\n"); REQUIRE(oss2.str() == "v_a 1200\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setPower(defs::V_POWER_A, prev_val[i], {i}); det.setPower(defs::V_POWER_A, prev_val[i], {i});
@ -1065,10 +1065,10 @@ TEST_CASE("CALLER::v_b", "[.cmdcall]") {
auto prev_val = det.getPower(defs::V_POWER_B); auto prev_val = det.getPower(defs::V_POWER_B);
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
caller.call("v_b", {"700"}, -1, PUT, oss1); caller.call("v_b", {"1200"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "v_b 700\n"); REQUIRE(oss1.str() == "v_b 1200\n");
caller.call("v_b", {}, -1, GET, oss2); caller.call("v_b", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "v_b 700\n"); REQUIRE(oss2.str() == "v_b 1200\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setPower(defs::V_POWER_B, prev_val[i], {i}); det.setPower(defs::V_POWER_B, prev_val[i], {i});
@ -1087,10 +1087,10 @@ TEST_CASE("CALLER::v_c", "[.cmdcall]") {
auto prev_val = det.getPower(defs::V_POWER_C); auto prev_val = det.getPower(defs::V_POWER_C);
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
caller.call("v_c", {"700"}, -1, PUT, oss1); caller.call("v_c", {"1200"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "v_c 700\n"); REQUIRE(oss1.str() == "v_c 1200\n");
caller.call("v_c", {}, -1, GET, oss2); caller.call("v_c", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "v_c 700\n"); REQUIRE(oss2.str() == "v_c 1200\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setPower(defs::V_POWER_C, prev_val[i], {i}); det.setPower(defs::V_POWER_C, prev_val[i], {i});
@ -1109,10 +1109,10 @@ TEST_CASE("CALLER::v_d", "[.cmdcall]") {
auto prev_val = det.getPower(defs::V_POWER_D); auto prev_val = det.getPower(defs::V_POWER_D);
{ {
std::ostringstream oss1, oss2; std::ostringstream oss1, oss2;
caller.call("v_d", {"700"}, -1, PUT, oss1); caller.call("v_d", {"1200"}, -1, PUT, oss1);
REQUIRE(oss1.str() == "v_d 700\n"); REQUIRE(oss1.str() == "v_d 1200\n");
caller.call("v_d", {}, -1, GET, oss2); caller.call("v_d", {}, -1, GET, oss2);
REQUIRE(oss2.str() == "v_d 700\n"); REQUIRE(oss2.str() == "v_d 1200\n");
} }
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setPower(defs::V_POWER_D, prev_val[i], {i}); det.setPower(defs::V_POWER_D, prev_val[i], {i});

View File

@ -4,11 +4,11 @@
#define RELEASE "developer" #define RELEASE "developer"
#define APILIB "developer 0x230224" #define APILIB "developer 0x230224"
#define APIRECEIVER "developer 0x230224" #define APIRECEIVER "developer 0x230224"
#define APICTB "developer 0x240820" #define APICTB "developer 0x240822"
#define APIGOTTHARD "developer 0x240820" #define APIGOTTHARD "developer 0x240822"
#define APIGOTTHARD2 "developer 0x240820" #define APIGOTTHARD2 "developer 0x240822"
#define APIMYTHEN3 "developer 0x240820" #define APIMYTHEN3 "developer 0x240822"
#define APIMOENCH "developer 0x240820" #define APIMOENCH "developer 0x240822"
#define APIEIGER "developer 0x240820" #define APIXILINXCTB "developer 0x240822"
#define APIXILINXCTB "developer 0x240820" #define APIEIGER "developer 0x240822"
#define APIJUNGFRAU "developer 0x240822" #define APIJUNGFRAU "developer 0x240822"