Merge branch 'frame_rate' into 'dev'

Frame rate

See merge request epics-modules/adhama!4
This commit is contained in:
Douglas Araujo
2022-11-04 07:56:35 +00:00
3 changed files with 67 additions and 32 deletions

View File

@@ -92,9 +92,21 @@ record(mbbi, "$(P)$(R)ColorMode_RBV") {
record(longin, "$(P)$(R)ArrayCounter_RBV")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ARRAY_COUNTER")
field(SCAN, "I/O Intr")
field(FLNK, "$(P)$(R)#EVRTimeProc.PROC")
}
record(ai, "$(P)$(R)#EVRTimeProc") {
field(DESC, "Start proce the EVRTime record")
field(TSEL, "$(EVR):Evt$(E)Cnt-I.TIME")
field(DTYP, "Soft Timestamp")
field(FLNK, "$(P)$(R)EVRTime-R.PROC")
}
record(calc, "$(P)$(R)EVRTime-R") {
field(DESC, "EPICS epoch EVRTime timestamp")
field(CALC, "a+b")
field(INPA, "631152000")
field(INPB, "$(P)$(R)#EVRTimeProc")
}
##########################################################################
@@ -610,7 +622,7 @@ record(mbbo, "$(P)$(R)Binning-S") {
# field(DRVL, "1")
# field(DRVH, "3")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING")
field(VAL, "1")
field(VAL, "0")
}
record(mbbi, "$(P)$(R)Binning-RB") {
@@ -640,8 +652,8 @@ record(mbbo, "$(P)$(R)SubarrayMode-S") {
field(ZRST, "OFF")
field(ONVL, "2")
field(ONST, "ON")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING")
field(VAL, "1")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_SUBARRAY_MODE")
field(VAL, "0")
}
record(mbbi, "$(P)$(R)SubarrayMode-RB") {
@@ -651,7 +663,7 @@ record(mbbi, "$(P)$(R)SubarrayMode-RB") {
field(ZRST, "OFF")
field(ONVL, "2")
field(ONST, "ON")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_SUBARRAY_MODE")
field(SCAN, "I/O Intr")
}
@@ -1453,12 +1465,18 @@ record(ai, "$(P)$(R)ImagePixelNumVert-R") {
}
record(mbbi, "$(P)$(R)TimeStampProd-R") {
field(DESC,"")
field(DESC, "Timestamp produced source")
field(DTYP, "asynInt32")
field(ZRVL, "2")
field(ZRST, "TimeStamp DCAM Module")
field(ONVL, "5")
field(ONST, "TimeStamp Image Dev")
field(ZRVL, "1")
field(ZRST, "None")
field(ONVL, "2")
field(ONST, "DCAM Module")
field(TWVL, "3")
field(TWST, "Kernel Driver")
field(THVL, "4")
field(THST, "Frame Grabber")
field(FRVL, "5")
field(FRST, "Camera")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TIMESTAMP_PRODUCER")
field(SCAN, "I/O Intr")
}
@@ -1472,4 +1490,4 @@ record(mbbi, "$(P)$(R)FrameStampProd-R") {
field(ONST, "FrameStamp Image Dev")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_FRAMESTAMP_PRODUCER")
field(SCAN, "I/O Intr")
}
}

View File

@@ -254,6 +254,7 @@ int Hama::initCamera(){
err |= getParameter(DCAM_IDPROP_TRIGGERDELAY);
err |= getParameter(DCAM_IDPROP_INTERNALTRIGGER_HANDLING);
err |= getParameter(DCAM_IDPROP_TIMESTAMP_PRODUCER);
if(err){
// asynPrint(pasynUser, ASYN_TRACEIO_DRIVER, "%s:%s: port=%s, value=%d, status=%d\n",
@@ -478,7 +479,12 @@ int Hama::getParameter(int propertyID){
status = setIntegerParam(hInternalTriggerHandling, value_d);
//printf("The INTERNAL TRIGGE HANDLING = %f\n", value_d);
break;
case DCAM_IDPROP_TIMESTAMP_PRODUCER:
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMESTAMP_PRODUCER, &value_d);
status = setIntegerParam(hTimeStampProducer, value_d);
break;
default:
printf("The init parameter not recognised.... = %d\n", propertyID);
break;
@@ -660,11 +666,13 @@ void Hama::imageTask(){
memset(image, 0, width * 2 * height);
count++;
setIntegerParam(NDArrayCounter, count);
int32 ts_sec = 0, ts_microsec = 0;
accessCapturedImage(m_hdcam, captransferinfo.nNewestFrameIndex, image,
width * 2, width, height, ts_sec, ts_microsec);
// printf("Timestamp from camera: %d\n", ts_sec + ts_microsec);
getIntegerParam(NDArrayCallbacks, &callback);
if(callback) {
@@ -784,8 +792,8 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
printf("[DEBUG]::function ADImageMode\n");
}
else if (index == ADNumExposures) {
dcamprop_setvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, value);
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value_d);
//camprop_setvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, value);
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value_d);
printf("[DEBUG]::function ADNumExposures\n");
}
else if (index == ADMinX) {
@@ -1243,6 +1251,7 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
}
}
/*
else if (index == hExposureTime) {
printf("[DEBUG]::function ADImageMode %f\n", value);
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
@@ -1250,6 +1259,11 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
}
}
<<<<<<< HEAD
=======
*/
>>>>>>> Add new pv to get timestamp from EVR
else if (index == hTimingReadoutTime) {
printf("[DEBUG]::function TimingReadoutTime %f\n", value);
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &dvalue);
@@ -1405,16 +1419,20 @@ int Hama::updateSensorSize(){
status |= getIntegerParam(ADSizeY, &sizeV);
status |= getIntegerParam(hBinning, &binning);
printf("minH = %d\n", minH);
printf("minH = %d\nminV = %d\nSizeV = %d\nSizeH = %d\n", minH, minV, sizeV, sizeH);
m_err = dcamprop_setvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, 2);
if( failed(m_err) )
printError( m_hdcam, m_err, "dcambuf_release()" );
double value = 0;
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING_INDEPENDENT, &value);
printf("DCAM_IDPROP_BINNING_INDEPENDENT: %d\n", value);
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &value);
printf("DCAM_IDPROP_SUBARRAYMODE: %d\n", 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.
m_err = dcamprop_setvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, DCAMPROP_MODE__OFF);
m_err = dcamprop_setvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, minH);
sleep(1);
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &v1);
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &v1);
if( failed(m_err) )
printError( m_hdcam, m_err, "dcambuf_release()" );
@@ -1435,24 +1453,19 @@ int Hama::updateSensorSize(){
if( failed(m_err) )
printError( m_hdcam, m_err, "dcambuf_release()" );
// set subarray mode on. The combination of offset and size is checked on this timing.
m_err = dcamprop_setvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, DCAMPROP_MODE__ON);
m_err = dcamprop_setvalue(m_hdcam, DCAM_IDPROP_BINNING, (double)binning);
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING, &b1);
if( failed(m_err) )
printError( m_hdcam, m_err, "dcambuf_release()" );
/*
for(int i =0; i < 5; i++){
printf("sleep %d\n", i);
sleep(1);
}
*/
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);
//setIntegerParam(hSubarrayMode, 2);
printf(".... callParamCallback ...\n");
status = (asynStatus) callParamCallbacks();
printf("status = %d\n", status);
@@ -1765,6 +1778,10 @@ asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf,
return asynError;
}
// Get timestamp from the the frame
ts_sec = bufframe.timestamp.sec;
ts_microsec = bufframe.timestamp.microsec;
// copy target ROI
int32 copyrowbytes = cx * 2;
char* pSrc = (char*)bufframe.buf;

View File

@@ -17,7 +17,7 @@ epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "64000000")
devHamamatsuConfig("$(PORT)", $(CAMERA), 0, 0, 0, 0, 10)
dbLoadRecords("$(adhama_DIR)db/hama.db","P=$(PREFIX),R=cam1:,PORT=$(PORT),ADDR=0,TIMEOUT=1")
dbLoadRecords("$(adhama_DIR)db/hama.db","P=$(PREFIX),R=cam1:,EVR=LabS-Utgard-VIP:TS-EVR-3,E=F,PORT=$(PORT),ADDR=0,TIMEOUT=1")
asynSetTraceMask("$(PORT)",-1,0x9)
asynSetTraceIOMask("$(PORT)",-1,0x2)