|
|
|
|
@@ -134,9 +134,7 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory,
|
|
|
|
|
createParam( hOutputTriggerBaseSensor0String, asynParamInt32, &hOutputTriggerBaseSensor0);
|
|
|
|
|
createParam( hOutputTriggerBaseSensor1String, asynParamInt32, &hOutputTriggerBaseSensor1);
|
|
|
|
|
createParam( hOutputTriggerBaseSensor2String, asynParamInt32, &hOutputTriggerBaseSensor2);
|
|
|
|
|
createParam( hOutputTriggerPreHsyncCount0String, asynParamInt32, &hOutputTriggerPreHsyncCount0);
|
|
|
|
|
createParam( hOutputTriggerPreHsyncCount1String, asynParamInt32, &hOutputTriggerPreHsyncCount1);
|
|
|
|
|
createParam( hOutputTriggerPreHsyncCount2String, asynParamInt32, &hOutputTriggerPreHsyncCount2);
|
|
|
|
|
createParam( hOutputTriggerPreHsyncCountString, asynParamInt32, &hOutputTriggerPreHsyncCount);
|
|
|
|
|
|
|
|
|
|
//Master Puls
|
|
|
|
|
createParam( hMasterPulseModeString, asynParamInt32, &hMasterPulseMode);
|
|
|
|
|
@@ -285,6 +283,19 @@ int Hama::initCamera(){
|
|
|
|
|
|
|
|
|
|
// MASTER PULSE ------------------------------------------
|
|
|
|
|
// SYNCHRONOUS TIMING ------------------------------------
|
|
|
|
|
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_READOUTTIME);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_MINTRIGGERBLANKING);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_EXPOSURE);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_INTERNALFRAMERATE);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_INTERNAL_FRAMEINTERVAL);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_INTERNALLINESPEED);
|
|
|
|
|
err |= getParameter( DCAM_IDPROP_INTERNAL_LINEINTERVAL);
|
|
|
|
|
|
|
|
|
|
// SYSTEM INFORMATION ------------------------------------
|
|
|
|
|
err |= getParameter(DCAM_IDPROP_COLORTYPE);
|
|
|
|
|
err |= getParameter(DCAM_IDPROP_BITSPERCHANNEL);
|
|
|
|
|
@@ -539,6 +550,50 @@ asynStatus Hama::getParameter(int propertyID){
|
|
|
|
|
// - master pulse
|
|
|
|
|
|
|
|
|
|
// - synchronous timing
|
|
|
|
|
case DCAM_IDPROP_TIMING_READOUTTIME:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingReadoutTime, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingCyclicTriggerPeriod, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_MINTRIGGERBLANKING:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERBLANKING, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingMinTriggerBlanking, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingMinTriggerInterval, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingGlobalExposureDelay, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_EXPOSURE:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_EXPOSURE, &dvalue);
|
|
|
|
|
status = setIntegerParam(hTimingExposure, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD:
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD, &dvalue);
|
|
|
|
|
status = setDoubleParam(hTimingInvalidExposurePeriod, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_INTERNALFRAMERATE:
|
|
|
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue);
|
|
|
|
|
status = setDoubleParam(hInternalFrameRate, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_INTERNAL_FRAMEINTERVAL:
|
|
|
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNAL_FRAMEINTERVAL, &dvalue);
|
|
|
|
|
status = setDoubleParam(hInternalFrameInterval, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_INTERNALLINESPEED:
|
|
|
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNALLINESPEED, &dvalue);
|
|
|
|
|
status = setDoubleParam(hInternalLineSpeed, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
case DCAM_IDPROP_INTERNAL_LINEINTERVAL:
|
|
|
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNAL_LINEINTERVAL, &dvalue);
|
|
|
|
|
status = setDoubleParam(hInternalLineInterval, dvalue);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// - system information
|
|
|
|
|
case DCAM_IDPROP_COLORTYPE:
|
|
|
|
|
@@ -765,6 +820,18 @@ void Hama::imageTask(){
|
|
|
|
|
width * 2, width, height, ts_sec, ts_microsec);
|
|
|
|
|
|
|
|
|
|
double exposure_time, readout_time, timestamp;
|
|
|
|
|
|
|
|
|
|
//double _readouttime, _internal_frameinternal, _cyclictriggerperiod, _mintriggerblanking;
|
|
|
|
|
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &_readouttime);
|
|
|
|
|
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNAL_FRAMEINTERVAL, &_internal_frameinternal);
|
|
|
|
|
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD, &_cyclictriggerperiod);
|
|
|
|
|
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERBLANKING, &_mintriggerblanking);
|
|
|
|
|
//printf("DCAM_IDPROP_TIMING_READOUTTIME: %f\n", _readouttime);
|
|
|
|
|
//printf("DCAM_IDPROP_INTERNAL_FRAMEINTERVAL: %f\n", _internal_frameinternal);
|
|
|
|
|
//printf("DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD: %f\n", _cyclictriggerperiod);
|
|
|
|
|
//printf("DCAM_IDPROP_TIMING_MINTRIGGERBLANKING: %f\n", _mintriggerblanking);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &readout_time);
|
|
|
|
|
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &exposure_time);
|
|
|
|
|
timestamp = (ts_sec + ts_microsec / 1.0e6) - (exposure_time + readout_time);
|
|
|
|
|
@@ -816,21 +883,28 @@ void Hama::imageTask(){
|
|
|
|
|
//============================================================================
|
|
|
|
|
void Hama::temperatureTask(){
|
|
|
|
|
static const char *functionName = "tempTask";
|
|
|
|
|
// asynStatus status = asynSuccess;
|
|
|
|
|
double value = 0;
|
|
|
|
|
asynStatus status = asynSuccess;
|
|
|
|
|
double dvalue = 0;
|
|
|
|
|
|
|
|
|
|
while( !stopThread ) {
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORTEMPERATURE, &value);
|
|
|
|
|
|
|
|
|
|
if(m_err != DCAMERR_SUCCESS){
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORTEMPERATURE, &dvalue);
|
|
|
|
|
if(failed(m_err)) {
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_SensorTemperature()", " VALUE:%f\n", dvalue);
|
|
|
|
|
}
|
|
|
|
|
status = setDoubleParam(hSensorTemperature, dvalue);
|
|
|
|
|
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLERSTATUS, &dvalue);
|
|
|
|
|
if(failed(m_err)) {
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_SensorCoolerStatus()", "VALUE:%f\n", dvalue);
|
|
|
|
|
}
|
|
|
|
|
status = setIntegerParam(hSensorCoolerStatus, dvalue);
|
|
|
|
|
|
|
|
|
|
if(status){
|
|
|
|
|
asynPrint(pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
"%s:%s: temperature read error = %d\n",
|
|
|
|
|
driverName, functionName, m_err);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
setDoubleParam(hSensorTemperature, value);
|
|
|
|
|
//printf("Temperature = %f\n",value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callParamCallbacks();
|
|
|
|
|
epicsThreadSleep(1.0);
|
|
|
|
|
@@ -1246,13 +1320,14 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (index == hOutputTriggerPreHsyncCount0) {
|
|
|
|
|
else if (index == hOutputTriggerPreHsyncCount) {
|
|
|
|
|
printf("[DEBUG]::writeInit32 OutputTriggerPreHsynCount %d\n", value);
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PREHSYNCCOUNT, &dvalue);
|
|
|
|
|
if(failed(m_err)) {
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (index == hMasterPulseMode) {
|
|
|
|
|
printf("[DEBUG]::writeInit32 MasterPulseMode %d\n", value);
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_MODE, &dvalue);
|
|
|
|
|
@@ -1274,7 +1349,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (index == hMasterPulseBurstTimes) {
|
|
|
|
|
printf("[DEBUG]::writeInit32 MasterPulseBurstTimes %d\n", value);
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_BURSTTIMES, &dvalue);
|
|
|
|
|
@@ -1282,6 +1356,7 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (index == hSystemAlive) {
|
|
|
|
|
printf("[DEBUG]::writeInit32 SystemAlive %d\n", value);
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SYSTEM_ALIVE, &dvalue);
|
|
|
|
|
@@ -1328,7 +1403,7 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
if(index < FIRST_HAMA_PARAM){
|
|
|
|
|
status = ADDriver::writeInt32(pasynUser, value);
|
|
|
|
|
printf("[+DEBUG]:: ADDriver::writeInit32 %s\n", paramName);
|
|
|
|
|
ADDriver::writeInt32(pasynUser, value);
|
|
|
|
|
//ADDriver::writeInt32(pasynUser, value);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
printf("[-DEBUG]::function writeInt32 did not find a parameter index = %d, %s\n", index, paramName);
|
|
|
|
|
@@ -1336,9 +1411,8 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setIntegerParam(index, value);
|
|
|
|
|
|
|
|
|
|
/* Do callbacks so higher layers see any changes */
|
|
|
|
|
//status = (asynStatus) callParamCallbacks();
|
|
|
|
|
status = (asynStatus) callParamCallbacks();
|
|
|
|
|
|
|
|
|
|
if (status)
|
|
|
|
|
asynPrint(pasynUser, ASYN_TRACE_ERROR,
|
|
|
|
|
@@ -1435,10 +1509,19 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (index == hInternalFrameRate) {
|
|
|
|
|
printf("[DEBUG]::function InternalFrameRate %f\n", value);
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue);
|
|
|
|
|
if(failed(m_err)) {
|
|
|
|
|
int sensorMode = 0;
|
|
|
|
|
getIntegerParam(hSensorMode, &sensorMode);
|
|
|
|
|
printf("[DEBUG]::function InternalFrameRate %f, %d, %d\n", value, hSensorMode, sensorMode);
|
|
|
|
|
printf("[DEBUG]::DCAMPROP_SENSORMODE__AREA = %d, DCAMPROP_SENSORMODE__SPLITVIEW = %d\n",
|
|
|
|
|
DCAMPROP_SENSORMODE__AREA, DCAMPROP_SENSORMODE__SPLITVIEW);
|
|
|
|
|
if((sensorMode != DCAMPROP_SENSORMODE__AREA) && (sensorMode != DCAMPROP_SENSORMODE__SPLITVIEW)){
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue);
|
|
|
|
|
if(failed(m_err)) {
|
|
|
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (index == hInternalFrameInterval) {
|
|
|
|
|
@@ -1512,9 +1595,13 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
status = ADDriver::writeFloat64(pasynUser, value);
|
|
|
|
|
printf("Call function ADDriver::writeFloat64\n");
|
|
|
|
|
printf("[DEBUG]::function writeFloat64 did not find a parameter\n");
|
|
|
|
|
if(index < FIRST_HAMA_PARAM){
|
|
|
|
|
status = ADDriver::writeFloat64(pasynUser, value);
|
|
|
|
|
printf("[+DEBUG]:: ADDriver::writeInit32 %s\n", paramName);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
printf("[-DEBUG]::function writeInt32 did not find a parameter index = %d, %s\n", index, paramName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setDoubleParam(index, value);
|
|
|
|
|
@@ -1528,8 +1615,6 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
|
|
|
|
asynPrint(pasynUser, ASYN_TRACEIO_DRIVER,
|
|
|
|
|
"%s:%s: function=%d, paramName=%s, value=%f\n",
|
|
|
|
|
driverName, functionName, index, paramName, value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return(asynSuccess);
|
|
|
|
|
}
|
|
|
|
|
|