#=================================================================# # Template file: NDROI.template # Database for ND ROIs # Mark Rivers # April 22, 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):ROI$(N):ADCoreVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):DriverVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):PortName_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):Manufacturer_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))MANUFACTURER") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):ROI$(N):Model_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))MODEL") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):ROI$(N):SerialNumber_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SERIAL_NUMBER") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):ROI$(N):SDKVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SDK_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } record(stringin, "$(CAM):ROI$(N):FirmwareVersion_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))FIRMWARE_VERSION") field(VAL, "Unknown") field(SCAN, "I/O Intr") } ################################################################### # These records control acquisition start and stop # ################################################################### record(bo, "$(CAM):ROI$(N):Acquire") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ACQUIRE") field(ZNAM, "Done") field(ONAM, "Acquire") field(VAL, "0") field(FLNK, "$(CAM):ROI$(N):SetAcquireBusy") info(asyn:READBACK, "1") } record(bi, "$(CAM):ROI$(N):Acquire_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):SetAcquireBusy") { field(INPA, "$(CAM):ROI$(N):Acquire NPP") field(CALC, "A") field(OOPT, "Transition To Non-zero") field(OUT, "$(CAM):ROI$(N):AcquireBusy PP") } record(busy, "$(CAM):ROI$(N):AcquireBusy") { field(ZNAM, "Done") field(ZSV, "NO_ALARM") field(ONAM, "Acquiring") field(OSV, "MINOR") field(VAL, "0") } record(bi, "$(CAM):ROI$(N):AcquireBusyCB") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ClearAcquireBusy") { field(INPA, "$(CAM):ROI$(N):AcquireBusyCB CP") field(CALC, "A") field(OOPT, "Transition To Zero") field(OUT, "$(CAM):ROI$(N):AcquireBusy PP") } record(bo, "$(CAM):ROI$(N):WaitForPlugins") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):NDimensions") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_NDIMENSIONS") } record(longin, "$(CAM):ROI$(N):NDimensions_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_NDIMENSIONS") field(SCAN, "I/O Intr") } # The array dimensions waveform records record(waveform, "$(CAM):ROI$(N):Dimensions") { field(DTYP, "asynInt32ArrayOut") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_DIMENSIONS") field(FTVL, "LONG") field(NELM, "10") field(FLNK, "$(CAM):ROI$(N):Dim0SA") } record(subArray, "$(CAM):ROI$(N):Dim0SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "0") field(FLNK, "$(CAM):ROI$(N):ArraySize0") } record(longin, "$(CAM):ROI$(N):ArraySize0") { field(INP, "$(CAM):ROI$(N):Dim0SA") field(FLNK, "$(CAM):ROI$(N):Dim1SA") } record(subArray, "$(CAM):ROI$(N):Dim1SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "1") field(FLNK, "$(CAM):ROI$(N):ArraySize1") } record(longin, "$(CAM):ROI$(N):ArraySize1") { field(INP, "$(CAM):ROI$(N):Dim1SA") field(FLNK, "$(CAM):ROI$(N):Dim2SA") } record(subArray, "$(CAM):ROI$(N):Dim2SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "2") field(FLNK, "$(CAM):ROI$(N):ArraySize2") } record(longin, "$(CAM):ROI$(N):ArraySize2") { field(INP, "$(CAM):ROI$(N):Dim2SA") field(FLNK, "$(CAM):ROI$(N):Dim3SA") } record(subArray, "$(CAM):ROI$(N):Dim3SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "3") field(FLNK, "$(CAM):ROI$(N):ArraySize3") } record(longin, "$(CAM):ROI$(N):ArraySize3") { field(INP, "$(CAM):ROI$(N):Dim3SA") field(FLNK, "$(CAM):ROI$(N):Dim4SA") } record(subArray, "$(CAM):ROI$(N):Dim4SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "4") field(FLNK, "$(CAM):ROI$(N):ArraySize4") } record(longin, "$(CAM):ROI$(N):ArraySize4") { field(INP, "$(CAM):ROI$(N):Dim4SA") field(FLNK, "$(CAM):ROI$(N):Dim5SA") } record(subArray, "$(CAM):ROI$(N):Dim5SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "5") field(FLNK, "$(CAM):ROI$(N):ArraySize5") } record(longin, "$(CAM):ROI$(N):ArraySize5") { field(INP, "$(CAM):ROI$(N):Dim5SA") field(FLNK, "$(CAM):ROI$(N):Dim6SA") } record(subArray, "$(CAM):ROI$(N):Dim6SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "6") field(FLNK, "$(CAM):ROI$(N):ArraySize6") } record(longin, "$(CAM):ROI$(N):ArraySize6") { field(INP, "$(CAM):ROI$(N):Dim6SA") field(FLNK, "$(CAM):ROI$(N):Dim7SA") } record(subArray, "$(CAM):ROI$(N):Dim7SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "7") field(FLNK, "$(CAM):ROI$(N):ArraySize7") } record(longin, "$(CAM):ROI$(N):ArraySize7") { field(INP, "$(CAM):ROI$(N):Dim7SA") field(FLNK, "$(CAM):ROI$(N):Dim8SA") } record(subArray, "$(CAM):ROI$(N):Dim8SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "8") field(FLNK, "$(CAM):ROI$(N):ArraySize8") } record(longin, "$(CAM):ROI$(N):ArraySize8") { field(INP, "$(CAM):ROI$(N):Dim8SA") field(FLNK, "$(CAM):ROI$(N):Dim9SA") } record(subArray, "$(CAM):ROI$(N):Dim9SA") { field(INP, "$(CAM):ROI$(N):Dimensions NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "9") field(FLNK, "$(CAM):ROI$(N):ArraySize9") } record(longin, "$(CAM):ROI$(N):ArraySize9") { field(INP, "$(CAM):ROI$(N):Dim9SA") } record(waveform, "$(CAM):ROI$(N):Dimensions_RBV") { field(DTYP, "asynInt32ArrayIn") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_DIMENSIONS") field(FTVL, "LONG") field(NELM, "10") field(FLNK, "$(CAM):ROI$(N):Dim0SA_RBV") field(SCAN, "I/O Intr") } record(subArray, "$(CAM):ROI$(N):Dim0SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "0") field(FLNK, "$(CAM):ROI$(N):ArraySize0_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize0_RBV") { field(INP, "$(CAM):ROI$(N):Dim0SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim1SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim1SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "1") field(FLNK, "$(CAM):ROI$(N):ArraySize1_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize1_RBV") { field(INP, "$(CAM):ROI$(N):Dim1SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim2SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim2SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "2") field(FLNK, "$(CAM):ROI$(N):ArraySize2_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize2_RBV") { field(INP, "$(CAM):ROI$(N):Dim2SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim3SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim3SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "3") field(FLNK, "$(CAM):ROI$(N):ArraySize3_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize3_RBV") { field(INP, "$(CAM):ROI$(N):Dim3SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim4SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim4SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "4") field(FLNK, "$(CAM):ROI$(N):ArraySize4_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize4_RBV") { field(INP, "$(CAM):ROI$(N):Dim4SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim5SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim5SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "5") field(FLNK, "$(CAM):ROI$(N):ArraySize5_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize5_RBV") { field(INP, "$(CAM):ROI$(N):Dim5SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim6SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim6SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "6") field(FLNK, "$(CAM):ROI$(N):ArraySize6_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize6_RBV") { field(INP, "$(CAM):ROI$(N):Dim6SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim7SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim7SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "7") field(FLNK, "$(CAM):ROI$(N):ArraySize7_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize7_RBV") { field(INP, "$(CAM):ROI$(N):Dim7SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim8SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim8SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "8") field(FLNK, "$(CAM):ROI$(N):ArraySize8_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize8_RBV") { field(INP, "$(CAM):ROI$(N):Dim8SA_RBV") field(FLNK, "$(CAM):ROI$(N):Dim9SA_RBV") } record(subArray, "$(CAM):ROI$(N):Dim9SA_RBV") { field(INP, "$(CAM):ROI$(N):Dimensions_RBV NPP NMS") field(FTVL, "LONG") field(MALM, "10") field(NELM, "1") field(INDX, "9") field(FLNK, "$(CAM):ROI$(N):ArraySize9_RBV") } record(longin, "$(CAM):ROI$(N):ArraySize9_RBV") { field(INP, "$(CAM):ROI$(N):Dim9SA_RBV") } record(mbbi, "$(CAM):ROI$(N):BayerPattern_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ArraySizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_X") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Y") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Z") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE") field(SCAN, "I/O Intr") } ################################################################### # These records have information on the compression # ################################################################### record(stringin, "$(CAM):ROI$(N):Codec_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))CODEC") field(VAL, "") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):CompressedSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))COMPRESSED_SIZE") field(SCAN, "I/O Intr") } ################################################################### # These records control the data type # ################################################################### record(mbbo, "$(CAM):ROI$(N):DataType") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):DataType_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):BitsPerPixel_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ColorMode") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):ColorMode_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):UniqueId_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))UNIQUE_ID") field(SCAN, "I/O Intr") } record(ai, "$(CAM):ROI$(N):TimeStamp_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))TIME_STAMP") field(PREC, "3") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):EpicsTSSec_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))EPICS_TS_SEC") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):EpicsTSNsec_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ArrayCounter") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_COUNTER") } record(longin, "$(CAM):ROI$(N):ArrayCounter_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ArrayRate_RBV") { field(INPA, "$(CAM):ROI$(N):ArrayRate_RBV.LB NPP NMS") # Previous counter (Last B value) field(INPB, "$(CAM):ROI$(N):ArrayCounter_RBV NPP NMS") # Current counter value field(INPC, "1.0") # Delta time in seconds field(INPD, "$(CAM):ROI$(N):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):ROI$(N):ArrayCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):ArrayCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):NDAttributesMacros") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):NDAttributesFile") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):NDAttributesStatus") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):PoolMaxMem") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))POOL_MAX_MEMORY") field(PREC, "1") field(EGU, "MB") field(SCAN, "Passive") field(PINI, "YES") } record(ai, "$(CAM):ROI$(N):PoolUsedMem") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))POOL_USED_MEMORY") field(PREC, "1") field(EGU, "MB") field(SCAN, "1 second") field(FLNK, "$(CAM):ROI$(N):PoolAllocBuffers") info(autosaveFields, "SCAN") } record(longin, "$(CAM):ROI$(N):PoolAllocBuffers") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))POOL_ALLOC_BUFFERS") field(FLNK, "$(CAM):ROI$(N):PoolFreeBuffers") } record(longin, "$(CAM):ROI$(N):PoolFreeBuffers") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))POOL_FREE_BUFFERS") field(FLNK, "$(CAM):ROI$(N):PoolUsedBuffers") } record(calc, "$(CAM):ROI$(N):PoolUsedBuffers") { field(INPA, "$(CAM):ROI$(N):PoolAllocBuffers NPP MS") field(INPB, "$(CAM):ROI$(N):PoolFreeBuffers NPP MS") field(CALC, "A-B") } record(bo, "$(CAM):ROI$(N):EmptyFreeList") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))POOL_EMPTY_FREELIST") } record(longin, "$(CAM):ROI$(N):NumQueuedArrays") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NUM_QUEUED_ARRAYS") field(SCAN, "I/O Intr") } ################################################################### # This record contains the type of plugin # ################################################################### record(stringin, "$(CAM):ROI$(N):PluginType_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):NDArrayPort") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") field(VAL, "$(PLUGIN_SRC)") info(autosaveFields, "DESC VAL") } record(stringin, "$(CAM):ROI$(N):NDArrayPort_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NDARRAY_PORT") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):NDArrayAddress") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NDARRAY_ADDR") field(VAL, "$(NDARRAY_ADDR=0)") info(autosaveFields, "DESC VAL") } record(longin, "$(CAM):ROI$(N):NDArrayAddress_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):EnableCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ENABLE_CALLBACKS") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(VAL, "0") info(autosaveFields, "DESC VAL") } record(bi, "$(CAM):ROI$(N):EnableCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):MinCallbackTime") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):MinCallbackTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))MIN_CALLBACK_TIME") field(EGU, "s") field(PREC, "3") field(SCAN, "I/O Intr") } record(ao, "$(CAM):ROI$(N):MaxArrayRate") { field(DTYP, "Soft Channel") field(OUT, "$(CAM):ROI$(N):MaxArrayRate_COUT PP") field(EGU, "Hz") field(PREC, "3") field(VAL, "0.0") info(autosaveFields, "VAL") } record(calcout, "$(CAM):ROI$(N):MaxArrayRate_COUT") { field(INPA, "$(CAM):ROI$(N):MaxArrayRate") field(CALC, "A=0?0:1.0/A") field(OUT, "$(CAM):ROI$(N):MinCallbackTime PP") } record(calc, "$(CAM):ROI$(N):MaxArrayRate_RBV") { field(INPA, "$(CAM):ROI$(N):MinCallbackTime_RBV CP") field(CALC, "A=0?0:1.0/A") field(EGU, "Hz") field(PREC, "3") field(SCAN, "Passive") } record(ao, "$(CAM):ROI$(N):MaxByteRate") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn(ROI$(N),$(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):ROI$(N):MaxByteRate_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ExecutionTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):ProcessPlugin") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))PROCESS_PLUGIN") field(VAL, "1") } ################################################################### # These records control whether callbacks block or not # ################################################################### record(bo, "$(CAM):ROI$(N):BlockingCallbacks") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))BLOCKING_CALLBACKS") field(ZNAM, "No") field(ONAM, "Yes") field(VAL, "0") info(autosaveFields, "DESC ZSV OSV VAL") } record(bi, "$(CAM):ROI$(N):BlockingCallbacks_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):DroppedArrays") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DROPPED_ARRAYS") field(VAL, "0") info( autosaveFields, "DESC LOLO LOW HIGH HIHI LLSV LSV HSV HHSV EGU" ) } record(longin, "$(CAM):ROI$(N):DroppedArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):QueueSize") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))QUEUE_SIZE") field(PINI, "YES") info( autosaveFields, "DESC EGU" ) } record(longin, "$(CAM):ROI$(N):QueueSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))QUEUE_SIZE") field(FLNK, "$(CAM):ROI$(N):QueueFreeLow") field(SCAN, "I/O Intr") } record(calcout, "$(CAM):ROI$(N):QueueFreeLow") { field(CALC, "A*0.25") field(INPA, "$(CAM):ROI$(N):QueueSize") field(OUT, "$(CAM):ROI$(N):QueueFree.LOW") field(FLNK, "$(CAM):ROI$(N):QueueUseHIGH") } # Set a HIGH warning level for the input queue fill level to 75% # of the full size of the queue record(calcout, "$(CAM):ROI$(N):QueueUseHIGH") { field(CALC, "A*0.75") field(INPA, "$(CAM):ROI$(N):QueueSize") field(OUT, "$(CAM):ROI$(N):QueueUse.HIGH") field(FLNK, "$(CAM):ROI$(N):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):ROI$(N):QueueUseHIHI") { field(CALC, "A*1.0") field(INPA, "$(CAM):ROI$(N):QueueSize") field(OUT, "$(CAM):ROI$(N):QueueUse.HIHI") } record(longin, "$(CAM):ROI$(N):QueueFree") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):QueueUse") { field(CALC, "A-B") field(INPA, "$(CAM):ROI$(N):QueueSize") field(INPB, "$(CAM):ROI$(N):QueueFree CP") field(SCAN, "Passive") field(HHSV, "MAJOR") field(HSV, "MINOR") field(HYST, "1") } record(longout, "$(CAM):ROI$(N):NumThreads") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NUM_THREADS") field(VAL, "1") field(PINI, "YES") info(autosaveFields, "DESC VAL") } record(longin, "$(CAM):ROI$(N):NumThreads_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NUM_THREADS") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):MaxThreads_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))MAX_THREADS") field(SCAN, "I/O Intr") } ################################################################### # These records control output array sorting # ################################################################### record(mbbo, "$(CAM):ROI$(N):SortMode") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SORT_MODE") field(ZRVL, "0") field(ZRST, "Unsorted") field(ONVL, "1") field(ONST, "Sorted") } record(mbbi, "$(CAM):ROI$(N):SortMode_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):SortTime") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SORT_TIME") field(PREC, "3") field(VAL, "0.1") } record(ai, "$(CAM):ROI$(N):SortTime_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SORT_TIME") field(PREC, "3") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):SortSize") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SORT_SIZE") field(VAL, "20") field(PINI, "YES") } record(longin, "$(CAM):ROI$(N):SortSize_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SORT_SIZE") field(FLNK, "$(CAM):ROI$(N):SortFreeLow") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):SortFree") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):SortFreeLow") { field(CALC, "A*0.25") field(INPA, "$(CAM):ROI$(N):SortSize") field(OUT, "$(CAM):ROI$(N):SortFree.LOW") } record(longout, "$(CAM):ROI$(N):DroppedOutputArrays") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DROPPED_OUTPUT_ARRAYS") field(VAL, "0") } record(longin, "$(CAM):ROI$(N):DroppedOutputArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DROPPED_OUTPUT_ARRAYS") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):DisorderedArrays") { field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DISORDERED_ARRAYS") field(PINI, "YES") } record(longin, "$(CAM):ROI$(N):DisorderedArrays_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(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):ROI$(N):AsynIO") { field(PORT, "ROI$(N)") field(TIB2,"1") info("ADType", "ADPlugin") } ################################################################### # These records control the label for the ROI # ################################################################### record(stringout, "$(CAM):ROI$(N):Name") { field(PINI, "YES") field(DTYP, "asynOctetWrite") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NAME") info(autosaveFields, "VAL") } record(stringin, "$(CAM):ROI$(N):Name_RBV") { field(DTYP, "asynOctetRead") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))NAME") field(SCAN, "I/O Intr") } ################################################################### # These records control the ROI definition # # including binning, region start and size # ################################################################### record(longout, "$(CAM):ROI$(N):BinX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_BIN") field(VAL, "1") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):BinX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_BIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):BinY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_BIN") field(VAL, "1") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):BinY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_BIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):BinZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_BIN") field(VAL, "1") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):BinZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_BIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):MinX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_MIN") field(LOPR, "0") field(VAL, "0") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):MinX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_MIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):MinY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_MIN") field(LOPR, "0") field(VAL, "0") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):MinY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_MIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):MinZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_MIN") field(LOPR, "1") field(VAL, "0") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):MinZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_MIN") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):SizeX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_SIZE") field(VAL, "1000000") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):SizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_SIZE") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):SizeY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_SIZE") field(VAL, "1000000") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):SizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_SIZE") field(SCAN, "I/O Intr") } record(longout, "$(CAM):ROI$(N):SizeZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_SIZE") field(VAL, "1000000") info(autosaveFields, "VAL") } record(longin, "$(CAM):ROI$(N):SizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_SIZE") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):AutoSizeX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_AUTO_SIZE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):AutoSizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_AUTO_SIZE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):AutoSizeY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_AUTO_SIZE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):AutoSizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_AUTO_SIZE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):AutoSizeZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_AUTO_SIZE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):AutoSizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_AUTO_SIZE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):MaxSizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_MAX_SIZE") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):MaxSizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_MAX_SIZE") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):MaxSizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_MAX_SIZE") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):ReverseX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_REVERSE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):ReverseX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_REVERSE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):ReverseY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_REVERSE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):ReverseY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_REVERSE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):ReverseZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_REVERSE") field(VAL, "0") field(ZNAM, "No") field(ONAM, "Yes") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):ReverseZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_REVERSE") field(ZNAM, "No") field(ONAM, "Yes") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySizeX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_X") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySizeY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Y") field(SCAN, "I/O Intr") } record(longin, "$(CAM):ROI$(N):ArraySizeZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ARRAY_SIZE_Z") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):EnableX") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_ENABLE") field(VAL, "1") field(ZNAM, "Disabled") field(ONAM, "Enabled") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):EnableX_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM0_ENABLE") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "NO_ALARM") field(OSV, "NO_ALARM") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):EnableY") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_ENABLE") field(VAL, "1") field(ZNAM, "Disabled") field(ONAM, "Enabled") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):EnableY_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM1_ENABLE") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "NO_ALARM") field(OSV, "NO_ALARM") field(SCAN, "I/O Intr") } record(bo, "$(CAM):ROI$(N):EnableZ") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_ENABLE") field(VAL, "1") field(ZNAM, "Disabled") field(ONAM, "Enabled") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):EnableZ_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))DIM2_ENABLE") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "NO_ALARM") field(OSV, "NO_ALARM") field(SCAN, "I/O Intr") } ################################################################### # These records control the scaling of the data. Useful when # # binning or converting data types # ################################################################### record(bo, "$(CAM):ROI$(N):EnableScale") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ENABLE_SCALE") field(VAL, "0") field(ZNAM, "Disabled") field(ONAM, "Enabled") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):EnableScale_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ENABLE_SCALE") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "NO_ALARM") field(OSV, "MINOR") field(SCAN, "I/O Intr") } record(ao, "$(CAM):ROI$(N):Scale") { field(PINI, "YES") field(DTYP, "asynFloat64") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SCALE_VALUE") field(VAL, "1") info(autosaveFields, "VAL") } record(ai, "$(CAM):ROI$(N):Scale_RBV") { field(DTYP, "asynFloat64") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))SCALE_VALUE") field(SCAN, "I/O Intr") } ################################################################### # These records control the data type of the array data # # The last entry is "Automatic" meaning preserve the data type # # of the input array. # ################################################################### record(mbbo, "$(CAM):ROI$(N):DataTypeOut") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ROI_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(TEST, "Automatic") field(TEVL, "-1") field(VAL, "10") info(autosaveFields, "VAL") } record(mbbi, "$(CAM):ROI$(N):DataTypeOut_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))ROI_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(TEST, "Automatic") field(TEVL, "-1") field(SCAN, "I/O Intr") } ################################################################### # These records set the HOPR and LOPR values for the position # # and size to the maximum for the input array # ################################################################### record(longin, "$(CAM):ROI$(N):MaxX") { field(INP, "$(CAM):ROI$(N):MaxSizeX_RBV CP") field(FLNK, "$(CAM):ROI$(N):SetXHOPR.PROC PP") } record(dfanout, "$(CAM):ROI$(N):SetXHOPR") { field(DOL, "$(CAM):ROI$(N):MaxX NPP") field(OMSL, "closed_loop") field(OUTA, "$(CAM):ROI$(N):MinX.HOPR NPP") field(OUTB, "$(CAM):ROI$(N):SizeX.HOPR NPP") } record(longin, "$(CAM):ROI$(N):MaxY") { field(INP, "$(CAM):ROI$(N):MaxSizeY_RBV CP") field(FLNK, "$(CAM):ROI$(N):SetYHOPR.PROC PP") } record(dfanout, "$(CAM):ROI$(N):SetYHOPR") { field(DOL, "$(CAM):ROI$(N):MaxY NPP") field(OMSL, "closed_loop") field(OUTA, "$(CAM):ROI$(N):MinY.HOPR NPP") field(OUTB, "$(CAM):ROI$(N):SizeY.HOPR NPP") } ################################################################### # These records whether dimensions of 1 are collapsed (removed) # # ################################################################### record(bo, "$(CAM):ROI$(N):CollapseDims") { field(PINI, "YES") field(DTYP, "asynInt32") field(OUT, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))COLLAPSE_DIMS") field(VAL, "0") field(ZNAM, "Disabled") field(ONAM, "Enabled") info(autosaveFields, "VAL") } record(bi, "$(CAM):ROI$(N):CollapseDims_RBV") { field(DTYP, "asynInt32") field(INP, "@asyn(ROI$(N),$(ADDR=0),$(TIMEOUT=1))COLLAPSE_DIMS") field(ZNAM, "Disabled") field(ONAM, "Enabled") field(ZSV, "NO_ALARM") field(OSV, "MINOR") field(SCAN, "I/O Intr") }