From 15fd21a1e0c0e265ba146649226c11fce29a6306 Mon Sep 17 00:00:00 2001 From: Douglas Araujo Date: Wed, 11 Sep 2024 17:06:38 +0200 Subject: [PATCH] Apply clang-format following google standards --- .gitignore | 2 + ADOrcaApp/src/ADOrcaMain.cpp | 22 +- ADOrcaApp/src/orca.cpp | 3887 ++++++++++++++++++---------------- ADOrcaApp/src/orca.h | 599 +++--- 4 files changed, 2348 insertions(+), 2162 deletions(-) diff --git a/.gitignore b/.gitignore index 59231a1..a08be8b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ core.* list.txt kafka.conf ecdc-kafka-ca.crt +.pre-commit-config.yaml +.clang-format diff --git a/ADOrcaApp/src/ADOrcaMain.cpp b/ADOrcaApp/src/ADOrcaMain.cpp index 084f6c3..960b77e 100644 --- a/ADOrcaApp/src/ADOrcaMain.cpp +++ b/ADOrcaApp/src/ADOrcaMain.cpp @@ -3,22 +3,20 @@ /* Date: 2022-03-16 */ #include -#include -#include -#include #include +#include +#include #include "epicsExit.h" #include "epicsThread.h" #include "iocsh.h" -int main(int argc,char *argv[]) -{ - if(argc>=2) { - iocsh(argv[1]); - epicsThreadSleep(.2); - } - iocsh(NULL); - epicsExit(0); - return(0); +int main(int argc, char *argv[]) { + if (argc >= 2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return (0); } diff --git a/ADOrcaApp/src/orca.cpp b/ADOrcaApp/src/orca.cpp index 63fb45e..859cc27 100644 --- a/ADOrcaApp/src/orca.cpp +++ b/ADOrcaApp/src/orca.cpp @@ -1,2292 +1,2425 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - #include "orca.h" -// --- includes from DCMAPI ---- -#include "dcamprop.h" -// -#include -#include +#include + +#include "dcamprop.h" + using namespace std; //#define NUM_HAMA_PARAMS ((int)(&LAST_HAMA_PARAM - &FIRST_HAMA_PARAM + 1)) -static const char *driverName="drvOrca"; +static const char* driverName = "drvOrca"; -static void c_imagetask(void *arg) { - Orca *p = (Orca *)arg; +static void c_imagetask(void* arg) { + Orca* p = (Orca*)arg; p->imageTask(); } -static void c_temperaturetask(void *arg) { - Orca *p = (Orca *)arg; +static void c_temperaturetask(void* arg) { + Orca* p = (Orca*)arg; p->temperatureTask(); } - //============================================================================ -Orca::Orca(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, +Orca::Orca(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 */ + : 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) - + m_hdcam(NULL), + m_id(0) + { - const char *functionName = "orcaDetector::orcaDetector"; + const char* functionName = "orcaDetector::orcaDetector"; - printf("[DEBUG] === Constructor ADOrca ===\n"); - printf("[DEBUG] driverName: %s\n", driverName); + printf("[DEBUG] === Constructor ADOrca ===\n"); + printf("[DEBUG] driverName: %s\n", driverName); - stopThread = 0; + 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; - } + /* 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( hOrcaNameString, asynParamOctet, &hOrcaName); - 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); + // General + createParam(hFrameRateString, asynParamFloat64, &hFrameRate); + createParam(hOrcaNameString, asynParamOctet, &hOrcaName); + 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); + // 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); + // 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); + // 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); + // 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); -//ALU - createParam( hDefectCorrectModeString, asynParamInt32, &hDefectCorrectMode); - createParam( hHotPixelCorrectLevelString, asynParamInt32, &hHotPixelCorrectLevel); - createParam( hIntensityLutModeString, asynParamInt32, &hIntensityLutMode); - createParam( hIntensityLutPageString, asynParamInt32, &hIntensityLutPage); - createParam( hExtractionModeString, asynParamInt32, &hExtractionMode); + // 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); + // 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); -//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); + // Master Puls + createParam(hMasterPulseModeString, asynParamInt32, &hMasterPulseMode); + createParam(hMasterPulseTriggerSourceString, asynParamInt32, + &hMasterPulseTriggerSource); + createParam(hMasterPulseIntervalString, asynParamFloat64, + &hMasterPulseInterval); + createParam(hMasterPulseBurstTimesString, asynParamInt32, + &hMasterPulseBurstTimes); - createParam(evrTimeStampString, asynParamOctet, &evrTimeStamp); - createParam(evrCountString, asynParamInt32, &evrCounts); - createParam(evrCountSinceAcqStartString, asynParamInt32, &evrCountsSinceAcqStart); - createParam(evrTriggerDroppedString, asynParamInt32, &evrTriggerDropped); - createParam(hAcqControlString, asynParamInt32, &hAcqControl); + // 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); - setIntegerParam(NDArrayCallbacks, 1); - setStringParam (ADStatusMessage, "Idle"); - callParamCallbacks(); + // 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); - connectCamera(); - printf("\n\n============================ Init Camera =========================\n"); - initCamera(); + createParam(evrTimeStampString, asynParamOctet, &evrTimeStamp); + createParam(evrCountString, asynParamInt32, &evrCounts); + createParam(evrCountSinceAcqStartString, asynParamInt32, + &evrCountsSinceAcqStart); + createParam(evrTriggerDroppedString, asynParamInt32, &evrTriggerDropped); + createParam(hAcqControlString, asynParamInt32, &hAcqControl); - printf("\n\n============================ Start Threads =======================\n"); - /* launch image read task */ - epicsThreadCreate("OrcaImageTask", - epicsThreadPriorityMedium, - epicsThreadGetStackSize(epicsThreadStackMedium), - c_imagetask, this); + setIntegerParam(NDArrayCallbacks, 1); + setStringParam(ADStatusMessage, "Idle"); + callParamCallbacks(); - /* launch temp read task */ - epicsThreadCreate("OrcaTemperatureTask", - epicsThreadPriorityMedium, - epicsThreadGetStackSize(epicsThreadStackMedium), - c_temperaturetask, this); + connectCamera(); + printf( + "\n\n============================ Init Camera " + "=========================\n"); + initCamera(); - /* shutdown on exit */ - //epicsAtExit(c_shutdown, this); + printf( + "\n\n============================ Start Threads " + "=======================\n"); + /* launch image read task */ + epicsThreadCreate("OrcaImageTask", epicsThreadPriorityMedium, + epicsThreadGetStackSize(epicsThreadStackMedium), + c_imagetask, this); - printf("\n\n=== END Constructor ADOrca ===\n"); - printf("===================================================================\n"); + /* launch temp read task */ + epicsThreadCreate("OrcaTemperatureTask", epicsThreadPriorityMedium, + epicsThreadGetStackSize(epicsThreadStackMedium), + c_temperaturetask, this); + + /* shutdown on exit */ + // epicsAtExit(c_shutdown, this); + + printf("\n\n=== END Constructor ADOrca ===\n"); + printf( + "===================================================================\n"); } //============================================================================ -//Orca::~Orca(){ +// Orca::~Orca(){ // // not sure if the destructor has to be define here... // printf("[DEBUG] === Destructor ADOrca ===\n"); //} //======================================================================================================== -int Orca::initCamera(){ +int Orca::initCamera() { + int err = 0; - 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); - 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); - // 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); - // 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); - // 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 ------------------------------------------ - // SUBARRAYMODE ------------------------------------------ - - // FEATURE ----------------------------------------------- - - // EXPOSURETIME ------------------------------------------ + // FEATURE ----------------------------------------------- - // 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); + // EXPOSURETIME ------------------------------------------ - // 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); + // 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); - // 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); + // OUTPUT TRIGGER ---------------------------------------- + err |= readParameter(DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE); + err |= readParameter(DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR); + // MASTER PULSE ------------------------------------------ - err |= readParameter(DETECTOR_PIXEL_NUM_HORZ); - err |= readParameter(DETECTOR_PIXEL_NUM_VERT); + // 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); - 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; + 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 Orca::readParameterStr(int propertyID){ +int Orca::readParameterStr(int propertyID) { + asynStatus status = asynSuccess; - 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; - 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; + 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(); - callParamCallbacks(); - -return status; + return status; } - //============================================================================ int Orca::readParameter(int propertyID, bool processPV) { + asynStatus status = asynSuccess; + double dvalue = 0; - asynStatus status = asynSuccess; - double dvalue = 0; - - switch (propertyID){ - // - sensor mode and speed - case DCAM_IDPROP_SENSORMODE: //(RW1--) + 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--) + 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); + 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) + 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) + 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) + 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); + 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) + 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); + 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) + 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) + 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); + 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); + 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 + break; + // - sensor temperature in a thread - // - binning and roi - case DCAM_IDPROP_BINNING: //(RW1--) + // - binning and roi + case DCAM_IDPROP_BINNING: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_BINNING, &dvalue); status = setIntegerParam(hBinning, dvalue); - break; + break; - case DCAM_IDPROP_SUBARRAYHSIZE: //(RW1--) + case DCAM_IDPROP_SUBARRAYHSIZE: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dvalue); status = setIntegerParam(ADSizeX, dvalue); - break; + break; - case DCAM_IDPROP_SUBARRAYVSIZE: //(RW1--) + case DCAM_IDPROP_SUBARRAYVSIZE: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dvalue); status = setIntegerParam(ADSizeY, dvalue); - break; + break; - case DCAM_IDPROP_SUBARRAYHPOS: //(RW---) + case DCAM_IDPROP_SUBARRAYHPOS: //(RW---) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dvalue); status = setIntegerParam(ADMinX, dvalue); - break; + break; - case DCAM_IDPROP_SUBARRAYVPOS: //(RW1--) + case DCAM_IDPROP_SUBARRAYVPOS: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dvalue); status = setIntegerParam(ADMinY, dvalue); - break; + break; - case DCAM_IDPROP_SUBARRAYMODE: //(RW1--) + case DCAM_IDPROP_SUBARRAYMODE: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYMODE, &dvalue); status = setIntegerParam(hSubarrayMode, dvalue); - break; + break; case DCAM_IDPROP_EXPOSURETIME: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue); - status = setDoubleParam(ADAcquireTime, dvalue); - break; + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue); + status = setDoubleParam(ADAcquireTime, dvalue); + break; - // - alu - case DCAM_IDPROP_DEFECTCORRECT_MODE: //(RW123) - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_DEFECTCORRECT_MODE, &dvalue); + // - 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); + 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); + 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); + 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--) + break; + case DCAM_IDPROP_EXTRACTION_MODE: //(RW1--) m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXTRACTION_MODE, &dvalue); status = setIntegerParam(hExtractionMode, dvalue); - break; + break; - // - output trigger - case DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_NUMBEROF_OUTPUTTRIGGERCONNECTOR, &dvalue); + // - 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); + 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); + 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); + m_err = dcamprop_getvalue( + m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_SOURCE + 0x200, &dvalue); status = setIntegerParam(hOutputTriggerSource2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_POLARITY: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY, &dvalue); + 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); + 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); + m_err = dcamprop_getvalue( + m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_POLARITY + 0x200, &dvalue); status = setIntegerParam(hOutputTriggerPolarity2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE, &dvalue); + 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); + 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); + m_err = dcamprop_getvalue( + m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_ACTIVE + 0x200, &dvalue); status = setIntegerParam(hOutputTriggerActive2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_DELAY: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY, &dvalue); + 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); + 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); + m_err = dcamprop_getvalue( + m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_DELAY + 0x200, &dvalue); status = setIntegerParam(hOutputTriggerDelay2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_PERIOD: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD, &dvalue); + 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); + 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); + m_err = dcamprop_getvalue( + m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_PERIOD + 0x200, &dvalue); status = setIntegerParam(hOutputTriggerPeriod2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_KIND: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND, &dvalue); + 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); + 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); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_KIND + 0x200, + &dvalue); status = setIntegerParam(hOutputTriggerKind2, dvalue); - break; + break; - case DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_OUTPUTTRIGGER_BASESENSOR, &dvalue); + 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); + 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); + 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; - + break; - // - master pulse - case DCAM_IDPROP_MASTERPULSE_MODE: + 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; + break; - case DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE, &dvalue); + case DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_TRIGGERSOURCE, + &dvalue); status = setIntegerParam(hMasterPulseTriggerSource, dvalue); - break; + break; - case DCAM_IDPROP_MASTERPULSE_INTERVAL: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_INTERVAL, &dvalue); + case DCAM_IDPROP_MASTERPULSE_INTERVAL: + m_err = + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_INTERVAL, &dvalue); status = setIntegerParam(hMasterPulseInterval, dvalue); - break; + break; - case DCAM_IDPROP_MASTERPULSE_BURSTTIMES: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_BURSTTIMES, &dvalue); + case DCAM_IDPROP_MASTERPULSE_BURSTTIMES: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_MASTERPULSE_BURSTTIMES, + &dvalue); status = setIntegerParam(hMasterPulseBurstTimes, dvalue); - break; + break; - - // - synchronous timing - case DCAM_IDPROP_TIMING_READOUTTIME: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &dvalue); + // - synchronous timing + case DCAM_IDPROP_TIMING_READOUTTIME: + m_err = + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &dvalue); status = setDoubleParam(hTimingReadoutTime, dvalue); - break; + break; case DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_CYCLICTRIGGERPERIOD, + &dvalue); status = setDoubleParam(hTimingCyclicTriggerPeriod, dvalue); - break; + break; case DCAM_IDPROP_TIMING_MINTRIGGERBLANKING: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERBLANKING, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERBLANKING, + &dvalue); status = setDoubleParam(hTimingMinTriggerBlanking, dvalue); - break; + break; case DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_MINTRIGGERINTERVAL, + &dvalue); status = setDoubleParam(hTimingMinTriggerInterval, dvalue); - break; + break; case DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY, &dvalue); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_GLOBALEXPOSUREDELAY, + &dvalue); status = setDoubleParam(hTimingGlobalExposureDelay, dvalue); - break; + break; case DCAM_IDPROP_TIMING_EXPOSURE: m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_EXPOSURE, &dvalue); status = setIntegerParam(hTimingExposure, dvalue); - break; + break; case DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_INVALIDEXPOSUREPERIOD, &dvalue); + 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); + 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); + 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); + 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); + break; + case DCAM_IDPROP_INTERNAL_LINEINTERVAL: + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNAL_LINEINTERVAL, + &dvalue); status = setDoubleParam(hInternalLineInterval, dvalue); - break; + break; - // - system information - case DCAM_IDPROP_COLORTYPE: + // - system information + case DCAM_IDPROP_COLORTYPE: m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_COLORTYPE, &dvalue); status = setIntegerParam(hColorType, dvalue); - break; + 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: + 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: + break; + case DCAM_IDPROP_IMAGE_FRAMEBYTES: m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dvalue); status = setIntegerParam(hImageFramebytes, dvalue); - break; + break; case DCAM_IDPROP_IMAGE_TOPOFFSETBYTES: - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_TOPOFFSETBYTES, &dvalue); + m_err = + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_TOPOFFSETBYTES, &dvalue); status = setIntegerParam(hImageTopOffsetBytes, dvalue); - break; - case DCAM_IDPROP_IMAGE_PIXELTYPE: + 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: + 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); + 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); + 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: + 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); + 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); + 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); + 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: + 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); + 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); + 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: + 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: + 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: + 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: + 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: + 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); + 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); + break; + case DCAM_IDPROP_FRAMESTAMP_PRODUCER: + m_err = + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_FRAMESTAMP_PRODUCER, &dvalue); status = setIntegerParam(hFrameStampProducer, dvalue); - break; - default: + 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; - } + printf("Parameter not recognised, IDPROP:0x%08x, NAME:%s\n", propertyID, + text); + break; + } - if(failed(m_err)) { - char text[256] = {'\0'}; - dcamprop_getname(m_hdcam, propertyID, text, sizeof(text)); - printError(m_hdcam, m_err, "+dcamprop_getvalue()", "IDPROP:0x%08x, VALUE:%s\n", propertyID, text); - } + if (failed(m_err)) { + char text[256] = {'\0'}; + dcamprop_getname(m_hdcam, propertyID, text, sizeof(text)); + printError(m_hdcam, m_err, "+dcamprop_getvalue()", + "IDPROP:0x%08x, VALUE:%s\n", propertyID, text); + } - if (processPV) status = callParamCallbacks(); - return status; + if (processPV) status = callParamCallbacks(); + return status; } - //============================================================================ -void Orca::imageTask(){ - int status; - unsigned char *image; - int acquire; - int count = 0; - int callback; - //int acquireStatusError = 0; - int imageMode=0; - int totalImages=0; - int initial_evr_counters = 0; - int evr_counts_since_last_start = 0; - int evr_counts_since_last_start_previous = 0; - int evr_trigger_dropped = 0; - int acqStatus; - uint64_t prevAcquisitionCount = 0; - DCAMCAP_TRANSFERINFO captransferinfo; - epicsTimeStamp prevAcqTime, currentAcqTime; - epicsTimeStamp prev_trigger_time, current_trigger_time; - double elapsedTime; - int evr_counts = 0; - double exposure_time, readout_time; - double maxAcqusitionTime, acqusitionRate; - int triggerMode = DCAMPROP_TRIGGERSOURCE__INTERNAL; +void Orca::imageTask() { + int status; + unsigned char* image; + int acquire; + int count = 0; + int callback; + // int acquireStatusError = 0; + int imageMode = 0; + int totalImages = 0; + int initial_evr_counters = 0; + int evr_counts_since_last_start = 0; + int evr_counts_since_last_start_previous = 0; + int evr_trigger_dropped = 0; + int acqStatus; + uint64_t prevAcquisitionCount = 0; + DCAMCAP_TRANSFERINFO captransferinfo; + epicsTimeStamp prevAcqTime, currentAcqTime; + epicsTimeStamp prev_trigger_time, current_trigger_time; + double elapsedTime; + int evr_counts = 0; + double exposure_time, readout_time; + double maxAcqusitionTime, acqusitionRate; + int triggerMode = DCAMPROP_TRIGGERSOURCE__INTERNAL; + lock(); + while (1) { + getIntegerParam(ADAcquire, &acquire); + if (!acquire) { + puts("Waiting start"); + + unlock(); + status = epicsEventWait(startEvent_); + lock(); + + status = startAcquire(); + setStringParam(ADStatusMessage, "Acquiring"); + setIntegerParam(hAcqControl, 1); + callParamCallbacks(); + + epicsTimeGetCurrent(&prevAcqTime); + if (status != asynSuccess) { + // acquireStatusError = 1; + epicsThreadSleep(.1); + } else { + getIntegerParam(ADNumImages, &totalImages); + getIntegerParam(ADImageMode, &imageMode); + setIntegerParam(ADStatus, ADStatusAcquire); + acquire = 1; + prevAcquisitionCount = 0; + evr_trigger_dropped = 0; + setIntegerParam(ADNumImagesCounter, 0); + getIntegerParam(evrCounts, &initial_evr_counters); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, + &readout_time); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &exposure_time); + } + } + + // get image transfer status. + unlock(); + imageTransferStatus(m_hdcam, captransferinfo); lock(); - while(1) { - getIntegerParam(ADAcquire, &acquire); - if(!acquire) { - puts("Waiting start"); - unlock(); - status = epicsEventWait(startEvent_); - lock(); + if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) { + printf("\nOrca Frame Count: %d\n", captransferinfo.nFrameCount); + prevAcquisitionCount = captransferinfo.nFrameCount; - status = startAcquire(); - setStringParam (ADStatusMessage, "Acquiring"); - setIntegerParam(hAcqControl, 1); - callParamCallbacks(); + // get image information + int32 pixeltype = 0, width = 0, rowbytes = 0, height = 0, framebytes = 0; + getImageInformation(m_hdcam, pixeltype, width, rowbytes, height, + framebytes); - epicsTimeGetCurrent(&prevAcqTime); - if (status != asynSuccess) { - //acquireStatusError = 1; - epicsThreadSleep(.1); - } - else { - getIntegerParam(ADNumImages, &totalImages); - getIntegerParam(ADImageMode, &imageMode); - setIntegerParam(ADStatus, ADStatusAcquire); - acquire = 1; - prevAcquisitionCount = 0; - evr_trigger_dropped = 0; - setIntegerParam(ADNumImagesCounter, 0); - getIntegerParam(evrCounts, &initial_evr_counters); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TIMING_READOUTTIME, &readout_time); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &exposure_time); - } - } + if (pixeltype != DCAM_PIXELTYPE_MONO16) { + printf("not implement\n"); + return; + } - // get image transfer status. - unlock(); - imageTransferStatus(m_hdcam, captransferinfo); - lock(); + setIntegerParam(NDArraySizeX, (int)width); + setIntegerParam(NDArraySizeY, (int)height); + /* Do callbacks so higher layers see any changes */ + callParamCallbacks(); - if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) { - printf("\nOrca Frame Count: %d\n", captransferinfo.nFrameCount); - prevAcquisitionCount = captransferinfo.nFrameCount; + image = new unsigned char[width * 2 * height]; + memset(image, 0, width * 2 * height); - // get image information - int32 pixeltype = 0, width = 0, rowbytes = 0, height = 0, framebytes = 0; - getImageInformation(m_hdcam, pixeltype, width, rowbytes, height, framebytes); + getIntegerParam(NDArrayCounter, &count); + count++; + setIntegerParam(NDArrayCounter, count); - 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); + epicsUInt32 ts_sec = 0, ts_microsec = 0; + accessCapturedImage(m_hdcam, captransferinfo.nNewestFrameIndex, image, + width * 2, width, height, ts_sec, ts_microsec); - getIntegerParam(NDArrayCounter, &count); - count++; - setIntegerParam(NDArrayCounter, count); - - epicsUInt32 ts_sec = 0, ts_microsec = 0; - accessCapturedImage(m_hdcam, captransferinfo.nNewestFrameIndex, image, - width * 2, width, height, ts_sec, ts_microsec); - - double timestamp; - - getIntegerParam(hTriggerSource, &triggerMode); - if (triggerMode == DCAMPROP_TRIGGERSOURCE__EXTERNAL) { - getIntegerParam(evrCounts, &evr_counts); - evr_counts_since_last_start = evr_counts - initial_evr_counters; - evr_trigger_dropped = evr_counts_since_last_start - captransferinfo.nFrameCount; - printf("EVR event count: %d\n", evr_counts); - printf("evr_counts_since_last_start: %d\n", evr_counts_since_last_start); - setIntegerParam(evrCountsSinceAcqStart, evr_counts_since_last_start); - setIntegerParam(evrTriggerDropped, evr_trigger_dropped); - char buf[256]; - getStringParam(evrTimeStamp, 256, buf); - - // remember parsed timestamp values - sscanf(buf, "%u.%u", &mTimeStampSec, &mTimeStampNsec); - timestamp = mTimeStampSec + mTimeStampNsec / 1.e9; - printf("mTimeStampSec: %u - mTimeStampNsec: %u\n", mTimeStampSec, mTimeStampNsec); - printf("Timestamp from evr: %f\n", timestamp); - } else { - timestamp = (ts_sec + ts_microsec / 1.0e6) - (exposure_time + readout_time); - printf("Timestamp from camera: %f\n", timestamp); - } - - printf("readout_time: %f - exposure_time: %f\n", readout_time, exposure_time); - 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 = timestamp; - updateTimeStamp(&pImage->epicsTS); - - memcpy(pImage->pData, (epicsUInt16 *)image, pImage->dataSize); - - getAttributes(pImage->pAttributeList); - doCallbacksGenericPointer(pImage, NDArrayData, 0); - pImage->release(); - } - } - - delete[] image; - } - - setIntegerParam(ADNumImagesCounter, captransferinfo.nFrameCount); + double timestamp; + getIntegerParam(hTriggerSource, &triggerMode); + if (triggerMode == DCAMPROP_TRIGGERSOURCE__EXTERNAL) { getIntegerParam(evrCounts, &evr_counts); evr_counts_since_last_start = evr_counts - initial_evr_counters; - if (evr_counts_since_last_start != evr_counts_since_last_start_previous) { - setIntegerParam(evrCountsSinceAcqStart, evr_counts_since_last_start); - epicsTimeGetCurrent(&prev_trigger_time); - evr_counts_since_last_start_previous = evr_counts_since_last_start; - } - + evr_trigger_dropped = + evr_counts_since_last_start - captransferinfo.nFrameCount; + printf("EVR event count: %d\n", evr_counts); + printf("evr_counts_since_last_start: %d\n", + evr_counts_since_last_start); + setIntegerParam(evrCountsSinceAcqStart, evr_counts_since_last_start); + setIntegerParam(evrTriggerDropped, evr_trigger_dropped); + char buf[256]; + getStringParam(evrTimeStamp, 256, buf); - - - getDoubleParam(ADAcquirePeriod, &acqusitionRate); - getIntegerParam(ADStatus, &acqStatus); - maxAcqusitionTime = acqusitionRate * 2; - epicsTimeGetCurrent(¤tAcqTime); - if ((epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime) > maxAcqusitionTime) && - acqStatus != ADStatusAborted) { - printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime); - setShutter(0); - stopAcquire(); - setIntegerParam(ADAcquire, 0); - setIntegerParam(hAcqControl, 0); - setIntegerParam(ADStatus,ADStatusError); - setStringParam(ADStatusMessage, "Acquisition timeout"); + // remember parsed timestamp values + sscanf(buf, "%u.%u", &mTimeStampSec, &mTimeStampNsec); + timestamp = mTimeStampSec + mTimeStampNsec / 1.e9; + printf("mTimeStampSec: %u - mTimeStampNsec: %u\n", mTimeStampSec, + mTimeStampNsec); + printf("Timestamp from evr: %f\n", timestamp); + } else { + timestamp = + (ts_sec + ts_microsec / 1.0e6) - (exposure_time + readout_time); + printf("Timestamp from camera: %f\n", timestamp); + } - } - - epicsTimeGetCurrent(¤t_trigger_time); - if (epicsTimeDiffInSeconds(¤t_trigger_time, &prev_trigger_time) > (exposure_time + readout_time)) { - if ((evr_counts_since_last_start) > captransferinfo.nFrameCount ) { - evr_trigger_dropped = evr_counts_since_last_start - captransferinfo.nFrameCount; - setIntegerParam(evrTriggerDropped, evr_trigger_dropped); - } - } + printf("readout_time: %f - exposure_time: %f\n", readout_time, + exposure_time); + epicsTimeGetCurrent(¤tAcqTime); + elapsedTime = epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime); + prevAcqTime = currentAcqTime; - if ((imageMode == ADImageMultiple && totalImages == captransferinfo.nFrameCount) || - (imageMode == ADImageSingle && captransferinfo.nFrameCount == 1)) { - setShutter(0); - stopAcquire(); - setIntegerParam(ADAcquire, 0); - setIntegerParam(hAcqControl, 0); - setIntegerParam(ADStatus, ADStatusIdle); - setStringParam (ADStatusMessage, "Acquisition Done"); + 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 = timestamp; + updateTimeStamp(&pImage->epicsTS); + + memcpy(pImage->pData, (epicsUInt16*)image, pImage->dataSize); + + getAttributes(pImage->pAttributeList); + doCallbacksGenericPointer(pImage, NDArrayData, 0); + pImage->release(); } - callParamCallbacks(); + } + + delete[] image; } + + setIntegerParam(ADNumImagesCounter, captransferinfo.nFrameCount); + + getIntegerParam(evrCounts, &evr_counts); + evr_counts_since_last_start = evr_counts - initial_evr_counters; + if (evr_counts_since_last_start != evr_counts_since_last_start_previous) { + setIntegerParam(evrCountsSinceAcqStart, evr_counts_since_last_start); + epicsTimeGetCurrent(&prev_trigger_time); + evr_counts_since_last_start_previous = evr_counts_since_last_start; + } + + getDoubleParam(ADAcquirePeriod, &acqusitionRate); + getIntegerParam(ADStatus, &acqStatus); + maxAcqusitionTime = acqusitionRate * 2; + epicsTimeGetCurrent(¤tAcqTime); + if ((epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime) > + maxAcqusitionTime) && + acqStatus != ADStatusAborted) { + printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime); + setShutter(0); + stopAcquire(); + setIntegerParam(ADAcquire, 0); + setIntegerParam(hAcqControl, 0); + setIntegerParam(ADStatus, ADStatusError); + setStringParam(ADStatusMessage, "Acquisition timeout"); + } + + epicsTimeGetCurrent(¤t_trigger_time); + if (epicsTimeDiffInSeconds(¤t_trigger_time, &prev_trigger_time) > + (exposure_time + readout_time)) { + if ((evr_counts_since_last_start) > captransferinfo.nFrameCount) { + evr_trigger_dropped = + evr_counts_since_last_start - captransferinfo.nFrameCount; + setIntegerParam(evrTriggerDropped, evr_trigger_dropped); + } + } + + if ((imageMode == ADImageMultiple && + totalImages == captransferinfo.nFrameCount) || + (imageMode == ADImageSingle && captransferinfo.nFrameCount == 1)) { + setShutter(0); + stopAcquire(); + setIntegerParam(ADAcquire, 0); + setIntegerParam(hAcqControl, 0); + setIntegerParam(ADStatus, ADStatusIdle); + setStringParam(ADStatusMessage, "Acquisition Done"); + } + callParamCallbacks(); + } } //============================================================================ -void Orca::temperatureTask(){ - static const char *functionName = "tempTask"; - asynStatus status = asynSuccess; - double dvalue = 0; +void Orca::temperatureTask() { + static const char* functionName = "tempTask"; + asynStatus status = asynSuccess; + double dvalue = 0; - while( !stopThread ) { + 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_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); - 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); - } + if (status) { + asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, + "%s:%s: temperature read error = %d\n", driverName, + functionName, m_err); + } + callParamCallbacks(); + epicsThreadSleep(1.0); + } } //============================================================================ -asynStatus Orca::writeInt32(asynUser *pasynUser, epicsInt32 value) { - asynStatus status = asynSuccess; - const char* functionName = "writeInt32"; - const char* paramName; +asynStatus Orca::writeInt32(asynUser* pasynUser, epicsInt32 value) { + 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); + int index = pasynUser->reason; + int adstatus; + // the setget function required double parameter + double dvalue = double(value); - getParamName(index, ¶mName); + getParamName(index, ¶mName); - /* Ensure that ADStatus is set correctly before we set ADAcquire.*/ - getIntegerParam(ADStatus, &adstatus); + /* Ensure that ADStatus is set correctly before we set ADAcquire.*/ + getIntegerParam(ADStatus, &adstatus); - status = setIntegerParam(index, value); + status = setIntegerParam(index, value); - if (index == ADAcquire) { - if (value && adstatus != ADStatusAcquire) { - double readoutTime, acquirePeriod, acquireTime; - status = getDoubleParam(hTimingReadoutTime, &readoutTime); - status = getDoubleParam(ADAcquireTime, &acquireTime); - status = getDoubleParam(ADAcquirePeriod, &acquirePeriod); + if (index == ADAcquire) { + if (value && adstatus != ADStatusAcquire) { + double readoutTime, acquirePeriod, acquireTime; + status = getDoubleParam(hTimingReadoutTime, &readoutTime); + status = getDoubleParam(ADAcquireTime, &acquireTime); + status = getDoubleParam(ADAcquirePeriod, &acquirePeriod); - if (acquirePeriod < (readoutTime + acquireTime)) { - setStringParam (ADStatusMessage, - "Acquire Period must be greater than ReadoutTime + AcquireTime"); - setIntegerParam(ADAcquire, 0); - setIntegerParam(ADStatus, ADStatusAborted); - } - else { - /* Send an event to wake up the acq task.*/ - setStringParam (ADStatusMessage, ""); - epicsEventSignal(this->startEvent_); - } - } - else if (!value && (adstatus == ADStatusAcquire || adstatus == ADStatusError || adstatus == ADStatusWaiting)) { - /* This was a command to stop acquisition */ - setIntegerParam(ADStatus, ADStatusAborted); - setIntegerParam(hAcqControl, 0); - setStringParam (ADStatusMessage, "Acquisition aborted by user"); - stopAcquire(); - } + if (acquirePeriod < (readoutTime + acquireTime)) { + setStringParam( + ADStatusMessage, + "Acquire Period must be greater than ReadoutTime + AcquireTime"); + setIntegerParam(ADAcquire, 0); + setIntegerParam(ADStatus, ADStatusAborted); + } else { + /* Send an event to wake up the acq task.*/ + setStringParam(ADStatusMessage, ""); + epicsEventSignal(this->startEvent_); + } + } else if (!value && + (adstatus == ADStatusAcquire || adstatus == ADStatusError || + adstatus == ADStatusWaiting)) { + /* This was a command to stop acquisition */ + setIntegerParam(ADStatus, ADStatusAborted); + setIntegerParam(hAcqControl, 0); + setStringParam(ADStatusMessage, "Acquisition aborted by user"); + stopAcquire(); } - else if (index == ADImageMode) { + } 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) { - int minH = 0, sizeH = 0; - double dFrameBytes = 0; - getIntegerParam(ADMinX, &minH); - getIntegerParam(ADSizeX, &sizeH); + 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) { + int minH = 0, sizeH = 0; + double dFrameBytes = 0; + getIntegerParam(ADMinX, &minH); + getIntegerParam(ADSizeX, &sizeH); - if(sizeH > (MAX_H_SENSOR_SIZE - minH)) { - sizeH = MAX_H_SENSOR_SIZE - minH; - double dsizeH = sizeH; - double dminH = minH; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); - setIntegerParam(ADSizeX, sizeH); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - } - else { - double dsizeH = sizeH; - double dminH = minH; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - } - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - else if (index == ADMinY) { - int minV = 0, sizeV = 0; - double dFrameBytes = 0; - status = getIntegerParam(ADMinY, &minV); - getIntegerParam(ADSizeY, &sizeV); - - if(sizeV > (MAX_V_SENSOR_SIZE - minV)) { - sizeV = MAX_V_SENSOR_SIZE - minV; - double dsizeV = sizeV; - double dminV = minV; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); - setIntegerParam(ADSizeY, sizeV); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - } - else { - double dsizeV = sizeV; - double dminV = minV; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - } - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - - else if (index == ADSizeX) { - int minX = 0, sizeX = 0; - double dFrameBytes = 0; - getIntegerParam(ADMinX, &minX); - getIntegerParam(ADSizeX, &sizeX); - - if(sizeX < MAX_H_SENSOR_SIZE - minX) { - double dsizeX = roundToNearestMultipleOfFour(sizeX); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - value = (int)dsizeX; - } - else { - double dsizeX = MAX_H_SENSOR_SIZE - minX; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - value = (int)dsizeX; - } - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - - else if (index == ADSizeY) { - int minY = 0, sizeY = 0; - double dFrameBytes = 0; - getIntegerParam(ADMinY, &minY); - getIntegerParam(ADSizeY, &sizeY); - if(sizeY < MAX_V_SENSOR_SIZE - minY) { - double dsizeY = roundToNearestMultipleOfFour(sizeY); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - value = (int)dsizeY; - status = setIntegerParam(hImageFramebytes, dFrameBytes); - } - else { - double dsizeY = 0; - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); - status = setIntegerParam(hImageFramebytes, dFrameBytes); - value = (int)dsizeY; - } - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - else if (index == ADReadStatus) { - // dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value); - // dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d); - printf("[DEBUG]::writeInit32 ADReadStatus\n"); - } - - 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); - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - - 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); - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - } - - 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) { - int binning = 0; - double dFrameBytes = 0; - - getIntegerParam(hBinning, &binning); - double dbinning = binning; - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning); - if(failed(m_err)) printError(m_hdcam, m_err, "dcamprop_Binning()", " VALUE:%f\n", dbinning); - - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); + if (sizeH > (MAX_H_SENSOR_SIZE - minH)) { + sizeH = MAX_H_SENSOR_SIZE - minH; + double dsizeH = sizeH; + double dminH = minH; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); + setIntegerParam(ADSizeX, sizeH); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); status = setIntegerParam(hImageFramebytes, dFrameBytes); + } else { + double dsizeH = sizeH; + double dminH = minH; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeH); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHPOS, &dminH); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, + &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + } + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } else if (index == ADMinY) { + int minV = 0, sizeV = 0; + double dFrameBytes = 0; + status = getIntegerParam(ADMinY, &minV); + getIntegerParam(ADSizeY, &sizeV); - status = setIntegerParam(hBinning, dbinning); - printf("[DEBUG]::writeInit32 Binning %d\n", value); - } - 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); - } - } + if (sizeV > (MAX_V_SENSOR_SIZE - minV)) { + sizeV = MAX_V_SENSOR_SIZE - minV; + double dsizeV = sizeV; + double dminV = minV; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); + setIntegerParam(ADSizeY, sizeV); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + } else { + double dsizeV = sizeV; + double dminV = minV; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeV); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVPOS, &dminV); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + } + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } - 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 == ADSizeX) { + int minX = 0, sizeX = 0; + double dFrameBytes = 0; + getIntegerParam(ADMinX, &minX); + getIntegerParam(ADSizeX, &sizeX); - 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); - } - } + if (sizeX < MAX_H_SENSOR_SIZE - minX) { + double dsizeX = roundToNearestMultipleOfFour(sizeX); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, + &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + value = (int)dsizeX; + } else { + double dsizeX = MAX_H_SENSOR_SIZE - minX; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYHSIZE, &dsizeX); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, + &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + value = (int)dsizeX; + } + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } - 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 == ADSizeY) { + int minY = 0, sizeY = 0; + double dFrameBytes = 0; + getIntegerParam(ADMinY, &minY); + getIntegerParam(ADSizeY, &sizeY); + if (sizeY < MAX_V_SENSOR_SIZE - minY) { + double dsizeY = roundToNearestMultipleOfFour(sizeY); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, + &dFrameBytes); + value = (int)dsizeY; + status = setIntegerParam(hImageFramebytes, dFrameBytes); + } else { + double dsizeY = 0; + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SUBARRAYVSIZE, &dsizeY); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, + &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + value = (int)dsizeY; + } + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } else if (index == ADReadStatus) { + // dcamprop_setvalue(m_hdcam, DCAM_IDPROP_, value); + // dcamprop_getvalue(m_hdcam, DCAM_IDPROP_, &value_d); + printf("[DEBUG]::writeInit32 ADReadStatus\n"); + } - 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); - //} - } + 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); + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } - /* Do callbacks so higher layers see any changes */ - status = (asynStatus) callParamCallbacks(); + 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); + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + } - if (status) - asynPrint(pasynUser, ASYN_TRACE_ERROR, + 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) { + int binning = 0; + double dFrameBytes = 0; + + getIntegerParam(hBinning, &binning); + double dbinning = binning; + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_BINNING, &dbinning); + if (failed(m_err)) + printError(m_hdcam, m_err, "dcamprop_Binning()", " VALUE:%f\n", dbinning); + + m_err = + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_IMAGE_FRAMEBYTES, &dFrameBytes); + status = setIntegerParam(hImageFramebytes, dFrameBytes); + + status = setIntegerParam(hBinning, dbinning); + printf("[DEBUG]::writeInit32 Binning %d\n", value); + } 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); + // } + } + + /* 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); + else + asynPrint(pasynUser, ASYN_TRACEIO_DRIVER, + "%s:%s: function=%d, paramName=%s, value=%d\n", driverName, + functionName, index, paramName, value); -return status; + return status; } //============================================================================ -asynStatus Orca::writeFloat64(asynUser *pasynUser, epicsFloat64 value){ +asynStatus Orca::writeFloat64(asynUser* pasynUser, epicsFloat64 value) { + asynStatus status = asynSuccess; + const char* functionName = "writeFloat64"; + const char* paramName; - asynStatus status = asynSuccess; - const char* functionName = "writeFloat64"; - const char* paramName; + int index = pasynUser->reason; - int index = pasynUser->reason; + double dvalue = value; - 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; + double acquire_period = 0; + status = getDoubleParam(ADAcquirePeriod, &acquire_period); + status = getIntegerParam(hTriggerSource, &trigger_mode); - getParamName(index, ¶mName); - //-- Sensor mode and speed - //-- Feature - if(index == ADAcquireTime) { - printf("[DEBUG]::function ADAcquireTime from camera: %f\n", value); - int trigger_mode = 0; - double acquire_period = 0; - status = getDoubleParam(ADAcquirePeriod, &acquire_period); - status = getIntegerParam(hTriggerSource, &trigger_mode); - - if (trigger_mode == DCAMPROP_TRIGGERSOURCE__EXTERNAL) { - if (value >= acquire_period) status = asynError; - else { - status = setFeature(DCAM_IDPROP_EXPOSURETIME, value); - } - } - - else { - status = setFeature(DCAM_IDPROP_EXPOSURETIME, value); - if (value >= acquire_period) { - status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL); - status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL); - callParamCallbacks(); - } - } - - readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value); - } - - else if(index == ADAcquirePeriod) { - printf("[DEBUG]::function ADAcquirePeriod from camera: %f\n", value); - - int trigger_mode = 0; - getIntegerParam(hTriggerSource, &trigger_mode); - - m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue); - if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) { - if (value <= dvalue) { - status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL); - status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL); - } - 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 { - if (value <= dvalue) 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); + if (trigger_mode == DCAMPROP_TRIGGERSOURCE__EXTERNAL) { + if (value >= acquire_period) + status = asynError; + else { + status = setFeature(DCAM_IDPROP_EXPOSURETIME, value); } } - 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 { + status = setFeature(DCAM_IDPROP_EXPOSURETIME, value); + if (value >= acquire_period) { + status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, + DCAMPROP_TRIGGERSOURCE__INTERNAL); + status = + setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL); + callParamCallbacks(); } } - 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); + readParameter(DCAM_IDPROP_TIMING_READOUTTIME, false); + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &value); + } + + else if (index == ADAcquirePeriod) { + printf("[DEBUG]::function ADAcquirePeriod from camera: %f\n", value); + + int trigger_mode = 0; + getIntegerParam(hTriggerSource, &trigger_mode); + + m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue); + if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) { + if (value <= dvalue) { + status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, + DCAMPROP_TRIGGERSOURCE__INTERNAL); + status = + setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL); + } 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 { + if (value <= dvalue) status = asynError; } - /* - else if (index == hInternalFrameRate) { - printf("[DEBUG]::function InternalFrameRate %f\n", value); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, &dvalue); - if(failed(m_err)) { - printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue); - } + } + + //-- 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 == hInternalFrameRate) { + printf("[DEBUG]::function InternalFrameRate %f\n", value); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNALFRAMERATE, +&dvalue); if(failed(m_err)) { printError(m_hdcam, m_err, +"dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue); + } + } else if (index == hInternalFrameInterval) { - printf("[DEBUG]::function Internal FrameInterval %f\n", value); - m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNAL_FRAMEINTERVAL, &dvalue); - if(failed(m_err)) { - printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue); - } + printf("[DEBUG]::function Internal FrameInterval %f\n", value); + m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_INTERNAL_FRAMEINTERVAL, +&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 == 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 { + if (index < FIRST_HAMA_PARAM) { + status = ADDriver::writeFloat64(pasynUser, value); + printf("[+DEBUG]:: ADDriver::writeInit32 %s\n", paramName); } + } - if (status) - asynPrint(pasynUser, ASYN_TRACE_ERROR, + 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; -} + else { + setDoubleParam(index, value); + callParamCallbacks(); + asynPrint(pasynUser, ASYN_TRACEIO_DRIVER, + "%s:%s: function=%d, paramName=%s, value=%f\n", driverName, + functionName, index, paramName, value); + } - -//============================================================================ -void Orca::report(FILE *fp, int details){ - double dvalue = 0; - fprintf(fp, "Orcamatsu 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); + return status; } //============================================================================ -int Orca::connectCamera(void){ - - static const char *functionName = "connectCamera"; - int nDevices = 0; - int iDevice = 0; - /* disconnect any connected camera first */ - disconnectCamera(); +void Orca::report(FILE* fp, int details) { + double dvalue = 0; + fprintf(fp, "Orcamatsu Orca Flash4.0 driver\n"); + if (details < 1) return; - /* initialize api */ - memset(&m_apiInit, 0, sizeof(m_apiInit)); - m_apiInit.size = sizeof(m_apiInit); + // 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); - 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; - } + // - 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); - /* 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 ); + // - 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); - 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; + ADDriver::report(fp, details); } //============================================================================ -int Orca::disconnectCamera(void){ - - static const char *functionName = "disconnectCamera"; +int Orca::connectCamera(void) { + static const char* functionName = "connectCamera"; + int nDevices = 0; + int iDevice = 0; + /* disconnect any connected camera first */ + disconnectCamera(); - int status = 0; + /* initialize api */ + memset(&m_apiInit, 0, sizeof(m_apiInit)); + m_apiInit.size = sizeof(m_apiInit); - - 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", + asynPrint(pasynUserSelf, ASYN_TRACE_FLOW, "%s:%s: connecting camera %d\n", driverName, functionName, m_id); - } - m_hdcam = NULL; + 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 Orca::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 Orca::allocateBuffers(unsigned int nBuffers) { - m_err = dcambuf_alloc(m_hdcam, nBuffers); - if(failed(m_err)) { - printError(m_hdcam, m_err, "dcambuf_alloc()"); - return asynError; - } - return asynSuccess; + m_err = dcambuf_alloc(m_hdcam, nBuffers); + if (failed(m_err)) { + printError(m_hdcam, m_err, "dcambuf_alloc()"); + return asynError; + } + return asynSuccess; } //============================================================================ -int Orca::freeBuffers(){ - m_err = dcambuf_release( m_hdcam ); - if( failed(m_err) ) - printError( m_hdcam, m_err, "dcambuf_release()" ); +int Orca::freeBuffers() { + m_err = dcambuf_release(m_hdcam); + if (failed(m_err)) printError(m_hdcam, m_err, "dcambuf_release()"); -return 0; + return 0; } //============================================================================ -asynStatus Orca::stopAcquire(void) -{ - asynStatus status = asynSuccess; - m_err = dcamcap_stop(m_hdcam); - if(failed(m_err)) { - printError(m_hdcam, m_err, "dcamcap_stop()"); - status = asynError; - } - printf("Stop Capture\n"); +asynStatus Orca::stopAcquire(void) { + asynStatus status = asynSuccess; + m_err = dcamcap_stop(m_hdcam); + if (failed(m_err)) { + printError(m_hdcam, m_err, "dcamcap_stop()"); + status = asynError; + } + printf("Stop Capture\n"); - freeBuffers(); - return status; + freeBuffers(); + return status; } //============================================================================ -asynStatus Orca::startAcquire(void) -{ - asynStatus status = asynSuccess; +asynStatus Orca::startAcquire(void) { + asynStatus status = asynSuccess; - // release buffer - freeBuffers(); + // release buffer + freeBuffers(); - // allocate buffer - allocateBuffers(1); + // 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; - } - return status; + // start capture + m_err = dcamcap_start(m_hdcam, DCAMCAP_START_SEQUENCE); + if (failed(m_err)) { + printError(m_hdcam, m_err, "dcamcap_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 ); +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 Orca::accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, - epicsUInt32& ts_sec, epicsUInt32& ts_microsec) -{ - DCAMERR err; + epicsUInt32& ts_sec, + epicsUInt32& ts_microsec) { + DCAMERR err; - // prepare frame param - DCAMBUF_FRAME bufframe; - memset( &bufframe, 0, sizeof(bufframe) ); - bufframe.size = sizeof(bufframe); - bufframe.iFrame = iFrame; + // 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; - } + // 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; - } + 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; + // 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; + // 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; - } + for (int y = 0; y < cy; y++) { + memcpy_s(pDst, rowbytes, pSrc, copyrowbytes); + pSrc += bufframe.rowbytes; + pDst += rowbytes; + } - return asynSuccess; + return asynSuccess; } - //======================================================================================================== +void Orca::getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, + int32& rowbytes, int32& height, + int32& framebytes) { + DCAMERR err; + double property_value; -void Orca::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 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 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 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 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; + // 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 Orca::imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo) -{ - DCAMERR err; - // transferinfo param - memset(&captransferinfo, 0, sizeof(captransferinfo)); - captransferinfo.size = sizeof(captransferinfo); +asynStatus Orca::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; - } + // 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) { - return asynError; - } + if (captransferinfo.nFrameCount < 1) { + return asynError; + } - return asynSuccess; + return asynSuccess; } //============================================================================ -void Orca::printError(HDCAM hdcam, DCAMERR errid, const char* apiname, const char* fmt, ...){ +void Orca::printError(HDCAM hdcam, DCAMERR errid, const char* apiname, + const char* fmt, ...) { + char errtext[256]; - char errtext[ 256 ]; + DCAMERR err; + dcamdev_string(err, hdcam, errid, errtext, sizeof(errtext)); - DCAMERR err; - dcamdev_string( err, hdcam, errid, errtext, sizeof(errtext) ); + printf("-[ERROR]- -(DCAMERR)- -0x%08X- -%s- -%s-\n", errid, errtext, apiname); - printf( "-[ERROR]- -(DCAMERR)- -0x%08X- -%s- -%s-\n", errid, errtext, apiname ); + if (fmt != NULL) { + printf(" : "); - if( fmt != NULL ) { - printf( " : " ); - - va_list arg; - va_start(arg,fmt); - vprintf( fmt, arg ); - va_end(arg); - } - - + va_list arg; + va_start(arg, fmt); + vprintf(fmt, arg); + va_end(arg); + } } //============================================================================ -void Orca::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 ); - } +void Orca::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 Orca::dcamdev_string( DCAMERR& err, HDCAM hdcam, int32 idStr, char* text, int32 textbytes ) { +int Orca::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; - 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 ); + err = dcamdev_getstring(hdcam, ¶m); + return !failed(err); } //============================================================================ asynStatus Orca::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; + 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 Orca::getProperties(){ - printf("\n[DEBUG] Function:getProperties\n"); +int Orca::getProperties() { + printf("\n[DEBUG] Function:getProperties\n"); - int32 iProp = 0; // property IDs + int32 iProp = 0; // property IDs - double value = 50; - dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORTEMPERATURE, &value); - printf("The SENSOR TEMPERATURE = %f\n", value); + 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 ); + 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; - } - - 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 ); + 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; + // 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) ) { + err = dcamprop_getattr(m_hdcam, &basepropattr); + if (!failed(err)) { +#if SHOW_PROPERTY_ATTRIBUTE +// show property attribute +// dcamcon_show_propertyattr( basepropattr ); +#endif - #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_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 + } - #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; + } - // 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); - } while( iProp != 0 ); - -return 0; + return 0; } int Orca::roundToNearestMultipleOfFour(int value) { - int remainder = value % 4; - if (remainder == 0) return value; - else if (remainder <= 2) return value - remainder; - else return value + (4 - remainder); + int remainder = value % 4; + if (remainder == 0) + return value; + else if (remainder <= 2) + return value - remainder; + else + return value + (4 - remainder); } - //============================================================================ //============================================================================ /* Code for iocsh registration */ +extern "C" int OrcaConfig(const char* portName, int cameraId, int maxBuffers, + size_t maxMemory, int priority, int stackSize, + int maxFrames) { + new Orca(portName, cameraId, maxBuffers, maxMemory, priority, stackSize, + maxFrames); - -extern "C" int OrcaConfig(const char *portName, int cameraId, int maxBuffers, - size_t maxMemory, int priority, int stackSize, - int maxFrames) { - new Orca(portName, cameraId, maxBuffers, maxMemory, priority, stackSize, - maxFrames); - - return(asynSuccess); + return (asynSuccess); } //============================================================================ -static const iocshArg OrcaConfigArg0 = {"Port name", iocshArgString}; -static const iocshArg OrcaConfigArg1 = {"CameraId", iocshArgInt}; +static const iocshArg OrcaConfigArg0 = {"Port name", iocshArgString}; +static const iocshArg OrcaConfigArg1 = {"CameraId", iocshArgInt}; static const iocshArg OrcaConfigArg2 = {"maxBuffers", iocshArgInt}; -static const iocshArg OrcaConfigArg3 = {"maxMemory", iocshArgInt}; -static const iocshArg OrcaConfigArg4 = {"priority", iocshArgInt}; -static const iocshArg OrcaConfigArg5 = {"stackSize", iocshArgInt}; -static const iocshArg OrcaConfigArg6 = {"maxFrames", iocshArgInt}; -static const iocshArg * const OrcaConfigArgs[] = { &OrcaConfigArg0, - &OrcaConfigArg1, - &OrcaConfigArg2, - &OrcaConfigArg3, - &OrcaConfigArg4, - &OrcaConfigArg5, - &OrcaConfigArg6 }; +static const iocshArg OrcaConfigArg3 = {"maxMemory", iocshArgInt}; +static const iocshArg OrcaConfigArg4 = {"priority", iocshArgInt}; +static const iocshArg OrcaConfigArg5 = {"stackSize", iocshArgInt}; +static const iocshArg OrcaConfigArg6 = {"maxFrames", iocshArgInt}; +static const iocshArg* const OrcaConfigArgs[] = { + &OrcaConfigArg0, &OrcaConfigArg1, &OrcaConfigArg2, &OrcaConfigArg3, + &OrcaConfigArg4, &OrcaConfigArg5, &OrcaConfigArg6}; //============================================================================ -static const iocshFuncDef configorca = {"devOrcamatsuConfig", 7, OrcaConfigArgs}; +static const iocshFuncDef configorca = {"devOrcamatsuConfig", 7, + OrcaConfigArgs}; //============================================================================ -static void configorcaCallFunc(const iocshArgBuf *args) { - OrcaConfig(args[0].sval, args[1].ival, args[2].ival, args[3].ival, - args[4].ival, args[5].ival, args[6].ival); +static void configorcaCallFunc(const iocshArgBuf* args) { + OrcaConfig(args[0].sval, args[1].ival, args[2].ival, args[3].ival, + args[4].ival, args[5].ival, args[6].ival); } //============================================================================ static void orcaRegister(void) { - - iocshRegister(&configorca, configorcaCallFunc); + iocshRegister(&configorca, configorcaCallFunc); } //============================================================================ diff --git a/ADOrcaApp/src/orca.h b/ADOrcaApp/src/orca.h index 1c1ab60..7bdf685 100644 --- a/ADOrcaApp/src/orca.h +++ b/ADOrcaApp/src/orca.h @@ -1,6 +1,9 @@ #ifndef DRV_HAMA_H #define DRV_HAMA_H +// EPICS includes +#include +#include #include "ADDriver.h" #include "dcamapi4.h" @@ -10,313 +13,363 @@ #define MAX_H_SENSOR_SIZE 2048 #define MAX_V_SENSOR_SIZE 2048 -#define hFrameRateString "H_FRAMERATE" -#define hOrcaNameString "H_HAMA_NAME" /* asynOctet ro */ -#define hVendorString "H_VENDOR" /* asynOctet ro */ -#define hModelString "H_MODEL" /* asynOctet ro */ -#define hCameraIDString "H_CAMERAID" /* asynOctet ro */ -#define hBusString "H_BUS" /* asynOctet ro */ -#define hCameraVersionString "H_CAMERA_VERSION" /* asynOctet ro */ -#define hDriverVersionString "H_DRIVER_VERSION" /* asynOctet ro */ -#define hModuleVersionString "H_MODULE_VERSION" /* asynOctet ro */ -#define hDcamApiVersionString "H_DCAM_API_VERSION" /* asynOctet ro */ +#define hFrameRateString "H_FRAMERATE" +#define hOrcaNameString "H_HAMA_NAME" /* asynOctet ro */ +#define hVendorString "H_VENDOR" /* asynOctet ro */ +#define hModelString "H_MODEL" /* asynOctet ro */ +#define hCameraIDString "H_CAMERAID" /* asynOctet ro */ +#define hBusString "H_BUS" /* asynOctet ro */ +#define hCameraVersionString "H_CAMERA_VERSION" /* asynOctet ro */ +#define hDriverVersionString "H_DRIVER_VERSION" /* asynOctet ro */ +#define hModuleVersionString "H_MODULE_VERSION" /* asynOctet ro */ +#define hDcamApiVersionString "H_DCAM_API_VERSION" /* asynOctet ro */ -// Sensor mode and speed -#define hSensorModeString "H_SENSOR_MODE" /* asynint32 rw */ -#define hReadoutSpeedString "H_READOUT_SPEED" /* asynInt32 rw */ -#define hReadoutDirectionString "H_READOUT_DIRECTION" /* asynIekt32 rw */ +// Sensor mode and speed +#define hSensorModeString "H_SENSOR_MODE" /* asynint32 rw */ +#define hReadoutSpeedString "H_READOUT_SPEED" /* asynInt32 rw */ +#define hReadoutDirectionString "H_READOUT_DIRECTION" /* asynIekt32 rw */ // Trigger -#define hTriggerSourceString "H_TRIGGER_SOURCE" /* asynInt32 rw */ -#define hTriggerModeString "H_TRIGGER_MODE" /* asynInt32 rw */ -#define hTriggerActiveString "H_TRIGGER_ACTIVE" /* asynInt32 rw */ -#define hTriggerGlobalExposureString "H_TRIGGER_GLOBAL_EXPOSURE" /* asynInt32 rw */ -#define hTriggerPolarityString "H_TRIGGER_POLARITY" /* asynInt32 rw */ -#define hTriggerConnectorString "H_TRIGGER_CONNECTOR" /* asynInt32 rw */ -#define hTriggerTimesString "H_TRIGGER_TIMES" /* asynInt32 rw */ -#define hTriggerDelayString "H_TRIGGER_DELAY" /* asynFloat64 rw */ -#define hInternalTriggerHandlingString "H_INTERNAL_TRIGGER_HANDLING" /* asynInt32 rw */ +#define hTriggerSourceString "H_TRIGGER_SOURCE" /* asynInt32 rw */ +#define hTriggerModeString "H_TRIGGER_MODE" /* asynInt32 rw */ +#define hTriggerActiveString "H_TRIGGER_ACTIVE" /* asynInt32 rw */ +#define hTriggerGlobalExposureString \ + "H_TRIGGER_GLOBAL_EXPOSURE" /* asynInt32 rw */ +#define hTriggerPolarityString "H_TRIGGER_POLARITY" /* asynInt32 rw */ +#define hTriggerConnectorString "H_TRIGGER_CONNECTOR" /* asynInt32 rw */ +#define hTriggerTimesString "H_TRIGGER_TIMES" /* asynInt32 rw */ +#define hTriggerDelayString "H_TRIGGER_DELAY" /* asynFloat64 rw */ +#define hInternalTriggerHandlingString \ + "H_INTERNAL_TRIGGER_HANDLING" /* asynInt32 rw */ // Sensor cooler -#define hSensorTemperatureString "H_SENSOR_TEMPERATURE" /* asynFloat64 ro */ -#define hSensorCoolerString "H_SENSOR_COOLER" /* asynInt32 rw */ -#define hSensorCoolerStatusString "H_SENSOR_COOLER_STATUS" /* asynInt32 ro */ +#define hSensorTemperatureString "H_SENSOR_TEMPERATURE" /* asynFloat64 ro */ +#define hSensorCoolerString "H_SENSOR_COOLER" /* asynInt32 rw */ +#define hSensorCoolerStatusString "H_SENSOR_COOLER_STATUS" /* asynInt32 ro */ // Binning and ROI -#define hBinningString "H_BINNING" /* asynInt32 rw */ -#define hSubarrayHPosString "H_SUBARRAY_HPOST" /* asynInt32 rw */ -#define hSubarrayHSizeString "H_SUBARRAY_HSIZE" /* asynInt32 rw */ -#define hSubarrayVPosString "H_SUBARRAY_VPOS" /* asynInt32 rw */ -#define hSubarrayVSizeString "H_SUBARRAY_VSIZE" /* asynInt32 rw */ -#define hSubarrayModeString "H_SUBARRAY_MODE" /* asynInt32 rw */ -// #define hFrameBundleMode (usb3 only not implemented) +#define hBinningString "H_BINNING" /* asynInt32 rw */ +#define hSubarrayHPosString "H_SUBARRAY_HPOST" /* asynInt32 rw */ +#define hSubarrayHSizeString "H_SUBARRAY_HSIZE" /* asynInt32 rw */ +#define hSubarrayVPosString "H_SUBARRAY_VPOS" /* asynInt32 rw */ +#define hSubarrayVSizeString "H_SUBARRAY_VSIZE" /* asynInt32 rw */ +#define hSubarrayModeString "H_SUBARRAY_MODE" /* asynInt32 rw */ +// #define hFrameBundleMode (usb3 only not implemented) // #define hFrameBundleNumber (usb3 only not implemented) // ALU -#define hDefectCorrectModeString "H_DEFECTCORRECT_MODE" /* asynInt32 rw */ -#define hHotPixelCorrectLevelString "H_HOT_PIXEL_CORRECT_LEVEL" /* asynInt32 rw */ -#define hIntensityLutModeString "H_INTENSITY_LUT_MODE" /* asynInt32 rw */ -#define hIntensityLutPageString "H_INTENSITY_LUT_PAGE" /* asynInt32 ro */ -#define hExtractionModeString "H_EXTRACTION_MODE" /* asynInt32 ro */ +#define hDefectCorrectModeString "H_DEFECTCORRECT_MODE" /* asynInt32 rw */ +#define hHotPixelCorrectLevelString \ + "H_HOT_PIXEL_CORRECT_LEVEL" /* asynInt32 rw */ +#define hIntensityLutModeString "H_INTENSITY_LUT_MODE" /* asynInt32 rw */ +#define hIntensityLutPageString "H_INTENSITY_LUT_PAGE" /* asynInt32 ro */ +#define hExtractionModeString "H_EXTRACTION_MODE" /* asynInt32 ro */ // output trigger -#define hNumberOfOutputTriggerConnectorString "H_NUMBEROF_OUTPUTTRIGGERCONNECTOR" /* asynInt32 ro */ -#define hOutputTriggerSource0String "H_OUTPUT_TRIGGER_SOURCE0" /* asynInt32 rw */ -#define hOutputTriggerSource1String "H_OUTPUT_TRIGGER_SOURCE1" /* asynInt32 rw */ -#define hOutputTriggerSource2String "H_OUTPUT_TRIGGER_SOURCE2" /* asynInt32 rw */ -#define hOutputTriggerPolarity0String "H_OUTPUT_TRIGGER_POLARITY0" /* asynInt32 rw */ -#define hOutputTriggerPolarity1String "H_OUTPUT_TRIGGER_POLARITY1" /* asynInt32 rw */ -#define hOutputTriggerPolarity2String "H_OUTPUT_TRIGGER_POLARITY2" /* asynInt32 rw */ -#define hOutputTriggerActive0String "H_OUTPUT_TRIGGER_ACTIVE0" /* asynInt32 ro */ -#define hOutputTriggerActive1String "H_OUTPUT_TRIGGER_ACTIVE1" /* asynInt32 ro */ -#define hOutputTriggerActive2String "H_OUTPUT_TRIGGER_ACTIVE2" /* asynInt32 ro */ -#define hOutputTriggerDelay0String "H_OUTPUT_TRIGGER_DELAY0" /* asynFloat64 rw */ -#define hOutputTriggerDelay1String "H_OUTPUT_TRIGGER_DELAY1" /* asynFloat64 rw */ -#define hOutputTriggerDelay2String "H_OUTPUT_TRIGGER_DELAY2" /* asynFloat64 rw */ -#define hOutputTriggerPeriod0String "H_OUTPUT_TRIGGER_PERIOD0" /* asynFloat64 rw */ -#define hOutputTriggerPeriod1String "H_OUTPUT_TRIGGER_PERIOD1" /* asynFloat64 rw */ -#define hOutputTriggerPeriod2String "H_OUTPUT_TRIGGER_PERIOD2" /* asynFloat64 rw */ -#define hOutputTriggerKind0String "H_OUTPUT_TRIGGER_KIND0" /* asynInt32 rw */ -#define hOutputTriggerKind1String "H_OUTPUT_TRIGGER_KIND1" /* asynInt32 rw */ -#define hOutputTriggerKind2String "H_OUTPUT_TRIGGER_KIND2" /* asynInt32 rw */ -#define hOutputTriggerBaseSensor0String "H_OUTPUT_TRIGGER_BASE_SENSOR0" /* asynInt32 rw */ -#define hOutputTriggerBaseSensor1String "H_OUTPUT_TRIGGER_BASE_SENSOR1" /* asynInt32 rw */ -#define hOutputTriggerBaseSensor2String "H_OUTPUT_TRIGGER_BASE_SENSOR2" /* asynInt32 rw */ -#define hOutputTriggerPreHsyncCountString "H_OUTPUT_TRIGGER_PRE_HSYNC_COUNT" /* asynInt32 rw */ +#define hNumberOfOutputTriggerConnectorString \ + "H_NUMBEROF_OUTPUTTRIGGERCONNECTOR" /* asynInt32 ro */ +#define hOutputTriggerSource0String \ + "H_OUTPUT_TRIGGER_SOURCE0" /* asynInt32 rw */ +#define hOutputTriggerSource1String \ + "H_OUTPUT_TRIGGER_SOURCE1" /* asynInt32 rw */ +#define hOutputTriggerSource2String \ + "H_OUTPUT_TRIGGER_SOURCE2" /* asynInt32 rw */ +#define hOutputTriggerPolarity0String \ + "H_OUTPUT_TRIGGER_POLARITY0" /* asynInt32 rw */ +#define hOutputTriggerPolarity1String \ + "H_OUTPUT_TRIGGER_POLARITY1" /* asynInt32 rw */ +#define hOutputTriggerPolarity2String \ + "H_OUTPUT_TRIGGER_POLARITY2" /* asynInt32 rw */ +#define hOutputTriggerActive0String \ + "H_OUTPUT_TRIGGER_ACTIVE0" /* asynInt32 ro */ +#define hOutputTriggerActive1String \ + "H_OUTPUT_TRIGGER_ACTIVE1" /* asynInt32 ro */ +#define hOutputTriggerActive2String \ + "H_OUTPUT_TRIGGER_ACTIVE2" /* asynInt32 ro */ +#define hOutputTriggerDelay0String \ + "H_OUTPUT_TRIGGER_DELAY0" /* asynFloat64 rw */ +#define hOutputTriggerDelay1String \ + "H_OUTPUT_TRIGGER_DELAY1" /* asynFloat64 rw */ +#define hOutputTriggerDelay2String \ + "H_OUTPUT_TRIGGER_DELAY2" /* asynFloat64 rw */ +#define hOutputTriggerPeriod0String \ + "H_OUTPUT_TRIGGER_PERIOD0" /* asynFloat64 rw */ +#define hOutputTriggerPeriod1String \ + "H_OUTPUT_TRIGGER_PERIOD1" /* asynFloat64 rw */ +#define hOutputTriggerPeriod2String \ + "H_OUTPUT_TRIGGER_PERIOD2" /* asynFloat64 rw */ +#define hOutputTriggerKind0String "H_OUTPUT_TRIGGER_KIND0" /* asynInt32 rw */ +#define hOutputTriggerKind1String "H_OUTPUT_TRIGGER_KIND1" /* asynInt32 rw */ +#define hOutputTriggerKind2String "H_OUTPUT_TRIGGER_KIND2" /* asynInt32 rw */ +#define hOutputTriggerBaseSensor0String \ + "H_OUTPUT_TRIGGER_BASE_SENSOR0" /* asynInt32 rw */ +#define hOutputTriggerBaseSensor1String \ + "H_OUTPUT_TRIGGER_BASE_SENSOR1" /* asynInt32 rw */ +#define hOutputTriggerBaseSensor2String \ + "H_OUTPUT_TRIGGER_BASE_SENSOR2" /* asynInt32 rw */ +#define hOutputTriggerPreHsyncCountString \ + "H_OUTPUT_TRIGGER_PRE_HSYNC_COUNT" /* asynInt32 rw */ // Master Puls -#define hMasterPulseModeString "H_MASTERPULSE_MODE" /* asynInt32 rw */ -#define hMasterPulseTriggerSourceString "H_MASTERPULSE_TRIGGER_SOURCE" /* asynInt32 rw */ -#define hMasterPulseIntervalString "H_MASTERPULSE_INTERVAL" /* asynFloat64 rw */ -#define hMasterPulseBurstTimesString "H_MASTERPULSE_BURST_TIMES" /* asynInt32 rw */ +#define hMasterPulseModeString "H_MASTERPULSE_MODE" /* asynInt32 rw */ +#define hMasterPulseTriggerSourceString \ + "H_MASTERPULSE_TRIGGER_SOURCE" /* asynInt32 rw */ +#define hMasterPulseIntervalString \ + "H_MASTERPULSE_INTERVAL" /* asynFloat64 rw */ +#define hMasterPulseBurstTimesString \ + "H_MASTERPULSE_BURST_TIMES" /* asynInt32 rw */ // Synchronious Timing -#define hTimingReadoutTimeString "H_TIMING_READOUT_TIME" /* asynFloat64 ro */ -#define hTimingCyclicTriggerPeriodString "H_TIMING_CYCLICTRIGGERPERIOD" /* asynFloat64 ro */ -#define hTimingMinTriggerBlankingString "H_TIMING_MIN_TRIGGER_BLANKING" /* asynFloat64 ro */ -#define hTimingMinTriggerIntervalString "H_TIMING_MIN_TRIGGER_INTERVAL" /* asynFloat64 ro */ -#define hTimingGlobalExposureDelayString "H_TIMING_GLOBAL_EXPOSURE_DELAY" /* asynFloat64 ro */ -#define hTimingExposureString "H_TIMING_EXPOSURE" /* asynInt32 ro */ -#define hTimingInvalidExposurePeriodString "H_TIMING_INVALID_EXPOSURE_PERIOD" /* asynFloat64 ro */ -#define hInternalFrameRateString "H_INTERNAL_FRAME_RATE" /* asynFloat64 rw */ -#define hInternalFrameIntervalString "H_INTERNAL_FRAME_INTERVAL" /* asynFloat64 rw */ -#define hInternalLineSpeedString "H_INTERNAL_LINE_SPEED" /* asynFloat64 rw */ -#define hInternalLineIntervalString "H_INTERNAL_LINE_INTERVAL" /* asynFloat64 rw */ +#define hTimingReadoutTimeString "H_TIMING_READOUT_TIME" /* asynFloat64 ro */ +#define hTimingCyclicTriggerPeriodString \ + "H_TIMING_CYCLICTRIGGERPERIOD" /* asynFloat64 ro */ +#define hTimingMinTriggerBlankingString \ + "H_TIMING_MIN_TRIGGER_BLANKING" /* asynFloat64 ro */ +#define hTimingMinTriggerIntervalString \ + "H_TIMING_MIN_TRIGGER_INTERVAL" /* asynFloat64 ro */ +#define hTimingGlobalExposureDelayString \ + "H_TIMING_GLOBAL_EXPOSURE_DELAY" /* asynFloat64 ro */ +#define hTimingExposureString "H_TIMING_EXPOSURE" /* asynInt32 ro */ +#define hTimingInvalidExposurePeriodString \ + "H_TIMING_INVALID_EXPOSURE_PERIOD" /* asynFloat64 ro */ +#define hInternalFrameRateString "H_INTERNAL_FRAME_RATE" /* asynFloat64 rw */ +#define hInternalFrameIntervalString \ + "H_INTERNAL_FRAME_INTERVAL" /* asynFloat64 rw */ +#define hInternalLineSpeedString "H_INTERNAL_LINE_SPEED" /* asynFloat64 rw */ +#define hInternalLineIntervalString \ + "H_INTERNAL_LINE_INTERVAL" /* asynFloat64 rw */ // System information -#define hColorTypeString "H_COLOR_TYPE" /* asynInt32 ro */ -#define hBitPerChannelString "H_BIT_PER_CHANNEL" /* asynInt32 rw */ -//#define hImageWidthString "H_IMAGE_WIDTH" /* asynInt32 ro */ -//#define hImageHeightString "H_IMAGE_HEIGHT" /* asynInt32 ro */ -#define hImageRowBytesString "H_IMAGE_ROWBYTES" /* asynInt32 ro */ -#define hImageFrameBytesString "H_IMAGE_FRAMEBYTES" /* asynInt32 ro */ -#define hImageTopOffsetBytesString "H_IMAGE_TOP_OFFSETBYTES" /* asynInt32 ro */ -#define hImagePixelTypeString "H_IMAGE_PIXEL_TYPE" /* asynInt32 rw */ -#define hBufferRowbytesString "H_BUFFER_ROWBYTES" /* asynInt32 ro */ -#define hBufferFramebytesString "H_BUFFER_FRAMEBYTES" /* asynInt32 ro */ -#define hBufferTopOffsetBytesString "H_BUFFER_TOP_OFFSETBYTES" /* asynInt32 ro */ -#define hBufferPixelTypeString "H_BUFFER_PIXEL_TYPE" /* asynInt32 ro */ -#define hRecordFixedBytesPerFileString "H_RECORD_FIXED_BYTES_PER_FILE" /* asynInt32 ro */ -#define hRecordFixedBytesPerSessionString "H_RECORD_FIXED_BYTES_PER_SESION" /* asynInt32 ro */ -#define hRecordFixedBytesPerFrameString "H_RECORD_FIXED_BYTES_PER_FRAME" /* asynInt32 ro */ -#define hSystemAliveString "H_SYSTEM_ALIVE" /* asynInt32 ro */ -#define hConversionFactorCoeffString "H_CONVERSIONFACTOR_COEFF" /* asynFloat64 ro */ -#define hConversionFactorOffsetString "H_CONVERSIONFACTOR_OFFSET" /* asynFloat64 ro */ -#define hNumberOfViewString "H_NUMBER_OF_VIEW" /* asynInt32 ro */ -#define hImageDetectorPixelWidthString "H_IMAGE_DETECTOR_PIXEL_WIDTH" /* asynFloat64 ro */ -#define hImageDetectorPixelHeightString "H_IMAGE_DETECTOR_PIXEL_HEIGHT" /* asynFloat64 ro */ -#define hImageDetectorPixelNumHorzString "H_IMAGE_DETECTOR_PIXEL_NUM_HORZ" /* asynInt32 ro */ -#define hImageDetectorPixelNumVertString "H_IMAGE_DETECTOR_PIXEL_NUM_VERT" /* asynInt32 ro */ -#define hTimeStampProducerString "H_TIMESTAMP_PRODUCER" /* asynInt32 ro */ -#define hFrameStampProducerString "H_FRAMESTAMP_PRODUCER" /* asynInt32 ro */ -#define evrTimeStampString "EVR_TIMESTAMP" -#define evrCountString "EVR_COUNTS" -#define evrCountSinceAcqStartString "EVR_TRIGGERS_SINCE_ACQ_START" -#define evrTriggerDroppedString "EVR_TRIGGER_DROPPED" -#define hAcqControlString "H_ACQ_CONTROL" +#define hColorTypeString "H_COLOR_TYPE" /* asynInt32 ro */ +#define hBitPerChannelString "H_BIT_PER_CHANNEL" /* asynInt32 rw */ +//#define hImageWidthString "H_IMAGE_WIDTH" +///* asynInt32 ro */ +//#define hImageHeightString "H_IMAGE_HEIGHT" +///* asynInt32 ro */ +#define hImageRowBytesString "H_IMAGE_ROWBYTES" /* asynInt32 ro */ +#define hImageFrameBytesString "H_IMAGE_FRAMEBYTES" /* asynInt32 ro */ +#define hImageTopOffsetBytesString \ + "H_IMAGE_TOP_OFFSETBYTES" /* asynInt32 ro \ + */ +#define hImagePixelTypeString "H_IMAGE_PIXEL_TYPE" /* asynInt32 rw */ +#define hBufferRowbytesString "H_BUFFER_ROWBYTES" /* asynInt32 ro */ +#define hBufferFramebytesString "H_BUFFER_FRAMEBYTES" /* asynInt32 ro */ +#define hBufferTopOffsetBytesString \ + "H_BUFFER_TOP_OFFSETBYTES" /* asynInt32 ro */ +#define hBufferPixelTypeString "H_BUFFER_PIXEL_TYPE" /* asynInt32 ro */ +#define hRecordFixedBytesPerFileString \ + "H_RECORD_FIXED_BYTES_PER_FILE" /* asynInt32 ro */ +#define hRecordFixedBytesPerSessionString \ + "H_RECORD_FIXED_BYTES_PER_SESION" /* asynInt32 ro */ +#define hRecordFixedBytesPerFrameString \ + "H_RECORD_FIXED_BYTES_PER_FRAME" /* asynInt32 ro */ +#define hSystemAliveString "H_SYSTEM_ALIVE" /* asynInt32 ro */ +#define hConversionFactorCoeffString \ + "H_CONVERSIONFACTOR_COEFF" /* asynFloat64 ro */ +#define hConversionFactorOffsetString \ + "H_CONVERSIONFACTOR_OFFSET" /* asynFloat64 ro */ +#define hNumberOfViewString "H_NUMBER_OF_VIEW" /* asynInt32 ro */ +#define hImageDetectorPixelWidthString \ + "H_IMAGE_DETECTOR_PIXEL_WIDTH" /* asynFloat64 ro */ +#define hImageDetectorPixelHeightString \ + "H_IMAGE_DETECTOR_PIXEL_HEIGHT" /* asynFloat64 ro */ +#define hImageDetectorPixelNumHorzString \ + "H_IMAGE_DETECTOR_PIXEL_NUM_HORZ" /* asynInt32 ro */ +#define hImageDetectorPixelNumVertString \ + "H_IMAGE_DETECTOR_PIXEL_NUM_VERT" /* asynInt32 ro */ +#define hTimeStampProducerString "H_TIMESTAMP_PRODUCER" /* asynInt32 ro */ +#define hFrameStampProducerString "H_FRAMESTAMP_PRODUCER" /* asynInt32 ro */ +#define evrTimeStampString "EVR_TIMESTAMP" +#define evrCountString "EVR_COUNTS" +#define evrCountSinceAcqStartString "EVR_TRIGGERS_SINCE_ACQ_START" +#define evrTriggerDroppedString "EVR_TRIGGER_DROPPED" +#define hAcqControlString "H_ACQ_CONTROL" -// For some reason these two addresses are not defined in the dcamapi4 neither in dcamprop.h +// For some reason these two addresses are not defined in the dcamapi4 neither +// in dcamprop.h #define DETECTOR_PIXEL_NUM_HORZ 0x00420830 #define DETECTOR_PIXEL_NUM_VERT 0x00420840 class epicsShareClass Orca : public ADDriver { + public: + Orca(const char*, int, int, size_t, int, int, int); + // ~Orca(); + /* override ADDriver methods */ + virtual asynStatus writeInt32(asynUser* pasynUser, epicsInt32 value); + virtual asynStatus writeFloat64(asynUser* pasynUser, epicsFloat64 value); + virtual void report(FILE* fp, int details); -public: - Orca(const char*, int, int, size_t, int, int, int); -// ~Orca(); - /* override ADDriver methods */ - virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value); - virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value); - virtual void report(FILE *fp, int details); + int readParameter(int propertyID, bool processPV = true); + int readParameterStr(int paramIndex); - int readParameter(int propertyID, bool processPV = true); - int readParameterStr(int paramIndex); + epicsUInt32 mTimeStampSec; + epicsUInt32 mTimeStampNsec; - epicsUInt32 mTimeStampSec; - epicsUInt32 mTimeStampNsec; - - void imageTask(); - void temperatureTask(); + void imageTask(); + void temperatureTask(); -protected: - int hFrameRate; - #define FIRST_HAMA_PARAM hFrameRate - int hOrcaName; - int hVendor; - int hModel; - int hCameraID; - int hBus; - int hCameraVersion; - int hDriverVersion; - int hModuleVersion; - int hDcamApiVersion; - // - sensor mode and speed - int hSensorMode; - int hReadoutSpeed; - int hReadoutDirection; - // - trigger - int hTriggerSource; - int hTriggerMode; - int hTriggerActive; - int hTriggerGlobalExposure; - int hTriggerPolarity; - int hTriggerConnector; - int hTriggerTimes; - int hTriggerDelay; - int hInternalTriggerHandling; - // - sensor cooler - int hSensorTemperature; - int hSensorCooler; - int hSensorCoolerStatus; - // - binning and roi - int hBinning; - int hSubarrayHPos; - int hSubarrayHSize; - int hSubarrayVPos; - int hSubarrayVSize; - int hSubarrayMode; - // - feature - int hExposureTime; - // - alu - int hDefectCorrectMode; - int hHotPixelCorrectLevel; - int hIntensityLutMode; - int hIntensityLutPage; - int hExtractionMode; - // - output trigger - int hNumberOfOutputTriggerConnector; - int hOutputTriggerSource0; - int hOutputTriggerSource1; - int hOutputTriggerSource2; - int hOutputTriggerPolarity0; - int hOutputTriggerPolarity1; - int hOutputTriggerPolarity2; - int hOutputTriggerActive0; - int hOutputTriggerActive1; - int hOutputTriggerActive2; - int hOutputTriggerDelay0; - int hOutputTriggerDelay1; - int hOutputTriggerDelay2; - int hOutputTriggerPeriod0; - int hOutputTriggerPeriod1; - int hOutputTriggerPeriod2; - int hOutputTriggerKind0; - int hOutputTriggerKind1; - int hOutputTriggerKind2; - int hOutputTriggerBaseSensor0; - int hOutputTriggerBaseSensor1; - int hOutputTriggerBaseSensor2; - int hOutputTriggerPreHsyncCount; - // - master pulse - int hMasterPulseMode; - int hMasterPulseTriggerSource; - int hMasterPulseInterval; - int hMasterPulseBurstTimes; - // - symchronous timing - int hTimingReadoutTime; - int hTimingCyclicTriggerPeriod; - int hTimingMinTriggerBlanking; - int hTimingMinTriggerInterval; - int hTimingGlobalExposureDelay; - int hTimingExposure; - int hTimingInvalidExposurePeriod; - int hInternalFrameRate; - int hInternalFrameInterval; - int hInternalLineSpeed; - int hInternalLineInterval; - // - system information - int hColorType; - int hBitPerChannel; - int hImageRowbytes; - int hImageFramebytes; - int hImageTopOffsetBytes; - int hImagePixelType; - int hBufferRowbytes; - int hBufferFramebytes; - int hBufferTopOffsetBytes; - int hBufferPixelType; - int hRecordFixedBytesPerFile; - int hRecordFixedBytesPerSession; - int hRecordFixedBytesPerFrame; - int hSystemAlive; - int hConversionFactorCoeff; - int hConversionFactorOffset; - int hNumberOfView; - int hImageDetectorPixelWidth; - int hImageDetectorPixelHeight; - int hImageDetectorPixelNumHorz; - int hImageDetectorPixelNumVert; - int hTimeStampProducer; - int hFrameStampProducer; - int evrCounts; - int evrCountsSinceAcqStart; - int evrTriggerDropped; - int hAcqControl; - int evrTimeStamp; - //---- - //#define LAST_HAMA_PARAM evrTimeStamp + protected: + int hFrameRate; +#define FIRST_HAMA_PARAM hFrameRate + int hOrcaName; + int hVendor; + int hModel; + int hCameraID; + int hBus; + int hCameraVersion; + int hDriverVersion; + int hModuleVersion; + int hDcamApiVersion; + // - sensor mode and speed + int hSensorMode; + int hReadoutSpeed; + int hReadoutDirection; + // - trigger + int hTriggerSource; + int hTriggerMode; + int hTriggerActive; + int hTriggerGlobalExposure; + int hTriggerPolarity; + int hTriggerConnector; + int hTriggerTimes; + int hTriggerDelay; + int hInternalTriggerHandling; + // - sensor cooler + int hSensorTemperature; + int hSensorCooler; + int hSensorCoolerStatus; + // - binning and roi + int hBinning; + int hSubarrayHPos; + int hSubarrayHSize; + int hSubarrayVPos; + int hSubarrayVSize; + int hSubarrayMode; + // - feature + int hExposureTime; + // - alu + int hDefectCorrectMode; + int hHotPixelCorrectLevel; + int hIntensityLutMode; + int hIntensityLutPage; + int hExtractionMode; + // - output trigger + int hNumberOfOutputTriggerConnector; + int hOutputTriggerSource0; + int hOutputTriggerSource1; + int hOutputTriggerSource2; + int hOutputTriggerPolarity0; + int hOutputTriggerPolarity1; + int hOutputTriggerPolarity2; + int hOutputTriggerActive0; + int hOutputTriggerActive1; + int hOutputTriggerActive2; + int hOutputTriggerDelay0; + int hOutputTriggerDelay1; + int hOutputTriggerDelay2; + int hOutputTriggerPeriod0; + int hOutputTriggerPeriod1; + int hOutputTriggerPeriod2; + int hOutputTriggerKind0; + int hOutputTriggerKind1; + int hOutputTriggerKind2; + int hOutputTriggerBaseSensor0; + int hOutputTriggerBaseSensor1; + int hOutputTriggerBaseSensor2; + int hOutputTriggerPreHsyncCount; + // - master pulse + int hMasterPulseMode; + int hMasterPulseTriggerSource; + int hMasterPulseInterval; + int hMasterPulseBurstTimes; + // - symchronous timing + int hTimingReadoutTime; + int hTimingCyclicTriggerPeriod; + int hTimingMinTriggerBlanking; + int hTimingMinTriggerInterval; + int hTimingGlobalExposureDelay; + int hTimingExposure; + int hTimingInvalidExposurePeriod; + int hInternalFrameRate; + int hInternalFrameInterval; + int hInternalLineSpeed; + int hInternalLineInterval; + // - system information + int hColorType; + int hBitPerChannel; + int hImageRowbytes; + int hImageFramebytes; + int hImageTopOffsetBytes; + int hImagePixelType; + int hBufferRowbytes; + int hBufferFramebytes; + int hBufferTopOffsetBytes; + int hBufferPixelType; + int hRecordFixedBytesPerFile; + int hRecordFixedBytesPerSession; + int hRecordFixedBytesPerFrame; + int hSystemAlive; + int hConversionFactorCoeff; + int hConversionFactorOffset; + int hNumberOfView; + int hImageDetectorPixelWidth; + int hImageDetectorPixelHeight; + int hImageDetectorPixelNumHorz; + int hImageDetectorPixelNumVert; + int hTimeStampProducer; + int hFrameStampProducer; + int evrCounts; + int evrCountsSinceAcqStart; + int evrTriggerDropped; + int hAcqControl; + int evrTimeStamp; + //---- + //#define LAST_HAMA_PARAM evrTimeStamp + private: + HDCAM m_hdcam; + DCAMAPI_INIT m_apiInit; + DCAMDEV_OPEN m_devOpen; + DCAMERR m_err; + // handle used to wait for events sent from the device + HDCAMWAIT hwait; -private: - - HDCAM m_hdcam; - DCAMAPI_INIT m_apiInit; - DCAMDEV_OPEN m_devOpen; - DCAMERR m_err; - // handle used to wait for events sent from the device - HDCAMWAIT hwait; + int m_id; + int stopThread; - int m_id; - int stopThread; + epicsEventId startEvent_; - epicsEventId startEvent_; + // Helper functions + asynStatus startAcquire(void); + asynStatus stopAcquire(void); + void getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, + int32& rowbytes, int32& height, int32& framebytes); + asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, + int32 rowbytes, int32 cx, int32 cy, + epicsUInt32& ts_sec, epicsUInt32& ts_microsec); + asynStatus imageTransferStatus(HDCAM hdcam, + DCAMCAP_TRANSFERINFO& captransferinfo); - // Helper functions - asynStatus startAcquire(void); - asynStatus stopAcquire(void); - void getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, int32& rowbytes, int32& height, int32& framebytes); - asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, epicsUInt32& ts_sec, epicsUInt32& ts_microsec); - asynStatus imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo); + // wrapper functions for dcamapi + int allocateBuffers(unsigned int); + int freeBuffers(); - // wrapper functions for dcamapi - int allocateBuffers(unsigned int); - int freeBuffers(); + // These function will be read only once + int connectCamera(); + int disconnectCamera(); + int initCamera(); - // These function will be read only once - int connectCamera(); - int disconnectCamera(); - int initCamera(); - - // helper functions for dcamapi - void printError(HDCAM hdcam, DCAMERR errid, const char* apiname, const char* fmt=NULL, ...); - void printInfo(HDCAM hdcam); - int dcamdev_string( DCAMERR& err, HDCAM hdcam, int32 idStr, char* text, int32 textbytes ); - - - int getProperties(); - int roundToNearestMultipleOfFour(int value); - - asynStatus setFeature(int featureIndex, double value); + // helper functions for dcamapi + void printError(HDCAM hdcam, DCAMERR errid, const char* apiname, + const char* fmt = NULL, ...); + void printInfo(HDCAM hdcam); + int dcamdev_string(DCAMERR& err, HDCAM hdcam, int32 idStr, char* text, + int32 textbytes); + + int getProperties(); + int roundToNearestMultipleOfFour(int value); + + asynStatus setFeature(int featureIndex, double value); }; #endif