diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c index 2020b7544..f479f654c 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c @@ -33,6 +33,10 @@ extern int isControlServer; extern void getMacAddressinString(char *cmac, int size, uint64_t mac); extern void getIpAddressinString(char *cip, uint32_t ip); +// Variables that will be exported +int masterCommandLine = -1; +int topCommandLine = -1; + int initError = OK; int initCheckDone = 0; char initErrorMessage[MAX_STR_LENGTH]; @@ -368,6 +372,7 @@ void initStopServer() { return; } #else + // control server read config file and already set up master/top sharedMemory_lockLocalLink(); Feb_Interface_FebInterface(); Feb_Control_FebControl(); @@ -432,6 +437,11 @@ int readConfigFile() { return initError; } +#ifndef VIRTUAL + // if not found in config file, they will be reset to hardware settings + top = -1; + master = -1; +#endif if (ignoreConfigFileFlag) { return OK; } @@ -577,8 +587,10 @@ int readConfigFile() { LOG(logINFO, ("Successfully read config file\n")); } +#ifndef VIRTUAL // reset to hardware settings if not in config file (if overwritten) resetToHardwareSettings(); +#endif return initError; } @@ -590,6 +602,7 @@ void resetToHardwareSettings() { } // top not set in config file if (top == -1) { + LOG(logINFO, ("Resetting Top to hardware settings\n")); if (!Beb_SetTop(TOP_HARDWARE)) { initError = FAIL; strcpy(initErrorMessage, @@ -619,6 +632,7 @@ void resetToHardwareSettings() { } // master not set in config file if (master == -1) { + LOG(logINFO, ("Resetting Master to hardware settings\n")); if (!Beb_SetMaster(MASTER_HARDWARE)) { initError = FAIL; strcpy(initErrorMessage, @@ -649,6 +663,8 @@ void resetToHardwareSettings() { #endif } +int checkCommandLineConfiguration() {} + /* set up detector */ void allocateDetectorStructureMemory() { @@ -1462,7 +1478,7 @@ int setHighVoltage(int val) { /* parameters - timing, extsig */ int setMaster(int m) { - LOG(logINFO, ("Setting up as %s\n", (m == 1 ? "Master" : "Slave"))); + LOG(logINFOBLUE, ("Setting up as %s\n", (m == 1 ? "Master" : "Slave"))); #ifdef VIRTUAL master = m; #else diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c index 663064ec2..d71b1a9d9 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer.c @@ -32,6 +32,13 @@ extern int ignoreConfigFileFlag; #ifdef GOTTHARDD extern int phaseShift; #endif +#if defined(GOTTHARDD) || defined(GOTTHARD2D) || defined(EIGERD) || \ + defined(MYTHEN3D) +extern int masterCommandLine; +#endif +#ifdef EIGERD +extern int topCommandLine; +#endif void error(char *msg) { perror(msg); } @@ -50,6 +57,13 @@ int main(int argc, char *argv[]) { checkModuleFlag = 1; int version = 0; ignoreConfigFileFlag = 0; +#if defined(GOTTHARDD) || defined(GOTTHARD2D) || defined(EIGERD) || \ + defined(MYTHEN3D) + masterCommandLine = -1; +#endif +#ifdef EIGERD + topCommandLine = -1; +#endif // help message char helpMessage[MAX_STR_LENGTH]; @@ -70,6 +84,11 @@ int main(int argc, char *argv[]) { "\t-i, --ignore-config : " "[Virtual][Eiger][Jungfrau][Gotthard][Gotthard2] \n" "\t Ignore config file. \n" + "\t-m, --master : [Eiger][Mythen3][Gotthard][Gotthard2] \n" + "\t Set Master to 0 or 1. Precedence over " + "config file. \n" + "\t-t, --top : [Eiger] Set Top to 0 or 1. Precedence " + "over config file. \n" "\t-s, --stopserver : Stop server. Do not use as it is created " "by control server \n\n", argv[0]); @@ -86,6 +105,8 @@ int main(int argc, char *argv[]) { {"devel", no_argument, NULL, 'd'}, {"update", no_argument, NULL, 'u'}, {"ignore-config", no_argument, NULL, 'i'}, + {"master", required_argument, NULL, 'm'}, + {"top", required_argument, NULL, 't'}, {"stopserver", no_argument, NULL, 's'}, {NULL, 0, NULL, 0}}; @@ -177,6 +198,41 @@ int main(int argc, char *argv[]) { #endif break; + case 'm': +#if defined(GOTTHARDD) || defined(GOTTHARD2D) || defined(EIGERD) || \ + defined(MYTHEN3D) + if (sscanf(optarg, "%d", &masterCommandLine) != 1) { + LOG(logERROR, ("Cannot scan master argument\n%s", helpMessage)); + exit(EXIT_FAILURE); + } + if (masterCommandLine == 0) { + LOG(logINFO, ("Detector Slave mode\n")); + } else { + LOG(logINFO, ("Detector Master mode\n")); + } +#else + LOG(logERROR, ("No master implemented for this detector server\n")); + exit(EXIT_FAILURE); +#endif + break; + + case 't': +#ifdef EIGERD + if (sscanf(optarg, "%d", &topCommandLine) != 1) { + LOG(logERROR, ("Cannot scan top argument\n%s", helpMessage)); + exit(EXIT_FAILURE); + } + if (topCommandLine == 0) { + LOG(logINFO, ("Detector Top mode\n")); + } else { + LOG(logINFO, ("Detector Bottom mode\n")); + } +#else + LOG(logERROR, ("No top implemented for this detector server\n")); + exit(EXIT_FAILURE); +#endif + break; + case 'h': printf("%s", helpMessage); exit(EXIT_SUCCESS);