Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions andorApp/Db/andorCCD.template
Original file line number Diff line number Diff line change
Expand Up @@ -470,3 +470,28 @@ record(mbbi, "$(P)$(R)ColorMode_RBV")
{
field(DISA, "1")
}

record(mbbo, "$(P)$(R)AndorFanMode") {
field(PINI, "1")
field(DTYP, "asynInt32")
field(ZRST, "Full")
field(ONST, "Low")
field(TWST, "Off")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))ANDOR_FAN_MODE")
field(VAL, "0")
}

record(mbbi, "$(P)$(R)AndorFanMode_RBV") {
field(DTYP, "asynInt32")
field(ZRST, "Full")
field(ONST, "Low")
field(TWST, "Off")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))ANDOR_FAN_MODE")
field(SCAN, "I/O Intr")
}
57 changes: 36 additions & 21 deletions andorApp/src/andorCCD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ AndorCCD::AndorCCD(const char *portName, const char *installPath, int cameraSeri
createParam(AndorFrameTransferModeString, asynParamInt32, &AndorFrameTransferMode);
createParam(AndorVerticalShiftPeriodString, asynParamInt32, &AndorVerticalShiftPeriod);
createParam(AndorVerticalShiftAmplitudeString, asynParamInt32, &AndorVerticalShiftAmplitude);
createParam(AndorFanModeString, asynParamInt32, &AndorFanMode);



// Create the epicsEvent for signaling to the status task when parameters should have changed.
Expand Down Expand Up @@ -765,6 +767,19 @@ asynStatus AndorCCD::writeInt32(asynUser *pasynUser, epicsInt32 value)
status = asynError;
}
}
else if (function == AndorFanMode) {
try {
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
"%s:%s:, SetFanMode(%d)\n",
driverName, functionName, value);
checkStatus(SetFanMode(value));
} catch (const std::string &e) {
asynPrint(pasynUserSelf, ASYN_TRACE_ERROR,
"%s:%s: %s\n",
driverName, functionName, e.c_str());
status = asynError;
}
}
else {
status = ADDriver::writeInt32(pasynUser, value);
}
Expand Down Expand Up @@ -904,25 +919,25 @@ void AndorCCD::setupTrackDefn(int minX, int sizeX, int binX)
setIntegerParam(NDArraySizeY, mMultiTrack.DataHeight());
for (size_t TrackNo = 0; TrackNo < mMultiTrack.size(); TrackNo++)
{
/*
Each track must be defined by a group of six integers.
- The top and bottom positions of the tracks.
- The left and right positions for the area of interest within each track
- The horizontal and vertical binning for each track. */
/*
Andor use 1-based exclusive co-ordinates.
e.g. from SDK manual:
1 2 1 1024 1 1
3 4 1 1024 1 1
5 6 1 1024 1 1
7 8 1 1024 1 1
9 10 1 1024 1 1 */
TrackDefn[TrackNo * 6 + 0] = mMultiTrack.TrackStart(TrackNo) + 1;
TrackDefn[TrackNo * 6 + 1] = mMultiTrack.TrackEnd(TrackNo) + 2; // CCDMultiTrack uses 0-based inlcusive co-ordinates.
TrackDefn[TrackNo * 6 + 2] = minX + 1;
TrackDefn[TrackNo * 6 + 3] = minX + sizeX;
TrackDefn[TrackNo * 6 + 4] = binX;
TrackDefn[TrackNo * 6 + 5] = mMultiTrack.TrackBin(TrackNo);
/*
Each track must be defined by a group of six integers.
- The top and bottom positions of the tracks.
- The left and right positions for the area of interest within each track
- The horizontal and vertical binning for each track. */
/*
Andor use 1-based exclusive co-ordinates.
e.g. from SDK manual:
1 2 1 1024 1 1
3 4 1 1024 1 1
5 6 1 1024 1 1
7 8 1 1024 1 1
9 10 1 1024 1 1 */
TrackDefn[TrackNo * 6 + 0] = mMultiTrack.TrackStart(TrackNo) + 1;
TrackDefn[TrackNo * 6 + 1] = mMultiTrack.TrackEnd(TrackNo) + 2; // CCDMultiTrack uses 0-based inlcusive co-ordinates.
TrackDefn[TrackNo * 6 + 2] = minX + 1;
TrackDefn[TrackNo * 6 + 3] = minX + sizeX;
TrackDefn[TrackNo * 6 + 4] = binX;
TrackDefn[TrackNo * 6 + 5] = mMultiTrack.TrackBin(TrackNo);
}
checkStatus(SetCustomTrackHBin(binX));
checkStatus(SetComplexImage(int(TrackDefn.size() / ValuesPerTrack), &TrackDefn[0]));
Expand Down Expand Up @@ -1412,8 +1427,8 @@ asynStatus AndorCCD::setupAcquisition()
driverName, functionName, verticalShiftPeriod);
checkStatus(SetVSSpeed(verticalShiftPeriod));

if ((mCapabilities.ulSetFunctions & AC_SETFUNCTION_VSAMPLITUDE) != 0)
{
if ((mCapabilities.ulSetFunctions & AC_SETFUNCTION_VSAMPLITUDE) != 0)
{
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
"%s:%s:, SetVSAmplitude(%d)\n",
driverName, functionName, verticalShiftAmplitude);
Expand Down
4 changes: 3 additions & 1 deletion andorApp/src/andorCCD.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#define AndorFrameTransferModeString "ANDOR_FT_MODE"
#define AndorVerticalShiftPeriodString "ANDOR_VS_PERIOD"
#define AndorVerticalShiftAmplitudeString "ANDOR_VS_AMPLITUDE"
#define AndorFanModeString "ANDOR_FAN_MODE"

/**
* Structure defining an ADC speed for the ADAndor driver.
Expand Down Expand Up @@ -117,7 +118,8 @@ class AndorCCD : public ADDriver {
int AndorFrameTransferMode;
int AndorVerticalShiftPeriod;
int AndorVerticalShiftAmplitude;
#define LAST_ANDOR_PARAM AndorVerticalShiftAmplitude
int AndorFanMode;
#define LAST_ANDOR_PARAM AndorFanMode

Comment thread
SourabhHalli marked this conversation as resolved.
private:

Expand Down
10 changes: 9 additions & 1 deletion docs/ADAndor/andorDoc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,15 @@ those in asynNDArrayDriver.h and ADDriver.h.
- ANDOR_VS_PERIOD
- AndorVSPeriod, AndorVSPeriod_RBV
- mbbo, mbbi


* - Fan Mode Settings. Choices are:

- Full
- Low
- Off
- ANDOR_FAN_MODE
- AndorFanMode
- mbbo, mbbi

Unsupported standard driver parameters
--------------------------------------
Expand Down