diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index d216d21..33b3451 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -205,7 +205,8 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, /* shutdown on exit */ //epicsAtExit(c_shutdown, this); - printf("[DEBUG] === END Constructor ADHama ===\n"); + printf("\n\n=== END Constructor ADHama ===\n"); + printf("===================================================================\n"); } //============================================================================ //Hama::~Hama(){ @@ -249,7 +250,7 @@ int Hama::initCamera(){ err |= getParameter(DCAM_IDPROP_TRIGGER_MODE); err |= getParameter(DCAM_IDPROP_TRIGGERACTIVE); err |= getParameter(DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE); - err |= getParameter(DCAM_IDPROP_OUTPUTTRIGGER_POLARITY); + err |= getParameter(DCAM_IDPROP_TRIGGERPOLARITY); err |= getParameter(DCAM_IDPROP_TRIGGER_CONNECTOR); err |= getParameter(DCAM_IDPROP_TRIGGERTIMES); err |= getParameter(DCAM_IDPROP_TRIGGERDELAY); @@ -331,166 +332,149 @@ return int(status); int Hama::getParameter(int propertyID){ printf("\n[DEBUG] *** Function:getProperty\n"); - asynStatus status = asynSuccess; - - double value_d = 0; - /* - dcamprop_getvalue(m_hdcam, propertyID, &value); - setIntegerParameter(ADMaxSizeX, value); - printf("PropertyID = %f\n", value); -*/ + double dvalue = 0; switch (propertyID){ case DETECTOR_PIXEL_NUM_HORZ: - dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &value_d); - status = setIntegerParam(ADMaxSizeX, value_d); - printf("SENSOR SIZE_X = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &dvalue); + status = setIntegerParam(ADMaxSizeX, dvalue); break; case DETECTOR_PIXEL_NUM_VERT: - dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &value_d); - status = setIntegerParam(ADMaxSizeY, value_d); - printf("SENSOR SIZE_Y = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &dvalue); + status = setIntegerParam(ADMaxSizeY, dvalue); break; case DCAM_IDPROP_IMAGE_PIXELTYPE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &value_d); - status = setIntegerParam(hImagePixelType, value_d); - printf("The PIXELTYPE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &dvalue); + status = setIntegerParam(hImagePixelType, dvalue); break; case DCAM_IDPROP_IMAGE_WIDTH: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &value_d); - status = setIntegerParam(hImageWidth, value_d); - printf("The IMAGE_WIDTH = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue); + status = setIntegerParam(hImageWidth, dvalue); break; case DCAM_IDPROP_IMAGE_HEIGHT: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &value_d); - status = setIntegerParam(hImageHeight, value_d); - printf("The IMAGE_HEIGHT = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue); + status = setIntegerParam(hImageHeight, dvalue); break; case DCAM_IDPROP_IMAGE_ROWBYTES: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &value_d); - status = setIntegerParam(hImageRowbytes, value_d); - printf("The IMAGE_ROWBYTES = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dvalue); + status = setIntegerParam(hImageRowbytes, dvalue); break; case DCAM_IDPROP_IMAGE_FRAMEBYTES: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &value_d); - status = setIntegerParam(hImageFramebytes, value_d); - printf("The IMAGE FRAMEBYTES = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dvalue); + status = setIntegerParam(hImageFramebytes, dvalue); + break; + + case DCAM_IDPROP_BINNING: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING, &dvalue); + status = setIntegerParam(hBinning, dvalue); break; case DCAM_IDPROP_SUBARRAYHSIZE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &value_d); - status = setIntegerParam(ADSizeX, value_d); - printf("The SENSOR HSIZE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue); + status = setIntegerParam(ADSizeX, dvalue); break; case DCAM_IDPROP_SUBARRAYVSIZE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &value_d); - status = setIntegerParam(ADSizeY, value_d); - printf("The SENSOR VSIZE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue); + status = setIntegerParam(ADSizeY, dvalue); break; case DCAM_IDPROP_SUBARRAYHPOS: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &value_d); - status = setIntegerParam(ADMinX, value_d); - printf("The SENSOR HPOS = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue); + status = setIntegerParam(ADMinX, dvalue); break; case DCAM_IDPROP_SUBARRAYVPOS: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &value_d); - status = setIntegerParam(ADMinY, value_d); - printf("The SENSOR VPOS = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue); + status = setIntegerParam(ADMinY, dvalue); break; case DCAM_IDPROP_SENSORMODE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &value_d); - status = setIntegerParam(hSensorMode, value_d); - //printf("The SENSOR MODE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue); + status = setIntegerParam(hSensorMode, dvalue); break; case DCAM_IDPROP_READOUTSPEED: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &value_d); - status = setIntegerParam(hReadoutSpeed, value_d); - //printf("The READOUT SPEED = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue); + status = setIntegerParam(hReadoutSpeed, dvalue); break; case DCAM_IDPROP_READOUT_DIRECTION: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &value_d); - status = setIntegerParam(hReadoutDirection, value_d); - //printf("The READOUT DIRECTION = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &dvalue); + status = setIntegerParam(hReadoutDirection, dvalue); break; case DCAM_IDPROP_TRIGGERSOURCE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &value_d); - status = setIntegerParam(hTriggerSource, value_d); - //printf("The = TRIGGER SOURCE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &dvalue); + status = setIntegerParam(hTriggerSource, dvalue); break; case DCAM_IDPROP_TRIGGER_MODE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &value_d); - status = setIntegerParam(hTriggerMode, value_d); - //printf("The TRIGGER MODE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &dvalue); + status = setIntegerParam(hTriggerMode, dvalue); break; case DCAM_IDPROP_TRIGGERACTIVE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &value_d); - status = setIntegerParam(hTriggerActive, value_d); - //printf("The TRIGGER ACTIVE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &dvalue); + status = setIntegerParam(hTriggerActive, dvalue); break; case DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &value_d); - status = setIntegerParam(hTriggerGlobalExposure, value_d); - //printf("The TRIGGER GLOBAL EXPOSURE = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &dvalue); + status = setIntegerParam(hTriggerGlobalExposure, dvalue); break; case DCAM_IDPROP_TRIGGERPOLARITY: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &value_d); - status = setIntegerParam(hTriggerPolarity, value_d); - //printf("The TRIGGER POLARITY = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &dvalue); + status = setIntegerParam(hTriggerPolarity, dvalue); break; case DCAM_IDPROP_TRIGGER_CONNECTOR: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &value_d); - status = setIntegerParam(hTriggerConnector, value_d); - //printf("The TRIGGER CONNECTOR = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &dvalue); + status = setIntegerParam(hTriggerConnector, dvalue); break; case DCAM_IDPROP_TRIGGERTIMES: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &value_d); - status = setIntegerParam(hTriggerTimes, value_d); - //printf("The TRIGGER TIMES = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &dvalue); + status = setIntegerParam(hTriggerTimes, dvalue); break; case DCAM_IDPROP_TRIGGERDELAY: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERDELAY, &value_d); - status = setDoubleParam(hTriggerDelay, value_d); - //printf("The TRIGGER DELAY = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERDELAY, &dvalue); + status = setDoubleParam(hTriggerDelay, dvalue); break; case DCAM_IDPROP_INTERNALTRIGGER_HANDLING: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &value_d); - status = setIntegerParam(hInternalTriggerHandling, value_d); - //printf("The INTERNAL TRIGGE HANDLING = %f\n", value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &dvalue); + status = setIntegerParam(hInternalTriggerHandling, dvalue); break; case DCAM_IDPROP_TIMESTAMP_PRODUCER: - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMESTAMP_PRODUCER, &value_d); - status = setIntegerParam(hTimeStampProducer, value_d); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMESTAMP_PRODUCER, &dvalue); + status = setIntegerParam(hTimeStampProducer, dvalue); break; default: - printf("The init parameter not recognised.... = %d\n", propertyID); + char text[256]; + dcamprop_getname(m_hdcam, propertyID, text, sizeof(text)); + printf("Parameter not recognised, IDPROP:0x%08x, NAME:%s\n", propertyID, text); break; } + if(failed(m_err)) { + char text[256]; + dcamprop_getname(m_hdcam, propertyID, text, sizeof(text)); + printError(m_hdcam, m_err, "dcamprop_getvalue()", "IDPROP:0x%08x, VALUE:%s\n", propertyID, text); + } + /* Do callbacks so higher layers see any changes */ status = (asynStatus) callParamCallbacks(); return int(status); @@ -761,7 +745,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ int adstatus; // the setget function required double parameter double dvalue = double(value); - double value_d = 0; getParamName(index, ¶mName); @@ -1414,10 +1397,11 @@ return(asynSuccess); int Hama::updateSensorSize(){ int minH=0, minV=0, sizeH=0, sizeV=0, binning=1; + double dminH=0, dminV=0, dsizeH=0, dsizeV=0, dbinning=1; int status = 0; - double v1,v2,v3,v4,b1; - double a1,a2,a3,a4; + //double v1,v2,v3,v4,b1; + //double a1,a2,a3,a4; status |= getIntegerParam(ADMinX, &minH); status |= getIntegerParam(ADMinY, &minV); @@ -1426,13 +1410,29 @@ int Hama::updateSensorSize(){ status |= getIntegerParam(hBinning, &binning); printf("minH = %d\nminV = %d\nSizeV = %d\nSizeH = %d\n", minH, minV, sizeV, sizeH); + + dbinning = binning; + dminH = minH; + dminV = minV; + dsizeH = sizeH; + dsizeV = sizeV; + double mode = DCAMPROP_MODE__ON; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &mode); + 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); + + +/* double value = 0; dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING_INDEPENDENT, &value); - printf("DCAM_IDPROP_BINNING_INDEPENDENT: %d\n", value); + printf("DCAM_IDPROP_BINNING_INDEPENDENT: %d\n", (int)value); dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &value); - printf("DCAM_IDPROP_SUBARRAYMODE: %d\n", value); + printf("DCAM_IDPROP_SUBARRAYMODE: %d\n", (int)value); // set subarray mode off. This setting is not mandatory, // but you have to control the setting order of offset and size when mode is on. @@ -1467,25 +1467,24 @@ int Hama::updateSensorSize(){ if( failed(m_err) ) printError( m_hdcam, m_err, "dcambuf_release()" ); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &a1); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &a2); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &a3); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &a4); +*/ status = (asynStatus) callParamCallbacks(); + //dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &a1); + //dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &a2); + //dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &a3); + //dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &a4); + printf("status = %d\n", status); + printf("\n"); - printf("updateSensorSize, hPos = %d\n", int(v1) ); - printf("updateSensorSize, hSize = %d\n", int(v3) ); - printf("updateSensorSize, vPos = %d\n", int(v2) ); - printf("updateSensorSize, vSize = %d\n", int(v4) ); - printf("updateSensorSize, binning = %d\n", int(b1) ); - printf("updateSensorSize, imageSizeH = %d\n", int(a1) ); - printf("updateSensorSize, imageSizeV = %d\n", int(a2) ); - printf("updateSensorSize, imageSize = %d\n", int(a1*a2) ); - printf("updateSensorSize, rowBytes = %d\n", int(a3) ); - printf("updateSensorSize, frameBytes = %d\n", int(a4) ); + printf("updateSensorSize, hPos = %d\n", int(minH) ); + printf("updateSensorSize, hSize = %d\n", int(sizeH) ); + printf("updateSensorSize, vPos = %d\n", int(minV) ); + printf("updateSensorSize, vSize = %d\n", int(sizeV) ); + printf("updateSensorSize, binning = %d\n", int(binning) ); + printf("updateSensorSize, frameBytes = %d\n", int(sizeH*sizeV) ); return 0; } @@ -1710,6 +1709,7 @@ int Hama::freeBuffers(){ return 0; } +//============================================================================ asynStatus Hama::stopAcquire(void) { asynStatus status = asynSuccess; @@ -1718,6 +1718,7 @@ asynStatus Hama::stopAcquire(void) return status; } +//============================================================================ asynStatus Hama::startAcquire(void) { asynStatus status = asynSuccess; @@ -1752,6 +1753,7 @@ asynStatus Hama::startAcquire(void) return status; } +//============================================================================ inline void* memcpy_s( void* dst, size_t dstsize, const void* src, size_t srclen ) { if( dstsize < srclen ) @@ -1760,6 +1762,7 @@ inline void* memcpy_s( void* dst, size_t dstsize, const void* src, size_t srclen return memcpy( dst, src, srclen ); } +//============================================================================ asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, int32& ts_sec, int32& ts_microsec) @@ -1863,6 +1866,7 @@ void Hama::getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, int3 framebytes = (int32)property_value; } +//============================================================================ asynStatus Hama::imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo) { DCAMERR err;