fix bug in parameter library, fix some small bugs

This commit is contained in:
Iocuser
2022-11-30 22:07:44 +01:00
parent 3db0cf6913
commit 312b5a9ff1
3 changed files with 63 additions and 32 deletions

View File

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

View File

@@ -19,7 +19,7 @@
#include <unistd.h>
#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);
}
}

View File

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