diff --git a/merlinApp/Db/merlin.template b/merlinApp/Db/merlin.template index 35aa4e9..4cfe473 100644 --- a/merlinApp/Db/merlin.template +++ b/merlinApp/Db/merlin.template @@ -360,6 +360,31 @@ record(ai, "$(P)$(R)OperatingEnergy_RBV") field(SCAN, "I/O Intr") } +# Board Temperature +# % autosave 2 +## gdatag, pv, rw, $(PORT)_merlin, BoardTemperature, Set BoardTemperature +# record(ao, "$(P)$(R)BoardTemperature") +# { +# field(PINI, "YES") +# field(DTYP, "asynFloat64") +# field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))BOARDTEMPERATURE") +# field(DESC, "Board Temperature") +# field(EGU, "C") +# field(PREC, "3") +# field(VAL, "20.000") +# } + +## gdatag, pv, ro, $(PORT)_merlin, BoardTemperature_RBV, Readback for BoardTemperature +record(ai, "$(P)$(R)BoardTemperature_RBV") +{ + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))TEMPERATURE") + field(DESC, "Board Temperature") + field(EGU, "C") + field(PREC, "3") + field(SCAN, "I/O Intr") +} + # Threshold Scan Start Energy # % autosave 2 diff --git a/merlinApp/src/merlinDetector.cpp b/merlinApp/src/merlinDetector.cpp index fc1c7ee..e363ea9 100644 --- a/merlinApp/src/merlinDetector.cpp +++ b/merlinApp/src/merlinDetector.cpp @@ -897,6 +897,25 @@ asynStatus merlinDetector::updateThresholdScanParms() return status; } +asynStatus merlinDetector::getBoardTemperature() +{ + int status; + + if (startingUp) + return asynSuccess; + + status = cmdConnection->mpxGet(MPXVAR_TEMPERATURE, + Labview_DEFAULT_TIMEOUT); + if (status == asynSuccess) + setDoubleParam(merlinBoardTemperature, + atof(cmdConnection->fromLabviewValue)); + + callParamCallbacks(); + + return (asynSuccess); +} + + static void merlinTaskC(void *drvPvt) { merlinDetector *pPvt = (merlinDetector *) drvPvt; @@ -931,6 +950,7 @@ void merlinDetector::merlinStatus() setROI(); updateThresholdScanParms(); getThreshold(); + getBoardTemperature(); result = cmdConnection->mpxGet(MPXVAR_GETSOFTWAREVERSION, Labview_DEFAULT_TIMEOUT); @@ -944,11 +964,17 @@ void merlinDetector::merlinStatus() while (1) { epicsThreadSleep(4); + this->lock(); getIntegerParam(ADStatus, &status); if (status == ADStatusIdle) { + status = cmdConnection->mpxGet(MPXVAR_TEMPERATURE, + Labview_DEFAULT_TIMEOUT); + if (status == asynSuccess) + setDoubleParam(merlinBoardTemperature, atof(cmdConnection->fromLabviewValue)); + setStringParam(ADStatusMessage, "Waiting for acquire command"); callParamCallbacks(); } @@ -1417,6 +1443,8 @@ merlinDetector::merlinDetector(const char *portName, createParam(merlinThreshold7String, asynParamFloat64, &merlinThreshold7); createParam(merlinOperatingEnergyString, asynParamFloat64, &merlinOperatingEnergy); + createParam(merlinBoardTemperatureString, asynParamFloat64, + &merlinBoardTemperature); createParam(merlinThresholdApplyString, asynParamInt32, &merlinThresholdApply); createParam(merlinThresholdAutoApplyString, asynParamInt32, diff --git a/merlinApp/src/merlinDetector.h b/merlinApp/src/merlinDetector.h index 4b1e7b1..fbce0d0 100644 --- a/merlinApp/src/merlinDetector.h +++ b/merlinApp/src/merlinDetector.h @@ -78,6 +78,7 @@ typedef enum #define merlinThreshold6String "THRESHOLD6" #define merlinThreshold7String "THRESHOLD7" #define merlinOperatingEnergyString "OPERATINGENERGY" +#define merlinBoardTemperatureString "TEMPERATURE" #define merlinThresholdApplyString "THRESHOLD_APPLY" #define merlinThresholdAutoApplyString "THRESHOLD_AUTO_APPLY" @@ -142,6 +143,7 @@ class merlinDetector: public ADDriver int merlinThreshold6; int merlinThreshold7; int merlinOperatingEnergy; + int merlinBoardTemperature; int merlinThresholdApply; int merlinThresholdAutoApply; int merlinArmed; @@ -174,6 +176,7 @@ class merlinDetector: public ADDriver asynStatus getThreshold(); asynStatus updateThresholdScanParms(); asynStatus setROI(); + asynStatus getBoardTemperature(); NDArray* copyProfileToNDArray32(size_t *dims, char *buffer, int profileMask); diff --git a/merlinApp/src/merlin_low.h b/merlinApp/src/merlin_low.h index eda88fd..277892c 100644 --- a/merlinApp/src/merlin_low.h +++ b/merlinApp/src/merlin_low.h @@ -80,6 +80,11 @@ extern int mpxDisconnect(void); #define MPXVAR_COLOURMODE (char*) "COLOURMODE" #define MPXVAR_CHARGESUMMING (char*) "CHARGESUMMING" + +// variables - Status +#define MPXVAR_TEMPERATURE (char*) "TEMPERATURE" + + // variables Threshold Scan Control #define MPXVAR_THSSCAN (char*) "THSCAN" #define MPXVAR_THWINDOWMODE (char*) "THWINDOWMODE"