diff --git a/.gitignore b/.gitignore index 7df1a866..06f8d256 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ configure/*.local O.*/ *~ *.swp +.vs* diff --git a/andor3App/Db/andor3.template b/andor3App/Db/andor3.template index 13717e45..1a14e790 100644 --- a/andor3App/Db/andor3.template +++ b/andor3App/Db/andor3.template @@ -17,83 +17,83 @@ include "ADBase.template" # Only unsigned 16 and 32 bit integers are supported. Determined by PixelEncoding record(mbbo, "$(P)$(R)DataType") { - field(ZRST, "UInt16") - field(ZRVL, "3") - field(ONST, "UInt32") - field(ONVL, "5") - field(TWST, "") - field(TWVL, "") - field(THST, "") - field(THVL, "") - field(FRST, "") - field(FRVL, "") - field(FVST, "") - field(FVVL, "") - field(SXST, "") - field(SXVL, "") - field(SVST, "") - field(SVVL, "") + field(ZRST, "UInt16") + field(ZRVL, "3") + field(ONST, "UInt32") + field(ONVL, "5") + field(TWST, "") + field(TWVL, "") + field(THST, "") + field(THVL, "") + field(FRST, "") + field(FRVL, "") + field(FVST, "") + field(FVVL, "") + field(SXST, "") + field(SXVL, "") + field(SVST, "") + field(SVVL, "") } record(mbbi, "$(P)$(R)DataType_RBV") { - field(ZRST, "UInt16") - field(ZRVL, "3") - field(ONST, "UInt32") - field(ONVL, "5") - field(TWST, "") - field(TWVL, "") - field(THST, "") - field(THVL, "") - field(FRST, "") - field(FRVL, "") - field(FVST, "") - field(FVVL, "") - field(SXST, "") - field(SXVL, "") - field(SVST, "") - field(SVVL, "") + field(ZRST, "UInt16") + field(ZRVL, "3") + field(ONST, "UInt32") + field(ONVL, "5") + field(TWST, "") + field(TWVL, "") + field(THST, "") + field(THVL, "") + field(FRST, "") + field(FRVL, "") + field(FVST, "") + field(FVVL, "") + field(SXST, "") + field(SXVL, "") + field(SVST, "") + field(SVVL, "") } # Only Mono color mode is supported at this time record(mbbo, "$(P)$(R)ColorMode") { - field(ZRST, "Mono") - field(ZRVL, "0") - field(ONST, "") - field(ONVL, "") - field(TWST, "") - field(TWVL, "") - field(THST, "") - field(THVL, "") - field(FRST, "") - field(FRVL, "") - field(FVST, "") - field(FVVL, "") - field(SXST, "") - field(SXVL, "") - field(SVST, "") - field(SVVL, "") + field(ZRST, "Mono") + field(ZRVL, "0") + field(ONST, "") + field(ONVL, "") + field(TWST, "") + field(TWVL, "") + field(THST, "") + field(THVL, "") + field(FRST, "") + field(FRVL, "") + field(FVST, "") + field(FVVL, "") + field(SXST, "") + field(SXVL, "") + field(SVST, "") + field(SVVL, "") } record(mbbi, "$(P)$(R)ColorMode_RBV") { - field(ZRST, "Mono") - field(ZRVL, "0") - field(ONST, "") - field(ONVL, "") - field(TWST, "") - field(TWVL, "") - field(THST, "") - field(THVL, "") - field(FRST, "") - field(FRVL, "") - field(FVST, "") - field(FVVL, "") - field(SXST, "") - field(SXVL, "") - field(SVST, "") - field(SVVL, "") + field(ZRST, "Mono") + field(ZRVL, "0") + field(ONST, "") + field(ONVL, "") + field(TWST, "") + field(TWVL, "") + field(THST, "") + field(THVL, "") + field(FRST, "") + field(FRVL, "") + field(FVST, "") + field(FVVL, "") + field(SXST, "") + field(SXVL, "") + field(SVST, "") + field(SVVL, "") } @@ -109,300 +109,519 @@ record(mbbi, "$(P)$(R)ColorMode_RBV") record(ao, "$(P)$(R)FrameRate") { - field(PINI, "YES") - field(DTYP, "asynFloat64") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FRAME_RATE") - field(VAL, "10") + field(PINI, "YES") + field(DTYP, "asynFloat64") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FRAME_RATE") + field(VAL, "10") } record(ai, "$(P)$(R)FrameRate_RBV") { - field(DTYP, "asynFloat64") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FRAME_RATE") - field(PREC, "3") - field(SCAN, "I/O Intr") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FRAME_RATE") + field(PREC, "3") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)PreAmpGain") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PREAMP_GAIN") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PREAMP_GAIN") } record(mbbi, "$(P)$(R)PreAmpGain_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PREAMP_GAIN") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PREAMP_GAIN") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)ReadoutRate") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_RATE") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_RATE") } record(mbbi, "$(P)$(R)ReadoutRate_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_RATE") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_RATE") + field(SCAN, "I/O Intr") } record(bo, "$(P)$(R)Overlap") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_OVERLAP") - field(ZNAM, "No") - field(ONAM, "Yes") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_OVERLAP") + field(ZNAM, "No") + field(ONAM, "Yes") } record(bi, "$(P)$(R)Overlap_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_OVERLAP") - field(ZNAM, "No") - field(ONAM, "Yes") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_OVERLAP") + field(ZNAM, "No") + field(ONAM, "Yes") + field(SCAN, "I/O Intr") } record(bo, "$(P)$(R)NoiseFilter") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_NOISE_FILTER") - field(ZNAM, "No") - field(ONAM, "Yes") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_NOISE_FILTER") + field(ZNAM, "No") + field(ONAM, "Yes") } record(bi, "$(P)$(R)NoiseFilter_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_NOISE_FILTER") - field(ZNAM, "No") - field(ONAM, "Yes") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_NOISE_FILTER") + field(ZNAM, "No") + field(ONAM, "Yes") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)PixelEncoding") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PIXEL_ENCODING") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PIXEL_ENCODING") } record(mbbi, "$(P)$(R)PixelEncoding_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PIXEL_ENCODING") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_PIXEL_ENCODING") + field(SCAN, "I/O Intr") } record(ai, "$(P)$(R)ReadoutTime") { - field(DTYP, "asynFloat64") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_TIME") - field(PREC, "4") - field(SCAN, "I/O Intr") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_READOUT_TIME") + field(PREC, "4") + field(SCAN, "I/O Intr") } record(ai, "$(P)$(R)TransferRate") { - field(DTYP, "asynFloat64") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TRANSFER_RATE") - field(PREC, "3") - field(SCAN, "I/O Intr") + field(DTYP, "asynFloat64") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TRANSFER_RATE") + field(PREC, "3") + field(SCAN, "I/O Intr") } record(bi, "$(P)$(R)FullAOIControl") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FULL_AOI_CONTROL") - field(ZNAM, "No") - field(ONAM, "Yes") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FULL_AOI_CONTROL") + field(ZNAM, "No") + field(ONAM, "Yes") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)A3Binning") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_BINNING") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_BINNING") } record(mbbi, "$(P)$(R)A3Binning_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_BINNING") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_BINNING") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)A3ShutterMode") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SHUTTER_MODE") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SHUTTER_MODE") } record(mbbi, "$(P)$(R)A3ShutterMode_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SHUTTER_MODE") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SHUTTER_MODE") + field(SCAN, "I/O Intr") } record(bo, "$(P)$(R)SoftwareTrigger") { - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SOFTWARE_TRIGGER") - field(ZNAM, "Done") - field(ONAM, "Trigger") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SOFTWARE_TRIGGER") + field(ZNAM, "Done") + field(ONAM, "Trigger") } record(bo, "$(P)$(R)SensorCooling") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SENSOR_COOLING") - field(ZNAM, "Off") - field(ONAM, "On") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SENSOR_COOLING") + field(ZNAM, "Off") + field(ONAM, "On") } record(bi, "$(P)$(R)SensorCooling_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SENSOR_COOLING") - field(SCAN, "I/O Intr") - field(ZNAM, "Off") - field(ONAM, "On") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SENSOR_COOLING") + field(SCAN, "I/O Intr") + field(ZNAM, "Off") + field(ONAM, "On") } record(mbbo, "$(P)$(R)TempControl") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_CONTROL") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_CONTROL") } record(mbbi, "$(P)$(R)TempControl_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_CONTROL") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_CONTROL") + field(SCAN, "I/O Intr") } record(mbbi, "$(P)$(R)TempStatus_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_STATUS") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_TEMP_STATUS") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)FanSpeed") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FAN_SPEED") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FAN_SPEED") } record(mbbi, "$(P)$(R)FanSpeed_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FAN_SPEED") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FAN_SPEED") + field(SCAN, "I/O Intr") } record(stringin, "$(P)$(R)SerialNumber") { - field(PINI, "YES") - field(DTYP, "asynOctetRead") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SERIAL_NUMBER") + field(PINI, "YES") + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SERIAL_NUMBER") } record(stringin, "$(P)$(R)FirmwareVersion") { - field(PINI, "YES") - field(DTYP, "asynOctetRead") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FIRMWARE_VERSION") + field(PINI, "YES") + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_FIRMWARE_VERSION") } record(stringin, "$(P)$(R)SoftwareVersion") { - field(PINI, "YES") - field(DTYP, "asynOctetRead") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SOFTWARE_VERSION") + field(PINI, "YES") + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_SOFTWARE_VERSION") } record(stringin, "$(P)$(R)ControllerID") { - field(PINI, "YES") - field(DTYP, "asynOctetRead") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_CONTROLLER_ID") + field(PINI, "YES") + field(DTYP, "asynOctetRead") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_CONTROLLER_ID") } +############################################################################### +# These records control the Gating (if present) # +############################################################################### + record(mbbo, "$(P)$(R)GateMode") { - field(PINI, "YES") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_GATE_MODE") + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_GATE_MODE") } record(mbbi, "$(P)$(R)GateMode_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_GATE_MODE") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_GATE_MODE") + field(SCAN, "I/O Intr") } record(mbbo, "$(P)$(R)InsertionDelay") { - field(PINI, "YES") - field(VAL, "0") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_INSERTION_DELAY") + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_INSERTION_DELAY") } record(mbbi, "$(P)$(R)InsertionDelay_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_INSERTION_DELAY") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_INSERTION_DELAY") + field(SCAN, "I/O Intr") } record(longout, "$(P)$(R)MCPGain") { - field(PINI, "YES") - field(VAL, "0") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_GAIN") + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_GAIN") } record(longin, "$(P)$(R)MCPGain_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_GAIN") - field(SCAN, "I/O Intr") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_GAIN") + field(SCAN, "I/O Intr") } record(bo, "$(P)$(R)MCPIntelligate") { - field(PINI, "YES") - field(VAL, "0") - field(DTYP, "asynInt32") - field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_INTELLIGATE") - field(ZNAM, "Off") - field(ONAM, "On") + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_INTELLIGATE") + field(ZNAM, "Off") + field(ONAM, "On") } record(bi, "$(P)$(R)MCPIntelligate_RBV") { - field(DTYP, "asynInt32") - field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_INTELLIGATE") - field(SCAN, "I/O Intr") - field(ZNAM, "Off") - field(ONAM, "On") + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_MCP_INTELLIGATE") + field(SCAN, "I/O Intr") + field(ZNAM, "Off") + field(ONAM, "On") +} + +record(ao, "$(P)$(R)DDGOutputDelay") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynInt32") + field(EGU, "ps") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_DELAY") +} + +record(ai, "$(P)$(R)DDGOutputDelay_RBV") +{ + field(DTYP, "asynInt32") + field(EGU, "ps") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_DELAY") + field(SCAN, "I/O Intr") +} + +record(bo, "$(P)$(R)DDGOutputEnable") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_ENABLE") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(bi, "$(P)$(R)DDGOutputEnable_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_ENABLE") + field(SCAN, "I/O Intr") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(mbbo, "$(P)$(R)DDGOutputPolarity") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_POLARITY") +} + +record(mbbi, "$(P)$(R)DDGOutputPolarity_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_POLARITY") + field(SCAN, "I/O Intr") +} + +record(mbbo, "$(P)$(R)DDGOutputSelect") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_SELECT") +} + +record(mbbi, "$(P)$(R)DDGOutputSelect_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_SELECT") + field(SCAN, "I/O Intr") +} + +record(bo, "$(P)$(R)DDGOutputStepEnable") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_STEP_ENABLE") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(bi, "$(P)$(R)DDGOutputStepEnable_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_STEP_ENABLE") + field(SCAN, "I/O Intr") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(ao, "$(P)$(R)DDGOutputWidth") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynInt32") + field(EGU, "ps") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_WIDTH") +} + +record(ai, "$(P)$(R)DDGOutputWidth_RBV") +{ + field(DTYP, "asynInt32") + field(EGU, "ps") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_OUTPUT_WIDTH") + field(SCAN, "I/O Intr") +} + +record(bo, "$(P)$(R)DDGStepEnabled") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_ENABLE") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(bi, "$(P)$(R)DDGStepEnabled_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_ENABLE") + field(SCAN, "I/O Intr") + field(ZNAM, "Disable") + field(ONAM, "Enable") +} + +record(mbbo, "$(P)$(R)DDGStepDelayMode") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_MODE") +} + +record(mbbi, "$(P)$(R)DDGStepDelayMode_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_MODE") + field(SCAN, "I/O Intr") +} + +record(ao, "$(P)$(R)DDGStepDelayCoefficientA") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynFloat64") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_COEFF_A") +} + +record(ai, "$(P)$(R)DDGStepDelayCoefficientA_RBV") +{ + field(DTYP, "asynFloat64") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_COEFF_A") + field(SCAN, "I/O Intr") +} + +record(ao, "$(P)$(R)DDGStepDelayCoefficientB") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynFloat64") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_COEFF_B") } +record(ai, "$(P)$(R)DDGStepDelayCoefficientB_RBV") +{ + field(DTYP, "asynFloat64") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_DELAY_COEFF_B") + field(SCAN, "I/O Intr") +} + +record(mbbo, "$(P)$(R)DDGStepWidthMode") +{ + field(PINI, "YES") + field(DTYP, "asynInt32") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_MODE") +} + +record(mbbi, "$(P)$(R)DDGStepWidthMode_RBV") +{ + field(DTYP, "asynInt32") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_MODE") + field(SCAN, "I/O Intr") +} + +record(ao, "$(P)$(R)DDGStepWidthCoefficientA") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynFloat64") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_COEFF_A") +} + +record(ai, "$(P)$(R)DDGStepWidthCoefficientA_RBV") +{ + field(DTYP, "asynFloat64") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_COEFF_A") + field(SCAN, "I/O Intr") +} + +record(ao, "$(P)$(R)DDGStepWidthCoefficientB") +{ + field(PINI, "YES") + field(VAL, "0") + field(DTYP, "asynFloat64") + field(PREC, "0") + field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_COEFF_B") +} + +record(ai, "$(P)$(R)DDGStepWidthCoefficientB_RBV") +{ + field(DTYP, "asynFloat64") + field(PREC, "0") + field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))A3_DDG_STEP_WIDTH_COEFF_B") + field(SCAN, "I/O Intr") +} diff --git a/andor3App/Db/andor3_settings.req b/andor3App/Db/andor3_settings.req index f315fa57..290b5a95 100644 --- a/andor3App/Db/andor3_settings.req +++ b/andor3App/Db/andor3_settings.req @@ -13,4 +13,17 @@ $(P)$(R)GateMode $(P)$(R)InsertionDelay $(P)$(R)MCPIntelligate $(P)$(R)MCPGain +$(P)$(R)DDGOutputDelay +$(P)$(R)DDGOutputEnable +$(P)$(R)DDGOutputPolarity +$(P)$(R)DDGOutputSelect +$(P)$(R)DDGOutputStepEnable +$(P)$(R)DDGOutputWidth +$(P)$(R)DDGStepEnabled +$(P)$(R)DDGStepDelayMode +$(P)$(R)DDGStepDelayCoefficientA +$(P)$(R)DDGStepDelayCoefficientB +$(P)$(R)DDGStepWidthMode +$(P)$(R)DDGStepWidthCoefficientA +$(P)$(R)DDGStepWidthCoefficientB file "ADBase_settings.req", P=$(P), R=$(R) diff --git a/andor3App/src/andor3.cpp b/andor3App/src/andor3.cpp index 8a9f64c4..6dbf6f13 100644 --- a/andor3App/src/andor3.cpp +++ b/andor3App/src/andor3.cpp @@ -119,7 +119,20 @@ class andor3 : public ADDriver { int Andor3InsertionDelay; int Andor3MCPGain; int Andor3MCPIntelligate; - #define LAST_ANDOR3_PARAM Andor3MCPIntelligate + int Andor3DDGOutputDelay; + int Andor3DDGOutputEnable; + int Andor3DDGOutputPolarity; + int Andor3DDGOutputSelect; + int Andor3DDGOutputStepEnable; + int Andor3DDGOutputWidth; + int Andor3DDGStepEnabled; + int Andor3DDGStepDelayMode; + int Andor3DDGStepDelayCoefficientA; + int Andor3DDGStepDelayCoefficientB; + int Andor3DDGStepWidthMode; + int Andor3DDGStepWidthCoefficientA; + int Andor3DDGStepWidthCoefficientB; + #define LAST_ANDOR3_PARAM Andor3DDGStepWidthCoefficientB private: int registerFeature(const AT_WC *feature, Andor3FeatureType type, int paramIndex); @@ -147,30 +160,43 @@ class andor3 : public ADDriver { #define NUM_ANDOR3_PARAMS ((int)(&LAST_ANDOR3_PARAM - &FIRST_ANDOR3_PARAM + 1)) /* Andor3 driver specific parameters */ -#define Andor3FrameRateString "A3_FRAME_RATE" /* asynFloat64 rw */ -#define Andor3PixelEncodingString "A3_PIXEL_ENCODING" /* asynInt32 rw */ -#define Andor3FullAOIControlString "A3_FULL_AOI_CONTROL" /* asynInt32 ro */ -#define Andor3BinningString "A3_BINNING" /* asynInt32 rw */ -#define Andor3ShutterModeString "A3_SHUTTER_MODE" /* asynInt32 rw */ -#define Andor3SoftwareTriggerString "A3_SOFTWARE_TRIGGER" /* asynInt32 wo */ -#define Andor3SensorCoolingString "A3_SENSOR_COOLING" /* asynInt32 rw */ -#define Andor3TempControlString "A3_TEMP_CONTROL" /* asynInt32 rw */ -#define Andor3TempStatusString "A3_TEMP_STATUS" /* asynInt32 ro */ -#define Andor3SerialNumberString "A3_SERIAL_NUMBER" /* asynOctet ro */ -#define Andor3FirmwareVersionString "A3_FIRMWARE_VERSION" /* asynOctet ro */ -#define Andor3SoftwareVersionString "A3_SOFTWARE_VERSION" /* asynOctet ro */ -#define Andor3ControllerIDString "A3_CONTROLLER_ID" /* asynOctet ro */ -#define Andor3OverlapString "A3_OVERLAP" /* asynInt32 rw */ -#define Andor3ReadoutRateString "A3_READOUT_RATE" /* asynInt32 rw */ -#define Andor3ReadoutTimeString "A3_READOUT_TIME" /* asynFloat64 rw */ -#define Andor3TransferRateString "A3_TRANSFER_RATE" /* asynFloat64 rw */ -#define Andor3PreAmpGainString "A3_PREAMP_GAIN" /* asynInt32 rw */ -#define Andor3NoiseFilterString "A3_NOISE_FILTER" /* asynInt32 rw */ -#define Andor3FanSpeedString "A3_FAN_SPEED" /* asynInt32 rw */ -#define Andor3GateModeString "A3_GATE_MODE" /* asynInt32 rw */ -#define Andor3InsertionDelayString "A3_INSERTION_DELAY" /* asynInt32 rw */ -#define Andor3MCPGainString "A3_MCP_GAIN" /* asynInt32 rw */ -#define Andor3MCPIntelligateString "A3_MCP_INTELLIGATE" /* asynInt32 rw */ +#define Andor3FrameRateString "A3_FRAME_RATE" /* asynFloat64 rw */ +#define Andor3PixelEncodingString "A3_PIXEL_ENCODING" /* asynInt32 rw */ +#define Andor3FullAOIControlString "A3_FULL_AOI_CONTROL" /* asynInt32 ro */ +#define Andor3BinningString "A3_BINNING" /* asynInt32 rw */ +#define Andor3ShutterModeString "A3_SHUTTER_MODE" /* asynInt32 rw */ +#define Andor3SoftwareTriggerString "A3_SOFTWARE_TRIGGER" /* asynInt32 wo */ +#define Andor3SensorCoolingString "A3_SENSOR_COOLING" /* asynInt32 rw */ +#define Andor3TempControlString "A3_TEMP_CONTROL" /* asynInt32 rw */ +#define Andor3TempStatusString "A3_TEMP_STATUS" /* asynInt32 ro */ +#define Andor3SerialNumberString "A3_SERIAL_NUMBER" /* asynOctet ro */ +#define Andor3FirmwareVersionString "A3_FIRMWARE_VERSION" /* asynOctet ro */ +#define Andor3SoftwareVersionString "A3_SOFTWARE_VERSION" /* asynOctet ro */ +#define Andor3ControllerIDString "A3_CONTROLLER_ID" /* asynOctet ro */ +#define Andor3OverlapString "A3_OVERLAP" /* asynInt32 rw */ +#define Andor3ReadoutRateString "A3_READOUT_RATE" /* asynInt32 rw */ +#define Andor3ReadoutTimeString "A3_READOUT_TIME" /* asynFloat64 rw */ +#define Andor3TransferRateString "A3_TRANSFER_RATE" /* asynFloat64 rw */ +#define Andor3PreAmpGainString "A3_PREAMP_GAIN" /* asynInt32 rw */ +#define Andor3NoiseFilterString "A3_NOISE_FILTER" /* asynInt32 rw */ +#define Andor3FanSpeedString "A3_FAN_SPEED" /* asynInt32 rw */ +#define Andor3GateModeString "A3_GATE_MODE" /* asynInt32 rw */ +#define Andor3InsertionDelayString "A3_INSERTION_DELAY" /* asynInt32 rw */ +#define Andor3MCPGainString "A3_MCP_GAIN" /* asynInt32 rw */ +#define Andor3MCPIntelligateString "A3_MCP_INTELLIGATE" /* asynInt32 rw */ +#define Andor3DDGOutputDelayString "A3_DDG_OUTPUT_DELAY" /* asynInt32 rw */ +#define Andor3DDGOutputEnableString "A3_DDG_OUTPUT_ENABLE" /* asynInt32 rw */ +#define Andor3DDGOutputPolarityString "A3_DDG_OUTPUT_POLARITY" /* asynInt32 rw */ +#define Andor3DDGOutputSelectString "A3_DDG_OUTPUT_SELECT" /* asynInt32 rw */ +#define Andor3DDGOutputStepEnableString "A3_DDG_OUTPUT_STEP_ENABLE"/* asynInt32 rw */ +#define Andor3DDGOutputWidthString "A3_DDG_OUTPUT_WIDTH" /* asynInt32 rw */ +#define Andor3DDGStepEnabledString "A3_DDG_STEP_ENABLE" /* asynInt32 rw */ +#define Andor3DDGStepDelayModeString "A3_DDG_STEP_DELAY_MODE" /* asynInt32 rw */ +#define Andor3DDGStepDelayCoeffAString "A3_DDG_STEP_DELAY_COEFF_A"/* asynFloat64 rw */ +#define Andor3DDGStepDelayCoeffBString "A3_DDG_STEP_DELAY_COEFF_B"/* asynFloat64 rw */ +#define Andor3DDGStepWidthModeString "A3_DDG_STEP_WIDTH_MODE" /* asynInt32 rw */ +#define Andor3DDGStepWidthCoeffAString "A3_DDG_STEP_WIDTH_COEFF_A"/* asynFloat64 rw */ +#define Andor3DDGStepWidthCoeffBString "A3_DDG_STEP_WIDTH_COEFF_B"/* asynFloat64 rw */ static void c_shutdown(void *arg) { @@ -660,6 +686,19 @@ void andor3::report(FILE *fp, int details) reportFeature(Andor3InsertionDelay, fp, details); reportFeature(Andor3MCPGain, fp, details); reportFeature(Andor3MCPIntelligate, fp, details); + reportFeature(Andor3DDGOutputDelay, fp, details); + reportFeature(Andor3DDGOutputEnable, fp, details); + reportFeature(Andor3DDGOutputPolarity, fp, details); + reportFeature(Andor3DDGOutputSelect, fp, details); + reportFeature(Andor3DDGOutputStepEnable, fp, details); + reportFeature(Andor3DDGOutputWidth, fp, details); + reportFeature(Andor3DDGStepEnabled, fp, details); + reportFeature(Andor3DDGStepDelayMode, fp, details); + reportFeature(Andor3DDGStepDelayCoefficientA, fp, details); + reportFeature(Andor3DDGStepDelayCoefficientB, fp, details); + reportFeature(Andor3DDGStepWidthMode, fp, details); + reportFeature(Andor3DDGStepWidthCoefficientA, fp, details); + reportFeature(Andor3DDGStepWidthCoefficientB, fp, details); ADDriver::report(fp, details); } @@ -1193,10 +1232,10 @@ asynStatus andor3::writeInt32(asynUser *pasynUser, epicsInt32 value) } else if ((index == Andor3Binning) || - (index == ADMinX) || - (index == ADSizeX) || - (index == ADMinY) || - (index == ADSizeY)) { + (index == ADMinX) || + (index == ADSizeX) || + (index == ADMinY) || + (index == ADSizeY)) { status = setAOI(); } else if(index == ADReadStatus) { @@ -1263,6 +1302,68 @@ asynStatus andor3::writeInt32(asynUser *pasynUser, epicsInt32 value) status = setFeature(Andor3MCPIntelligate); } } + else if(index == Andor3DDGOutputDelay) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputDelay); + } + } + else if(index == Andor3DDGOutputEnable) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputEnable); + } + } + else if(index == Andor3DDGOutputPolarity) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputPolarity); + } + } + else if(index == Andor3DDGOutputSelect) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputSelect); + if (status == AT_SUCCESS) + { + status = getFeature(Andor3DDGOutputEnable); + status |= getFeature(Andor3DDGOutputDelay); + status |= getFeature(Andor3DDGOutputPolarity); + status |= getFeature(Andor3DDGOutputWidth); + status |= getFeature(Andor3DDGOutputStepEnable); + } + } + } + else if(index == Andor3DDGOutputStepEnable) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputStepEnable); + } + } + else if(index == Andor3DDGOutputWidth) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGOutputWidth); + } + } + else if(index == Andor3DDGStepEnabled) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepEnabled); + } + } + else if(index == Andor3DDGStepDelayMode) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepDelayMode); + } + } + else if(index == Andor3DDGStepWidthMode) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepWidthMode); + } + } else { if(index < FIRST_ANDOR3_PARAM) { status = ADDriver::writeInt32(pasynUser, value); @@ -1318,6 +1419,30 @@ asynStatus andor3::writeFloat64(asynUser *pasynUser, epicsFloat64 value) else if(index == Andor3FrameRate) { status = setFeature(Andor3FrameRate); } + else if(index == Andor3DDGStepDelayCoefficientA) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepDelayCoefficientA); + } + } + else if(index == Andor3DDGStepDelayCoefficientB) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepDelayCoefficientB); + } + } + else if(index == Andor3DDGStepWidthCoefficientA) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepWidthCoefficientA); + } + } + else if(index == Andor3DDGStepWidthCoefficientB) { + featureInfo *info = &featureInfo_[index]; + if (info->isImplemented) { + status = setFeature(Andor3DDGStepWidthCoefficientB); + } + } else { if(index < FIRST_ANDOR3_PARAM) { status = ADDriver::writeFloat64(pasynUser, value); @@ -1391,31 +1516,44 @@ andor3::andor3(const char *portName, const char *cameraSerial, int maxBuffers, } /* create andor specific parameters */ - createParam(Andor3FrameRateString, asynParamFloat64, &Andor3FrameRate); - createParam(Andor3PixelEncodingString, asynParamInt32, &Andor3PixelEncoding); - createParam(Andor3FullAOIControlString, asynParamInt32, &Andor3FullAOIControl); - createParam(Andor3BinningString, asynParamInt32, &Andor3Binning); - createParam(Andor3ShutterModeString, asynParamInt32, &Andor3ShutterMode); - createParam(Andor3SoftwareTriggerString, asynParamInt32, &Andor3SoftwareTrigger); - createParam(Andor3SensorCoolingString, asynParamInt32, &Andor3SensorCooling); - createParam(Andor3TempControlString, asynParamInt32, &Andor3TempControl); - createParam(Andor3TempStatusString, asynParamInt32, &Andor3TempStatus); - createParam(Andor3SerialNumberString, asynParamOctet, &Andor3SerialNumber); - createParam(Andor3FirmwareVersionString, asynParamOctet, &Andor3FirmwareVersion); - createParam(Andor3SoftwareVersionString, asynParamOctet, &Andor3SoftwareVersion); - createParam(Andor3ControllerIDString, asynParamOctet, &Andor3ControllerID); - createParam(Andor3OverlapString, asynParamInt32, &Andor3Overlap); - createParam(Andor3ReadoutRateString, asynParamInt32, &Andor3ReadoutRate); - createParam(Andor3ReadoutTimeString, asynParamFloat64, &Andor3ReadoutTime); - createParam(Andor3TransferRateString, asynParamFloat64, &Andor3TransferRate); - createParam(Andor3PreAmpGainString, asynParamInt32, &Andor3PreAmpGain); - createParam(Andor3NoiseFilterString, asynParamInt32, &Andor3NoiseFilter); - createParam(Andor3FanSpeedString, asynParamInt32, &Andor3FanSpeed); - createParam(Andor3GateModeString, asynParamInt32, &Andor3GateMode); - createParam(Andor3InsertionDelayString, asynParamInt32, &Andor3InsertionDelay); - createParam(Andor3MCPGainString, asynParamInt32, &Andor3MCPGain); - createParam(Andor3MCPIntelligateString, asynParamInt32, &Andor3MCPIntelligate); - + createParam(Andor3FrameRateString, asynParamFloat64, &Andor3FrameRate); + createParam(Andor3PixelEncodingString, asynParamInt32, &Andor3PixelEncoding); + createParam(Andor3FullAOIControlString, asynParamInt32, &Andor3FullAOIControl); + createParam(Andor3BinningString, asynParamInt32, &Andor3Binning); + createParam(Andor3ShutterModeString, asynParamInt32, &Andor3ShutterMode); + createParam(Andor3SoftwareTriggerString, asynParamInt32, &Andor3SoftwareTrigger); + createParam(Andor3SensorCoolingString, asynParamInt32, &Andor3SensorCooling); + createParam(Andor3TempControlString, asynParamInt32, &Andor3TempControl); + createParam(Andor3TempStatusString, asynParamInt32, &Andor3TempStatus); + createParam(Andor3SerialNumberString, asynParamOctet, &Andor3SerialNumber); + createParam(Andor3FirmwareVersionString, asynParamOctet, &Andor3FirmwareVersion); + createParam(Andor3SoftwareVersionString, asynParamOctet, &Andor3SoftwareVersion); + createParam(Andor3ControllerIDString, asynParamOctet, &Andor3ControllerID); + createParam(Andor3OverlapString, asynParamInt32, &Andor3Overlap); + createParam(Andor3ReadoutRateString, asynParamInt32, &Andor3ReadoutRate); + createParam(Andor3ReadoutTimeString, asynParamFloat64, &Andor3ReadoutTime); + createParam(Andor3TransferRateString, asynParamFloat64, &Andor3TransferRate); + createParam(Andor3PreAmpGainString, asynParamInt32, &Andor3PreAmpGain); + createParam(Andor3NoiseFilterString, asynParamInt32, &Andor3NoiseFilter); + createParam(Andor3FanSpeedString, asynParamInt32, &Andor3FanSpeed); + createParam(Andor3GateModeString, asynParamInt32, &Andor3GateMode); + createParam(Andor3InsertionDelayString, asynParamInt32, &Andor3InsertionDelay); + createParam(Andor3MCPGainString, asynParamInt32, &Andor3MCPGain); + createParam(Andor3MCPIntelligateString, asynParamInt32, &Andor3MCPIntelligate); + createParam(Andor3DDGOutputDelayString, asynParamInt32, &Andor3DDGOutputDelay); + createParam(Andor3DDGOutputEnableString, asynParamInt32, &Andor3DDGOutputEnable); + createParam(Andor3DDGOutputPolarityString, asynParamInt32, &Andor3DDGOutputPolarity); + createParam(Andor3DDGOutputSelectString, asynParamInt32, &Andor3DDGOutputSelect); + createParam(Andor3DDGOutputStepEnableString,asynParamInt32, &Andor3DDGOutputStepEnable); + createParam(Andor3DDGOutputWidthString, asynParamInt32, &Andor3DDGOutputWidth); + createParam(Andor3DDGStepEnabledString, asynParamInt32, &Andor3DDGStepEnabled); + createParam(Andor3DDGStepDelayModeString, asynParamInt32, &Andor3DDGStepDelayMode); + createParam(Andor3DDGStepDelayCoeffAString, asynParamFloat64, &Andor3DDGStepDelayCoefficientA); + createParam(Andor3DDGStepDelayCoeffBString, asynParamFloat64, &Andor3DDGStepDelayCoefficientB); + createParam(Andor3DDGStepWidthModeString, asynParamInt32, &Andor3DDGStepWidthMode); + createParam(Andor3DDGStepWidthCoeffAString, asynParamFloat64, &Andor3DDGStepWidthCoefficientA); + createParam(Andor3DDGStepWidthCoeffBString, asynParamFloat64, &Andor3DDGStepWidthCoefficientB); + featureInfo_ = (featureInfo *)calloc(LAST_ANDOR3_PARAM+1, sizeof(featureInfo)); /* set read-only parameters */ @@ -1496,10 +1634,24 @@ andor3::andor3(const char *portName, const char *cameraSerial, int maxBuffers, status |= registerFeature(L"MaxInterfaceTransferRate", ATfloat, Andor3TransferRate); status |= registerFeature(L"SimplePreAmpGainControl", ATenum, Andor3PreAmpGain); status |= registerFeature(L"SpuriousNoiseFilter", ATbool, Andor3NoiseFilter); + status |= registerFeature(L"GateMode", ATenum, Andor3GateMode); status |= registerFeature(L"InsertionDelay", ATenum, Andor3InsertionDelay); status |= registerFeature(L"MCPGain", ATint, Andor3MCPGain); status |= registerFeature(L"MCPIntelligate", ATbool, Andor3MCPIntelligate); + status |= registerFeature(L"DDGOutputDelay", ATint, Andor3DDGOutputDelay); + status |= registerFeature(L"DDGOutputEnable", ATbool, Andor3DDGOutputEnable); + status |= registerFeature(L"DDGOutputPolarity", ATenum, Andor3DDGOutputPolarity); + status |= registerFeature(L"DDGOutputSelector", ATenum, Andor3DDGOutputSelect); + status |= registerFeature(L"DDGOutputStepEnable", ATbool, Andor3DDGOutputStepEnable); + status |= registerFeature(L"DDGOutputWidth", ATint, Andor3DDGOutputWidth); + status |= registerFeature(L"DDGStepEnabled", ATbool, Andor3DDGStepEnabled); + status |= registerFeature(L"DDGStepDelayMode", ATenum, Andor3DDGStepDelayMode); + status |= registerFeature(L"DDGStepDelayCoefficientA", ATfloat, Andor3DDGStepDelayCoefficientA); + status |= registerFeature(L"DDGStepDelayCoefficientB", ATfloat, Andor3DDGStepDelayCoefficientB); + status |= registerFeature(L"DDGStepWidthMode", ATenum, Andor3DDGStepWidthMode); + status |= registerFeature(L"DDGStepWidthCoefficientA", ATfloat, Andor3DDGStepWidthCoefficientA); + status |= registerFeature(L"DDGStepWidthCoefficientB", ATfloat, Andor3DDGStepWidthCoefficientB); if(status != AT_SUCCESS) { asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, diff --git a/docs/ADAndor3/ADAndorDoc.rst b/docs/ADAndor3/ADAndorDoc.rst index 2767ae5a..726f1c68 100644 --- a/docs/ADAndor3/ADAndorDoc.rst +++ b/docs/ADAndor3/ADAndorDoc.rst @@ -424,6 +424,114 @@ Andor specific parameters - A3_MCP_INTELLIGATE - MCPIntelligate, MCPIntelligate_RBV - bo, bi + * - **Digital Delay Generator (DDG) Control** + * - Andor3DDGOutputDelay + - asynInt32 + - R/W + - Configures the delay (in picoseconds) for the currently selected DDG output. + - A3_DDG_OUTPUT_DELAY + - DDGOutputDelay, DDGOutputDelay_RBV + - ao, ai + * - Andor3DDGOutputEnable + - asynInt32 + - R/W + - Enable or disable the currently selected DDG output. Has no effect if "Gater" output is selected. + - A3_DDG_OUTPUT_ENABLE + - DDGOutputEnable, DDGOutputEnable_RBV + - bo, bi + * - Andor3DDGOutputPolarity + - asynInt32 + - R/W + - Configures the polarity for the currently selected DDG output. + Choices for iStar are 0 (Negative) and 1 (Positive). + - A3_DDG_OUTPUT_POLARITY + - DDGOutputPolarity, DDGOutputPolarity_RBV + - mbbo, mbbi + * - Andor3DDGOutputSelect + - asynInt32 + - R/W + - Selects the DDG output that you subsequently wish to configure using the DDG output features. + Choices for iStar are 0 (Gater), 1 (Output A), 2 (Output B), and 3 (Output C). + - A3_DDG_OUTPUT_SELECT + - DDGOutputSelect, DDGOutputSelect_RBV + - mbbo, mbbi + * - Andor3DDGOutputStepEnable + - asynInt32 + - R/W + - Enable or disable DDG step mode for the currently selected DDG output. + - A3_DDG_OUTPUT_STEP_ENABLE + - DDGOutputStepEnable, DDGOutputStepEnable_RBV + - bo, bi + * - Andor3DDGOutputWidth + - asynInt32 + - R/W + - Configures the width (in picoseconds) for the currently selected DDG output. + - A3_DDG_OUTPUT_WIDTH + - DDGOutputWidth, DDGOutputWidth_RBV + - ao, ai + * - Andor3DDGStepEnabled + - asynInt32 + - R/O + - Indicates when DDG step is enabled. + - A3_DDG_STEP_ENABLED + - DDGStepEnabled, DDGStepEnabled_RBV + - bo, bi + * - Andor3DDGStepDelayMode + - asynInt32 + - R/W + - Configures the mode for incrementing the DDG step delay. + Choices for iStar are 0 (Off), 1 (Constant), 2 (Exponential), 3 (Logarithmic). + - A3_DDG_STEP_DELAY_MODE + - DDGStepDelayMode, DDGStepDelayMode_RBV + - mbbo, mbbi + * - Andor3DDGStepDelayCoefficientA + - asynFloat64 + - R/W + - Coefficient A for calculating the DDG step delay. The step delay is calculated as follows: + |br| If DDGStepDelayMode=Constant then StepDelay = A |br| + If DDGStepDelayMode=Exponential then StepDelay = A*exp(B*Step) |br| + If DDGStepDelayMode=Logarithmic then StepDelay = A*log(B*Step) + - A3_DDG_STEP_DELAY_COEFFICIENT_A + - DDGStepDelayCoefficientA, DDGStepDelayCoefficientA_RBV + - ao, ai + * - Andor3DDGStepDelayCoefficientB + - asynFloat64 + - R/W + - Coefficient B for calculating the DDG step delay. The step delay is calculated as follows: + |br| If DDGStepDelayMode=Constant then StepDelay = A |br| + If DDGStepDelayMode=Exponential then StepDelay = A*exp(B*Step) |br| + If DDGStepDelayMode=Logarithmic then StepDelay = A*log(B*Step) + - A3_DDG_STEP_DELAY_COEFFICIENT_B + - DDGStepDelayCoefficientB, DDGStepDelayCoefficientB_RBV + - ao, ai + * - Andor3DDGStepWidthMode + - asynInt32 + - R/W + - Configures the mode for incrementing the DDG step width. + Choices for iStar are 0 (Off), 1 (Constant), 2 (Exponential), 3 (Logarithmic). + - A3_DDG_STEP_WIDTH_MODE + - DDGStepWidthMode, DDGStepWidthMode_RBV + - mbbo, mbbi + * - Andor3DDGStepWidthCoefficientA + - asynFloat64 + - R/W + - Coefficient A for calculating the DDG step width. The step width is calculated as follows: + |br| If DDGStepWidthMode=Constant then StepWidth = A |br| + If DDGStepWidthMode=Exponential then StepWidth = A*exp(B*Step) |br| + If DDGStepWidthMode=Logarithmic then StepWidth = A*log(B*Step) + - A3_DDG_STEP_WIDTH_COEFFICIENT_A + - DDGStepWidthCoefficientA, DDGStepWidthCoefficientA_RBV + - ao, ai + * - Andor3DDGStepWidthCoefficientB + - asynFloat64 + - R/W + - Coefficient B for calculating the DDG step width. The step width is calculated as follows: + |br| If DDGStepWidthMode=Constant then StepWidth = A |br| + If DDGStepWidthMode=Exponential then StepWidth = A*exp(B*Step) |br| + If DDGStepWidthMode=Logarithmic then StepWidth = A*log(B*Step) + - A3_DDG_STEP_WIDTH_COEFFICIENT_B + - DDGStepWidthCoefficientB, DDGStepWidthCoefficientB_RBV + - ao, ai The Andor driver implements the following parameters in addition to those in asynNDArrayDriver.h and ADDriver.h.