Hi everyone, I'm compiling a RIXSCam detector.
I compiled EPICS BASE = 7.0.7
SYNAPPS = 6.2 with AreaDetector -> ADCore, ADSupport.
I was successful in compiling the entire system, detector and epics modules.
But after compiling and changing the version of ADCore, the XIP plugin has been showing strange behavior.
I think it's something related to the version of ADCore=2.2.0, it doesn't handle NDPluginDriverQueueSize and NDPluginDriverNumThreads.
In the new version of ADCore = 3.12.1, it handles these functions.
I got around this problem with the code:
asynStatus NDPluginXIP::writeInt32(asynUser *pasynUser, epicsInt32 value)
{
int function = pasynUser->reason;
asynStatus status = setIntegerParam(function, value);
for (auto histogramParam : _histogramParams)
{
if (histogramParam->HasParameterIndex(function))
{
_histogramParamsChanged = true;
break;
}
}
/* If this parameter belongs to a base class, call its method */
if (function < FIRST_NDPluginXIP_PARAM && function != NDPluginDriverQueueSize && function != NDPluginDriverNumThreads)
status = NDPluginDriver::writeInt32(pasynUser, value);
/* Do callbacks so higher layers see any changes */
callParamCallbacks();
ReportWriteStatus(pasynUser, status, "writeInt32");
return status;
}
But after that, IOC zeroed out the Array Size. And by definition, this is the PluginXIP call.
# Load XIP plugin. Specify BlockCallbacks to true, which is how it should stay.
NDPluginXIPConfigure("XIP1", $(QSIZE), 1, "$(PORT)", 0, -1, -1)
dbLoadRecords("$(ADPLUGINXIP)/db/NDPluginXIP.template", "P=$(PREFIX),R=XIP1:,PORT=XIP1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
dbLoadRecords("$(ADPLUGINXIP)/db/XIPPVDefinitions.template", "P=$(PREFIX),R=XIP1:,PORT=XIP1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
set_requestfile_path("$(ADPLUGINXIP)", "Db")
I needed to make the change in deleteCallbackThreads and createCallbackThreads, because when we raised the IOC, the shell showed: errors involving these two functions:
2023/07/11 12:00:50.994 NDPluginDriver::deleteCallbackThreads timeout waiting for plugin thread 0 exit message
2023/07/11 12:00:51.001 NDPluginDriver::writeInt32 ERROR, status=3, function=57, value=1, connectedToArrayPort_=1
2023/07/11 12:00:51.011 NDPluginXIP:writeInt32: error, status=3 function=57
2023/07/11 12:00:51.019 IPE:RIXSCam1:XIP1:NumThreads devAsynInt32::processCallbackOutput process error
I think it might be something related to the PVs
· IPE:RIXSCam1:XIP1:QueueFree
· IPE:RIXSCam1:XIP1:QueueSize
Because in the image with ADCore 2.2.0, the PVs IPE:RIXSCam1:XIP1:QueueSize and IPE:RIXSCam1:XIP1:QueueFree have the values 1 and 1 respectively.
While with ADCore 3.12.1 they have the values 1 and 0 respectively.