diff --git a/ADHamaApp/Db/hama.template b/ADHamaApp/Db/hama.template index 7da08ed..227fa30 100644 --- a/ADHamaApp/Db/hama.template +++ b/ADHamaApp/Db/hama.template @@ -244,7 +244,7 @@ record(mbbi, "$(P)$(R)ReadoutDirection-RB") { # Trigger source (mode 4) record(mbbo, "$(P)$(R)TriggerSource-S") { field(DESC,"") - #field(PINI, "YES") + field(PINI, "YES") field(DTYP, "asynInt32") field(ZRVL, "1") field(ZRST, "Internal") @@ -331,9 +331,9 @@ record(mbbo, "$(P)$(R)TriggerGlobalExposure-S") { field(PINI, "YES") field(DTYP, "asynInt32") field(ZRVL, "3") - field(ZRST, "Global Exposure Delay") + field(ZRST, "Delay") field(ONVL, "5") - field(ONST, "Global Exposure Reset") + field(ONST, "Reset") field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_GLOBAL_EXPOSURE") field(VAL, "3") } @@ -342,9 +342,9 @@ record(mbbi, "$(P)$(R)TriggerGlobalExposure-RB") { field(DESC, "") field(DTYP, "asynInt32") field(ZRVL, "3") - field(ZRST, "Global Exposure Delay") + field(ZRST, "Delay") field(ONVL, "5") - field(ONST, "Global Exposure Reset") + field(ONST, "Reset") field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_GLOBAL_EXPOSURE") field(SCAN, "I/O Intr") } @@ -379,9 +379,9 @@ record(mbbo, "$(P)$(R)TriggerConnector-S") { field(PINI, "YES") field(DTYP, "asynInt32") field(ZRVL, "1") - field(ZRST, "Connector Interface") + field(ZRST, "Interface") field(ONVL, "2") - field(ONST, "Connector BNC") + field(ONST, "BNC") field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_CONNECTOR") field(VAL, "1") field(TPRO, "1") @@ -391,9 +391,9 @@ record(mbbi, "$(P)$(R)TriggerConnector-RB") { field(DESC, "") field(DTYP, "asynInt32") field(ZRVL, "1") - field(ZRST, "Connector Interface") + field(ZRST, "Interface") field(ONVL, "2") - field(ONST, "Connector BNC") + field(ONST, "BNC") field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_CONNECTOR") field(SCAN, "I/O Intr") } @@ -512,17 +512,190 @@ record(mbbi, "$(P)$(R)CoolerStatus-R") { ########################################################################## # Binning and ROI # ########################################################################## +# Binning +record(mbbo, "$(P)$(R)Binning-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "1") + field(ONVL, "2") + field(ONST, "2") + field(TWVL, "4") + field(TWST, "4") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING") + field(VAL, "0") +} + +record(mbbi, "$(P)$(R)Binning-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "1x1") + field(ONVL, "2") + field(ONST, "2x2") + field(TWVL, "4") + field(TWST, "4x4") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING") + field(SCAN, "I/O Intr") +} + +# these records are defined in the ADBase.template +# SubarrayHPos +# SubarrayHSize +# SubarrayVPos +# SubarrayVSize + +record(mbbo, "$(P)$(R)SubarrayMode-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "OFF") + field(ONVL, "2") + field(ONST, "ON") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING") + field(VAL, "1") +} + +record(mbbi, "$(P)$(R)SubarrayMode-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "OFF") + field(ONVL, "2") + field(ONST, "ON") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING") + field(SCAN, "I/O Intr") +} ########################################################################## # Feature # ########################################################################## +record(ao, "$(P)$(R)ExposureTime-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynFloat64") + field(DRVL, "0") + field(DRVH, "10.0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME") + field(VAL, "0") +} +record(ai, "$(P)$(R)ExposureTime-RB") { + field(DESC, "") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME") + field(SCAN, "I/O Intr") +} ########################################################################## # ALU # ########################################################################## +# Defect Correct Mode +record(mbbo, "$(P)$(R)DefectCorrectMode-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "OFF") + field(ONVL, "2") + field(ONST, "ON") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_DEFECTCORRECT_MODE") + field(VAL, "1") +} +record(mbbi, "$(P)$(R)DefectCorrectMode-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "OFF") + field(ONVL, "2") + field(ONST, "ON") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_DEFECTCORRECT_MODE") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Hot Pixel Correct Level +record(mbbo, "$(P)$(R)HotPixelCorrectLevel-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Standard") + field(ONVL, "2") + field(ONST, "Minimum") + field(TWVL, "3") + field(TWST, "Aggressive") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_HOT_PIXEL_CORRECT_LEVEL") + field(VAL, "1") +} + +record(mbbi, "$(P)$(R)HotPixelCorrectLevel-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Standard") + field(ONVL, "2") + field(ONST, "Minimum") + field(TWVL, "3") + field(TWST, "Aggressive") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_HOT_PIXEL_CORRECT_LEVEL") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Intensity Lut +record(mbbo, "$(P)$(R)IntensityLutMode-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Through") + field(ONVL, "2") + field(ONST, "Page") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTENSITY_LUT_MODE") + field(VAL, "1") +} + +record(mbbi, "$(P)$(R)IntensityLutMode-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Through") + field(ONVL, "2") + field(ONST, "Page") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTENSITY_LUT_MODE") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Intensity Lut Page +record(ao, "$(P)$(R)IntensityLutPage-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTENSITY_LUT_PAGE") + field(VAL, "1") +} + +record(ai, "$(P)$(R)IntensityLutPage-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTENSITY_LUT_PAGE") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Extraction Mode +record(ai, "$(P)$(R)ExtractionMode-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXTRACTION_MODE") + field(SCAN, "I/O Intr") +} ########################################################################## # Output Trigger # @@ -747,7 +920,96 @@ record(mbbi, "$(P)$(R)OutputTriggerBaseSensor0-RB") { ########################################################################## # Master Pulse # ########################################################################## +# Master Pulse Mode +record(mbbo, "$(P)$(R)MasterPulseMode-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Continous") + field(ONVL, "2") + field(ONST, "Start") + field(TWVL, "3") + field(THST, "Burst") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_MODE") + field(VAL, "1") +} +record(mbbi, "$(P)$(R)MasterPulseMode-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "Continous") + field(ONVL, "2") + field(ONST, "Start") + field(TWVL, "3") + field(TWST, "Burst") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_MODE") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Master Pulse Trigger Source +record(mbbo, "$(P)$(R)MasterPulseTriggerSource-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "External") + field(ONVL, "2") + field(ONST, "Software") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_TRIGGER_SOURCE") + field(VAL, "1") +} + +record(mbbi, "$(P)$(R)MasterPulseTriggerSource-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(ZRVL, "1") + field(ZRST, "External") + field(ONVL, "2") + field(ONST, "Software") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_TRIGGER_SOURCE") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Mster Pulse Interval +record(ao, "$(P)$(R)MasterPulseInterval-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynFloat64") + field(DRVL, "0.00001") + field(DRVH, "10") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_INTERVAL") + field(VAL, "0.1") +} + +record(ai, "$(P)$(R)MasterPulseInterval-RB") { + field(DESC, "") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_INTERVAL") + field(SCAN, "I/O Intr") +} + +########################################################################## +# Mster Pulse Burst Times +record(ao, "$(P)$(R)MasterPulseBurstTimes-S") { + field(DESC, "") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(DRVL, "1") + field(DRVH, "10000") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_BURST_TIMES") + field(VAL, "0") +} + +record(ai, "$(P)$(R)MasterPulseBurstTimes-RB") { + field(DESC, "") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_BURST_TIMES") + field(SCAN, "I/O Intr") +} ########################################################################## # Synchronious Timing # diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index c2d3cef..3ef1ffb 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -146,8 +146,9 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, connectCamera(); +/* int err = 0; - /* + err |= getParameter(DCAM_IDPROP_SENSORMODE); err |= getParameter(DCAM_IDPROP_READOUTSPEED); err |= getParameter(DCAM_IDPROP_READOUT_DIRECTION); @@ -160,7 +161,6 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, err |= getParameter(DCAM_IDPROP_TRIGGERTIMES); err |= getParameter(DCAM_IDPROP_TRIGGERDELAY); err |= getParameter(DCAM_IDPROP_INTERNALTRIGGER_HANDLING); - */ err |= getParameterStr(DCAM_IDSTR_VENDOR); err |= getParameterStr(DCAM_IDSTR_MODEL); @@ -172,6 +172,7 @@ Hama::Hama(const char* portName, int cameraId, int maxBuffers, size_t maxMemory, err |= getParameterStr(DCAM_IDSTR_DCAMAPIVERSION); printf("[DEBUG] Error = %d\n", err); + */ printf("[DEBUG] === END Constructor ADHama ===\n"); } //============================================================================ @@ -413,6 +414,8 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ getParamName(index, ¶mName); + double value_d = 0; + //getIntegerParam(index, &value); if (index == ADAcquire) { printf("function ADAcquire\n"); @@ -420,9 +423,6 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ else if (index == ADImageMode) { printf("function ADImageMode\n"); } - else if (index == ADTriggerMode) { - printf("function ADTriggerMode\n"); - } else if (index == ADNumExposures) { printf("function ADNumExposures\n"); } @@ -459,23 +459,46 @@ asynStatus Hama::writeInt32(asynUser *pasynUser, epicsInt32 value){ printf("function BitPerChannel\n"); } else if (index == hTriggerSource) { - printf("function TriggerSorce\n"); - double value_d = 0; - //getIntegerParam(index, &value); - printf("Hi value = %d, value_d = %f\n", value, value_d); dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, value); dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERSOURCE, &value_d); - printf("value = %d, value_d = %f\n", value, value_d); - setIntegerParam(index, value_d); } + else if (index == hTriggerMode) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_MODE, &value_d); + } + else if (index == hTriggerActive) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERACTIVE, &value_d); + } + else if (index == hTriggerGlobalExposure) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_GLOBALEXPOSURE, &value_d); + } + else if (index == hTriggerPolarity) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERPOLARITY, &value_d); + } + else if (index == hTriggerConnector) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGER_CONNECTOR, &value_d); + } + else if (index == hTriggerTimes) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_TRIGGERTIMES, &value_d); + } + else if (index == hInternalTriggerHandling) { + dcamprop_setvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, value); + dcamprop_getvalue(m_hdcam, DCAM_IDPROP_INTERNALTRIGGER_HANDLING, &value_d); + } else{ printf("function ELSE.... \n"); } + setIntegerParam(index, value_d); /* Do callbacks so higher layers see any changes */ - status = (asynStatus) callParamCallbacks(); + status = (asynStatus) callParamCallbacks(); if (status) asynPrint(pasynUser, ASYN_TRACE_ERROR,