From 312b5a9ff17ebd8a577e4263ef08cf609d8e884c Mon Sep 17 00:00:00 2001 From: Iocuser Date: Wed, 30 Nov 2022 22:07:44 +0100 Subject: [PATCH] fix bug in parameter library, fix some small bugs --- ADHamaApp/Db/hama.template | 2 + ADHamaApp/src/hama.cpp | 84 ++++++++++++++++++++++++++------------ ADHamaApp/src/hama.h | 9 ++-- 3 files changed, 63 insertions(+), 32 deletions(-) diff --git a/ADHamaApp/Db/hama.template b/ADHamaApp/Db/hama.template index 42b71a8..1c400aa 100644 --- a/ADHamaApp/Db/hama.template +++ b/ADHamaApp/Db/hama.template @@ -1292,6 +1292,8 @@ record(mbbo, "$(P)$(R)BitsPerChannel-S") { field(ZRST, "12 bits") field(ONVL, "16") field(ONST, "16 bits") + field(DRVL, "12") + field(DRVH, "16") field(VAL, "16") field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BIT_PER_CHANNEL") } diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index 508e6d2..6aecca7 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -19,7 +19,7 @@ #include -#define NUM_HAMA_PARAMS ((int)(&LAST_HAMA_PARAM - &FIRST_HAMA_PARAM + 1)) +//#define NUM_HAMA_PARAMS ((int)(&LAST_HAMA_PARAM - &FIRST_HAMA_PARAM + 1)) static const char *driverName="drvHama"; @@ -37,7 +37,7 @@ static void c_temperaturetask(void *arg) { //============================================================================ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, int priority, int stackSize, int maxFrames) - : ADDriver(portName, 1, NUM_HAMA_PARAMS, maxBuffers, maxMemory, + : ADDriver(portName, 1, 0, maxBuffers, maxMemory, asynEnumMask, asynEnumMask, ASYN_CANBLOCK, /* ASYN_CANBLOCK=1 ASYN_MULTIDEVICE=0 */ 1, /* autoConnect=1 */ @@ -62,7 +62,8 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, //General - createParam( HamaName, asynParamOctet, &hHamaName); + createParam( hFrameRateString, asynParamOctet, &hFrameRate); + createParam( hHamaNameString, asynParamOctet, &hHamaName); createParam( hVendorString, asynParamOctet, &hVendor); createParam( hModelString, asynParamOctet, &hModel); createParam( hCameraIDString, asynParamOctet, &hCameraID); @@ -192,6 +193,9 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, initCamera(); + printf("[DEBUG]:: FIRST_HAMA_PARAM = %d \n", FIRST_HAMA_PARAM); + //printf("[-DEBUG]:: FIRST_HAMA_PARAM = %d / LAST_HAMA_PARAM = %d, %d)\n", + //FIRST_HAMA_PARAM, LAST_HAMA_PARAM, NUM_HAMA_PARAMS); // printf("\n\n============================ Info Camera =========================\n"); //dcamcon_show_dcamdev_info( m_hdcam ); @@ -237,24 +241,12 @@ int Hama::initCamera(){ err |= getParameterStr(DCAM_IDSTR_MODULEVERSION); err |= getParameterStr(DCAM_IDSTR_DCAMAPIVERSION); + // SENSOR MODE AND SPEED ------------------------ err |= getParameter(DCAM_IDPROP_SENSORMODE); err |= getParameter(DCAM_IDPROP_READOUTSPEED); err |= getParameter(DCAM_IDPROP_READOUT_DIRECTION); - err |= getParameter(DETECTOR_PIXEL_NUM_HORZ); - err |= getParameter(DETECTOR_PIXEL_NUM_VERT); - - err |= getParameter( DCAM_IDPROP_IMAGE_PIXELTYPE); - err |= getParameter( DCAM_IDPROP_IMAGE_WIDTH); - err |= getParameter( DCAM_IDPROP_IMAGE_ROWBYTES); - err |= getParameter( DCAM_IDPROP_IMAGE_HEIGHT); - err |= getParameter( DCAM_IDPROP_BINNING); - err |= getParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES); - err |= getParameter( DCAM_IDPROP_SUBARRAYHPOS); - err |= getParameter( DCAM_IDPROP_SUBARRAYVPOS); - err |= getParameter( DCAM_IDPROP_SUBARRAYHSIZE); - err |= getParameter( DCAM_IDPROP_SUBARRAYVSIZE); - + // TRIGGER -------------------------------------- err |= getParameter(DCAM_IDPROP_TRIGGERSOURCE); err |= getParameter(DCAM_IDPROP_TRIGGER_MODE); err |= getParameter(DCAM_IDPROP_TRIGGERACTIVE); @@ -265,6 +257,35 @@ int Hama::initCamera(){ err |= getParameter(DCAM_IDPROP_TRIGGERDELAY); err |= getParameter(DCAM_IDPROP_INTERNALTRIGGER_HANDLING); + // BINNING AND ROI ------------------------------ + err |= getParameter( DCAM_IDPROP_BINNING); + err |= getParameter( DCAM_IDPROP_SUBARRAYHPOS); + err |= getParameter( DCAM_IDPROP_SUBARRAYVPOS); + err |= getParameter( DCAM_IDPROP_SUBARRAYHSIZE); + err |= getParameter( DCAM_IDPROP_SUBARRAYVSIZE); + err |= getParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES); + err |= getParameter( DCAM_IDPROP_IMAGE_PIXELTYPE); + err |= getParameter( DCAM_IDPROP_IMAGE_WIDTH); + err |= getParameter( DCAM_IDPROP_IMAGE_ROWBYTES); + err |= getParameter( DCAM_IDPROP_IMAGE_HEIGHT); + //SUBARRAYMODE + + // FEATURE ----------------------------------------------- + //EXPOSURETIME + + // ALU --------------------------------------------------- + err |= getParameter( DCAM_IDPROP_DEFECTCORRECT_MODE); + //HOTPIXEL + //INTENSITYLUT_MODE + //INTENSITYLUT_PAGE + //EXTRAXTIONMODE + + // OUTPUT TRIGGER ---------------------------------------- + + // MASTER PULSE ------------------------------------------ + // SYNCHRONOUS TIMING ------------------------------------ + // SYSTEM INFORMATION ------------------------------------ + err |= getParameter(DCAM_IDPROP_BITSPERCHANNEL); err |= getParameter(DCAM_IDPROP_IMAGE_TOPOFFSETBYTES); err |= getParameter(DCAM_IDPROP_BUFFER_ROWBYTES); err |= getParameter(DCAM_IDPROP_BUFFER_FRAMEBYTES); @@ -280,6 +301,8 @@ int Hama::initCamera(){ err |= getParameter(DCAM_IDPROP_TIMESTAMP_PRODUCER); err |= getParameter(DCAM_IDPROP_FRAMESTAMP_PRODUCER); + err |= getParameter(DETECTOR_PIXEL_NUM_HORZ); + err |= getParameter(DETECTOR_PIXEL_NUM_VERT); if(err){ @@ -359,10 +382,6 @@ asynStatus Hama::getParameter(int propertyID){ asynStatus status = asynSuccess; double dvalue = 0; - // status |= getIntegerParam(ADMinX, &minH); - // m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); - - switch (propertyID){ case DETECTOR_PIXEL_NUM_HORZ: m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &dvalue); @@ -436,6 +455,12 @@ asynStatus Hama::getParameter(int propertyID){ status = setIntegerParam(ADMinY, dvalue); break; + // ALU -------------------------------------- + case DCAM_IDPROP_DEFECTCORRECT_MODE: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_DEFECTCORRECT_MODE, &dvalue); + status = setIntegerParam(hDefectCorrectMode, dvalue); + break; + case DCAM_IDPROP_SENSORMODE: m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue); if(failed(m_err)) { @@ -505,6 +530,11 @@ asynStatus Hama::getParameter(int propertyID){ status = setIntegerParam(hInternalTriggerHandling, dvalue); break; + case DCAM_IDPROP_BITSPERCHANNEL: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BITSPERCHANNEL, &dvalue); + status = setIntegerParam(hBitPerChannel, dvalue); + break; + case DCAM_IDPROP_COLORTYPE: m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_COLORTYPE, &dvalue); status = setIntegerParam(hColorType, dvalue); @@ -1240,15 +1270,15 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ if(index < FIRST_HAMA_PARAM){ status = ADDriver::writeInt32(pasynUser, value); printf("Call function ADDriver::writeInt32\n"); - printf("[DEBUG]::function writeInt32 did not find a parameter, call ADDriver::writeInit32 %s\n", paramName); - printf("[DEBUG]::function writeInt32 FIRST = %d / LAST = %d, %d)\n", - FIRST_HAMA_PARAM, LAST_HAMA_PARAM, LAST_HAMA_PARAM-FIRST_HAMA_PARAM); + printf("[+DEBUG]::function writeInt32 did not find a parameter, call ADDriver::writeInit32 %s\n", paramName); + //printf("[DEBUG]::function writeInt32 FIRST = %d / LAST = %d, %d)\n", + //FIRST_HAMA_PARAM, LAST_HAMA_PARAM, LAST_HAMA_PARAM-FIRST_HAMA_PARAM); ADDriver::writeInt32(pasynUser, value); } else{ - printf("[DEBUG]::function writeInt32 did not find a parameter index = %d, %s\n", index, paramName); - printf("[DEBUG]::function writeInt32 FIRST = %d / LAST = %d, %d)\n", - FIRST_HAMA_PARAM, LAST_HAMA_PARAM, LAST_HAMA_PARAM-FIRST_HAMA_PARAM); + printf("[-DEBUG]::function writeInt32 did not find a parameter index = %d, %s\n", index, paramName); + //printf("[-DEBUG]::function writeInt32 FIRST = %d / LAST = %d, %d)\n", + //FIRST_HAMA_PARAM, LAST_HAMA_PARAM, LAST_HAMA_PARAM-FIRST_HAMA_PARAM); } } diff --git a/ADHamaApp/src/hama.h b/ADHamaApp/src/hama.h index f2bb217..b1cf0b7 100644 --- a/ADHamaApp/src/hama.h +++ b/ADHamaApp/src/hama.h @@ -7,7 +7,7 @@ #define MAX_FEATURE_NAME_LEN 64 #define hFrameRateString "H_FRAME_RATE" /* asynOctet ro */ -#define HamaName "Name" /* asynOctet ro */ +#define hHamaNameString "H_HAMA_NAME" /* asynOctet ro */ #define hVendorString "H_VENDOR" /* asynOctet ro */ #define hModelString "H_MODEL" /* asynOctet ro */ #define hCameraIDString "H_CAMERAID" /* asynOctet ro */ @@ -134,7 +134,7 @@ #define DETECTOR_PIXEL_NUM_HORZ 0x00420830 #define DETECTOR_PIXEL_NUM_VERT 0x00420840 -class Hama : public ADDriver { +class epicsShareClass Hama : public ADDriver { public: Hama(const char*, int, int, size_t, int, int, int); @@ -166,7 +166,7 @@ protected: int hReadoutSpeed; int hReadoutDirection; int hColorType; - int hBitPerChannel; + int hBitPerChannel; //----------------- int hTriggerSource; int hTriggerMode; int hTriggerActive; @@ -253,11 +253,10 @@ protected: int hTimeStampProducer; int hFrameStampProducer; int hTimeStamp; - #define LAST_HAMA_PARAM hTimeStamp + //#define LAST_HAMA_PARAM hTimeStamp private: - HDCAM m_hdcam; DCAMAPI_INIT m_apiInit;