Merge branch 'frame_rate' into 'dev'

Frame rate

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

No files matched your search

+31 -13
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")
}
}
+35 -18
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;
+1 -1
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)