From e700e1db443bcef97e937dfab85105a2ef422998 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 18 Feb 2026 14:32:33 +0100 Subject: [PATCH] review changes: removing validateDACValue and other minor stuff --- .../slsDetectorFunctionList.c | 43 ++----------- .../slsDetectorFunctionList.h | 3 - .../slsDetectorFunctionList.c | 34 ---------- .../slsDetectorFunctionList.h | 3 - .../slsDetectorFunctionList.c | 41 ++---------- .../slsDetectorFunctionList.h | 4 -- .../slsDetectorFunctionList.c | 42 +----------- .../slsDetectorFunctionList.h | 3 - .../slsDetectorFunctionList.c | 42 +----------- .../slsDetectorFunctionList.h | 3 - .../bin/mythen3DetectorServer_developer | Bin 306100 -> 306100 bytes .../slsDetectorFunctionList.c | 60 +++++------------- .../slsDetectorFunctionList.h | 4 +- .../slsDetectorServer/include/LTC2620.h | 6 +- .../include/LTC2620_Driver.h | 4 +- .../slsDetectorServer/src/LTC2620.c | 35 ++++++---- .../slsDetectorServer/src/LTC2620_Driver.c | 58 +++++++++-------- .../slsDetectorFunctionList.c | 44 ++----------- .../slsDetectorFunctionList.h | 3 - slsSupportLib/include/sls/versionAPI.h | 2 +- 20 files changed, 98 insertions(+), 336 deletions(-) diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c index 8a04a035c..e24eee0d4 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c @@ -1270,26 +1270,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - // validate min value - if (dacval < 0 && dacval != LTC2620_GetPowerDownValue()) { - sprintf(mess, - "Could not set DAC %d. Input value %d must be positive or %d\n", - ind, dacval, LTC2620_GetPowerDownValue()); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %d. Input value %d exceeds maximum %d \n", - ind, dacval, LTC2620_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { // validate min value if (voltage < 0) { @@ -1428,7 +1408,6 @@ int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess) { int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { LOG(logINFO, ("Setting DAC %d: %d %s \n", ind, val, (mV ? "mV" : "dac units"))); - if (validateDACIndex(ind, mess) == FAIL) return FAIL; @@ -1438,27 +1417,15 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (validateDACVoltage(ind, val, mess) == FAIL) return FAIL; } - if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - - if (LTC2620_SetDACValue((int)ind, dacval) == FAIL) { - sprintf(mess, "Could not set DAC %d.\n", ind); - LOG(logERROR, (mess)); - return FAIL; + { + char dacName[20] = {0}; + snprintf(dacName, sizeof(dacName), "dac %d", ind); + if (LTC2620_SetDacValue((int)ind, dacval, dacName, mess) == FAIL) + return FAIL; } - dacValues[ind] = dacval; return OK; } diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h index e9557376a..7b2a30716 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.h @@ -128,7 +128,6 @@ int setADCVpp(int val, int mV, char *mess); int getADCVpp(int mV, int *retval, char *mess); int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -137,8 +136,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int getVLimit(); int setVLimit(int val, char *mess); diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c index 448f3b0f0..b1896607f 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c @@ -1436,27 +1436,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - char *dacNames[] = {DAC_NAMES}; - // validate min value - if (dacval < 0) { - sprintf(mess, - "Could not set DAC %s. Input value %d cannot be negative\n", - dacNames[ind], dacval); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_MAX_VAL) { - sprintf(mess, - "Could not set DAC %s. Input value %d exceeds maximum %d \n", - dacNames[ind], dacval, LTC2620_MAX_VAL); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { char *dacNames[] = {DAC_NAMES}; // validate min value @@ -1535,11 +1514,9 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { LOG(logINFO, ("Setting DAC %s: %d %s \n", dacNames[ind], val, (mV ? "mV" : "dac units"))); } - if (ind == E_VTHRESHOLD) { return setThresholdDACs(val, mV, mess); } - if (validateDACIndex(ind, mess) == FAIL) return FAIL; @@ -1547,21 +1524,10 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (mV) { if (validateDACVoltage(ind, val, mess) == FAIL) return FAIL; - if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - #ifdef VIRTUAL (detectorModules)->dacs[ind] = dacval; return OK; diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.h index 49e442770..1907f03be 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.h @@ -125,7 +125,6 @@ int setThresholdEnergy(int ev); // parameters - dac, adc, hv int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -134,8 +133,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int setThresholdDACs(int val, bool mV, char *mess); int getThresholdDACs(bool mV, int *retval, char *mess); diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 9092e63ba..15af49ac2 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -1530,27 +1530,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - char *dacNames[] = {DAC_NAMES}; - // validate min value - if (dacval < 0) { - sprintf(mess, - "Could not set DAC %s. Input value %d cannot be negative\n", - dacNames[ind], dacval); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_D_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %s. Input value %d exceeds maximum %d \n", - dacNames[ind], dacval, LTC2620_D_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { char *dacNames[] = {DAC_NAMES}; // validate min value @@ -1633,24 +1612,12 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - - if (LTC2620_D_SetDACValue((int)ind, dacval) == FAIL) { + { char *dacNames[] = {DAC_NAMES}; - sprintf(mess, "Could not set DAC %s.\n", dacNames[ind]); - LOG(logERROR, (mess)); - return FAIL; + if (LTC2620_D_SetDacValue((int)ind, dacval, dacNames[ind], mess) == + FAIL) + return FAIL; } - dacValues[ind] = dacval; return OK; } diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.h index 170a37dde..4f84a1307 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.h @@ -118,8 +118,6 @@ int setOnChipDAC(enum ONCHIP_DACINDEX ind, int chipIndex, int val); int getOnChipDAC(enum ONCHIP_DACINDEX ind, int chipIndex); int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); -int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, @@ -127,8 +125,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int getADC(enum ADCINDEX ind, int *value); int setHighVoltage(int val, char *mess); diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 42ba5a80c..8d0d1379f 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -1345,27 +1345,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - char *dacNames[] = {DAC_NAMES}; - // validate min value - if (dacval < 0) { - sprintf(mess, - "Could not set DAC %s. Input value %d cannot be negative\n", - dacNames[ind], dacval); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %s. Input value %d exceeds maximum %d \n", - dacNames[ind], dacval, LTC2620_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { char *dacNames[] = {DAC_NAMES}; // validate min value @@ -1436,7 +1415,6 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { LOG(logINFO, ("Setting DAC %s: %d %s \n", dacNames[ind], val, (mV ? "mV" : "dac units"))); } - if (validateDACIndex(ind, mess) == FAIL) return FAIL; @@ -1444,28 +1422,14 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (mV) { if (validateDACVoltage(ind, val, mess) == FAIL) return FAIL; - if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - - if (LTC2620_SetDACValue((int)ind, dacval) == FAIL) { + { char *dacNames[] = {DAC_NAMES}; - sprintf(mess, "Could not set DAC %s.\n", dacNames[ind]); - LOG(logERROR, (mess)); - return FAIL; + if (LTC2620_SetDacValue((int)ind, dacval, dacNames[ind], mess) == FAIL) + return FAIL; } - dacValues[ind] = dacval; // ext daq ctrl diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.h index 5bb4bb2f9..b775ff0e1 100644 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.h @@ -124,7 +124,6 @@ void setGainMode(enum gainMode mode); // parameters - dac, adc, hv int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -133,8 +132,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int getADC(enum ADCINDEX ind); int setHighVoltage(int val, char *mess); diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c index 46295c5cf..509c92a15 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c @@ -921,27 +921,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - char *dacNames[] = {DAC_NAMES}; - // validate min value - if (dacval < 0) { - sprintf(mess, - "Could not set DAC %s. Input value %d cannot be negative\n", - dacNames[ind], dacval); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %s. Input value %d exceeds maximum %d \n", - dacNames[ind], dacval, LTC2620_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { char *dacNames[] = {DAC_NAMES}; // validate min value @@ -1012,7 +991,6 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { LOG(logINFO, ("Setting DAC %s: %d %s \n", dacNames[ind], val, (mV ? "mV" : "dac units"))); } - if (validateDACIndex(ind, mess) == FAIL) return FAIL; @@ -1020,28 +998,14 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (mV) { if (validateDACVoltage(ind, val, mess) == FAIL) return FAIL; - if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - - if (LTC2620_SetDACValue((int)ind, dacval) == FAIL) { + { char *dacNames[] = {DAC_NAMES}; - sprintf(mess, "Could not set DAC %s.\n", dacNames[ind]); - LOG(logERROR, (mess)); - return FAIL; + if (LTC2620_SetDacValue((int)ind, dacval, dacNames[ind], mess) == FAIL) + return FAIL; } - dacValues[ind] = dacval; return OK; } diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.h index e25900b98..ef68e5685 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.h @@ -117,7 +117,6 @@ enum detectorSettings getSettings(); // parameters - dac, adc, hv int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -126,8 +125,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int getADC(enum ADCINDEX ind); int setHighVoltage(int val, char *mess); diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index 958860cafc25e8afee2a597f2971ed59929112e7..8bebc1c6433c83d8e7c0ad4a3b70d29d4ee56c44 100755 GIT binary patch delta 68447 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 PaZ)U!?emI^c>VtXE2A#; delta 68068 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%0D@EmKD^eHgos2~lt# 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 p%hBttOL-o|3JFqooNSc|WmeY~$Ip9= LTC2620_D_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %s. Input value %d exceeds maximum %d \n", - dacNames[ind], dacval, LTC2620_D_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { char *dacNames[] = {DAC_NAMES}; // validate min value @@ -1678,15 +1652,9 @@ int setDAC(enum DACINDEX ind, int val, bool mV, bool counterCheck, char *mess) { } int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) + char *dacNames[] = {DAC_NAMES}; + if (LTC2620_D_SetDacValue((int)ind, dacval, dacNames[ind], mess) == FAIL) return FAIL; - - if (LTC2620_D_SetDACValue((int)ind, dacval) == FAIL) { - char *dacNames[] = {DAC_NAMES}; - sprintf(mess, "Could not set DAC %s.\n", dacNames[ind]); - LOG(logERROR, (mess)); - return FAIL; - } detectorDacs[ind] = dacval; // validate settings @@ -1699,16 +1667,23 @@ int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { return OK; } -int getCounterIndex(enum DACINDEX ind) { +int getCounterIndexFromDacIndex(enum DACINDEX ind, int *retval_counterIndex, + char *mess) { switch (ind) { case M_VTH1: - return 0; + *retval_counterIndex = 0; + return OK; case M_VTH2: - return 1; + *retval_counterIndex = 1; + return OK; case M_VTH3: - return 2; + *retval_counterIndex = 2; + return OK; default: - return -1; + snprintf(mess, MAX_STR_LENGTH, + "Invalid DAC index %d for threshold DACs\n", ind); + LOG(logERROR, (mess)); + return FAIL; } } @@ -1717,12 +1692,9 @@ int setSingleThresholdDAC(enum DACINDEX ind, int val, bool mV, int dacval, char *dacNames[] = {DAC_NAMES}; uint32_t counterMask = getCounterMask(); - int iCounter = getCounterIndex(ind); - if (iCounter == -1) { - sprintf(mess, "Invalid DAC index %d for threshold DACs\n", ind); - LOG(logERROR, (mess)); + int iCounter; + if (getCounterIndexFromDacIndex(ind, &iCounter, mess) == FAIL) return FAIL; - } // if not disabled value, remember value if (mV || val != DEFAULT_COUNTER_DISABLED_VTH_VAL) { diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.h index 837ea37be..3775e928a 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.h @@ -135,7 +135,6 @@ void setThresholdEnergy(int counterIndex, int eV); // parameters - dac, adc, hv int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -147,7 +146,8 @@ int setDAC(enum DACINDEX ind, int val, bool mV, bool counterCheck, char *mess); /** @param dacval in dac units */ int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); -int getCounterIndex(enum DACINDEX ind); +int getCounterIndexFromDacIndex(enum DACINDEX ind, int *retval_counterIndex, + char *mess); int setSingleThresholdDAC(enum DACINDEX ind, int val, bool mV, int dacval, bool counterCheck, char *mess); int setThresholdDACs(int val, bool mV, int dacval, char *mess); diff --git a/slsDetectorServers/slsDetectorServer/include/LTC2620.h b/slsDetectorServers/slsDetectorServer/include/LTC2620.h index 9534e1e09..24262fced 100644 --- a/slsDetectorServers/slsDetectorServer/include/LTC2620.h +++ b/slsDetectorServers/slsDetectorServer/include/LTC2620.h @@ -103,11 +103,11 @@ void LTC2620_Set(int cmd, int data, int dacaddr, int chipIndex); void LTC2620_Configure(); /** - * Set Dac (obtains dacaddr, command and ichip and calls LTC2620_Set) + * Sets the ichip, address and command, Calls LTC2620_Set) * @param dacnum dac number * @param data dac value to set */ void LTC2620_SetDAC(int dacnum, int data); -/** Set dac in dac units */ -int LTC2620_SetDACValue(int dacnum, int val); \ No newline at end of file +/** From */ +int LTC2620_SetDacValue(int dacnum, int val, char *dacname, char *mess); \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h b/slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h index 14c451147..c63c332e7 100644 --- a/slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h +++ b/slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h @@ -28,6 +28,4 @@ int LTC2620_D_VoltageToDac(int voltage, int *dacval); */ int LTC2620_D_DacToVoltage(int dacval, int *voltage); -/** - * Set value in dac */ -int LTC2620_D_SetDACValue(int dacnum, int val); \ No newline at end of file +int LTC2620_D_SetDacValue(int dacnum, int val, char *dacname, char *mess); \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer/src/LTC2620.c b/slsDetectorServers/slsDetectorServer/src/LTC2620.c index be0df9a48..2a62fa982 100644 --- a/slsDetectorServers/slsDetectorServer/src/LTC2620.c +++ b/slsDetectorServers/slsDetectorServer/src/LTC2620.c @@ -222,24 +222,35 @@ void LTC2620_SetDAC(int dacnum, int data) { LTC2620_Set(cmd, data, addr, ichip); } -int LTC2620_SetDACValue(int dacnum, int val) { - LOG(logDEBUG1, ("dacnum:%d, val:%d\n", dacnum, val)); +int LTC2620_SetDacValue(int dacnum, int val, char *dacname, char *mess) { + LOG(logDEBUG1, ("dacnum:%s [%d], val:%d\n", dacname, dacnum, val)); // validate index if (dacnum < 0 || dacnum >= LTC2620_Ndac) { - LOG(logERROR, ("Dac index %d is out of bounds (0 to %d)\n", dacnum, - LTC2620_Ndac - 1)); + snprintf(mess, MAX_STR_LENGTH, "Could not set DAC. Invalid index %d\n", + dacnum); + LOG(logERROR, (mess)); return FAIL; } - - // validate value - if ((val < 0 && val != LTC2620_PWR_DOWN_VAL) || val > LTC2620_MAX_VAL) { - LOG(logERROR, ("Could not set DAC %d. Input value %d is out of bounds " - "(0 to %d)\n", - val, LTC2620_MAX_VAL)); + // validate min value + if (val < 0 && val != LTC2620_PWR_DOWN_VAL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not set DAC %s [%d]. Input value %d must be positive or %d " + "(power down)\n", + dacname, dacnum, val, LTC2620_PWR_DOWN_VAL); + LOG(logERROR, (mess)); return FAIL; } - - LOG(logINFO, ("\tSetting DAC %d: %d dac\n", dacnum, val)); + // validate maxvalue + if (val > LTC2620_MAX_VAL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not set DAC %s [%d]. Input value %d exceeds maximum %d.\n", + dacname, dacnum, val, LTC2620_MAX_VAL); + LOG(logERROR, (mess)); + return FAIL; + } + LOG(logINFO, ("\tSetting DAC %s [%d]: %d dac\n", dacname, dacnum, val)); #ifndef VIRTUAL LTC2620_SetDAC(dacnum, val); #endif diff --git a/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c b/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c index f093bae52..e08a98caf 100644 --- a/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c +++ b/slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c @@ -58,60 +58,66 @@ int LTC2620_D_DacToVoltage(int dacval, int *voltage) { LTC2620_D_HardMaxVoltage, dacval, voltage); } -int LTC2620_D_SetDACValue(int dacnum, int val) { - LOG(logDEBUG1, ("dacnum:%d, val:%d\n", dacnum, val)); - +int LTC2620_D_SetDacValue(int dacnum, int val, char *dacname, char *mess) { + LOG(logDEBUG1, ("dacnum:%s [%d], val:%d\n", dacname, dacnum, val)); // validate index if (dacnum < 0 || dacnum >= LTC2620_D_NumDacs) { - LOG(logERROR, ("Dac index %d is out of bounds (0 to %d)\n", dacnum, - LTC2620_D_NumDacs - 1)); + snprintf(mess, MAX_STR_LENGTH, "Could not set DAC. Invalid index %d\n", + dacnum); + LOG(logERROR, (mess)); return FAIL; } - - // validate value - if ((val < 0 && val != LTC2620_D_PWR_DOWN_VAL) || - val > LTC2620_D_MAX_DAC_VAL) { - LOG(logERROR, ("Could not set DAC %d. Input value %d is out of bounds " - "(0 to %d)\n", - val, LTC2620_D_MAX_DAC_VAL)); + // validate min value + if (val < 0 && val != LTC2620_D_PWR_DOWN_VAL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not set DAC %s [%d]. Input value %d must be positive or %d " + "(power down)\n", + dacname, dacnum, val, LTC2620_D_PWR_DOWN_VAL); + LOG(logERROR, (mess)); return FAIL; } - - LOG(logINFO, ("\tSetting DAC %d: %d dac\n", dacnum, val)); + // validate maxvalue + if (val > LTC2620_D_MAX_DAC_VAL) { + snprintf( + mess, MAX_STR_LENGTH, + "Could not set DAC %s [%d]. Input value %d exceeds maximum %d.\n", + dacname, dacnum, val, LTC2620_D_MAX_DAC_VAL); + LOG(logERROR, (mess)); + return FAIL; + } + LOG(logINFO, ("\tSetting DAC %s [%d]: %d dac\n", dacname, dacnum, val)); #ifdef VIRTUAL return OK; #else + // fname to write to char fname[MAX_STR_LENGTH]; memset(fname, 0, MAX_STR_LENGTH); char fnameFormat[MAX_STR_LENGTH]; memset(fnameFormat, 0, MAX_STR_LENGTH); strcpy(fnameFormat, LTC2620_D_DriverFileName); + sprintf(fname, "%s%d", fnameFormat, dacnum); #if defined(XILINX_CHIPTESTBOARDD) if (val == LTC2620_D_PWR_DOWN_VAL) { - LOG(logINFO, ("Powering down DAC %2d\n", dacnum)); strcpy(fnameFormat, LTC2620_D_PowerDownDriverFileName); + val = 1; //-100?:Invalid Argument } sprintf(fname, fnameFormat, dacnum); -#else - sprintf(fname, "%s%d", fnameFormat, dacnum); #endif LOG(logDEBUG1, ("fname %s\n", fname)); // open file FILE *fd = fopen(fname, "w"); if (fd == NULL) { - LOG(logERROR, ("Could not open file %s for writing to set dac %d\n", - fname, dacnum)); + snprintf(mess, MAX_STR_LENGTH, + "Could not open file %s for writing to set DAC %s[%d]\n", + fname, dacname, dacnum); + LOG(logERROR, (mess)); return FAIL; } -#ifdef XILINX_CHIPTESTBOARDD - if (val == LTC2620_D_PWR_DOWN_VAL) - fprintf(fd, "1\n"); //-100?:Invalid Argument - else -#endif - fprintf(fd, "%d\n", val); + fprintf(fd, "%d\n", val); fclose(fd); -#endif return OK; +#endif } diff --git a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c index 983cd2e5c..9b30ab682 100644 --- a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c @@ -1174,27 +1174,6 @@ int validateDACIndex(enum DACINDEX ind, char *mess) { return OK; } -int validateDACValue(enum DACINDEX ind, int dacval, char *mess) { - // validate min value - if (dacval < 0 && dacval != LTC2620_D_GetPowerDownValue()) { - sprintf( - mess, - "Could not set DAC %d. Input value %d must be positive or %d.\n", - ind, dacval, LTC2620_D_GetPowerDownValue()); - LOG(logERROR, (mess)); - return FAIL; - } - // validate max value - if (dacval > LTC2620_D_GetMaxInput()) { - sprintf(mess, - "Could not set DAC %d. Input value %d exceeds maximum %d \n", - ind, dacval, LTC2620_D_GetMaxInput()); - LOG(logERROR, (mess)); - return FAIL; - } - return OK; -} - int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess) { // validate min value if (voltage < 0) { @@ -1305,7 +1284,6 @@ int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess) { int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { LOG(logINFO, ("Setting DAC %d: %d %s \n", ind, val, (mV ? "mV" : "dac units"))); - if (validateDACIndex(ind, mess) == FAIL) return FAIL; @@ -1315,27 +1293,15 @@ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess) { if (validateDACVoltage(ind, val, mess) == FAIL) return FAIL; } - if (convertVoltageToDACValue(ind, val, &dacval, mess) == FAIL) return FAIL; } - - if (writeDACSpi(ind, dacval, mess) == FAIL) - return FAIL; - - return OK; -} - -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess) { - if (validateDACValue(ind, dacval, mess) == FAIL) - return FAIL; - - if (LTC2620_D_SetDACValue((int)ind, dacval) == FAIL) { - sprintf(mess, "Could not set DAC %d.\n", ind); - LOG(logERROR, (mess)); - return FAIL; + { + char dacName[20] = {0}; + snprintf(dacName, sizeof(dacName), "dac %d", ind); + if (LTC2620_D_SetDacValue((int)ind, dacval, dacName, mess) == FAIL) + return FAIL; } - dacValues[ind] = dacval; return OK; } diff --git a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.h index cd779c0c2..64766d63e 100644 --- a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.h @@ -121,7 +121,6 @@ int setModule(sls_detector_module myMod, char *mess); // parameters - dac, adc, hv int validateDACIndex(enum DACINDEX ind, char *mess); -int validateDACValue(enum DACINDEX ind, int dacval, char *mess); int validateDACVoltage(enum DACINDEX ind, int voltage, char *mess); int convertVoltageToDACValue(enum DACINDEX ind, int voltage, int *retval_dacval, char *mess); @@ -130,8 +129,6 @@ int convertDACValueToVoltage(enum DACINDEX ind, int dacval, int *retval_voltage, int getDAC(enum DACINDEX ind, bool mV, int *retval, char *mess); /** @param val value can be in mV or dac units */ int setDAC(enum DACINDEX ind, int val, bool mV, char *mess); -/** @param dacval in dac units */ -int writeDACSpi(enum DACINDEX ind, int dacval, char *mess); int getVLimit(); int setVLimit(int val, char *mess); diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 41d63f2cd..d0508b375 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -9,4 +9,4 @@ #define APIEIGER "0.0.0 0x260217" #define APIXILINXCTB "0.0.0 0x260217" #define APIJUNGFRAU "0.0.0 0x260217" -#define APIMYTHEN3 "0.0.0 0x260217" +#define APIMYTHEN3 "0.0.0 0x260218"