ad-core-rs 0.28.2

Core types and base classes for areaDetector-rs
Documentation
#=================================================================#
# Template file: NDCodec.template
# Database for the NDCodec plugin
# Bruno Martins
# June 18, 2018

include "NDPluginBase.template"

record(mbbo, "$(P)$(R)Mode")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))MODE")
    field(ZRST, "Compress")
    field(ZRVL, "0")
    field(ONST, "Decompress")
    field(ONVL, "1")
    info(autosaveFields, "VAL")
}

record(mbbi, "$(P)$(R)Mode_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))MODE")
    field(ZRST, "Compress")
    field(ZRVL, "0")
    field(ONST, "Decompress")
    field(ONVL, "1")
    field(SCAN, "I/O Intr")
}

# DELIBERATE DIVERGENCE from ADCore's NDCodec.template at the pin
# (ADCore = R3-14-111-g6c53844e), which declares five Compressor states.
#
# The port implements seven codecs -- `ad-core-rs/src/codec.rs` `CodecName`
# adds Zlib and LZ4HDF5 after the C set -- so a template byte-identical to the
# pin's cannot express the port's own enum. `ad-plugins-rs/src/codec.rs`
# writes COMPRESSOR = CodecName::ordinal() on every decompress, including 5
# and 6; against a five-state record those raw values match no *VL entry, so
# mbbi VAL becomes 65535 (mbbiRecord.c:180) and UNSV defaults to NO_ALARM --
# a silently unreadable readback. In the other direction `caput Compressor 5`
# indexes FVVL, which a five-state template never sets and which has no
# `initial()` (mbboRecord.dbd.pod:262-264), so RVAL is 0 and asking for Zlib
# silently yields no compression.
#
# The two states below therefore use the port's own numbering, Zlib=5 and
# LZ4HDF5=6, matching `CodecName::ordinal`. Upstream ADCore has since taken
# 2 and 5 for ZLIB and LZ4HDF5 (NDCodec.h:7-15 at 926bb4c8); whether the port
# realigns to that numbering is open, and nothing here settles it. If it is
# answered "match upstream" these states move, but the record still fronts all
# seven codecs either way.
record(mbbo, "$(P)$(R)Compressor")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))COMPRESSOR")
    field(ZRST, "None")
    field(ZRVL, "0")
    field(ONST, "JPEG")
    field(ONVL, "1")
    field(TWST, "Blosc")
    field(TWVL, "2")
    field(THST, "LZ4")
    field(THVL, "3")
    field(FRST, "BSLZ4")
    field(FRVL, "4")
    field(FVST, "Zlib")
    field(FVVL, "5")
    field(SXST, "LZ4HDF5")
    field(SXVL, "6")
    info(autosaveFields, "VAL")
}

record(mbbi, "$(P)$(R)Compressor_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))COMPRESSOR")
    field(ZRST, "None")
    field(ZRVL, "0")
    field(ONST, "JPEG")
    field(ONVL, "1")
    field(TWST, "Blosc")
    field(TWVL, "2")
    field(THST, "LZ4")
    field(THVL, "3")
    field(FRST, "BSLZ4")
    field(FRVL, "4")
    field(FVST, "Zlib")
    field(FVVL, "5")
    field(SXST, "LZ4HDF5")
    field(SXVL, "6")
    field(SCAN, "I/O Intr")
}

record(ai, "$(P)$(R)CompFactor_RBV")
{
    field(DTYP, "asynFloat64")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))COMP_FACTOR")
    field(EGU,  "%")
    field(PREC, "2")
    field(SCAN, "I/O Intr")
}

record(longout, "$(P)$(R)JPEGQuality")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))JPEG_QUALITY")
    field(VAL,  "85")
    field(DRVH, "100")
    field(DRVL, "1")
    info(autosaveFields, "VAL")
}

record(longin, "$(P)$(R)JPEGQuality_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))JPEG_QUALITY")
    field(SCAN, "I/O Intr")
}

record(mbbo, "$(P)$(R)BloscCompressor")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_COMPRESSOR")
    field(ZRST, "BloscLZ")
    field(ZRVL, "0")
    field(ONST, "LZ4")
    field(ONVL, "1")
    field(TWST, "LZ4HC")
    field(TWVL, "2")
    field(THST, "SNAPPY")
    field(THVL, "3")
    field(FRST, "ZLIB")
    field(FRVL, "4")
    field(FVST, "ZSTD")
    field(FVVL, "5")
    info(autosaveFields, "VAL")
}

record(mbbi, "$(P)$(R)BloscCompressor_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_COMPRESSOR")
    field(ZRST, "BloscLZ")
    field(ZRVL, "0")
    field(ONST, "LZ4")
    field(ONVL, "1")
    field(TWST, "LZ4HC")
    field(TWVL, "2")
    field(THST, "SNAPPY")
    field(THVL, "3")
    field(FRST, "ZLIB")
    field(FRVL, "4")
    field(FVST, "ZSTD")
    field(FVVL, "5")
    field(SCAN, "I/O Intr")
}

record(longout, "$(P)$(R)BloscCLevel")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_CLEVEL")
    field(VAL,  "3")
    field(DRVH, "9")
    field(DRVL, "0")
    info(autosaveFields, "VAL")
}

record(longin, "$(P)$(R)BloscCLevel_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_CLEVEL")
    field(SCAN, "I/O Intr")
}

record(mbbo, "$(P)$(R)BloscShuffle")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_SHUFFLE")
    field(ZRST, "None")
    field(ZRVL, "0")
    field(ONST, "Byte")
    field(ONVL, "1")
    field(TWST, "Bit")
    field(TWVL, "2")
    field(VAL,  "0")
    info(autosaveFields, "VAL")
}

record(mbbi, "$(P)$(R)BloscShuffle_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_SHUFFLE")
    field(ZRST, "None")
    field(ZRVL, "0")
    field(ONST, "Byte")
    field(ONVL, "1")
    field(TWST, "Bit")
    field(TWVL, "2")
    field(SCAN, "I/O Intr")
}

record(longout, "$(P)$(R)BloscNumThreads")
{
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_NUMTHREADS")
    field(VAL,  "1")
    field(DRVL, "1")
    info(autosaveFields, "VAL")
}

record(longin, "$(P)$(R)BloscNumThreads_RBV")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BLOSC_NUMTHREADS")
    field(SCAN, "I/O Intr")
}

record(mbbi, "$(P)$(R)CodecStatus")
{
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))CODEC_STATUS")
    field(ZRVL, "0")
    field(ZRST, "Success")
    field(ZRSV, "NO_ALARM")
    field(ONVL, "1")
    field(ONST, "Warning")
    field(ONSV, "MINOR")
    field(TWVL, "2")
    field(TWST, "Error")
    field(TWSV, "MAJOR")
    field(SCAN, "I/O Intr")
}

record(waveform, "$(P)$(R)CodecError")
{
    field(DTYP, "asynOctetRead")
    field(INP,  "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))CODEC_ERROR")
    field(SCAN, "I/O Intr")
    field(FTVL, "CHAR")
    field(NELM, "256")
}