Merge branch 'frame_rate' into 'dev'
Frame rate See merge request epics-modules/adhama!4
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user