From 9f11dae703c041d07733ae8268d753db8783d928 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 29 Jul 2021 17:26:45 +0200 Subject: [PATCH] fix --- .../slsDetectorFunctionList.c | 2 +- .../slsDetectorFunctionList.c | 6 +- .../slsDetectorFunctionList.c | 2 +- .../slsDetectorFunctionList.c | 50 ++++++++++++--- .../slsDetectorFunctionList.c | 2 +- .../slsDetectorFunctionList.c | 63 +++++++++++++++---- .../src/slsDetectorServer_funcs.c | 4 +- slsDetectorSoftware/src/Detector.cpp | 2 +- 8 files changed, 103 insertions(+), 28 deletions(-) diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c index a48e40d8a..284ac07a8 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c @@ -686,7 +686,7 @@ void allocateDetectorStructureMemory() { void setupDetector() { allocateDetectorStructureMemory(); - resetToDefaultDacs(false); + resetToDefaultDacs(0); #ifdef VIRTUAL sharedMemory_setStatus(IDLE); #endif diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index cbfb85690..a71cbde0b 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -49,6 +49,7 @@ int highvoltage = 0; int dacValues[NDAC] = {}; int onChipdacValues[ONCHIP_NDAC][NCHIP] = {}; int defaultDacValues[NDAC] = {}; +int hardCodedDefaultDacValues[NDAC] = {}; int defaultOnChipdacValues[ONCHIP_NDAC][NCHIP] = {}; int injectedChannelsOffset = 0; int injectedChannelsIncrement = 0; @@ -393,6 +394,7 @@ void setupDetector() { memset(dacValues, 0, sizeof(dacValues)); for (int i = 0; i < NDAC; ++i) { defaultDacValues[i] = -1; + hardCodedDefaultDacValues[i] = -1; } for (int i = 0; i < ONCHIP_NDAC; ++i) { for (int j = 0; j < NCHIP; ++j) { @@ -484,9 +486,8 @@ void setupDetector() { int resetToDefaultDacs(int hardReset) { // reset defaults to hardcoded defaults if (hardReset) { - const int vals[] = DEFAULT_DAC_VALS; for (int i = 0; i < NDAC; ++i) { - defaultDacValues[i] = vals[i]; + defaultDacValues[i] = hardCodedDefaultDacValues[i]; } } // reset dacs to defaults @@ -839,6 +840,7 @@ int readConfigFile() { // set default dac variables defaultDacValues[idac] = value; + hardCodedDefaultDacValues[idac] = value; // set dac setDAC(idac, value, 0); diff --git a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c index eabe0ad9b..1f7e5104d 100644 --- a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c @@ -406,7 +406,7 @@ void setupDetector() { DAC_MAX_MV); LTC2620_Disable(); LTC2620_Configure(); - resetToDefaultDacs(false); + resetToDefaultDacs(0); // temp bus_w(TEMP_SPI_IN_REG, TEMP_SPI_IN_IDLE_MSK); diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 82ef4c7ae..b7213466e 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -426,7 +426,7 @@ void setupDetector() { DAC_MAX_MV); LTC2620_Disable(); LTC2620_Configure(); - resetToDefaultDacs(false); + resetToDefaultDacs(0); // altera pll ALTERA_PLL_SetDefines( @@ -471,25 +471,59 @@ void setupDetector() { } int resetToDefaultDacs(int hardReset) { + LOG(logINFOBLUE, ("Resetting %s to Default Dac values\n", + (hardReset == 1 ? "hard" : ""))); + // reset defaults to hardcoded defaults if (hardReset) { const int vals[] = DEFAULT_DAC_VALS; for (int i = 0; i < NDAC; ++i) { defaultDacValues[i] = vals[i]; } + const int vals_G0[] = SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS; + for (int i = 0; i < NSPECIALDACS; ++i) { + defaultDacValue_G0[i] = vals_G0[i]; + } + const int vals_HG0[] = SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS; + for (int i = 0; i < NSPECIALDACS; ++i) { + defaultDacValue_HG0[i] = vals_HG0[i]; + } } + + // remember settings + enum detectorSettings oldSettings = thisSettings; + // reset dacs to defaults - int ret = OK; - LOG(logINFOBLUE, ("Setting Default Dac values\n")); + const int specialDacs[] = SPECIALDACINDEX; for (int i = 0; i < NDAC; ++i) { - setDAC((enum DACINDEX)i, defaultDacValues[i], 0); - if (dacValues[i] != defaultDacValues[i]) { - ret = FAIL; + int value = defaultDacValues[i]; + + for (int j = 0; j < NSPECIALDACS; ++j) { + // special dac: replace default value + if (specialDacs[j] == i) { + switch (oldSettings) { + case DYNAMICGAIN: + value = defaultDacValue_G0[j]; + break; + case DYNAMICHG0: + value = defaultDacValue_HG0[j]; + break; + default: + break; + } + break; + } + } + + // set to defualt + setDAC((enum DACINDEX)i, value, 0); + if (dacValues[i] != value) { LOG(logERROR, ("Setting dac %d failed, wrote %d, read %d\n", i, - defaultDacValues[i], dacValues[i])); + value, dacValues[i])); + return FAIL; } } - return ret; + return OK; } int getDefaultDac(enum DACINDEX index, enum detectorSettings sett, diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c index a0daec6bd..6a24aaa2a 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c @@ -517,7 +517,7 @@ void setupDetector() { DAC_MAX_MV); // has to be before setvchip LTC2620_Disable(); LTC2620_Configure(); - resetToDefaultDacs(false); + resetToDefaultDacs(0); // altera pll ALTERA_PLL_SetDefines(PLL_CNTRL_REG, PLL_PARAM_REG, diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c index 9ccbb4a55..d18ec72ec 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c @@ -42,7 +42,7 @@ pthread_t pthread_virtual_tid; int64_t virtual_currentFrameNumber = 2; #endif -enum detectorSettings thisSettings; +enum detectorSettings thisSettings = UNINITIALIZED; sls_detector_module *detectorModules = NULL; int *detectorChans = NULL; int *detectorDacs = NULL; @@ -450,7 +450,7 @@ void setupDetector() { // defaults setHighVoltage(DEFAULT_HIGH_VOLTAGE); - resetToDefaultDacs(false); + resetToDefaultDacs(0); setASICDefaults(); setADIFDefaults(); @@ -528,27 +528,66 @@ void setupDetector() { } int resetToDefaultDacs(int hardReset) { + LOG(logINFOBLUE, ("Resetting %s to Default Dac values\n", + (hardReset == 1 ? "hard" : ""))); + // reset defaults to hardcoded defaults if (hardReset) { const int vals[] = DEFAULT_DAC_VALS; for (int i = 0; i < NDAC; ++i) { defaultDacValues[i] = vals[i]; } + const int vals_standard[] = SPECIAL_DEFAULT_STANDARD_DAC_VALS; + for (int i = 0; i < NSPECIALDACS; ++i) { + defaultDacValue_standard[i] = vals_standard[i]; + } + const int vals_fast[] = SPECIAL_DEFAULT_FAST_DAC_VALS; + for (int i = 0; i < NSPECIALDACS; ++i) { + defaultDacValue_fast[i] = vals_fast[i]; + } + const int vals_highgain[] = SPECIAL_DEFAULT_HIGHGAIN_DAC_VALS; + for (int i = 0; i < NSPECIALDACS; ++i) { + defaultDacValue_highgain[i] = vals_highgain[i]; + } } + + // remember settings + enum detectorSettings oldSettings = thisSettings; + // reset dacs to defaults - int ret = OK; - LOG(logINFOBLUE, ("Setting Default Dac values\n")); - { - for (int i = 0; i < NDAC; ++i) { - setDAC((enum DACINDEX)i, defaultDacValues[i], 0); - if (detectorDacs[i] != defaultDacValues[i]) { - ret = FAIL; - LOG(logERROR, ("Setting dac %d failed, wrote %d, read %d\n", i, - defaultDacValues[i], detectorDacs[i])); + const int specialDacs[] = SPECIALDACINDEX; + for (int i = 0; i < NDAC; ++i) { + int value = defaultDacValues[i]; + + for (int j = 0; j < NSPECIALDACS; ++j) { + // special dac: replace default value + if (specialDacs[j] == i) { + switch (oldSettings) { + case STANDARD: + value = defaultDacValue_standard[j]; + break; + case FAST: + value = defaultDacValue_fast[j]; + break; + case HIGHGAIN: + value = defaultDacValue_highgain[j]; + break; + default: + break; + } + break; } } + + // set to defualt + setDAC((enum DACINDEX)i, value, 0); + if (detectorDacs[i] != value) { + LOG(logERROR, ("Setting dac %d failed, wrote %d, read %d\n", i, + value, detectorDacs[i])); + return FAIL; + } } - return ret; + return OK; } int getDefaultDac(enum DACINDEX index, enum detectorSettings sett, diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 5ca9df10b..93cdff606 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -1627,7 +1627,7 @@ int set_settings(int file_des) { validate(&ret, mess, (int)isett, (int)retval, "set settings", DEC); #ifdef GOTTHARDD if (ret == OK) { - ret = resetToDefaultDacs(false); + ret = resetToDefaultDacs(0); if (ret == FAIL) { strcpy(mess, "Could change settings, but could not set to " "default dacs\n"); @@ -8096,7 +8096,7 @@ int reset_to_default_dacs(int file_des) { int arg = -1; if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) return printSocketReadError(); - LOG(logINFO, ("Resetting dacs to defaults (hard reset: %d)\n", arg)); + LOG(logDEBUG1, ("Resetting dacs to defaults (hard reset: %d)\n", arg)); #ifdef CHIPTESTBOARDD functionNotImplemented(); diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index b2fde0519..db8c4b7b7 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -658,7 +658,7 @@ void Detector::setDefaultDac_(defs::dacIndex index, int defaultValue, } void Detector::resetToDefaultDacs(const bool hardReset, Positions pos) { - pimpl->Parallel(&Module::resetToDefaultDacs, hardReset, pos); + pimpl->Parallel(&Module::resetToDefaultDacs, pos, hardReset); } Result Detector::getDAC(defs::dacIndex index, bool mV,