add readAtributes, readSensor functions

This commit is contained in:
Iocuser
2023-02-02 17:21:27 +01:00
committed by Tomasz Brys
parent c3634f8157
commit 7dc9fd7cb3
2 changed files with 92 additions and 49 deletions

View File

@@ -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){

View File

@@ -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);
};