2268 lines
93 KiB
C++
2268 lines
93 KiB
C++
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <wchar.h>
|
|
#include <stdarg.h>
|
|
|
|
#include <epicsEvent.h>
|
|
#include <epicsTime.h>
|
|
#include <epicsThread.h>
|
|
#include <iocsh.h>
|
|
#include <epicsString.h>
|
|
#include <epicsExit.h>
|
|
#include <epicsExport.h>
|
|
|
|
#include "hama.h"
|
|
// --- includes from DCMAPI ----
|
|
#include "dcamprop.h"
|
|
//
|
|
#include <unistd.h>
|
|
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
//#define NUM_HAMA_PARAMS ((int)(&LAST_HAMA_PARAM - &FIRST_HAMA_PARAM + 1))
|
|
|
|
static const char *driverName="drvHama";
|
|
|
|
static void c_imagetask(void *arg) {
|
|
Hama *p = (Hama *)arg;
|
|
p->imageTask();
|
|
}
|
|
|
|
static void c_temperaturetask(void *arg) {
|
|
Hama *p = (Hama *)arg;
|
|
p->temperatureTask();
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory,
|
|
int priority, int stackSize, int maxFrames)
|
|
: ADDriver(portName, 1, 0, maxBuffers, maxMemory,
|
|
asynEnumMask, asynEnumMask,
|
|
ASYN_CANBLOCK, /* ASYN_CANBLOCK=1 ASYN_MULTIDEVICE=0 */
|
|
1, /* autoConnect=1 */
|
|
priority, stackSize),
|
|
m_hdcam(NULL), m_id(0)
|
|
|
|
{
|
|
const char *functionName = "hamaDetector::hamaDetector";
|
|
|
|
printf("[DEBUG] === Constructor ADHama ===\n");
|
|
printf("[DEBUG] driverName: %s\n", driverName);
|
|
|
|
stopThread = 0;
|
|
|
|
/* Create the epicsEvents for signaling to task when acquisition starts and stops */
|
|
startEvent_ = epicsEventCreate(epicsEventEmpty);
|
|
if (!startEvent_) {
|
|
printf("%s:%s epicsEventCreate failure for acquire start event\n",
|
|
driverName, functionName);
|
|
return;
|
|
}
|
|
|
|
//General
|
|
createParam( hFrameRateString, asynParamFloat64, &hFrameRate);
|
|
createParam( hHamaNameString, asynParamOctet, &hHamaName);
|
|
createParam( hVendorString, asynParamOctet, &hVendor);
|
|
createParam( hModelString, asynParamOctet, &hModel);
|
|
createParam( hCameraIDString, asynParamOctet, &hCameraID);
|
|
createParam( hBusString, asynParamOctet, &hBus);
|
|
createParam( hCameraVersionString, asynParamOctet, &hCameraVersion);
|
|
createParam( hDriverVersionString, asynParamOctet, &hDriverVersion);
|
|
createParam( hModuleVersionString, asynParamOctet, &hModuleVersion);
|
|
createParam( hDcamApiVersionString, asynParamOctet, &hDcamApiVersion);
|
|
|
|
//Sensor Mode and Speed
|
|
createParam( hSensorModeString, asynParamInt32, &hSensorMode);
|
|
createParam( hReadoutSpeedString, asynParamInt32, &hReadoutSpeed);
|
|
createParam( hReadoutDirectionString, asynParamInt32, &hReadoutDirection);
|
|
|
|
//Trigger
|
|
createParam( hTriggerSourceString, asynParamInt32, &hTriggerSource);
|
|
createParam( hTriggerModeString, asynParamInt32, &hTriggerMode);
|
|
createParam( hTriggerActiveString, asynParamInt32, &hTriggerActive);
|
|
createParam( hTriggerGlobalExposureString, asynParamInt32, &hTriggerGlobalExposure);
|
|
createParam( hTriggerPolarityString, asynParamInt32, &hTriggerPolarity);
|
|
createParam( hTriggerConnectorString, asynParamInt32, &hTriggerConnector);
|
|
createParam( hTriggerTimesString, asynParamInt32, &hTriggerTimes);
|
|
createParam( hTriggerDelayString, asynParamFloat64, &hTriggerDelay);
|
|
createParam( hInternalTriggerHandlingString, asynParamInt32, &hInternalTriggerHandling);
|
|
|
|
//Sensor cooler
|
|
createParam( hSensorTemperatureString, asynParamFloat64, &hSensorTemperature);
|
|
createParam( hSensorCoolerString, asynParamInt32, &hSensorCooler);
|
|
createParam( hSensorCoolerStatusString, asynParamInt32, &hSensorCoolerStatus);
|
|
|
|
//Binning and ROI
|
|
createParam( hBinningString, asynParamInt32, &hBinning);
|
|
createParam( hSubarrayHPosString, asynParamInt32, &hSubarrayHPos);
|
|
createParam( hSubarrayHSizeString, asynParamInt32, &hSubarrayHSize);
|
|
createParam( hSubarrayVPosString, asynParamInt32, &hSubarrayVPos);
|
|
createParam( hSubarrayVSizeString, asynParamInt32, &hSubarrayVSize);
|
|
createParam( hSubarrayModeString, asynParamInt32, &hSubarrayMode);
|
|
|
|
//Feature
|
|
createParam( hExposureTimeString, asynParamFloat64, &hExposureTime);
|
|
|
|
//ALU
|
|
createParam( hDefectCorrectModeString, asynParamInt32, &hDefectCorrectMode);
|
|
createParam( hHotPixelCorrectLevelString, asynParamInt32, &hHotPixelCorrectLevel);
|
|
createParam( hIntensityLutModeString, asynParamInt32, &hIntensityLutMode);
|
|
createParam( hIntensityLutPageString, asynParamInt32, &hIntensityLutPage);
|
|
createParam( hExtractionModeString, asynParamInt32, &hExtractionMode);
|
|
|
|
//output trigger
|
|
createParam( hNumberOfOutputTriggerConnectorString, asynParamInt32, &hNumberOfOutputTriggerConnector);
|
|
createParam( hOutputTriggerSource0String, asynParamInt32, &hOutputTriggerSource0),
|
|
createParam( hOutputTriggerSource1String, asynParamInt32, &hOutputTriggerSource1);
|
|
createParam( hOutputTriggerSource2String, asynParamInt32, &hOutputTriggerSource2);
|
|
createParam( hOutputTriggerPolarity0String, asynParamInt32, &hOutputTriggerPolarity0);
|
|
createParam( hOutputTriggerPolarity1String, asynParamInt32, &hOutputTriggerPolarity1);
|
|
createParam( hOutputTriggerPolarity2String, asynParamInt32, &hOutputTriggerPolarity2);
|
|
createParam( hOutputTriggerActive0String, asynParamInt32, &hOutputTriggerActive0);
|
|
createParam( hOutputTriggerActive1String, asynParamInt32, &hOutputTriggerActive1);
|
|
createParam( hOutputTriggerActive2String, asynParamInt32, &hOutputTriggerActive2);
|
|
createParam( hOutputTriggerDelay0String, asynParamFloat64, &hOutputTriggerDelay0);
|
|
createParam( hOutputTriggerDelay1String, asynParamFloat64, &hOutputTriggerDelay1);
|
|
createParam( hOutputTriggerDelay2String, asynParamFloat64, &hOutputTriggerDelay2);
|
|
createParam( hOutputTriggerPeriod0String, asynParamFloat64, &hOutputTriggerPeriod0);
|
|
createParam( hOutputTriggerPeriod1String, asynParamFloat64, &hOutputTriggerPeriod1);
|
|
createParam( hOutputTriggerPeriod2String, asynParamFloat64, &hOutputTriggerPeriod2);
|
|
createParam( hOutputTriggerKind0String, asynParamInt32, &hOutputTriggerKind0);
|
|
createParam( hOutputTriggerKind1String, asynParamInt32, &hOutputTriggerKind1);
|
|
createParam( hOutputTriggerKind2String, asynParamInt32, &hOutputTriggerKind2);
|
|
createParam( hOutputTriggerBaseSensor0String, asynParamInt32, &hOutputTriggerBaseSensor0);
|
|
createParam( hOutputTriggerBaseSensor1String, asynParamInt32, &hOutputTriggerBaseSensor1);
|
|
createParam( hOutputTriggerBaseSensor2String, asynParamInt32, &hOutputTriggerBaseSensor2);
|
|
createParam( hOutputTriggerPreHsyncCountString, asynParamInt32, &hOutputTriggerPreHsyncCount);
|
|
|
|
//Master Puls
|
|
createParam( hMasterPulseModeString, asynParamInt32, &hMasterPulseMode);
|
|
createParam( hMasterPulseTriggerSourceString, asynParamInt32, &hMasterPulseTriggerSource);
|
|
createParam( hMasterPulseIntervalString, asynParamFloat64, &hMasterPulseInterval);
|
|
createParam( hMasterPulseBurstTimesString, asynParamInt32, &hMasterPulseBurstTimes);
|
|
|
|
//Synchronious Timing
|
|
createParam( hTimingReadoutTimeString, asynParamFloat64, &hTimingReadoutTime);
|
|
createParam( hTimingCyclicTriggerPeriodString, asynParamFloat64, &hTimingCyclicTriggerPeriod);
|
|
createParam( hTimingMinTriggerBlankingString, asynParamFloat64, &hTimingMinTriggerBlanking);
|
|
createParam( hTimingMinTriggerIntervalString, asynParamFloat64, &hTimingMinTriggerInterval);
|
|
createParam( hTimingGlobalExposureDelayString, asynParamFloat64, &hTimingGlobalExposureDelay);
|
|
createParam( hTimingExposureString, asynParamInt32, &hTimingExposure);
|
|
createParam( hTimingInvalidExposurePeriodString, asynParamFloat64, &hTimingInvalidExposurePeriod);
|
|
createParam( hInternalFrameRateString, asynParamFloat64, &hInternalFrameRate);
|
|
createParam( hInternalFrameIntervalString, asynParamFloat64, &hInternalFrameInterval);
|
|
createParam( hInternalLineSpeedString, asynParamFloat64, &hInternalLineSpeed);
|
|
createParam( hInternalLineIntervalString, asynParamFloat64, &hInternalLineInterval);
|
|
|
|
//System Information
|
|
createParam( hColorTypeString, asynParamInt32, &hColorType);
|
|
createParam( hBitPerChannelString, asynParamInt32, &hBitPerChannel);
|
|
//createParam( hImageWidthString, asynParamInt32, &hImageWidth);
|
|
//createParam( hImageHeightString, asynParamInt32, &hImageHeight);
|
|
createParam( hImageRowBytesString, asynParamInt32, &hImageRowbytes);
|
|
createParam( hImageFrameBytesString, asynParamInt32, &hImageFramebytes);
|
|
createParam( hImageTopOffsetBytesString, asynParamInt32, &hImageTopOffsetBytes);
|
|
createParam( hImagePixelTypeString, asynParamInt32, &hImagePixelType);
|
|
createParam( hBufferRowbytesString, asynParamInt32, &hBufferRowbytes);
|
|
createParam( hBufferFramebytesString, asynParamInt32, &hBufferFramebytes);
|
|
createParam( hBufferTopOffsetBytesString, asynParamInt32, &hBufferTopOffsetBytes);
|
|
createParam( hBufferPixelTypeString, asynParamInt32, &hBufferPixelType);
|
|
createParam( hRecordFixedBytesPerFileString, asynParamInt32, &hRecordFixedBytesPerFile);
|
|
createParam( hRecordFixedBytesPerSessionString, asynParamInt32, &hRecordFixedBytesPerSession);
|
|
createParam( hRecordFixedBytesPerFrameString, asynParamInt32, &hRecordFixedBytesPerFrame);
|
|
createParam( hSystemAliveString, asynParamInt32, &hSystemAlive);
|
|
createParam( hConversionFactorCoeffString, asynParamFloat64, &hConversionFactorCoeff);
|
|
createParam( hConversionFactorOffsetString, asynParamFloat64, &hConversionFactorOffset);
|
|
createParam( hNumberOfViewString, asynParamInt32, &hNumberOfView);
|
|
createParam( hImageDetectorPixelWidthString, asynParamFloat64, &hImageDetectorPixelWidth);
|
|
createParam( hImageDetectorPixelHeightString, asynParamFloat64, &hImageDetectorPixelHeight);
|
|
createParam( hImageDetectorPixelNumHorzString, asynParamInt32, &hImageDetectorPixelNumHorz);
|
|
createParam( hImageDetectorPixelNumVertString, asynParamInt32, &hImageDetectorPixelNumVert);
|
|
createParam( hTimeStampProducerString, asynParamInt32, &hTimeStampProducer);
|
|
createParam( hFrameStampProducerString, asynParamInt32, &hFrameStampProducer);
|
|
createParam( hTimeStampString, asynParamFloat64, &hTimeStamp);
|
|
|
|
|
|
setIntegerParam(NDArrayCallbacks, 1);
|
|
callParamCallbacks();
|
|
|
|
connectCamera();
|
|
printf("\n\n============================ Init Camera =========================\n");
|
|
initCamera();
|
|
|
|
printf("\n\n============================ Start Threads =======================\n");
|
|
/* launch image read task */
|
|
epicsThreadCreate("HamaImageTask",
|
|
epicsThreadPriorityMedium,
|
|
epicsThreadGetStackSize(epicsThreadStackMedium),
|
|
c_imagetask, this);
|
|
|
|
/* launch temp read task */
|
|
epicsThreadCreate("HamaTemperatureTask",
|
|
epicsThreadPriorityMedium,
|
|
epicsThreadGetStackSize(epicsThreadStackMedium),
|
|
c_temperaturetask, this);
|
|
|
|
/* shutdown on exit */
|
|
//epicsAtExit(c_shutdown, this);
|
|
|
|
printf("\n\n=== END Constructor ADHama ===\n");
|
|
printf("===================================================================\n");
|
|
}
|
|
//============================================================================
|
|
//Hama::~Hama(){
|
|
// // not sure if the destructor has to be define here...
|
|
// printf("[DEBUG] === Destructor ADHama ===\n");
|
|
//}
|
|
|
|
//========================================================================================================
|
|
int Hama::initCamera(){
|
|
|
|
int err = 0;
|
|
|
|
err |= readParameterStr(DCAM_IDSTR_VENDOR);
|
|
err |= readParameterStr(DCAM_IDSTR_MODEL);
|
|
err |= readParameterStr(DCAM_IDSTR_CAMERAID);
|
|
err |= readParameterStr(DCAM_IDSTR_BUS);
|
|
err |= readParameterStr(DCAM_IDSTR_CAMERAVERSION);
|
|
err |= readParameterStr(DCAM_IDSTR_DRIVERVERSION);
|
|
err |= readParameterStr(DCAM_IDSTR_MODULEVERSION);
|
|
err |= readParameterStr(DCAM_IDSTR_DCAMAPIVERSION);
|
|
|
|
// SENSOR MODE AND SPEED ------------------------
|
|
err |= readParameter(DCAM_IDPROP_SENSORMODE);
|
|
err |= readParameter(DCAM_IDPROP_READOUTSPEED);
|
|
err |= readParameter(DCAM_IDPROP_READOUT_DIRECTION);
|
|
|
|
// TRIGGER --------------------------------------
|
|
err |= readParameter(DCAM_IDPROP_TRIGGERSOURCE);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGER_MODE);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGERACTIVE);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGERPOLARITY);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGER_CONNECTOR);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGERTIMES);
|
|
err |= readParameter(DCAM_IDPROP_TRIGGERDELAY);
|
|
err |= readParameter(DCAM_IDPROP_INTERNALTRIGGER_HANDLING);
|
|
|
|
// BINNING AND ROI ------------------------------
|
|
err |= readParameter( DCAM_IDPROP_BINNING);
|
|
err |= readParameter( DCAM_IDPROP_SUBARRAYHPOS);
|
|
err |= readParameter( DCAM_IDPROP_SUBARRAYVPOS);
|
|
err |= readParameter( DCAM_IDPROP_SUBARRAYHSIZE);
|
|
err |= readParameter( DCAM_IDPROP_SUBARRAYVSIZE);
|
|
err |= readParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES);
|
|
err |= readParameter( DCAM_IDPROP_IMAGE_PIXELTYPE);
|
|
err |= readParameter( DCAM_IDPROP_IMAGE_WIDTH);
|
|
err |= readParameter( DCAM_IDPROP_IMAGE_ROWBYTES);
|
|
err |= readParameter( DCAM_IDPROP_IMAGE_HEIGHT);
|
|
|
|
// SUBARRAYMODE ------------------------------------------
|
|
|
|
// FEATURE -----------------------------------------------
|
|
|
|
// EXPOSURETIME ------------------------------------------
|
|
|
|
// ALU ---------------------------------------------------
|
|
err |= readParameter( DCAM_IDPROP_DEFECTCORRECT_MODE);
|
|
err |= readParameter( DCAM_IDPROP_HOTPIXELCORRECT_LEVEL);
|
|
err |= readParameter( DCAM_IDPROP_INTENSITYLUT_MODE);
|
|
err |= readParameter( DCAM_IDPROP_INTENSITYLUT_PAGE);
|
|
err |= readParameter( DCAM_IDPROP_EXTRACTION_MODE);
|
|
|
|
// OUTPUT TRIGGER ----------------------------------------
|
|
err |= readParameter(DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE);
|
|
err |= readParameter(DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR);
|
|
// MASTER PULSE ------------------------------------------
|
|
// SYNCHRONOUS TIMING ------------------------------------
|
|
|
|
err |= readParameter( DCAM_IDPROP_TIMING_READOUTTIME);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_MINTRIGGERBLANKING);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_EXPOSURE);
|
|
err |= readParameter( DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD);
|
|
err |= readParameter( DCAM_IDPROP_INTERNALFRAMERATE);
|
|
err |= readParameter( DCAM_IDPROP_INTERNAL_FRAMEINTERVAL);
|
|
err |= readParameter( DCAM_IDPROP_INTERNALLINESPEED);
|
|
err |= readParameter( DCAM_IDPROP_INTERNAL_LINEINTERVAL);
|
|
|
|
// SYSTEM INFORMATION ------------------------------------
|
|
err |= readParameter(DCAM_IDPROP_COLORTYPE);
|
|
err |= readParameter(DCAM_IDPROP_BITSPERCHANNEL);
|
|
err |= readParameter(DCAM_IDPROP_IMAGE_TOPOFFSETBYTES);
|
|
err |= readParameter(DCAM_IDPROP_BUFFER_ROWBYTES);
|
|
err |= readParameter(DCAM_IDPROP_BUFFER_FRAMEBYTES);
|
|
err |= readParameter(DCAM_IDPROP_BUFFER_TOPOFFSETBYTES);
|
|
err |= readParameter(DCAM_IDPROP_BUFFER_PIXELTYPE);
|
|
err |= readParameter(DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE);
|
|
err |= readParameter(DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION);
|
|
err |= readParameter(DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME);
|
|
err |= readParameter(DCAM_IDPROP_SYSTEM_ALIVE);
|
|
err |= readParameter(DCAM_IDPROP_CONVERSIONFACTOR_COEFF);
|
|
err |= readParameter(DCAM_IDPROP_CONVERSIONFACTOR_OFFSET);
|
|
err |= readParameter(DCAM_IDPROP_NUMBEROF_VIEW);
|
|
err |= readParameter(DCAM_IDPROP_TIMESTAMP_PRODUCER);
|
|
err |= readParameter(DCAM_IDPROP_FRAMESTAMP_PRODUCER);
|
|
|
|
err |= readParameter(DETECTOR_PIXEL_NUM_HORZ);
|
|
err |= readParameter(DETECTOR_PIXEL_NUM_VERT);
|
|
|
|
|
|
if(err){
|
|
// asynPrint(pasynUser, ASYN_TRACEIO_DRIVER, "%s:%s: port=%s, value=%d, status=%d\n",
|
|
// driverName, functionName, this->portName, value, (int)status);
|
|
}
|
|
return err;
|
|
}
|
|
|
|
//============================================================================
|
|
int Hama::readParameterStr(int propertyID){
|
|
|
|
asynStatus status = asynSuccess;
|
|
|
|
char text[256];
|
|
DCAMDEV_STRING param;
|
|
memset( ¶m, 0, sizeof(param) );
|
|
param.size = sizeof(param);
|
|
param.text = text;
|
|
param.textbytes = sizeof(text);
|
|
param.iString = propertyID;
|
|
|
|
switch (propertyID){
|
|
case DCAM_IDSTR_VENDOR:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hVendor, text);
|
|
printf("[DEBUG]::VENDOR %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_MODEL:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hModel, text);
|
|
printf("[DEBUG]::MODEL %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_CAMERAID:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hCameraID, text);
|
|
printf("[DEBUG]::CAMERAID %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_BUS:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hBus, text);
|
|
printf("[DEBUG]::BUS %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_CAMERAVERSION:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hCameraVersion, text);
|
|
printf("[DEBUG]::CAMERAVERSION %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_DRIVERVERSION:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hDriverVersion, text);
|
|
printf("[DEBUG]::DRIVERVERSION %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_MODULEVERSION:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hModuleVersion, text);
|
|
printf("[DEBUG]::MODULEVERSION %s\n", text);
|
|
break;
|
|
case DCAM_IDSTR_DCAMAPIVERSION:
|
|
dcamdev_getstring(m_hdcam, ¶m);
|
|
status = setStringParam(hDcamApiVersion, text);
|
|
printf("[DEBUG]::DCAMPVERSION %s\n", text);
|
|
break;
|
|
default:
|
|
printf("[DEBUG]::NOT SUPPORTED\n");
|
|
break;
|
|
|
|
}
|
|
|
|
callParamCallbacks();
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
int Hama::readParameter(int propertyID){
|
|
|
|
asynStatus status = asynSuccess;
|
|
double dvalue = 0;
|
|
|
|
switch (propertyID){
|
|
// - sensor mode and speed
|
|
case DCAM_IDPROP_SENSORMODE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue);
|
|
status = setIntegerParam(hSensorMode, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_READOUTSPEED: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue);
|
|
status = setIntegerParam(hReadoutSpeed, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_READOUT_DIRECTION: // (RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &dvalue);
|
|
status = setIntegerParam(hReadoutDirection, dvalue);
|
|
break;
|
|
// - trigger
|
|
case DCAM_IDPROP_TRIGGERSOURCE: // (RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &dvalue);
|
|
status = setIntegerParam(hTriggerSource, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGER_MODE: // (RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &dvalue);
|
|
status = setIntegerParam(hTriggerMode, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGERACTIVE: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &dvalue);
|
|
status = setIntegerParam(hTriggerActive, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &dvalue);
|
|
status = setIntegerParam(hTriggerGlobalExposure, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGERPOLARITY: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &dvalue);
|
|
status = setIntegerParam(hTriggerPolarity, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGER_CONNECTOR: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &dvalue);
|
|
status = setIntegerParam(hTriggerConnector, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGERTIMES: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &dvalue);
|
|
status = setIntegerParam(hTriggerTimes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TRIGGERDELAY: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERDELAY, &dvalue);
|
|
status = setDoubleParam(hTriggerDelay, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_INTERNALTRIGGER_HANDLING: //(RW12-)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &dvalue);
|
|
status = setIntegerParam(hInternalTriggerHandling, dvalue);
|
|
break;
|
|
// - sensor cooler
|
|
case DCAM_IDPROP_SENSORCOOLERSTATUS: //(R)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLERSTATUS, &dvalue);
|
|
status = setIntegerParam(hSensorCoolerStatus, dvalue);
|
|
break;
|
|
// - sensor temperature in a thread
|
|
|
|
// - binning and roi
|
|
case DCAM_IDPROP_BINNING: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING, &dvalue);
|
|
status = setIntegerParam(hBinning, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_SUBARRAYHSIZE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue);
|
|
status = setIntegerParam(ADSizeX, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_SUBARRAYVSIZE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue);
|
|
status = setIntegerParam(ADSizeY, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_SUBARRAYHPOS: //(RW---)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue);
|
|
status = setIntegerParam(ADMinX, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_SUBARRAYVPOS: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue);
|
|
status = setIntegerParam(ADMinY, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_SUBARRAYMODE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &dvalue);
|
|
status = setIntegerParam(hSubarrayMode, dvalue);
|
|
break;
|
|
|
|
// - feature
|
|
case DCAM_IDPROP_EXPOSURETIME: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
|
status = setIntegerParam(hExposureTime, dvalue);
|
|
break;
|
|
|
|
// - alu
|
|
case DCAM_IDPROP_DEFECTCORRECT_MODE: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_DEFECTCORRECT_MODE, &dvalue);
|
|
status = setIntegerParam(hDefectCorrectMode, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_HOTPIXELCORRECT_LEVEL: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_HOTPIXELCORRECT_LEVEL, &dvalue);
|
|
status = setIntegerParam(hHotPixelCorrectLevel, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_INTENSITYLUT_MODE: //(RW123)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_MODE, &dvalue);
|
|
status = setIntegerParam(hIntensityLutMode, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_INTENSITYLUT_PAGE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_PAGE, &dvalue);
|
|
status = setIntegerParam(hIntensityLutPage, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_EXTRACTION_MODE: //(RW1--)
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXTRACTION_MODE, &dvalue);
|
|
status = setIntegerParam(hExtractionMode, dvalue);
|
|
break;
|
|
|
|
// - output trigger
|
|
case DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR, &dvalue);
|
|
status = setIntegerParam(hNumberOfOutputTriggerConnector, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_SOURCE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerSource0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerSource1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerSource2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_POLARITY:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPolarity0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPolarity1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPolarity2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerActive0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerActive1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerActive2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_DELAY:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerDelay0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerDelay1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerDelay2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_PERIOD:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPeriod0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPeriod1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPeriod2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_KIND:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerKind0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerKind1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerKind2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerBaseSensor0, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR+0x100, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerBaseSensor1, dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR+0x200, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerBaseSensor2, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_OUTPUTTRIGGER_PREHSYNCCOUNT:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PREHSYNCCOUNT, &dvalue);
|
|
status = setIntegerParam(hOutputTriggerPreHsyncCount, dvalue);
|
|
break;
|
|
|
|
|
|
// - master pulse
|
|
case DCAM_IDPROP_MASTERPULSE_MODE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_MODE, &dvalue);
|
|
status = setIntegerParam(hMasterPulseMode, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE, &dvalue);
|
|
status = setIntegerParam(hMasterPulseTriggerSource, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_MASTERPULSE_INTERVAL:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_INTERVAL, &dvalue);
|
|
status = setIntegerParam(hMasterPulseInterval, dvalue);
|
|
break;
|
|
|
|
case DCAM_IDPROP_MASTERPULSE_BURSTTIMES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_BURSTTIMES, &dvalue);
|
|
status = setIntegerParam(hMasterPulseBurstTimes, dvalue);
|
|
break;
|
|
|
|
|
|
// - 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:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_COLORTYPE, &dvalue);
|
|
status = setIntegerParam(hColorType, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_BITSPERCHANNEL:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BITSPERCHANNEL, &dvalue);
|
|
status = setIntegerParam(hBitPerChannel, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_ROWBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dvalue);
|
|
status = setIntegerParam(hImageRowbytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_FRAMEBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dvalue);
|
|
status = setIntegerParam(hImageFramebytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_TOPOFFSETBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_TOPOFFSETBYTES, &dvalue);
|
|
status = setIntegerParam(hImageTopOffsetBytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_PIXELTYPE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &dvalue);
|
|
status = setIntegerParam(hImagePixelType, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_BUFFER_ROWBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_ROWBYTES, &dvalue);
|
|
status = setIntegerParam(hBufferRowbytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_BUFFER_FRAMEBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_FRAMEBYTES, &dvalue);
|
|
status = setIntegerParam(hBufferFramebytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_BUFFER_TOPOFFSETBYTES:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_TOPOFFSETBYTES, &dvalue);
|
|
status = setIntegerParam(hBufferTopOffsetBytes, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_BUFFER_PIXELTYPE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_PIXELTYPE, &dvalue);
|
|
status = setIntegerParam(hBufferPixelType, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE, &dvalue);
|
|
status = setIntegerParam(hRecordFixedBytesPerFile, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION, &dvalue);
|
|
status = setIntegerParam(hRecordFixedBytesPerSession, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME, &dvalue);
|
|
status = setIntegerParam(hRecordFixedBytesPerFrame, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_SYSTEM_ALIVE:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SYSTEM_ALIVE, &dvalue);
|
|
status = setIntegerParam(hSystemAlive, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_CONVERSIONFACTOR_COEFF:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_CONVERSIONFACTOR_COEFF, &dvalue);
|
|
status = setDoubleParam(hConversionFactorCoeff, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_CONVERSIONFACTOR_OFFSET:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_CONVERSIONFACTOR_OFFSET, &dvalue);
|
|
status = setDoubleParam(hConversionFactorOffset, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_NUMBEROF_VIEW:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_NUMBEROF_VIEW, &dvalue);
|
|
status = setIntegerParam(hNumberOfView, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_WIDTH:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue);
|
|
status = setIntegerParam(ADBinX, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_IMAGE_HEIGHT:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue);
|
|
status = setIntegerParam(ADBinY, (int)dvalue);
|
|
break;
|
|
case DETECTOR_PIXEL_NUM_HORZ:
|
|
m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &dvalue);
|
|
status = setIntegerParam(ADMaxSizeX, dvalue);
|
|
break;
|
|
case DETECTOR_PIXEL_NUM_VERT:
|
|
m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &dvalue);
|
|
status = setIntegerParam(ADMaxSizeY, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_TIMESTAMP_PRODUCER:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMESTAMP_PRODUCER, &dvalue);
|
|
status = setIntegerParam(hTimeStampProducer, dvalue);
|
|
break;
|
|
case DCAM_IDPROP_FRAMESTAMP_PRODUCER:
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_FRAMESTAMP_PRODUCER, &dvalue);
|
|
status = setIntegerParam(hFrameStampProducer, dvalue);
|
|
break;
|
|
default:
|
|
char text[256];
|
|
dcamprop_getname(m_hdcam, propertyID, text, sizeof(text));
|
|
printf("Parameter not recognised, IDPROP:0x%08x, NAME:%s\n", propertyID, text);
|
|
break;
|
|
}
|
|
|
|
if(failed(m_err)) {
|
|
char text[256];
|
|
dcamprop_getname(m_hdcam, propertyID, text, sizeof(text));
|
|
printError(m_hdcam, m_err, "+dcamprop_getvalue()", "IDPROP:0x%08x, VALUE:%s\n", propertyID, text);
|
|
}
|
|
|
|
/* Do callbacks so higher layers see any changes */
|
|
status = callParamCallbacks();
|
|
/*
|
|
if (status)
|
|
asynPrint(0, ASYN_TRACE_ERROR,
|
|
"%s:%s: error, status=%d function=%d, paramName=%s, value=%d\n",
|
|
driverName, functionName, status, index, paramName, value);
|
|
else
|
|
asynPrint(NULL, ASYN_TRACEIO_DRIVER,
|
|
"%s:%s: function=%d, paramName=%s, value=%d\n",
|
|
driverName, functionName, index, paramName, value);
|
|
*/
|
|
return status;
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
void Hama::imageTask(){
|
|
int status;
|
|
unsigned char *image;
|
|
int acquire;
|
|
int count = 0;
|
|
int callback;
|
|
//int acquireStatusError = 0;
|
|
int imageMode=0;
|
|
int totalImages=0;
|
|
uint64_t prevAcquisitionCount = 0;
|
|
DCAMCAP_TRANSFERINFO captransferinfo;
|
|
epicsTimeStamp prevAcqTime, currentAcqTime;
|
|
double elapsedTime;
|
|
|
|
//static const char *functionName = "imageTask";
|
|
|
|
lock();
|
|
|
|
while(1) {
|
|
getIntegerParam(ADAcquire, &acquire);
|
|
if(!acquire) {
|
|
puts("Waiting start");
|
|
|
|
unlock();
|
|
status = epicsEventWait(startEvent_);
|
|
puts("Starting request received");
|
|
lock();
|
|
|
|
/* We are acquiring. */
|
|
//acquireStatusError = 0;
|
|
setIntegerParam(ADStatus, ADStatusAcquire);
|
|
|
|
status = startAcquire();
|
|
epicsTimeGetCurrent(&prevAcqTime);
|
|
printf("Status: %d\n", status);
|
|
if (status != asynSuccess) {
|
|
//acquireStatusError = 1;
|
|
epicsThreadSleep(.1);
|
|
}
|
|
else {
|
|
acquire = 1;
|
|
/* Get the current time */
|
|
prevAcquisitionCount = 0;
|
|
}
|
|
}
|
|
|
|
/* Added this delay for the thread not to hog the processor. No need to run on full speed. */
|
|
//epicsThreadSleep(0.001);
|
|
|
|
// get image transfer status.
|
|
unlock();
|
|
imageTransferStatus(m_hdcam, captransferinfo);
|
|
lock();
|
|
|
|
if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) {
|
|
//printf("nFrameCount: %d, nNewestFrameIndex: %d\n", captransferinfo.nFrameCount, captransferinfo.nNewestFrameIndex);
|
|
prevAcquisitionCount = captransferinfo.nFrameCount;
|
|
|
|
// get image information
|
|
int32 pixeltype = 0, width = 0, rowbytes = 0, height = 0, framebytes = 0;
|
|
getImageInformation(m_hdcam, pixeltype, width, rowbytes, height, framebytes);
|
|
|
|
if( pixeltype != DCAM_PIXELTYPE_MONO16 ) {
|
|
printf( "not implement\n" );
|
|
return;
|
|
}
|
|
|
|
setIntegerParam(NDArraySizeX, (int)width);
|
|
setIntegerParam(NDArraySizeY, (int)height);
|
|
/* Do callbacks so higher layers see any changes */
|
|
callParamCallbacks();
|
|
|
|
image = new unsigned char[width * 2 * height];
|
|
memset(image, 0, width * 2 * height);
|
|
|
|
getIntegerParam(NDArrayCounter, &count);
|
|
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);
|
|
|
|
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);
|
|
status = setDoubleParam(hTimeStamp, timestamp);
|
|
|
|
printf("Timestamp from camera: %f\n", (ts_sec + ts_microsec / 1.0e6));
|
|
//printf("Timestamp from camera with correction: %f\n", timestamp);
|
|
|
|
epicsTimeGetCurrent(¤tAcqTime);
|
|
elapsedTime = epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime);
|
|
prevAcqTime = currentAcqTime;
|
|
|
|
status = setDoubleParam(hFrameRate, (double)(1 / elapsedTime));
|
|
|
|
getIntegerParam(NDArrayCallbacks, &callback);
|
|
if(callback) {
|
|
|
|
NDArray *pImage;
|
|
size_t dims[2];
|
|
int itemp=0;
|
|
|
|
getIntegerParam(NDArraySizeX, &itemp); dims[0] = itemp;
|
|
getIntegerParam(NDArraySizeY, &itemp); dims[1] = itemp;
|
|
pImage = pNDArrayPool->alloc(2, dims, NDUInt16, 0, 0);
|
|
|
|
if(pImage) {
|
|
pImage->uniqueId = count;
|
|
pImage->timeStamp = ts_sec + (ts_microsec / 1.0e6);
|
|
updateTimeStamp(&pImage->epicsTS);
|
|
|
|
memcpy(pImage->pData, (epicsUInt16 *)image, pImage->dataSize);
|
|
|
|
getAttributes(pImage->pAttributeList);
|
|
doCallbacksGenericPointer(pImage, NDArrayData, 0);
|
|
pImage->release();
|
|
}
|
|
}
|
|
|
|
delete[] image;
|
|
}
|
|
|
|
getIntegerParam(ADNumImages, &totalImages);
|
|
getIntegerParam(ADImageMode, &imageMode);
|
|
|
|
if ((imageMode == ADImageMultiple && totalImages == captransferinfo.nFrameCount) ||
|
|
(imageMode == ADImageSingle && captransferinfo.nFrameCount == 1)) {
|
|
setShutter(0);
|
|
stopAcquire();
|
|
setIntegerParam(ADAcquire, 0);
|
|
}
|
|
|
|
callParamCallbacks();
|
|
}
|
|
}
|
|
//============================================================================
|
|
void Hama::temperatureTask(){
|
|
static const char *functionName = "tempTask";
|
|
asynStatus status = asynSuccess;
|
|
double dvalue = 0;
|
|
|
|
while( !stopThread ) {
|
|
|
|
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);
|
|
}
|
|
|
|
callParamCallbacks();
|
|
epicsThreadSleep(1.0);
|
|
}
|
|
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::readAttributes(){
|
|
|
|
int status = 0;
|
|
|
|
readParameter( DCAM_IDPROP_COLORTYPE );
|
|
//status |= readParameter( DCAM_IDPROP_BITSPERCHANNEL );
|
|
status = readParameter( DCAM_IDPROP_IMAGE_ROWBYTES );
|
|
status = readParameter( DCAM_IDPROP_IMAGE_FRAMEBYTES );
|
|
status = readParameter( DCAM_IDPROP_IMAGE_TOPOFFSETBYTES );
|
|
//status |= readParameter( DCAM_IDPROP_IMAGE_PIXELTYPE );
|
|
status = readParameter( DCAM_IDPROP_BUFFER_ROWBYTES );
|
|
status = readParameter( DCAM_IDPROP_BUFFER_FRAMEBYTES );
|
|
status = readParameter( DCAM_IDPROP_BUFFER_TOPOFFSETBYTES );
|
|
status = readParameter( DCAM_IDPROP_BUFFER_PIXELTYPE );
|
|
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE );
|
|
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION );
|
|
status = readParameter( DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME );
|
|
status = readParameter( DCAM_IDPROP_SYSTEM_ALIVE );
|
|
status = readParameter( DCAM_IDPROP_CONVERSIONFACTOR_COEFF );
|
|
status = readParameter( DCAM_IDPROP_CONVERSIONFACTOR_OFFSET );
|
|
status = readParameter( DCAM_IDPROP_NUMBEROF_VIEW );
|
|
|
|
return (asynStatus)status;
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
asynStatus Hama::readSensor(){
|
|
|
|
|
|
asynStatus status = asynSuccess;
|
|
|
|
int minH=0, minV=0, sizeH=0, sizeV=0, binning=1, bitPerChannel = 0;
|
|
double dminH=0, dminV=0, dsizeH=0, dsizeV=0, dbinning=1;
|
|
double dFrameBytes = 0, dRowBytes = 0;
|
|
double dvalue = 0;
|
|
|
|
getIntegerParam(ADMinX, &minH);
|
|
getIntegerParam(ADMinY, &minV);
|
|
getIntegerParam(ADSizeX, &sizeH);
|
|
getIntegerParam(ADSizeY, &sizeV);
|
|
getIntegerParam(hBinning, &binning);
|
|
getIntegerParam(hBitPerChannel, &bitPerChannel);
|
|
|
|
dbinning = binning;
|
|
dminH = minH;
|
|
dminV = minV;
|
|
dsizeH = sizeH;
|
|
dsizeV = sizeV;
|
|
double modeON = DCAMPROP_MODE__ON;
|
|
double modeOFF = DCAMPROP_MODE__OFF;
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeOFF);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue);
|
|
status = setIntegerParam(ADBinX, dvalue);
|
|
status = setIntegerParam(ADBinY, dvalue);
|
|
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dRowBytes);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes);
|
|
//m_err = dcamprop_getvalue(m_hdcam, , &dvalue);
|
|
|
|
status = setIntegerParam(hBinning, dbinning);
|
|
status = setIntegerParam(hImageFramebytes, dFrameBytes);
|
|
status = setIntegerParam(hImageRowbytes, dRowBytes);
|
|
|
|
unsigned long size = (dsizeH - dminH) * (dsizeV - dminV) * dbinning;
|
|
printf("[DEBUG::readSensor] BitPerChannel = %d\n", bitPerChannel);
|
|
printf("[DEBUG::readSensor] ImageSize = %ld\n", size);
|
|
|
|
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &modeON);
|
|
|
|
|
|
callParamCallbacks();
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
|
|
//============================================================================
|
|
asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){
|
|
|
|
|
|
//printf("[DEBUG]::writeInt32\t");
|
|
asynStatus status = asynSuccess;
|
|
const char* functionName = "writeInt32";
|
|
const char* paramName;
|
|
|
|
int index = pasynUser->reason;
|
|
int adstatus;
|
|
// the setget function required double parameter
|
|
double dvalue = double(value);
|
|
|
|
getParamName(index, ¶mName);
|
|
|
|
/* Ensure that ADStatus is set correctly before we set ADAcquire.*/
|
|
getIntegerParam(ADStatus, &adstatus);
|
|
|
|
status = setIntegerParam(index, value);
|
|
|
|
if (index == ADAcquire) {
|
|
printf("[DEBUG]::writeInit32 ADAcquire\n");
|
|
if (value) {
|
|
/* Send an event to wake up the acq task.*/
|
|
puts("Requested acquire start event. Sending acquire start event signal to thread");
|
|
epicsEventSignal(this->startEvent_);
|
|
}
|
|
else if (!value && (adstatus == ADStatusAcquire || adstatus == ADStatusError)) {
|
|
/* This was a command to stop acquisition */
|
|
setShutter(0);
|
|
stopAcquire();
|
|
}
|
|
}
|
|
/*
|
|
else if (index == ADMaxSizeX_RBV) {
|
|
dcamprop_setvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, value);
|
|
dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &value_d);
|
|
printf("[DEBUG]::function ADNumExposures\n");
|
|
}
|
|
else if (index == ADMaxSizeY_RBV) {
|
|
dcamprop_setvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, value);
|
|
dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &value_d);
|
|
printf("[DEBUG]::function ADMinX\n");
|
|
}
|
|
*/
|
|
else if (index == ADImageMode) {
|
|
// dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value);
|
|
// dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d);
|
|
printf("[DEBUG]::writeInit32 ADImageMode\n");
|
|
}
|
|
else if (index == ADNumExposures) {
|
|
//camprop_setvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, value);
|
|
//dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value_d);
|
|
printf("[DEBUG]::writeInit32 ADNumExposures\n");
|
|
}
|
|
else if (index == ADMinX) {
|
|
readSensor();
|
|
}
|
|
else if (index == ADMinY) {
|
|
readSensor();
|
|
}
|
|
else if (index == ADSizeX) {
|
|
readSensor();
|
|
}
|
|
else if (index == ADSizeY) {
|
|
readSensor();
|
|
}
|
|
else if (index == ADReadStatus) {
|
|
// dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value);
|
|
// dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d);
|
|
printf("[DEBUG]::writeInit32 ADReadStatus\n");
|
|
}
|
|
//-- Sensor mode and speed
|
|
else if (index == hSensorMode) {
|
|
printf("[DEBUG]::writeInit32 SensorMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hReadoutSpeed) {
|
|
printf("[DEBUG]::writeInit32 ReadoutSpeed %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hReadoutDirection) {
|
|
printf("[DEBUG]::writeInit32 ReadoutDirection %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &dvalue, 0);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
//-- Trigger
|
|
else if (index == hTriggerSource) {
|
|
printf("[DEBUG]::writeInit32 TriggerSource %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerMode) {
|
|
printf("[DEBUG]::writeInit32 TriggerMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerActive) {
|
|
printf("[DEBUG]::writeInit32 TriggerActive %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerGlobalExposure) {
|
|
printf("[DEBUG]::writeInit32 TriggerGlobalExposure %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerPolarity) {
|
|
printf("[DEBUG]::writeInit32 TriggerPolarity %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerConnector) {
|
|
printf("[DEBUG]::writeInit32 TriggerConnector %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hTriggerTimes) {
|
|
printf("[DEBUG]::writeInit32 TriggerTimes %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hInternalTriggerHandling) {
|
|
printf("[DEBUG]::writeInit32 TriggerHandling %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
//-- binning and ROI
|
|
else if (index == hBinning) {
|
|
readSensor();
|
|
printf("[DEBUG]::writeInit32 Binning %d\n", value);
|
|
}
|
|
else if (index == hSubarrayHPos) {
|
|
printf("[DEBUG]::function SubArrayHPos %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hSubarrayHSize) {
|
|
printf("[DEBUG]::writeInit32 SubarrayHSize %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hSubarrayVPos) {
|
|
printf("[DEBUG]::writeInit32 SubarrayVPos %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hSubarrayVSize) {
|
|
printf("[DEBUG]::writeInit32 SubarrayVSize %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hSubarrayMode) {
|
|
printf("[DEBUG]::writeInit32 SubarrayMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
/*
|
|
else if (index == hIntensityLutMode) {
|
|
printf("[DEBUG]::function IntensityLutMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_MODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hIntensityLutPage) {
|
|
printf("[DEBUG]::function IntensityLutPage %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_PAGE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
*/
|
|
//-- ALU
|
|
else if (index == hDefectCorrectMode) {
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_DEFECTCORRECT_MODE, &dvalue);
|
|
printf("[DEBUG]::writeInit32 DefectCorrerMode %f\n", dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hHotPixelCorrectLevel) {
|
|
printf("[DEBUG]::writeInit32 HotPixelCorrectLevel %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_HOTPIXELCORRECT_LEVEL, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hIntensityLutMode) {
|
|
printf("[DEBUG]::writeInit32 IntensityLutMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_MODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
/*
|
|
else if (index == hExtractionMode) {
|
|
printf("[DEBUG]::writeInit32 ExtractionMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_EXTRACTION_MODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
*/
|
|
//-- Output trigger
|
|
else if (index == hOutputTriggerSource0) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerSource0 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerSource1) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerSource1 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerSource2) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerSource2 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
else if (index == hOutputTriggerPolarity0) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerPolaroty0 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerPolarity1) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerPolaroty1 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerPolarity2) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerPolaroty2 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
else if (index == hOutputTriggerKind0) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerKind0 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerKind1) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerKind1 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerKind2) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerKind2 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerBaseSensor0) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerBaseSensor0 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerBaseSensor1) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerBaseSensor1 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerBaseSensor2) {
|
|
printf("[DEBUG]::writeInit32 OutputTriggerBaseSensor2 %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
|
|
//-- Master pulse
|
|
else if (index == hMasterPulseMode) {
|
|
printf("[DEBUG]::writeInit32 MasterPulseMode %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_MODE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hMasterPulseTriggerSource) {
|
|
printf("[DEBUG]::writeInit32 MasterPulseTriggerSource %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE, &dvalue);
|
|
if(failed(m_err)) {
|
|
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);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
//-- Synchronous timing - nothing to implement either is in writeFloat64
|
|
//-- System information
|
|
else if (index == hBitPerChannel) {
|
|
printf("[DEBUG]::writeInit32 BitPerChannel %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BITSPERCHANNEL, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
else if (index == hImagePixelType) {
|
|
printf("[DEBUG]::writeInit32 ImagePixelType %d\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
else{
|
|
if(index < FIRST_HAMA_PARAM){
|
|
status = ADDriver::writeInt32(pasynUser, value);
|
|
printf("[+DEBUG]:: ADDriver::writeInit32 %s\n", paramName);
|
|
//ADDriver::writeInt32(pasynUser, value);
|
|
}
|
|
else{
|
|
printf("[-DEBUG]::function writeInt32 did not find a parameter index = %d, %s\n", index, paramName);
|
|
}
|
|
}
|
|
|
|
setIntegerParam(index, value);
|
|
/* Do callbacks so higher layers see any changes */
|
|
status = (asynStatus) callParamCallbacks();
|
|
|
|
if (status)
|
|
asynPrint(pasynUser, ASYN_TRACE_ERROR,
|
|
"%s:%s: error, status=%d function=%d, paramName=%s, value=%d\n",
|
|
driverName, functionName, status, index, paramName, value);
|
|
else
|
|
asynPrint(pasynUser, ASYN_TRACEIO_DRIVER,
|
|
"%s:%s: function=%d, paramName=%s, value=%d\n",
|
|
driverName, functionName, index, paramName, value);
|
|
|
|
return status;
|
|
}
|
|
|
|
//============================================================================
|
|
|
|
asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
|
|
|
|
asynStatus status = asynSuccess;
|
|
const char* functionName = "writeFloat64";
|
|
const char* paramName;
|
|
|
|
int index = pasynUser->reason;
|
|
|
|
double dvalue = value;
|
|
|
|
getParamName(index, ¶mName);
|
|
//-- Sensor mode and speed
|
|
//-- Feature
|
|
if(index == ADAcquireTime) {
|
|
printf("[DEBUG]::function ADAcquireTime from camera: %f\n", value);
|
|
|
|
int trigger_mode = 0;
|
|
getIntegerParam(hTriggerSource, &trigger_mode);
|
|
|
|
if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) {
|
|
status = setFeature(DCAM_IDPROP_EXPOSURETIME, value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
|
|
double acquire_period = 0;
|
|
status = getDoubleParam(ADAcquirePeriod, &acquire_period);
|
|
if (value >= acquire_period) {
|
|
status = setDoubleParam(ADAcquirePeriod, 0);
|
|
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL);
|
|
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL);
|
|
callParamCallbacks();
|
|
}
|
|
}
|
|
|
|
else status = asynError;
|
|
}
|
|
|
|
else if(index == ADAcquirePeriod) {
|
|
printf("[DEBUG]::function ADAcquirePeriod from camera: %f\n", value);
|
|
|
|
int trigger_mode = 0;
|
|
getIntegerParam(hTriggerSource, &trigger_mode);
|
|
|
|
if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) {
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
|
|
|
if (value <= dvalue) {
|
|
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL);
|
|
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL);
|
|
value = 0;
|
|
}
|
|
else {
|
|
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__MASTERPULSE);
|
|
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__MASTERPULSE);
|
|
|
|
status = setFeature(DCAM_IDPROP_MASTERPULSE_INTERVAL, value);
|
|
status = setDoubleParam(hMasterPulseInterval, value);
|
|
|
|
status = setFeature(DCAM_IDPROP_MASTERPULSE_MODE, DCAMPROP_MASTERPULSE_MODE__CONTINUOUS);
|
|
status = setIntegerParam(hMasterPulseMode, DCAMPROP_MASTERPULSE_MODE__CONTINUOUS);
|
|
}
|
|
}
|
|
else status = asynError;
|
|
}
|
|
|
|
//-- Trigger
|
|
else if (index == hTriggerDelay) {
|
|
printf("[DEBUG]::function TriggerDelay %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_TRIGGERDELAY, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
//-- Sensor cooler - nothing
|
|
//-- Binning and ROI - nothing
|
|
//-- ALU - nothing
|
|
//-- Output trigger
|
|
else if (index == hOutputTriggerDelay0) {
|
|
printf("[DEBUG]::function OutputTriggerDelay0 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerDelay1) {
|
|
printf("[DEBUG]::function OutputTriggerDelay1 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerDelay2) {
|
|
printf("[DEBUG]::function OutputTriggerDelay2 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
|
|
else if (index == hOutputTriggerPeriod0) {
|
|
printf("[DEBUG]::function OutputTriggerPeriod0 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerPeriod1) {
|
|
printf("[DEBUG]::function OutputTriggerPeriod1 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD+0x100, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hOutputTriggerPeriod2) {
|
|
printf("[DEBUG]::function OutputTriggerPeriod2 %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD+0x200, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
//-- Master Pulse
|
|
else if (index == hMasterPulseInterval) {
|
|
printf("[DEBUG]::function MasterPulseInterval %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_INTERVAL, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
//-- Synchronous timing
|
|
|
|
else if (index == hInternalLineSpeed) {
|
|
printf("[DEBUG]::function InternalLineSpeed %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALLINESPEED, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else if (index == hInternalLineInterval) {
|
|
printf("[DEBUG]::function InternalLineInterupt %f\n", value);
|
|
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNAL_LINEINTERVAL, &dvalue);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
|
|
}
|
|
}
|
|
else{
|
|
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);
|
|
}
|
|
}
|
|
|
|
if (status)
|
|
asynPrint(pasynUser, ASYN_TRACE_ERROR,
|
|
"%s:%s: error, status=%d function=%d, paramName=%s, value=%f\n",
|
|
driverName, functionName, status, index, paramName, value);
|
|
else {
|
|
setDoubleParam(index, value);
|
|
callParamCallbacks();
|
|
asynPrint(pasynUser, ASYN_TRACEIO_DRIVER,
|
|
"%s:%s: function=%d, paramName=%s, value=%f\n",
|
|
driverName, functionName, index, paramName, value);
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
void Hama::report(FILE *fp, int details){
|
|
double dvalue = 0;
|
|
fprintf(fp, "Hamamatsu Orca Flash4.0 driver\n");
|
|
if (details < 1) return;
|
|
|
|
// Sensor mode and speed
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORMODE, &dvalue);
|
|
fprintf(fp, "SENSOR MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUTSPEED, &dvalue);
|
|
fprintf(fp, "READOUT SPEED:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_READOUT_DIRECTION, &dvalue);
|
|
fprintf(fp, "READOUT DIRECTION:\t%f\n", dvalue);
|
|
// Trigger
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &dvalue);
|
|
fprintf(fp, "TRIGGER SOURCE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &dvalue);
|
|
fprintf(fp, "TRIGGER MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &dvalue);
|
|
fprintf(fp, "TRIGGER ACTIVE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &dvalue);
|
|
fprintf(fp, "TRIGGER GLOBAL EXPOSURE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &dvalue);
|
|
fprintf(fp, "TRIGGER POLARITY:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &dvalue);
|
|
fprintf(fp, "TRIGGER CONNECTOR:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &dvalue);
|
|
fprintf(fp, "TRIGGER TIMES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERDELAY, &dvalue);
|
|
fprintf(fp, "TRIGGER DELAY:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &dvalue);
|
|
fprintf(fp, "TRIGGER HANDLING:\t%f\n", dvalue);
|
|
// Sensor cooler
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLERSTATUS, &dvalue);
|
|
fprintf(fp, "SENSOR COOLER STATUS:\t%f\n", dvalue);
|
|
// Binning and ROI
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING, &dvalue);
|
|
fprintf(fp, "BINNING:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue);
|
|
fprintf(fp, "SUBARRAY HSIZE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue);
|
|
fprintf(fp, "SUBARRAY VSIZE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue);
|
|
fprintf(fp, "SUBARRAY HPOS:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue);
|
|
fprintf(fp, "SUBARRAY MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &dvalue);
|
|
fprintf(fp, "SUBARRAY MODE:\t%f\n", dvalue);
|
|
// Feature
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
|
|
fprintf(fp, "EXPOSURE TIME:\t%f\n", dvalue);
|
|
// ALU
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_DEFECTCORRECT_MODE, &dvalue);
|
|
fprintf(fp, "DEFECT CORRETION MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_HOTPIXELCORRECT_LEVEL, &dvalue);
|
|
fprintf(fp, "HOT PIXEL CORRECTION LEVEL:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_MODE, &dvalue);
|
|
fprintf(fp, "INTENSITY LUT MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTENSITYLUT_PAGE, &dvalue);
|
|
fprintf(fp, "INTENSITY LUT PAGE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXTRACTION_MODE, &dvalue);
|
|
fprintf(fp, "EXTRACTION MODE:\t%f\n", dvalue);
|
|
// Output Trigger
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR, &dvalue);
|
|
fprintf(fp, "OUTPUT TRIGGER CONNECTOR:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE, &dvalue);
|
|
fprintf(fp, "OUTPUT TRIGGER ACTIVE:\t%f\n", dvalue);
|
|
//m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE+4, &dvalue);
|
|
//fprintf(fp, ":\t%f\n", dvalue);
|
|
//m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE+6, &dvalue);
|
|
//fprintf(fp, ":\t%f\n", dvalue);
|
|
|
|
// - master pulse
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_MODE, &dvalue);
|
|
fprintf(fp, "MASTER PULSE MODE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE, &dvalue);
|
|
fprintf(fp, "MASTER MODE TRIGGERSOURCE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_INTERVAL, &dvalue);
|
|
fprintf(fp, "MASTER MODE INTERVAL:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_BURSTTIMES, &dvalue);
|
|
fprintf(fp, "MASTER MODE BURSTTIMES:\t%f\n", dvalue);
|
|
|
|
// - synchronous timing
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &dvalue);
|
|
fprintf(fp, "TIMING READOUT TIME:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD, &dvalue);
|
|
fprintf(fp, "TIMING CYCLIN TRIGGER PERIOD:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERBLANKING, &dvalue);
|
|
fprintf(fp, "TIMING MIN TRIGGER BLANKING:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL, &dvalue);
|
|
fprintf(fp, "TIMING MIN TRIGGER INTERVAL:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY, &dvalue);
|
|
fprintf(fp, "TIMING GLOBAL EXPOSURE DELAY:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_EXPOSURE, &dvalue);
|
|
fprintf(fp, "TIMING EXPOSURE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD, &dvalue);
|
|
fprintf(fp, "TIMING INVALID EXPOSURE PERIOD:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue);
|
|
fprintf(fp, "INTERNAL FRAME RATE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNAL_FRAMEINTERVAL, &dvalue);
|
|
fprintf(fp, "INTERNAL FRAME INTERVAL:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNALLINESPEED, &dvalue);
|
|
fprintf(fp, "INTERNAL LINE SPEED:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue( m_hdcam, DCAM_IDPROP_INTERNAL_LINEINTERVAL, &dvalue);
|
|
fprintf(fp, "INTERNAL LINE INTERVAL:\t%f\n", dvalue);
|
|
// - system information
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_COLORTYPE, &dvalue);
|
|
fprintf(fp, "COLOR TYPE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BITSPERCHANNEL, &dvalue);
|
|
fprintf(fp, "BITS PER CHANNEL:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &dvalue);
|
|
fprintf(fp, "IMAGE ROW BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dvalue);
|
|
fprintf(fp, "IMAGE FRAME BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_TOPOFFSETBYTES, &dvalue);
|
|
fprintf(fp, "IMAGE TOP OFFSET BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &dvalue);
|
|
fprintf(fp, "IMAGE PIXEL TYPE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_ROWBYTES, &dvalue);
|
|
fprintf(fp, "BUFFER ROW BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_FRAMEBYTES, &dvalue);
|
|
fprintf(fp, "BUFER FRAME BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_TOPOFFSETBYTES, &dvalue);
|
|
fprintf(fp, "BUFFER TOP OFFSET BYTES:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BUFFER_PIXELTYPE, &dvalue);
|
|
fprintf(fp, "BUFFER PIXEL TYPE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE, &dvalue);
|
|
fprintf(fp, "RECORD FIXED BYTES PER FILE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION, &dvalue);
|
|
fprintf(fp, "RECORD FIXED BYTES PER SESSION:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME, &dvalue);
|
|
fprintf(fp, "RECORD FIXED BYTES PER FRAME:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SYSTEM_ALIVE, &dvalue);
|
|
fprintf(fp, "SYSTEM ALIVE:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_CONVERSIONFACTOR_COEFF, &dvalue);
|
|
fprintf(fp, "CONVERSION FACTOR COEFFICIENT:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_CONVERSIONFACTOR_OFFSET, &dvalue);
|
|
fprintf(fp, "CONVERSION FACTOR OFFSET:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_NUMBEROF_VIEW, &dvalue);
|
|
fprintf(fp, "NUMBER OF VIEW:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_WIDTH, &dvalue);
|
|
fprintf(fp, "IMAGE WIDTH:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &dvalue);
|
|
fprintf(fp, "IMAGE HEIGHT:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_HORZ, &dvalue);
|
|
fprintf(fp, "PIXEL NUM HORZ:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DETECTOR_PIXEL_NUM_VERT, &dvalue);
|
|
fprintf(fp, "PIXEL NUM VERT:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMESTAMP_PRODUCER, &dvalue);
|
|
fprintf(fp, "TIMESTAMP PRODUCER:\t%f\n", dvalue);
|
|
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_FRAMESTAMP_PRODUCER, &dvalue);
|
|
fprintf(fp, "FRAMESTAMP PRODUCER:\t%f\n", dvalue);
|
|
|
|
ADDriver::report(fp, details);
|
|
}
|
|
|
|
//============================================================================
|
|
int Hama::connectCamera(void){
|
|
|
|
static const char *functionName = "connectCamera";
|
|
int nDevices = 0;
|
|
int iDevice = 0;
|
|
/* disconnect any connected camera first */
|
|
disconnectCamera();
|
|
|
|
/* initialize api */
|
|
memset(&m_apiInit, 0, sizeof(m_apiInit));
|
|
m_apiInit.size = sizeof(m_apiInit);
|
|
|
|
asynPrint(pasynUserSelf, ASYN_TRACE_FLOW,
|
|
"%s:%s: connecting camera %d\n",
|
|
driverName, functionName, m_id);
|
|
|
|
m_err = dcamapi_init( &m_apiInit);
|
|
if( failed(m_err) ){
|
|
printError( m_hdcam, m_err, "dcamapi_init()", NULL );
|
|
} else {
|
|
nDevices = m_apiInit.iDeviceCount;
|
|
printf("dcamapi_init() found %d device(s). \n", nDevices);
|
|
printf("camera with index 0 will be used\n");
|
|
iDevice = 0;
|
|
}
|
|
|
|
/* open handle to camera */
|
|
memset( &m_devOpen, 0, sizeof(m_devOpen) );
|
|
m_devOpen.size = sizeof(m_devOpen);
|
|
m_devOpen.index = iDevice;
|
|
m_err = dcamdev_open( &m_devOpen );
|
|
|
|
if( failed(m_err) ){
|
|
printError( m_hdcam, m_err, "dcamapi_init()" );
|
|
|
|
} else {
|
|
m_hdcam = m_devOpen.hdcam;
|
|
printInfo( m_hdcam );
|
|
}
|
|
|
|
// open wait handle
|
|
DCAMWAIT_OPEN waitopen;
|
|
memset( &waitopen, 0, sizeof(waitopen) );
|
|
waitopen.size = sizeof(waitopen);
|
|
waitopen.hdcam = m_hdcam;
|
|
|
|
m_err = dcamwait_open( &waitopen );
|
|
if( failed(m_err) ) {
|
|
printError( m_hdcam, m_err, "dcamwait_open()" );
|
|
}
|
|
else {
|
|
hwait = waitopen.hwait;
|
|
}
|
|
|
|
/* close api */ //- it should be here??????????????
|
|
// dcamapi_uninit();
|
|
// return status;
|
|
return 0;
|
|
}
|
|
|
|
//============================================================================
|
|
int Hama::disconnectCamera(void){
|
|
|
|
static const char *functionName = "disconnectCamera";
|
|
|
|
int status = 0;
|
|
|
|
|
|
if(m_hdcam == NULL) {
|
|
return status;
|
|
}
|
|
|
|
asynPrint(pasynUserSelf, ASYN_TRACE_FLOW,
|
|
"%s:%s: disconnecting camera %d\n",
|
|
driverName, functionName, m_id);
|
|
|
|
// status = AT_GetBool(handle_, L"CameraAcquiring", &acquiring);
|
|
// if(status == AT_SUCCESS && acquiring) {
|
|
// status |= AT_Command(handle_, L"Acquisition Stop");
|
|
// }
|
|
|
|
// status |= freeBuffers();
|
|
dcamdev_close( m_hdcam );
|
|
|
|
if(status) {
|
|
asynPrint(pasynUserSelf, ASYN_TRACE_ERROR,
|
|
"%s:%s: error closing camera %d\n",
|
|
driverName, functionName, m_id);
|
|
}
|
|
|
|
m_hdcam = NULL;
|
|
return status;
|
|
|
|
|
|
}
|
|
//============================================================================
|
|
int Hama::allocateBuffers(unsigned int nBuffers) {
|
|
m_err = dcambuf_alloc(m_hdcam, nBuffers);
|
|
if(failed(m_err)) {
|
|
puts("banana");
|
|
printError(m_hdcam, m_err, "dcambuf_alloc()");
|
|
return asynError;
|
|
}
|
|
return asynSuccess;
|
|
}
|
|
|
|
//============================================================================
|
|
int Hama::freeBuffers(){
|
|
m_err = dcambuf_release( m_hdcam );
|
|
if( failed(m_err) )
|
|
printError( m_hdcam, m_err, "dcambuf_release()" );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::stopAcquire(void)
|
|
{
|
|
asynStatus status = asynSuccess;
|
|
dcamcap_stop(m_hdcam);
|
|
printf("Stop Capture\n");
|
|
return status;
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::startAcquire(void)
|
|
{
|
|
asynStatus status = asynSuccess;
|
|
|
|
// release buffer
|
|
freeBuffers();
|
|
|
|
// allocate buffer
|
|
allocateBuffers(1);
|
|
|
|
// start capture
|
|
m_err = dcamcap_start(m_hdcam, DCAMCAP_START_SEQUENCE);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamcap_start()");
|
|
status = asynError;
|
|
}
|
|
else {
|
|
printf( "\nStart Capture\n" );
|
|
// set wait param
|
|
DCAMWAIT_START waitstart;
|
|
memset( &waitstart, 0, sizeof(waitstart) );
|
|
waitstart.size = sizeof(waitstart);
|
|
waitstart.eventmask = DCAMWAIT_CAPEVENT_FRAMEREADY;
|
|
waitstart.timeout = DCAMWAIT_TIMEOUT_INFINITE;
|
|
|
|
m_err = dcamwait_start(hwait, &waitstart);
|
|
if(failed(m_err)) {
|
|
printError(m_hdcam, m_err, "dcamwait_start()");
|
|
status = asynError;
|
|
}
|
|
}
|
|
return status;
|
|
}
|
|
|
|
//============================================================================
|
|
inline void* memcpy_s( void* dst, size_t dstsize, const void* src, size_t srclen )
|
|
{
|
|
if( dstsize < srclen )
|
|
return memcpy( dst, src, dstsize );
|
|
else
|
|
return memcpy( dst, src, srclen );
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf,
|
|
int32 rowbytes, int32 cx, int32 cy,
|
|
int32& ts_sec, int32& ts_microsec)
|
|
{
|
|
DCAMERR err;
|
|
|
|
// prepare frame param
|
|
DCAMBUF_FRAME bufframe;
|
|
memset( &bufframe, 0, sizeof(bufframe) );
|
|
bufframe.size = sizeof(bufframe);
|
|
bufframe.iFrame = iFrame;
|
|
|
|
// access image
|
|
err = dcambuf_lockframe( hdcam, &bufframe );
|
|
if(failed(err)) {
|
|
printError(hdcam, err, "dcambuf_lockframe()");
|
|
return asynError;
|
|
}
|
|
|
|
if( bufframe.type != DCAM_PIXELTYPE_MONO16 ) {
|
|
printf("not implement pixel type\n");
|
|
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;
|
|
char* pDst = (char*)buf;
|
|
|
|
for(int y = 0; y < cy; y++ ) {
|
|
memcpy_s( pDst, rowbytes, pSrc, copyrowbytes);
|
|
pSrc += bufframe.rowbytes;
|
|
pDst += rowbytes;
|
|
}
|
|
|
|
return asynSuccess;
|
|
}
|
|
|
|
|
|
//========================================================================================================
|
|
|
|
|
|
void Hama::getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, int32& rowbytes, int32& height, int32& framebytes)
|
|
{
|
|
DCAMERR err;
|
|
double property_value;
|
|
|
|
// image pixel type(DCAM_PIXELTYPE_MONO16, MONO8, ... )
|
|
err = dcamprop_getvalue(hdcam, DCAM_IDPROP_IMAGE_PIXELTYPE, &property_value);
|
|
if( failed(err) )
|
|
{
|
|
printError( hdcam, err, "dcamprop_getvalue()", "IDPROP:IMAGE_PIXELTYPE" );
|
|
return;
|
|
}
|
|
else
|
|
pixeltype = (int32) property_value;
|
|
|
|
// image width
|
|
err = dcamprop_getvalue( hdcam, DCAM_IDPROP_IMAGE_WIDTH, &property_value );
|
|
if( failed(err) )
|
|
{
|
|
printError( hdcam, err, "dcamprop_getvalue()", "IDPROP:IMAGE_WIDTH" );
|
|
return;
|
|
}
|
|
else
|
|
width = (int32)property_value;
|
|
|
|
// image row bytes
|
|
err = dcamprop_getvalue( hdcam, DCAM_IDPROP_IMAGE_ROWBYTES, &property_value );
|
|
if( failed(err) )
|
|
{
|
|
printError( hdcam, err, "dcamprop_getvalue()", "IDPROP:IMAGE_ROWBYTES" );
|
|
return;
|
|
}
|
|
else
|
|
rowbytes = (int32)property_value;
|
|
|
|
// image height
|
|
err = dcamprop_getvalue( hdcam, DCAM_IDPROP_IMAGE_HEIGHT, &property_value );
|
|
if( failed(err) )
|
|
{
|
|
printError( hdcam, err, "dcamprop_getvalue()", "IDPROP:IMAGE_HEIGHT" );
|
|
return;
|
|
}
|
|
else
|
|
height = (int32)property_value;
|
|
|
|
|
|
// image framebytes
|
|
err = dcamprop_getvalue( hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &property_value );
|
|
if( failed(err) )
|
|
{
|
|
printError( hdcam, err, "dcamprop_getvalue()", "IDPROP:IMAGE_FRAMEBYTES" );
|
|
return;
|
|
}
|
|
else
|
|
framebytes = (int32)property_value;
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo)
|
|
{
|
|
DCAMERR err;
|
|
// transferinfo param
|
|
memset(&captransferinfo, 0, sizeof(captransferinfo));
|
|
captransferinfo.size = sizeof(captransferinfo);
|
|
|
|
// get number of captured image
|
|
err = dcamcap_transferinfo(m_hdcam, &captransferinfo );
|
|
if( failed(err) ) {
|
|
printError( m_hdcam, err, "dcamcap_transferinfo()" );
|
|
return asynError;
|
|
}
|
|
|
|
if(captransferinfo.nFrameCount < 1) {
|
|
printf( "not capture image\n" );
|
|
return asynError;
|
|
}
|
|
|
|
return asynSuccess;
|
|
}
|
|
|
|
//============================================================================
|
|
void Hama::printError(HDCAM hdcam, DCAMERR errid, const char* apiname, const char* fmt, ...){
|
|
|
|
char errtext[ 256 ];
|
|
|
|
DCAMERR err;
|
|
dcamdev_string( err, hdcam, errid, errtext, sizeof(errtext) );
|
|
|
|
printf( "-[ERROR]- -(DCAMERR)- -0x%08X- -%s- -%s-\n", errid, errtext, apiname );
|
|
|
|
if( fmt != NULL ) {
|
|
printf( " : " );
|
|
|
|
va_list arg;
|
|
va_start(arg,fmt);
|
|
vprintf( fmt, arg );
|
|
va_end(arg);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//============================================================================
|
|
|
|
void Hama::printInfo(HDCAM hdcam){
|
|
|
|
char model[ 256 ];
|
|
char cameraid[ 64 ];
|
|
char bus[ 64 ];
|
|
|
|
DCAMERR err;
|
|
if( ! dcamdev_string( err, hdcam, DCAM_IDSTR_MODEL, model, sizeof(model) ) ) {
|
|
printError( hdcam, err, "dcamdev_getstring(DCAM_IDSTR_MODEL)\n" );
|
|
}
|
|
else if( ! dcamdev_string( err, hdcam, DCAM_IDSTR_CAMERAID, cameraid, sizeof(cameraid)) ) {
|
|
printError( hdcam, err, "dcamdev_getstring(DCAM_IDSTR_CAMERAID)\n" );
|
|
}
|
|
else if( ! dcamdev_string( err, hdcam, DCAM_IDSTR_BUS, bus, sizeof(bus) ) ) {
|
|
printError( hdcam, err, "dcamdev_getstring(DCAM_IDSTR_BUS)\n" );
|
|
}
|
|
else {
|
|
printf( "%s (%s) on %s\n", model, cameraid, bus );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//============================================================================
|
|
|
|
int Hama::dcamdev_string( DCAMERR& err, HDCAM hdcam, int32 idStr, char* text, int32 textbytes ) {
|
|
|
|
DCAMDEV_STRING param;
|
|
memset( ¶m, 0, sizeof(param) );
|
|
param.size = sizeof(param);
|
|
param.text = text;
|
|
param.textbytes = textbytes;
|
|
param.iString = idStr;
|
|
|
|
err = dcamdev_getstring( hdcam, ¶m );
|
|
return ! failed( err );
|
|
}
|
|
|
|
//============================================================================
|
|
asynStatus Hama::setFeature(int featureIndex, double value) {
|
|
DCAMERR err;
|
|
err = dcamprop_setvalue(m_hdcam, featureIndex, value);
|
|
if(failed(err)) {
|
|
printError(m_hdcam, err, "dcamprop_setvalue()", "IDPROP:0x%08x, VALUE:%f\n", featureIndex, value);
|
|
return asynError;
|
|
}
|
|
return asynSuccess;
|
|
}
|
|
|
|
//============================================================================
|
|
int Hama::getProperties(){
|
|
printf("\n[DEBUG] Function:getProperties\n");
|
|
|
|
int32 iProp = 0; // property IDs
|
|
|
|
double value = 50;
|
|
dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORTEMPERATURE, &value);
|
|
printf("The SENSOR TEMPERATURE = %f\n", value);
|
|
|
|
DCAMERR err;
|
|
err = dcamprop_getnextid( m_hdcam, &iProp, DCAMPROP_OPTION_SUPPORT );
|
|
if( failed(err) ) {
|
|
printError( m_hdcam, err, "dcamprop_getnextid()", "IDPROP:0x%08x, OPTION:SUPPORT", 0 );
|
|
return err;
|
|
}
|
|
|
|
do{
|
|
// get property name
|
|
char text[ 64 ];
|
|
err = dcamprop_getname( m_hdcam, iProp, text, sizeof(text) );
|
|
if( failed(err) ) {
|
|
printError( m_hdcam, err, "dcamprop_getname()", "IDPROP:0x%08x", iProp );
|
|
return err;
|
|
}
|
|
|
|
printf( "0x%08x: %s\n", iProp, text );
|
|
|
|
// get property attribute
|
|
DCAMPROP_ATTR basepropattr;
|
|
memset( &basepropattr, 0, sizeof(basepropattr) );
|
|
basepropattr.cbSize = sizeof(basepropattr);
|
|
basepropattr.iProp = iProp;
|
|
|
|
err = dcamprop_getattr( m_hdcam, &basepropattr );
|
|
if( !failed(err) ) {
|
|
|
|
#if SHOW_PROPERTY_ATTRIBUTE
|
|
// show property attribute
|
|
//dcamcon_show_propertyattr( basepropattr );
|
|
#endif
|
|
|
|
#if SHOW_PROPERTY_MODEVALUELIST
|
|
// show mode value list of property
|
|
//if( (basepropattr.attribute & DCAMPROP_TYPE_MASK) == DCAMPROP_TYPE_MODE )
|
|
// dcamcon_show_supportmodevalues( m_hdcam, iProp, basepropattr.valuemin );
|
|
#endif
|
|
|
|
#if SHOW_PROPERTY_ARRAYELEMENT
|
|
// show array element
|
|
//if( basepropattr.attribute2 & DCAMPROP_ATTR2_ARRAYBASE )
|
|
// dcamcon_show_arrayelement( m_hdcam, basepropattr );
|
|
#endif
|
|
}
|
|
|
|
// get next property id
|
|
err = dcamprop_getnextid( m_hdcam, &iProp, DCAMPROP_OPTION_SUPPORT );
|
|
if( failed(err) ) {
|
|
// no more supported property id
|
|
return err;
|
|
}
|
|
|
|
} while( iProp != 0 );
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
//============================================================================
|
|
//============================================================================
|
|
/* Code for iocsh registration */
|
|
|
|
|
|
|
|
extern "C" int HamaConfig(const char *portName, int cameraId, int maxBuffers,
|
|
size_t maxMemory, int priority, int stackSize,
|
|
int maxFrames) {
|
|
new Hama(portName, cameraId, maxBuffers, maxMemory, priority, stackSize,
|
|
maxFrames);
|
|
|
|
return(asynSuccess);
|
|
}
|
|
|
|
//============================================================================
|
|
static const iocshArg HamaConfigArg0 = {"Port name", iocshArgString};
|
|
static const iocshArg HamaConfigArg1 = {"CameraId", iocshArgInt};
|
|
static const iocshArg HamaConfigArg2 = {"maxBuffers", iocshArgInt};
|
|
static const iocshArg HamaConfigArg3 = {"maxMemory", iocshArgInt};
|
|
static const iocshArg HamaConfigArg4 = {"priority", iocshArgInt};
|
|
static const iocshArg HamaConfigArg5 = {"stackSize", iocshArgInt};
|
|
static const iocshArg HamaConfigArg6 = {"maxFrames", iocshArgInt};
|
|
static const iocshArg * const HamaConfigArgs[] = { &HamaConfigArg0,
|
|
&HamaConfigArg1,
|
|
&HamaConfigArg2,
|
|
&HamaConfigArg3,
|
|
&HamaConfigArg4,
|
|
&HamaConfigArg5,
|
|
&HamaConfigArg6 };
|
|
//============================================================================
|
|
static const iocshFuncDef confighama = {"devHamamatsuConfig", 7, HamaConfigArgs};
|
|
|
|
//============================================================================
|
|
static void confighamaCallFunc(const iocshArgBuf *args) {
|
|
HamaConfig(args[0].sval, args[1].ival, args[2].ival, args[3].ival,
|
|
args[4].ival, args[5].ival, args[6].ival);
|
|
}
|
|
|
|
//============================================================================
|
|
static void hamaRegister(void) {
|
|
|
|
iocshRegister(&confighama, confighamaCallFunc);
|
|
}
|
|
|
|
//============================================================================
|
|
extern "C" {
|
|
|
|
epicsExportRegistrar(hamaRegister);
|
|
}
|