Refactor sensor size and position definitions
This commit is contained in:
+24
-19
@@ -90,6 +90,30 @@ record(mbbi, "$(P)$(R)ColorMode_RBV") {
|
||||
field(SVVL, "")
|
||||
}
|
||||
|
||||
record("*", "$(P)$(R)SizeX")
|
||||
{
|
||||
field(DRVH, "2048")
|
||||
field(DRVL, "4")
|
||||
}
|
||||
|
||||
record("*", "$(P)$(R)SizeY")
|
||||
{
|
||||
field(DRVH, "2048")
|
||||
field(DRVL, "4")
|
||||
}
|
||||
|
||||
record("*", "$(P)$(R)MinX")
|
||||
{
|
||||
field(DRVH, "2044")
|
||||
field(DRVL, "0")
|
||||
}
|
||||
|
||||
record("*", "$(P)$(R)MinY")
|
||||
{
|
||||
field(DRVH, "2044")
|
||||
field(DRVL, "0")
|
||||
}
|
||||
|
||||
record("*", "$(P)$(R)AcquirePeriod_RBV")
|
||||
{
|
||||
field(FLNK, "$(P)$(R)#EVRAcquireTime-S.PROC PP MS")
|
||||
@@ -701,25 +725,6 @@ record(mbbi, "$(P)$(R)SubarrayMode-RB") {
|
||||
}
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Feature #
|
||||
##########################################################################
|
||||
record(ao, "$(P)$(R)ExposureTime-S") {
|
||||
field(DESC, "")
|
||||
field(DTYP, "asynFloat64")
|
||||
field(DRVL, "0.001004")
|
||||
field(DRVH, "10.0")
|
||||
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME")
|
||||
field(VAL, "0.009998")
|
||||
}
|
||||
|
||||
record(ai, "$(P)$(R)ExposureTime-RB") {
|
||||
field(DESC, "")
|
||||
field(DTYP, "asynFloat64")
|
||||
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME")
|
||||
field(SCAN, "I/O Intr")
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# ALU #
|
||||
##########################################################################
|
||||
|
||||
+122
-339
@@ -103,9 +103,6 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory,
|
||||
createParam( hSubarrayVSizeString, asynParamInt32, &hSubarrayVSize);
|
||||
createParam( hSubarrayModeString, asynParamInt32, &hSubarrayMode);
|
||||
|
||||
//Feature
|
||||
createParam( hExposureTimeString, asynParamFloat64, &hExposureTime);
|
||||
|
||||
//ALU
|
||||
createParam( hDefectCorrectModeString, asynParamInt32, &hDefectCorrectMode);
|
||||
createParam( hHotPixelCorrectLevelString, asynParamInt32, &hHotPixelCorrectLevel);
|
||||
@@ -481,11 +478,10 @@ int Hama::readParameter(int propertyID){
|
||||
status = setIntegerParam(hSubarrayMode, dvalue);
|
||||
break;
|
||||
|
||||
// - feature
|
||||
case DCAM_IDPROP_EXPOSURETIME: //(RW123)
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
||||
status = setIntegerParam(hExposureTime, dvalue);
|
||||
break;
|
||||
case DCAM_IDPROP_EXPOSURETIME:
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
||||
status = setDoubleParam(ADAcquireTime, dvalue);
|
||||
break;
|
||||
|
||||
// - alu
|
||||
case DCAM_IDPROP_DEFECTCORRECT_MODE: //(RW123)
|
||||
@@ -949,177 +945,6 @@ void Hama::temperatureTask(){
|
||||
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
asynStatus Hama::readAttributes(){
|
||||
|
||||
int status = 0;
|
||||
|
||||
readParameter( DCAM_IDPROP_COLORTYPE );
|
||||
//status |= readParameter( DCAM_IDPROP_BITSPERCHANNEL );
|
||||
status = readParameter( DCAM_IDPROP_IMAGE_ROWBYTES );
|
||||
status = readParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES );
|
||||
status = readParameter( DCAM_IDPROP_IMAGE_TOPOFFSETBYTES );
|
||||
//status |= readParameter( DCAM_IDPROP_IMAGE_PIXELTYPE );
|
||||
status = readParameter( DCAM_IDPROP_BUFFER_ROWBYTES );
|
||||
status = readParameter( DCAM_IDPROP_BUFFER_FRAMEBYTES );
|
||||
status = readParameter( DCAM_IDPROP_BUFFER_TOPOFFSETBYTES );
|
||||
status = readParameter( DCAM_IDPROP_BUFFER_PIXELTYPE );
|
||||
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE );
|
||||
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION );
|
||||
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME );
|
||||
status = readParameter( DCAM_IDPROP_SYSTEM_ALIVE );
|
||||
status = readParameter( DCAM_IDPROP_CONVERSIONFACTOR_COEFF );
|
||||
status = readParameter( DCAM_IDPROP_CONVERSIONFACTOR_OFFSET );
|
||||
status = readParameter( DCAM_IDPROP_NUMBEROF_VIEW );
|
||||
|
||||
return (asynStatus)status;
|
||||
}
|
||||
|
||||
|
||||
//============================================================================
|
||||
asynStatus Hama::readSensor(){
|
||||
|
||||
asynStatus status = asynSuccess;
|
||||
/*
|
||||
int minH=0, minV=0, sizeH=0, sizeV=0, binning=1, bitPerChannel = 0;
|
||||
double dminH=0, dminV=0, dsizeH=0, dsizeV=0, dbinning=1;
|
||||
double dFrameBytes = 0, dRowBytes = 0;
|
||||
double dvalue = 0;
|
||||
int mode = 0;
|
||||
|
||||
|
||||
getIntegerParam(ADMinX, &minH);
|
||||
getIntegerParam(ADMinY, &minV);
|
||||
getIntegerParam(ADSizeX, &sizeH);
|
||||
getIntegerParam(ADSizeY, &sizeV);
|
||||
getIntegerParam(hBinning, &binning);
|
||||
getIntegerParam(hBitPerChannel, &bitPerChannel);
|
||||
getIntegerParam(hSubarrayMode ,&mode);
|
||||
|
||||
if(mode == DCAMPROP_MODE__OFF){
|
||||
status = asynError;
|
||||
return status ;
|
||||
}
|
||||
|
||||
|
||||
dbinning = binning;
|
||||
dminH = minH;
|
||||
dminV = minV;
|
||||
dsizeH = sizeH;
|
||||
dsizeV = sizeV;
|
||||
double modeON = DCAMPROP_MODE__ON;
|
||||
double modeOFF = DCAMPROP_MODE__OFF;
|
||||
double dsensorH = 2048;
|
||||
double dsensorV = 2048;
|
||||
|
||||
|
||||
//m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeOFF);
|
||||
//if(failed(m_err))
|
||||
// printError(m_hdcam, m_err, "dcamprop_SubarrayMode()", " VALUE:%f\n", modeOFF);
|
||||
|
||||
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_Binning()", " VALUE:%f\n", dbinning);
|
||||
status = setIntegerParam(hBinning, dbinning);
|
||||
|
||||
printf("BEFORE::::n");
|
||||
printf("SUBARRAY Hpos = %f \n", dminH);
|
||||
printf("SUBARRAY Vpos = %f \n", dminV);
|
||||
printf("SUBARRAY Hsize = %f \n", dsizeH);
|
||||
printf("SUBARRAY Vsize = %f \n", dsizeV);
|
||||
|
||||
if(dsizeH > (dsensorH - dminH)){
|
||||
dsizeH = dsensorH - dminH;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
}
|
||||
if(dsizeV > (dsensorV - dminV)){
|
||||
dsizeV = dsensorV - dminV;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
||||
}
|
||||
|
||||
|
||||
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_SubarrayHPos()", " VALUE:%f\n", dminH);
|
||||
else
|
||||
status = setIntegerParam(ADMinX, dminH);
|
||||
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_SubarrayVPos()", " VALUE:%f\n", dminV);
|
||||
else status = setIntegerParam(ADMinY, dminV);
|
||||
|
||||
//dsizeH = 2048 - dminH;
|
||||
//dsizeV = 2048 - dminV;
|
||||
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_SubarrayHSize()", " VALUE:%f\n", dsizeH);
|
||||
else status = setIntegerParam(ADSizeX, dsizeH);
|
||||
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_SubarrayVSize()", " VALUE:%f\n", dsizeV);
|
||||
else status = setIntegerParam(ADSizeY, dsizeV);
|
||||
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_ImageWidth()", " VALUE:%f\n", dvalue);
|
||||
else status = setIntegerParam(ADBinX, dvalue);
|
||||
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_ImageHeight()", " VALUE:%f\n", dvalue);
|
||||
else status = setIntegerParam(ADBinY, dvalue);
|
||||
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dRowBytes);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_ImageRowBytes()", " VALUE:%f\n", dRowBytes);
|
||||
else status = setIntegerParam(hImageRowbytes, dRowBytes);
|
||||
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
if(failed(m_err))
|
||||
printError(m_hdcam, m_err, "dcamprop_ImageFrameBytes()", " VALUE:%f\n", dFrameBytes);
|
||||
else status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
|
||||
//m_err = dcamprop_getvalue(m_hdcam, , &dvalue);
|
||||
|
||||
|
||||
printf("AFTER::::n");
|
||||
printf("SUBARRAY Hpos = %f \n", dminH);
|
||||
printf("SUBARRAY Vpos = %f \n", dminV);
|
||||
printf("SUBARRAY Hsize = %f \n", dsizeH);
|
||||
printf("SUBARRAY Vsize = %f \n", dsizeV);
|
||||
|
||||
printf("binning = %f \n", dbinning);
|
||||
|
||||
unsigned long size = (dsizeH-dminH) * (dsizeV-dminV) / dbinning * 2;
|
||||
printf("ImageSize = %ld\n", size);
|
||||
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
status = setIntegerParam(hImageRowbytes, dRowBytes);
|
||||
|
||||
int bytes = 2;
|
||||
if(bitPerChannel >=12) bytes = 2;
|
||||
else bytes = 1;
|
||||
|
||||
status = setIntegerParam(NDArraySize, bytes);
|
||||
|
||||
|
||||
// m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeON);
|
||||
|
||||
|
||||
callParamCallbacks();
|
||||
*/
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================================
|
||||
asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
|
||||
asynStatus status = asynSuccess;
|
||||
@@ -1150,18 +975,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
|
||||
stopAcquire();
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if (index == ADMaxSizeX_RBV) {
|
||||
dcamprop_setvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, value);
|
||||
dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &value_d);
|
||||
printf("[DEBUG]::function ADNumExposures\n");
|
||||
}
|
||||
else if (index == ADMaxSizeY_RBV) {
|
||||
dcamprop_setvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, value);
|
||||
dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &value_d);
|
||||
printf("[DEBUG]::function ADMinX\n");
|
||||
}
|
||||
*/
|
||||
else if (index == ADImageMode) {
|
||||
// dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value);
|
||||
// dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d);
|
||||
@@ -1172,131 +985,123 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
|
||||
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value_d);
|
||||
printf("[DEBUG]::writeInit32 ADNumExposures\n");
|
||||
}
|
||||
else if (index == ADMinX) {
|
||||
|
||||
int sensorH = 2048, minH = 0, sizeH = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinX, &minH);
|
||||
getIntegerParam(ADSizeX, &sizeH);
|
||||
|
||||
if(sizeH > (sensorH - minH)){
|
||||
sizeH = sensorH - minH;
|
||||
double dsizeH = sizeH;
|
||||
double dminH = minH;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
printf("--- minH = %d\n", sizeH);
|
||||
setIntegerParam(ADSizeX, sizeH);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else{
|
||||
double dsizeH = sizeH;
|
||||
double dminH = minH;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
}
|
||||
else if (index == ADMinY) {
|
||||
int sensorV = 2048, minV = 0, sizeV = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinY, &minV);
|
||||
getIntegerParam(ADSizeY, &sizeV);
|
||||
else if (index == ADMinX) {
|
||||
int minH = 0, sizeH = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinX, &minH);
|
||||
getIntegerParam(ADSizeX, &sizeH);
|
||||
|
||||
if(sizeV > (sensorV - minV)){
|
||||
sizeV = sensorV - minV;
|
||||
double dsizeV = sizeV;
|
||||
double dminV = minV;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
||||
printf("--- sizeV = %d\n", sizeV);
|
||||
setIntegerParam(ADSizeY, sizeV);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else{
|
||||
double dsizeV = sizeV;
|
||||
double dminV = minV;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeV);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminV);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
}
|
||||
else if (index == ADSizeX) {
|
||||
int sensorX = 2048, minX = 0, sizeX = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinX, &minX);
|
||||
getIntegerParam(ADSizeX, &sizeX);
|
||||
|
||||
if(sizeX < sensorX - minX){
|
||||
double dsizeX = sizeX;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
status = setIntegerParam(ADSizeX, (int)dsizeX);
|
||||
printf("1-Status = %d\n", status);
|
||||
}
|
||||
else{
|
||||
|
||||
double dsizeX = sensorX - minX;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(ADSizeX, sizeX);
|
||||
printf("2-Status = %d\n", status);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
if(sizeH > (MAX_H_SENSOR_SIZE - minH)) {
|
||||
sizeH = MAX_H_SENSOR_SIZE - minH;
|
||||
double dsizeH = sizeH;
|
||||
double dminH = minH;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
setIntegerParam(ADSizeX, sizeH);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else {
|
||||
double dsizeH = sizeH;
|
||||
double dminH = minH;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
else if (index == ADMinY) {
|
||||
int minV = 0, sizeV = 0;
|
||||
double dFrameBytes = 0;
|
||||
status = getIntegerParam(ADMinY, &minV);
|
||||
getIntegerParam(ADSizeY, &sizeV);
|
||||
|
||||
}
|
||||
else if (index == ADSizeY) {
|
||||
int sensorY = 2048, minY = 0, sizeY = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinY, &minY);
|
||||
getIntegerParam(ADSizeY, &sizeY);
|
||||
if(sizeV > (MAX_V_SENSOR_SIZE - minV)) {
|
||||
sizeV = MAX_V_SENSOR_SIZE - minV;
|
||||
double dsizeV = sizeV;
|
||||
double dminV = minV;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
||||
setIntegerParam(ADSizeY, sizeV);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else {
|
||||
double dsizeV = sizeV;
|
||||
double dminV = minV;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
||||
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
|
||||
if(sizeY < sensorY - minY){
|
||||
double dsizeY = sizeY;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(ADSizeX, (int)dsizeY);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else{
|
||||
double dsizeY = sizeY;
|
||||
//printf("---4 sensor = %d min = %d size = %d\n", sensorY, minY, sizeY);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY);
|
||||
//if(failed(m_err)) printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%d\n", index, (int)dsizeY);
|
||||
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
//if(failed(m_err)) printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%d\n", index, (int)dFrameBytes);
|
||||
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
status = setIntegerParam(ADSizeX, (int)dsizeY);
|
||||
}
|
||||
else if (index == ADSizeX) {
|
||||
int minX = 0, sizeX = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinX, &minX);
|
||||
getIntegerParam(ADSizeX, &sizeX);
|
||||
|
||||
}
|
||||
if(sizeX < MAX_H_SENSOR_SIZE - minX) {
|
||||
double dsizeX = roundToNearestMultipleOfFour(sizeX);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
value = (int)dsizeX;
|
||||
}
|
||||
else {
|
||||
double dsizeX = MAX_H_SENSOR_SIZE - minX;
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
value = (int)dsizeX;
|
||||
}
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
|
||||
else if (index == ADSizeY) {
|
||||
int minY = 0, sizeY = 0;
|
||||
double dFrameBytes = 0;
|
||||
getIntegerParam(ADMinY, &minY);
|
||||
getIntegerParam(ADSizeY, &sizeY);
|
||||
if(sizeY < MAX_V_SENSOR_SIZE - minY) {
|
||||
double dsizeY = roundToNearestMultipleOfFour(sizeY);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
value = (int)dsizeY;
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
}
|
||||
else {
|
||||
double dsizeY = 0;
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
||||
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
||||
value = (int)dsizeY;
|
||||
}
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
else if (index == ADReadStatus) {
|
||||
// dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value);
|
||||
// dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d);
|
||||
printf("[DEBUG]::writeInit32 ADReadStatus\n");
|
||||
}
|
||||
//-- Sensor mode and speed
|
||||
else if (index == hSensorMode) {
|
||||
printf("[DEBUG]::writeInit32 SensorMode %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
else if (index == hReadoutSpeed) {
|
||||
printf("[DEBUG]::writeInit32 ReadoutSpeed %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
|
||||
else if (index == hSensorMode) {
|
||||
printf("[DEBUG]::writeInit32 SensorMode %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue);
|
||||
if (failed(m_err)) printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
|
||||
else if (index == hReadoutSpeed) {
|
||||
printf("[DEBUG]::writeInit32 ReadoutSpeed %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue);
|
||||
if (failed(m_err)) printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
}
|
||||
|
||||
else if (index == hReadoutDirection) {
|
||||
printf("[DEBUG]::writeInit32 ReadoutDirection %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &dvalue, 0);
|
||||
@@ -1378,36 +1183,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value) {
|
||||
status = setIntegerParam(hBinning, dbinning);
|
||||
printf("[DEBUG]::writeInit32 Binning %d\n", value);
|
||||
}
|
||||
/*
|
||||
else if (index == hSubarrayHPos) {
|
||||
printf("[DEBUG]::function SubArrayHPos %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
else if (index == hSubarrayHSize) {
|
||||
printf("[DEBUG]::writeInit32 SubarrayHSize %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
else if (index == hSubarrayVPos) {
|
||||
printf("[DEBUG]::writeInit32 SubarrayVPos %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
else if (index == hSubarrayVSize) {
|
||||
printf("[DEBUG]::writeInit32 SubarrayVSize %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue);
|
||||
if(failed(m_err)) {
|
||||
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
||||
}
|
||||
}
|
||||
*/
|
||||
else if (index == hSubarrayMode) {
|
||||
printf("[DEBUG]::writeInit32 SubarrayMode %d\n", value);
|
||||
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &dvalue);
|
||||
@@ -1642,7 +1417,6 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
||||
//-- Feature
|
||||
if(index == ADAcquireTime) {
|
||||
printf("[DEBUG]::function ADAcquireTime from camera: %f\n", value);
|
||||
|
||||
int trigger_mode = 0;
|
||||
double acquire_period = 0;
|
||||
status = getDoubleParam(ADAcquirePeriod, &acquire_period);
|
||||
@@ -1662,7 +1436,10 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
||||
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL);
|
||||
callParamCallbacks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
readParameter(DCAM_IDPROP_TIMING_READOUTTIME);
|
||||
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value);
|
||||
}
|
||||
|
||||
else if(index == ADAcquirePeriod) {
|
||||
@@ -2393,6 +2170,12 @@ int Hama::getProperties(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Hama::roundToNearestMultipleOfFour(int value) {
|
||||
int remainder = value % 4;
|
||||
if (remainder == 0) return value;
|
||||
else if (remainder <= 2) return value - remainder;
|
||||
else return value + (4 - remainder);
|
||||
}
|
||||
|
||||
|
||||
//============================================================================
|
||||
|
||||
+4
-10
@@ -6,6 +6,9 @@
|
||||
|
||||
#define MAX_FEATURE_NAME_LEN 64
|
||||
|
||||
#define MAX_H_SENSOR_SIZE 2048
|
||||
#define MAX_V_SENSOR_SIZE 2048
|
||||
|
||||
#define hFrameRateString "H_FRAMERATE"
|
||||
#define hHamaNameString "H_HAMA_NAME" /* asynOctet ro */
|
||||
#define hVendorString "H_VENDOR" /* asynOctet ro */
|
||||
@@ -48,9 +51,6 @@
|
||||
// #define hFrameBundleMode (usb3 only not implemented)
|
||||
// #define hFrameBundleNumber (usb3 only not implemented)
|
||||
|
||||
// Feature
|
||||
#define hExposureTimeString "H_EXPOSURE_TIME" /* asynFloat64 rw */
|
||||
|
||||
// ALU
|
||||
#define hDefectCorrectModeString "H_DEFECTCORRECT_MODE" /* asynInt32 rw */
|
||||
#define hHotPixelCorrectLevelString "H_HOT_PIXEL_CORRECT_LEVEL" /* asynInt32 rw */
|
||||
@@ -301,14 +301,7 @@ private:
|
||||
int connectCamera();
|
||||
int disconnectCamera();
|
||||
int initCamera();
|
||||
|
||||
// These function can be read more than once
|
||||
asynStatus readAttributes();
|
||||
asynStatus readSensor();
|
||||
|
||||
|
||||
|
||||
|
||||
// helper functions for dcamapi
|
||||
void printError(HDCAM hdcam, DCAMERR errid, const char* apiname, const char* fmt=NULL, ...);
|
||||
void printInfo(HDCAM hdcam);
|
||||
@@ -316,6 +309,7 @@ private:
|
||||
|
||||
|
||||
int getProperties();
|
||||
int roundToNearestMultipleOfFour(int value);
|
||||
|
||||
asynStatus setFeature(int featureIndex, double value);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user