#=================================================================# # Template file: NDStdArrays.template # Database for NDStdArrays asyn driver and standard asyn device support # Mark Rivers # April 14, 2008 #=================================================================# # Template file: NDPluginBase.template # Database for NDPluginBase, i.e. records common to all plugins # Mark Rivers # April 25, 2008 #=================================================================# # Template file: NDArrayBase.template # Database for area detector control using asyn driver and standard asyn device support # Mark Rivers # March 9, 2008 ################################################################### # This record contains the version of ADCore # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):ADCoreVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ADCORE_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # This record contains the version of the driver or plugin # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):DriverVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DRIVER_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # This record contains the asyn port name of this detector # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):PortName_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))PORT_NAME_SELF") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # These records contain basic information about the detector # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):Manufacturer_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MANUFACTURER") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):$(IMAGE_NAME):Model_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MODEL") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):$(IMAGE_NAME):SerialNumber_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SERIAL_NUMBER") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):$(IMAGE_NAME):SDKVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SDK_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):$(IMAGE_NAME):FirmwareVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))FIRMWARE_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # These records control acquisition start and stop # ################################################################### record(bo, "$(CAM):$(IMAGE_NAME):Acquire") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ACQUIRE") field(ZNAM, "Done") field(ONAM, "Acquire") field(VAL, "0") field(FLNK, "$(CAM):$(IMAGE_NAME):SetAcquireBusy") info(asyn:READBACK, "1") } record(bi, "$(CAM):$(IMAGE_NAME):Acquire_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ACQUIRE") field(ZNAM, "Done") field(ZSV, "NO_ALARM") field(ONAM, "Acquiring") field(OSV, "MINOR") field(SCAN, "I/O Intr") } record(calcout, "$(CAM):$(IMAGE_NAME):SetAcquireBusy") { field(INPA, "$(CAM):$(IMAGE_NAME):Acquire NPP") field(CALC, "A") field(OOPT, "Transition To Non-zero") field(OUT, "$(CAM):$(IMAGE_NAME):AcquireBusy PP") } record(busy, "$(CAM):$(IMAGE_NAME):AcquireBusy") { field(ZNAM, "Done") field(ZSV, "NO_ALARM") field(ONAM, "Acquiring") field(OSV, "MINOR") field(VAL, "0") } record(bi, "$(CAM):$(IMAGE_NAME):AcquireBusyCB") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ACQUIRE_BUSY") field(ZNAM, "Done") field(ZSV, "NO_ALARM") field(ONAM, "Acquiring") field(OSV, "MINOR") field(SCAN, "I/O Intr") } record(calcout, "$(CAM):$(IMAGE_NAME):ClearAcquireBusy") { field(INPA, "$(CAM):$(IMAGE_NAME):AcquireBusyCB CP") field(CALC, "A") field(OOPT, "Transition To Zero") field(OUT, "$(CAM):$(IMAGE_NAME):AcquireBusy PP") } record(bo, "$(CAM):$(IMAGE_NAME):WaitForPlugins") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))WAIT_FOR_PLUGINS") field(ZNAM, "No") field(ONAM, "Yes") field(VAL, "0") } ################################################################### # These records are the array size and data type # ################################################################### # The number of dimensions record(longout, "$(CAM):$(IMAGE_NAME):NDimensions") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_NDIMENSIONS") } record(longin, "$(CAM):$(IMAGE_NAME):NDimensions_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_NDIMENSIONS") field(SCAN, "I/O Intr") } # The array dimensions waveform records record(waveform, "$(CAM):$(IMAGE_NAME):Dimensions") { field(DTYP, "asynInt32ArrayOut") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_DIMENSIONS") field(FTVL, "LONG") field(NELM, "10") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim0SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim0SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "0") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize0") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize0") { field(INP, "$(CAM):$(IMAGE_NAME):Dim0SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim1SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim1SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "1") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize1") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize1") { field(INP, "$(CAM):$(IMAGE_NAME):Dim1SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim2SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim2SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "2") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize2") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize2") { field(INP, "$(CAM):$(IMAGE_NAME):Dim2SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim3SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim3SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "3") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize3") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize3") { field(INP, "$(CAM):$(IMAGE_NAME):Dim3SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim4SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim4SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "4") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize4") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize4") { field(INP, "$(CAM):$(IMAGE_NAME):Dim4SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim5SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim5SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "5") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize5") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize5") { field(INP, "$(CAM):$(IMAGE_NAME):Dim5SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim6SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim6SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "6") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize6") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize6") { field(INP, "$(CAM):$(IMAGE_NAME):Dim6SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim7SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim7SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "7") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize7") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize7") { field(INP, "$(CAM):$(IMAGE_NAME):Dim7SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim8SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim8SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "8") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize8") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize8") { field(INP, "$(CAM):$(IMAGE_NAME):Dim8SA") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim9SA") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim9SA") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "9") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize9") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize9") { field(INP, "$(CAM):$(IMAGE_NAME):Dim9SA") } record(waveform, "$(CAM):$(IMAGE_NAME):Dimensions_RBV") { field(DTYP, "asynInt32ArrayIn") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_DIMENSIONS") field(FTVL, "LONG") field(NELM, "10") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim0SA_RBV") field(SCAN, "I/O Intr") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim0SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "0") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize0_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize0_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim0SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim1SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim1SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "1") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize1_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize1_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim1SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim2SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim2SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "2") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize2_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize2_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim2SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim3SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim3SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "3") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize3_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize3_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim3SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim4SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim4SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "4") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize4_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize4_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim4SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim5SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim5SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "5") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize5_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize5_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim5SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim6SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim6SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "6") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize6_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize6_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim6SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim7SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim7SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "7") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize7_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize7_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim7SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim8SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim8SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "8") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize8_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize8_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim8SA_RBV") field(FLNK, "$(CAM):$(IMAGE_NAME):Dim9SA_RBV") } record(subArray, "$(CAM):$(IMAGE_NAME):Dim9SA_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "9") field(FLNK, "$(CAM):$(IMAGE_NAME):ArraySize9_RBV") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize9_RBV") { field(INP, "$(CAM):$(IMAGE_NAME):Dim9SA_RBV") } record(mbbi, "$(CAM):$(IMAGE_NAME):BayerPattern_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))BAYER_PATTERN") field(ZRST, "RGGB") field(ZRVL, "0") field(ONST, "GBRG") field(ONVL, "1") field(TWST, "GRBG") field(TWVL, "2") field(THST, "BGGR") field(THVL, "3") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_X") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Y") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Z") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):ArraySize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE") field(SCAN, "I/O Intr") } ################################################################### # These records have information on the compression # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):Codec_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))CODEC") field(VAL, "") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):CompressedSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))COMPRESSED_SIZE") field(SCAN, "I/O Intr") } ################################################################### # These records control the data type # ################################################################### record(mbbo, "$(CAM):$(IMAGE_NAME):DataType") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DATA_TYPE") field(ZRST, "Int8") field(ZRVL, "0") field(ONST, "UInt8") field(ONVL, "1") field(TWST, "Int16") field(TWVL, "2") field(THST, "UInt16") field(THVL, "3") field(FRST, "Int32") field(FRVL, "4") field(FVST, "UInt32") field(FVVL, "5") field(SXST, "Int64") field(SXVL, "6") field(SVST, "UInt64") field(SVVL, "7") field(EIST, "Float32") field(EIVL, "8") field(NIST, "Float64") field(NIVL, "9") field(VAL, "0") info(autosaveFields, "VAL") } record(mbbi, "$(CAM):$(IMAGE_NAME):DataType_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DATA_TYPE") field(ZRST, "Int8") field(ZRVL, "0") field(ONST, "UInt8") field(ONVL, "1") field(TWST, "Int16") field(TWVL, "2") field(THST, "UInt16") field(THVL, "3") field(FRST, "Int32") field(FRVL, "4") field(FVST, "UInt32") field(FVVL, "5") field(SXST, "Int64") field(SXVL, "6") field(SVST, "UInt64") field(SVVL, "7") field(EIST, "Float32") field(EIVL, "8") field(NIST, "Float64") field(NIVL, "9") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):BitsPerPixel_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))BITS_PER_PIXEL") field(SCAN, "I/O Intr") } ################################################################### # These records control the color mode # # These choices must agree with NDColorMode_t in NDArray.h # ################################################################### record(mbbo, "$(CAM):$(IMAGE_NAME):ColorMode") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))COLOR_MODE") field(ZRST, "Mono") field(ZRVL, "0") field(ONST, "Bayer") field(ONVL, "1") field(TWST, "RGB1") field(TWVL, "2") field(THST, "RGB2") field(THVL, "3") field(FRST, "RGB3") field(FRVL, "4") field(FVST, "YUV444") field(FVVL, "5") field(SXST, "YUV422") field(SXVL, "6") field(SVST, "YUV421") field(SVVL, "7") info(autosaveFields, "VAL") } record(mbbi, "$(CAM):$(IMAGE_NAME):ColorMode_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))COLOR_MODE") field(ZRST, "Mono") field(ZRVL, "0") field(ONST, "Bayer") field(ONVL, "1") field(TWST, "RGB1") field(TWVL, "2") field(THST, "RGB2") field(THVL, "3") field(FRST, "RGB3") field(FRVL, "4") field(FVST, "YUV444") field(FVVL, "5") field(SXST, "YUV422") field(SXVL, "6") field(SVST, "YUV421") field(SVVL, "7") field(SCAN, "I/O Intr") } ################################################################### # These records are the uniqueId and time stamps of the array # ################################################################### record(longin, "$(CAM):$(IMAGE_NAME):UniqueId_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))UNIQUE_ID") field(SCAN, "I/O Intr") } record(ai, "$(CAM):$(IMAGE_NAME):TimeStamp_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))TIME_STAMP") field(PREC, "3") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):EpicsTSSec_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))EPICS_TS_SEC") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):EpicsTSNsec_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))EPICS_TS_NSEC") field(SCAN, "I/O Intr") } ################################################################### # These records provide statistics on array callbacks and # # array callback rates # ################################################################### record(longout, "$(CAM):$(IMAGE_NAME):ArrayCounter") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_COUNTER") } record(longin, "$(CAM):$(IMAGE_NAME):ArrayCounter_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_COUNTER") field(SCAN, "I/O Intr") field(TSE, "-2") field(LOW, "0" ) field(LSV, "MINOR" ) info(autosaveFields, "DESC LOLO LOW HIGH HIHI LLSV LSV HSV HHSV TSE") } # Updated rate calculation to use a smoothing factor w/ guard against negative values # 0 rate sets alarm state to MINOR record(calc, "$(CAM):$(IMAGE_NAME):ArrayRate_RBV") { field(INPA, "$(CAM):$(IMAGE_NAME):ArrayRate_RBV.LB NPP NMS") # Previous counter (Last B value) field(INPB, "$(CAM):$(IMAGE_NAME):ArrayCounter_RBV NPP NMS") # Current counter value field(INPC, "1.0") # Delta time in seconds field(INPD, "$(CAM):$(IMAGE_NAME):ArrayRate_RBV.VAL NPP NMS") # Previous rate field(INPE, "0.0") # Smoothing factor field(CALC, "(D*E)/C+MAX(0,B-A)*(1-E)/C") field(PREC, "2" ) field(EGU, "Hz" ) field(SCAN, "1 second") field(LOW, "0") field(LSV, "MINOR") field(ADEL, "0.1") info(autosaveFields, "ADEL DESC LOLO LOW HIGH HIHI LLSV LSV HSV HHSV MDEL PREC C E SCAN EGU") } ################################################################### # These records control NDArray callacks # ################################################################### record(bo, "$(CAM):$(IMAGE_NAME):ArrayCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_CALLBACKS") field(ZNAM, "Disable") field(ZSV, "MINOR") field(ONAM, "Enable") field(OSV, "NO_ALARM") field(VAL, "1") info(autosaveFields, "VAL") } record(bi, "$(CAM):$(IMAGE_NAME):ArrayCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ARRAY_CALLBACKS") field(ZNAM, "Disabled") field(ZSV, "MINOR") field(ONAM, "Enabled") field(OSV, "NO_ALARM") field(SCAN, "I/O Intr") } ################################################################### # This record contains macro definitions for the attributes # ################################################################### record(waveform, "$(CAM):$(IMAGE_NAME):NDAttributesMacros") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ND_ATTRIBUTES_MACROS") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") } ################################################################### # This record is the name of a file defining attributes # ################################################################### record(waveform, "$(CAM):$(IMAGE_NAME):NDAttributesFile") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ND_ATTRIBUTES_FILE") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") } ################################################################### # This record defines the status of reading attributes file # ################################################################### record(mbbi, "$(CAM):$(IMAGE_NAME):NDAttributesStatus") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ND_ATTRIBUTES_STATUS") field(ZRVL, "0") field(ZRST, "Attributes file OK") field(ZRSV, "NO_ALARM") field(ONVL, "1") field(ONST, "File not found") field(ONSV, "MINOR") field(TWVL, "2") field(TWST, "XML syntax error") field(TWSV, "MAJOR") field(THVL, "3") field(THST, "Macro substitution error") field(THSV, "MAJOR") field(SCAN, "I/O Intr") } ################################################################### # Status of NDArrayPool - number of buffers, memory used etc. # ################################################################### record(ai, "$(CAM):$(IMAGE_NAME):PoolMaxMem") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))POOL_MAX_MEMORY") field(PREC, "1") field(EGU, "MB") field(SCAN, "Passive") field(PINI, "YES") } record(ai, "$(CAM):$(IMAGE_NAME):PoolUsedMem") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))POOL_USED_MEMORY") field(PREC, "1") field(EGU, "MB") field(SCAN, "1 second") field(FLNK, "$(CAM):$(IMAGE_NAME):PoolAllocBuffers") info(autosaveFields, "SCAN") } record(longin, "$(CAM):$(IMAGE_NAME):PoolAllocBuffers") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))POOL_ALLOC_BUFFERS") field(FLNK, "$(CAM):$(IMAGE_NAME):PoolFreeBuffers") } record(longin, "$(CAM):$(IMAGE_NAME):PoolFreeBuffers") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))POOL_FREE_BUFFERS") field(FLNK, "$(CAM):$(IMAGE_NAME):PoolUsedBuffers") } record(calc, "$(CAM):$(IMAGE_NAME):PoolUsedBuffers") { field(INPA, "$(CAM):$(IMAGE_NAME):PoolAllocBuffers NPP MS") field(INPB, "$(CAM):$(IMAGE_NAME):PoolFreeBuffers NPP MS") field(CALC, "A-B") } record(bo, "$(CAM):$(IMAGE_NAME):EmptyFreeList") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))POOL_EMPTY_FREELIST") } record(longin, "$(CAM):$(IMAGE_NAME):NumQueuedArrays") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NUM_QUEUED_ARRAYS") field(SCAN, "I/O Intr") } ################################################################### # This record contains the type of plugin # ################################################################### record(stringin, "$(CAM):$(IMAGE_NAME):PluginType_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))PLUGIN_TYPE") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # These records control the connection of the server to # # an NDArray driver port and address # ################################################################### # Array port name record(stringout, "$(CAM):$(IMAGE_NAME):NDArrayPort") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") field(VAL, "$(PLUGIN_SRC)") info(autosaveFields, "DESC VAL") } record(stringin, "$(CAM):$(IMAGE_NAME):NDArrayPort_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") field(SCAN, "I/O Intr") } record(longout, "$(CAM):$(IMAGE_NAME):NDArrayAddress") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NDARRAY_ADDR") field(VAL, "$(NDARRAY_ADDR=0)") info(autosaveFields, "DESC VAL") } record(longin, "$(CAM):$(IMAGE_NAME):NDArrayAddress_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NDARRAY_ADDR") field(SCAN, "I/O Intr") } ################################################################### # These records control whether callbacks are enabled and # # minimum time between callbacks # ################################################################### record(bo, "$(CAM):$(IMAGE_NAME):EnableCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ENABLE_CALLBACKS") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(VAL, "0") info(autosaveFields, "DESC VAL") } record(bi, "$(CAM):$(IMAGE_NAME):EnableCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))ENABLE_CALLBACKS") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "MINOR") field(OSV, "NO_ALARM") field(SCAN, "I/O Intr") } record(ao, "$(CAM):$(IMAGE_NAME):MinCallbackTime") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MIN_CALLBACK_TIME") field(EGU, "s") field(PREC, "3") field(VAL, "0.0") field(DRVL, "0") info(autosaveFields, "VAL") } record(ai, "$(CAM):$(IMAGE_NAME):MinCallbackTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MIN_CALLBACK_TIME") field(EGU, "s") field(PREC, "3") field(SCAN, "I/O Intr") } record(ao, "$(CAM):$(IMAGE_NAME):MaxArrayRate") { field(DTYP, "Soft Channel") field(OUT, "$(CAM):$(IMAGE_NAME):MaxArrayRate_COUT PP") field(EGU, "Hz") field(PREC, "3") field(VAL, "0.0") info(autosaveFields, "VAL") } record(calcout, "$(CAM):$(IMAGE_NAME):MaxArrayRate_COUT") { field(INPA, "$(CAM):$(IMAGE_NAME):MaxArrayRate") field(CALC, "A=0?0:1.0/A") field(OUT, "$(CAM):$(IMAGE_NAME):MinCallbackTime PP") } record(calc, "$(CAM):$(IMAGE_NAME):MaxArrayRate_RBV") { field(INPA, "$(CAM):$(IMAGE_NAME):MinCallbackTime_RBV CP") field(CALC, "A=0?0:1.0/A") field(EGU, "Hz") field(PREC, "3") field(SCAN, "Passive") } record(ao, "$(CAM):$(IMAGE_NAME):MaxByteRate") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MAX_BYTE_RATE") field(EGU, "s") field(PREC, "3") field(VAL, "0.0") field(DRVL, "0") info(autosaveFields, "VAL") } record(ai, "$(CAM):$(IMAGE_NAME):MaxByteRate_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MAX_BYTE_RATE") field(EGU, "s") field(PREC, "3") field(SCAN, "I/O Intr") } ################################################################### # This record contains the last execution time of the plugin # ################################################################### record(ai, "$(CAM):$(IMAGE_NAME):ExecutionTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))EXECUTION_TIME") field(EGU, "ms") field(PREC, "3") field(SCAN, "I/O Intr") } ################################################################### # This record requests that the plugin execute again with the # # same NDArray # ################################################################### record(bo, "$(CAM):$(IMAGE_NAME):ProcessPlugin") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))PROCESS_PLUGIN") field(VAL, "1") } ################################################################### # These records control whether callbacks block or not # ################################################################### record(bo, "$(CAM):$(IMAGE_NAME):BlockingCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))BLOCKING_CALLBACKS") field(ZNAM, "No") field(ONAM, "Yes") field(VAL, "0") info(autosaveFields, "DESC ZSV OSV VAL") } record(bi, "$(CAM):$(IMAGE_NAME):BlockingCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))BLOCKING_CALLBACKS") field(ZNAM, "No") field(ONAM, "Yes") field(ZSV, "NO_ALARM") field(OSV, "MINOR") field(SCAN, "I/O Intr") info( autosaveFields, "DESC ZSV OSV" ) } record(longout, "$(CAM):$(IMAGE_NAME):DroppedArrays") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DROPPED_ARRAYS") field(VAL, "0") info( autosaveFields, "DESC LOLO LOW HIGH HIHI LLSV LSV HSV HHSV EGU" ) } record(longin, "$(CAM):$(IMAGE_NAME):DroppedArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DROPPED_ARRAYS") field(SCAN, "I/O Intr") field(HIGH, "1") field(HSV, "MINOR") info( autosaveFields, "DESC LOLO LOW HIGH HIHI LLSV LSV HSV HHSV EGU" ) } record(longout, "$(CAM):$(IMAGE_NAME):QueueSize") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))QUEUE_SIZE") field(PINI, "YES") info( autosaveFields, "DESC EGU" ) } record(longin, "$(CAM):$(IMAGE_NAME):QueueSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))QUEUE_SIZE") field(FLNK, "$(CAM):$(IMAGE_NAME):QueueFreeLow") field(SCAN, "I/O Intr") } record(calcout, "$(CAM):$(IMAGE_NAME):QueueFreeLow") { field(CALC, "A*0.25") field(INPA, "$(CAM):$(IMAGE_NAME):QueueSize") field(OUT, "$(CAM):$(IMAGE_NAME):QueueFree.LOW") field(FLNK, "$(CAM):$(IMAGE_NAME):QueueUseHIGH") } # Set a HIGH warning level for the input queue fill level to 75% # of the full size of the queue record(calcout, "$(CAM):$(IMAGE_NAME):QueueUseHIGH") { field(CALC, "A*0.75") field(INPA, "$(CAM):$(IMAGE_NAME):QueueSize") field(OUT, "$(CAM):$(IMAGE_NAME):QueueUse.HIGH") field(FLNK, "$(CAM):$(IMAGE_NAME):QueueUseHIHI") } # Set a HIHI level for the input queue fill level to indicate an error # (MAJOR alarm) when it fills up to the full size of the queue (frames start dropping) record(calcout, "$(CAM):$(IMAGE_NAME):QueueUseHIHI") { field(CALC, "A*1.0") field(INPA, "$(CAM):$(IMAGE_NAME):QueueSize") field(OUT, "$(CAM):$(IMAGE_NAME):QueueUse.HIHI") } record(longin, "$(CAM):$(IMAGE_NAME):QueueFree") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))QUEUE_FREE") field(LLSV, "MAJOR") field(LSV, "MINOR") field(LOLO, "0") field(HYST, "1") field(SCAN, "I/O Intr") } # Display the fill level on the plugins input queue record(calc, "$(CAM):$(IMAGE_NAME):QueueUse") { field(CALC, "A-B") field(INPA, "$(CAM):$(IMAGE_NAME):QueueSize") field(INPB, "$(CAM):$(IMAGE_NAME):QueueFree CP") field(SCAN, "Passive") field(HHSV, "MAJOR") field(HSV, "MINOR") field(HYST, "1") } record(longout, "$(CAM):$(IMAGE_NAME):NumThreads") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NUM_THREADS") field(VAL, "1") field(PINI, "YES") info(autosaveFields, "DESC VAL") } record(longin, "$(CAM):$(IMAGE_NAME):NumThreads_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))NUM_THREADS") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):MaxThreads_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))MAX_THREADS") field(SCAN, "I/O Intr") } ################################################################### # These records control output array sorting # ################################################################### record(mbbo, "$(CAM):$(IMAGE_NAME):SortMode") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_MODE") field(ZRVL, "0") field(ZRST, "Unsorted") field(ONVL, "1") field(ONST, "Sorted") } record(mbbi, "$(CAM):$(IMAGE_NAME):SortMode_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_MODE") field(ZRVL, "0") field(ZRST, "Unsorted") field(ONVL, "1") field(ONST, "Sorted") field(SCAN, "I/O Intr") } record(ao, "$(CAM):$(IMAGE_NAME):SortTime") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_TIME") field(PREC, "3") field(VAL, "0.1") } record(ai, "$(CAM):$(IMAGE_NAME):SortTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_TIME") field(PREC, "3") field(SCAN, "I/O Intr") } record(longout, "$(CAM):$(IMAGE_NAME):SortSize") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_SIZE") field(VAL, "20") field(PINI, "YES") } record(longin, "$(CAM):$(IMAGE_NAME):SortSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_SIZE") field(FLNK, "$(CAM):$(IMAGE_NAME):SortFreeLow") field(SCAN, "I/O Intr") } record(longin, "$(CAM):$(IMAGE_NAME):SortFree") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))SORT_FREE") field(LLSV, "MAJOR") field(LSV, "MINOR") field(LOLO, "0") field(HYST, "1") field(SCAN, "I/O Intr") } record(calcout, "$(CAM):$(IMAGE_NAME):SortFreeLow") { field(CALC, "A*0.25") field(INPA, "$(CAM):$(IMAGE_NAME):SortSize") field(OUT, "$(CAM):$(IMAGE_NAME):SortFree.LOW") } record(longout, "$(CAM):$(IMAGE_NAME):DroppedOutputArrays") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DROPPED_OUTPUT_ARRAYS") field(VAL, "0") } record(longin, "$(CAM):$(IMAGE_NAME):DroppedOutputArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DROPPED_OUTPUT_ARRAYS") field(SCAN, "I/O Intr") } record(longout, "$(CAM):$(IMAGE_NAME):DisorderedArrays") { field(DTYP, "asynInt32") field(OUT, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DISORDERED_ARRAYS") field(PINI, "YES") } record(longin, "$(CAM):$(IMAGE_NAME):DisorderedArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))DISORDERED_ARRAYS") field(SCAN, "I/O Intr") } ################################################################### # The asynRecord is used for mainly for trace mask # ################################################################### # Set ASYN_TRACEIO_HEX bit by default record(asyn,"$(CAM):$(IMAGE_NAME):AsynIO") { field(PORT, "$(IMAGE_NAME)") field(TIB2,"1") info("ADType", "ADPlugin") } ################################################################### # This record is the array waveform data # ################################################################### record(waveform, "$(CAM):$(IMAGE_NAME):ArrayData") { field(DTYP, "asyn$(IMAGE_TYPE)ArrayIn") field(INP, "@asyn($(IMAGE_NAME),$(ADDR=0),$(TIMEOUT=1))STD_ARRAY_DATA") field(FTVL, "$(IMAGE_FTVL)") field(NELM, "$(IMAGE_NELM)") field(SCAN, "I/O Intr") field(TSE, "-2") field(FLNK, "$(CAM):$(IMAGE_NAME):TimeStampStr") info(autosaveFields, "TSE") } # Timestamp formatted as a string record(stringin, "$(CAM):$(IMAGE_NAME):TimeStampStr") { field(DESC, "Image Capture Time") field(DTYP, "Soft Timestamp") field(TSEL, "$(CAM):$(IMAGE_NAME):ArrayData.TIME") field(INP, "@%m-%d %H:%M:%S.%01f") info(autosaveFields, "INP") }