From 7dc9fd7cb332a3bd0bc4fd809241316bd26a2edf Mon Sep 17 00:00:00 2001 From: Iocuser Date: Thu, 2 Feb 2023 17:21:27 +0100 Subject: [PATCH] add readAtributes, readSensor functions --- ADHamaApp/src/hama.cpp | 133 ++++++++++++++++++++++++++--------------- ADHamaApp/src/hama.h | 8 ++- 2 files changed, 92 insertions(+), 49 deletions(-) diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index 3525d4d..7694367 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -393,6 +393,86 @@ int Hama::getParameterStr(int propertyID){ return int(status); } + +//============================================================================ +asynStatus Hama::readAttributes(){ + + asynStatus status = asynSuccess; + + getParameter( DCAM_IDPROP_COLORTYPE ); + //status |= getParameter( DCAM_IDPROP_BITSPERCHANNEL ); + status = getParameter( DCAM_IDPROP_IMAGE_ROWBYTES ); + status = getParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES ); + status = getParameter( DCAM_IDPROP_IMAGE_TOPOFFSETBYTES ); + //status |= getParameter( DCAM_IDPROP_IMAGE_PIXELTYPE ); + status = getParameter( DCAM_IDPROP_BUFFER_ROWBYTES ); + status = getParameter( DCAM_IDPROP_BUFFER_FRAMEBYTES ); + status = getParameter( DCAM_IDPROP_BUFFER_TOPOFFSETBYTES ); + status = getParameter( DCAM_IDPROP_BUFFER_PIXELTYPE ); + status = getParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE ); + status = getParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION ); + status = getParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME ); + status = getParameter( DCAM_IDPROP_SYSTEM_ALIVE ); + status = getParameter( DCAM_IDPROP_CONVERSIONFACTOR_COEFF ); + status = getParameter( DCAM_IDPROP_CONVERSIONFACTOR_OFFSET ); + status = getParameter( DCAM_IDPROP_NUMBEROF_VIEW ); + +return status; +} + + +//============================================================================ +asynStatus Hama::readSensor(){ + + + asynStatus status = asynSuccess; + + int minH=0, minV=0, sizeH=0, sizeV=0, binning=1; + double dminH=0, dminV=0, dsizeH=0, dsizeV=0, dbinning=1; + double dvalue = 0; + + getIntegerParam(ADMinX, &minH); + getIntegerParam(ADMinY, &minV); + getIntegerParam(ADSizeX, &sizeH); + getIntegerParam(ADSizeY, &sizeV); + getIntegerParam(hBinning, &binning); + + + dbinning = binning; + dminH = minH; + dminV = minV; + dsizeH = sizeH; + dsizeV = sizeV; + double modeON = DCAMPROP_MODE__ON; + double modeOFF = DCAMPROP_MODE__OFF; + + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeOFF); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue); + status = setIntegerParam(ADBinX, dvalue); + status = setIntegerParam(ADBinY, dvalue); + + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dvalue); + //m_err = dcamprop_getvalue(m_hdcam, , &dvalue); + + + + + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeON); + + + callParamCallbacks(); + +return status; +} + + //============================================================================ asynStatus Hama::getParameter(int propertyID){ @@ -959,16 +1039,16 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ printf("[DEBUG]::writeInit32 ADNumExposures\n"); } else if (index == ADMinX) { - updateSensorSize(); + readSensor(); } else if (index == ADMinY) { - updateSensorSize(); + readSensor(); } else if (index == ADSizeX) { - updateSensorSize(); + readSensor(); } else if (index == ADSizeY) { - updateSensorSize(); + readSensor(); } else if (index == ADReadStatus) { // dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value); @@ -1066,7 +1146,7 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ */ //-- binning and ROI else if (index == hBinning) { - updateSensorSize(); + readSensor(); printf("[DEBUG]::writeInit32 Binning %d\n", value); } else if (index == hSubarrayHPos) { @@ -1746,49 +1826,6 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){ return status; } -//============================================================================ -asynStatus Hama::updateSensorSize(){ - - - asynStatus status = asynSuccess; - - int minH=0, minV=0, sizeH=0, sizeV=0, binning=1; - double dminH=0, dminV=0, dsizeH=0, dsizeV=0, dbinning=1; - double dvalue = 0; - - getIntegerParam(ADMinX, &minH); - getIntegerParam(ADMinY, &minV); - getIntegerParam(ADSizeX, &sizeH); - getIntegerParam(ADSizeY, &sizeV); - getIntegerParam(hBinning, &binning); - - - dbinning = binning; - dminH = minH; - dminV = minV; - dsizeH = sizeH; - dsizeV = sizeV; - double modeON = DCAMPROP_MODE__ON; - double modeOFF = DCAMPROP_MODE__OFF; - - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeOFF); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue); - status = setIntegerParam(ADBinX, dvalue); - status = setIntegerParam(ADBinY, dvalue); - - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeON); - - - callParamCallbacks(); - -return status; -} //============================================================================ void Hama::report(FILE *fp, int details){ diff --git a/ADHamaApp/src/hama.h b/ADHamaApp/src/hama.h index 1132aa0..9e5bfda 100644 --- a/ADHamaApp/src/hama.h +++ b/ADHamaApp/src/hama.h @@ -289,10 +289,15 @@ private: int allocateBuffers(unsigned int); int freeBuffers(); + // These function will be read only once int connectCamera(); int disconnectCamera(); int initCamera(); - asynStatus updateSensorSize(); + + // These function can be read more than once + asynStatus readAttributes(); + asynStatus readSensor(); + asynStatus getParameter(int paramIndex); @@ -303,6 +308,7 @@ private: int setParameter(int paramIndex); int getParameterStr(int paramIndex); int getProperties(); + asynStatus setFeature(int featureIndex, double value); };