#=================================================================#
# 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")
}