record(dfanout, "$(P)$(R)$(HYB):ReadChipInfo") {
    field(DESC, "Read particular chip info")
    field(VAL,  "0")
    field(OUTA, "$(P)$(R)$(HYB):ID-R.PROC 1")
    field(OUTB, "$(P)$(R)$(HYB):FwVersion-R.PROC 1")
    field(OUTC, "$(P)$(R)$(HYB):GeoPos-R.PROC 1")
}

record(stringin, "$(P)$(R)$(HYB):FwVersion-R") {
    field(DESC, "Hybrid $(HYB) Firmware version")
    field(DTYP, "asynOctetRead")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_FW_VERSION")
    field(PINI, "YES")
    field(SCAN, "I/O Intr")
}

record(bo, "$(P)$(R)$(HYB):#Enable-S") {
    field(DESC, "Global enable PV forwarder")
    field(DOL,  "$(P)$(Glob)Enable-S CP")
    field(OMSL, "closed_loop")
    field(OUT, "$(P)$(R)$(HYB):Enable-S CP")
}

record(bo, "$(P)$(R)$(HYB):Enable-S") {
    field(DESC, "Enable hybrid")
    field(DTYP, "asynInt32")
    field(ZNAM, "Disable")
    field(ONAM, "Enable")
    field(SDIS, "$(VMMPREFIX)IsAcquiring-R")
    field(PHAS, "1")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_ENABLE")
}

record(bi, "$(P)$(R)$(HYB):Enable-R") {
    field(DESC, "Enable hybrid")
    field(DTYP, "asynInt32")
    field(ZNAM, "Disabled")
    field(ONAM, "Enabled")
    field(SCAN, "1 second")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_ENABLE")
}

record(calc, "$(P)$(R)$(HYB):#CalcDISA") {
    field(DESC, "1 if (Enabled == 0) OR (LinkStatus !=4 )")
    field(INPA, "$(P)$(R)$(HYB):Enable-R CP")
    field(INPB, "$(P)$(R)$(HYB):LinkStatus-R CP")
    field(INPC, "$(VMMPREFIX)IsAcquiring-R CP")
    field(CALC, "( (A = 0)||(B # 4)||(C = 1) ) ? 1 : 0")
}

record(mbbo, "$(P)$(R)$(HYB):#Skew-S"){
    field(DESC, "Global set Skew forwarder")
    field(DOL,  "$(P)$(Glob)Skew-S CP")
    field(OMSL, "closed_loop")
    field(OUT, "$(P)$(R)$(HYB):Skew-S CP")
    field(ZRST, "0 ns")
    field(ZRVL, "0")
    field(ONST, "2.83921 ns")
    field(ONVL, "1")
    field(TWST, "5.67842 ns")
    field(TWVL, "2")
    field(THST, "8.51764 ns")
    field(THVL, "3")
    field(FRST, "11.3568 ns")
    field(FRVL, "4")
    field(FVST, "14.1961 ns")
    field(FVVL, "5")
    field(SXST, "17.0353 ns")
    field(SXVL, "6")
    field(SVST, "19.8545 ns")
    field(SVVL, "7")
    field(EIST, "22.7137 ns")
    field(EIVL, "8")
    field(NIST, "25.5529 ns")
    field(NIVL, "9")
    field(TEST, "28.3921 ns")
    field(TEVL, "10")
    field(ELST, "31.2313 ns")
    field(ELVL, "11")
    field(TVST, "34.0705 ns")
    field(TVVL, "12")
    field(TTST, "36.9098 ns")
    field(TTVL, "13")
    field(FTST, "39.749 ns")
    field(FTVL, "14")
    field(FFST, "42.5882 ns")
    field(FFVL, "15")
}

record(mbbo, "$(P)$(R)$(HYB):Skew-S"){
    field(DESC, "Hybrid's #$(HYB) Skew")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_SKEW")
    field(SDIS, "$(P)$(R)$(HYB):#CalcDISA CP")
    field(ZRST, "0 ns")
    field(ZRVL, "0")
    field(ONST, "2.83921 ns")
    field(ONVL, "1")
    field(TWST, "5.67842 ns")
    field(TWVL, "2")
    field(THST, "8.51764 ns")
    field(THVL, "3")
    field(FRST, "11.3568 ns")
    field(FRVL, "4")
    field(FVST, "14.1961 ns")
    field(FVVL, "5")
    field(SXST, "17.0353 ns")
    field(SXVL, "6")
    field(SVST, "19.8545 ns")
    field(SVVL, "7")
    field(EIST, "22.7137 ns")
    field(EIVL, "8")
    field(NIST, "25.5529 ns")
    field(NIVL, "9")
    field(TEST, "28.3921 ns")
    field(TEVL, "10")
    field(ELST, "31.2313 ns")
    field(ELVL, "11")
    field(TVST, "34.0705 ns")
    field(TVVL, "12")
    field(TTST, "36.9098 ns")
    field(TTVL, "13")
    field(FTST, "39.749 ns")
    field(FTVL, "14")
    field(FFST, "42.5882 ns")
    field(FFVL, "15")
}

record(mbbi, "$(P)$(R)$(HYB):Skew-RB"){
    field(DESC, "Hybrid's #$(HYB) Skew")
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_SKEW")
    field(ZRST, "0 ns")
    field(ZRVL, "0")
    field(ONST, "2.83921 ns")
    field(ONVL, "1")
    field(TWST, "5.67842 ns")
    field(TWVL, "2")
    field(THST, "8.51764 ns")
    field(THVL, "3")
    field(FRST, "11.3568 ns")
    field(FRVL, "4")
    field(FVST, "14.1961 ns")
    field(FVVL, "5")
    field(SXST, "17.0353 ns")
    field(SXVL, "6")
    field(SVST, "19.8545 ns")
    field(SVVL, "7")
    field(EIST, "22.7137 ns")
    field(EIVL, "8")
    field(NIST, "25.5529 ns")
    field(NIVL, "9")
    field(TEST, "28.3921 ns")
    field(TEVL, "10")
    field(ELST, "31.2313 ns")
    field(ELVL, "11")
    field(TVST, "34.0705 ns")
    field(TVVL, "12")
    field(TTST, "36.9098 ns")
    field(TTVL, "13")
    field(FTST, "39.749 ns")
    field(FTVL, "14")
    field(FFST, "42.5882 ns")
    field(FFVL, "15")
    field(SCAN, "1 second")
    field(PINI, "YES")
}

record(mbbo, "$(P)$(R)$(HYB):#Width-S"){
    field(DESC, "Global set width forwarder")
    field(DOL,  "$(P)$(Glob)Width-S CP")
    field(OMSL, "closed_loop")
    field(OUT, "$(P)$(R)$(HYB):Width-S CP")
    field(ZRST, "128 x 22.7137")
    field(ZRVL, "0")
    field(ONST, "64 x 22.7137")
    field(ONVL, "1")
    field(TWST, "32 x 22.7137")
    field(TWVL, "2")
    field(THST, "16 x 22.7137")
    field(THVL, "3")
    field(FRST, "8 x 22.7137")
    field(FRVL, "4")
    field(FVST, "4 x 22.7137")
    field(FVVL, "5")
    field(SXST, "2 x 22.7137")
    field(SXVL, "6")
    field(SVST, "1 x 22.7137")
    field(SVVL, "7")
}

record(mbbo, "$(P)$(R)$(HYB):Width-S"){
    field(DESC, "Hybrid's #$(HYB) Width")
    field(DTYP, "asynInt32")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_WIDTH")
    field(SDIS, "$(P)$(R)$(HYB):#CalcDISA CP")
    field(ZRST, "128 x 22.7137")
    field(ZRVL, "0")
    field(ONST, "64 x 22.7137")
    field(ONVL, "1")
    field(TWST, "32 x 22.7137")
    field(TWVL, "2")
    field(THST, "16 x 22.7137")
    field(THVL, "3")
    field(FRST, "8 x 22.7137")
    field(FRVL, "4")
    field(FVST, "4 x 22.7137")
    field(FVVL, "5")
    field(SXST, "2 x 22.7137")
    field(SXVL, "6")
    field(SVST, "1 x 22.7137")
    field(SVVL, "7")
}

record(mbbi, "$(P)$(R)$(HYB):Width-RB"){
    field(DESC, "Hybrid's #$(HYB) Width")
    field(DTYP, "asynInt32")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_WIDTH")
    field(PINI, "YES")
    field(ZRST, "128 x 22.7137")
    field(ZRVL, "0")
    field(ONST, "64 x 22.7137")
    field(ONVL, "1")
    field(TWST, "32 x 22.7137")
    field(TWVL, "2")
    field(THST, "16 x 22.7137")
    field(THVL, "3")
    field(FRST, "8 x 22.7137")
    field(FRVL, "4")
    field(FVST, "4 x 22.7137")
    field(FVVL, "5")
    field(SXST, "2 x 22.7137")
    field(SXVL, "6")
    field(SVST, "1 x 22.7137")
    field(SVVL, "7")
    field(SCAN, "1 second")
}

record(bo, "$(P)$(R)$(HYB):#Pol-S") {
    field(DESC, "Global set polarity forwarder")
    field(DOL,  "$(P)$(Glob)Pol-S CP")
    field(OMSL, "closed_loop")
    field(OUT,  "$(P)$(R)$(HYB):Pol-S CP")
    field(ZNAM, "positive")
    field(ONAM, "negative")
}

record(bo, "$(P)$(R)$(HYB):Pol-S") {
    field(DESC, "Hybrid's #$(HYB) Polarity")
    field(SDIS, "$(P)$(R)$(HYB):#CalcDISA CP")
    field(DTYP, "asynInt32")
    field(VAL,  "0")
    field(ZNAM, "positive")
    field(ONAM, "negative")
    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_POLARITY")
}

record(bi, "$(P)$(R)$(HYB):Pol-RB") {
    field(DESC, "Hybrid's #$(HYB) Polarity")
    field(DTYP, "asynInt32")
    field(VAL,  "0")
    field(ZNAM, "positive")
    field(ONAM, "negative")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_POLARITY")
    field(SCAN, "1 second")
    field(PINI, "YES")
}

record(stringin, "$(P)$(R)$(HYB):ID-R") {
    field(DESC, "Hybrid $(HYB) ID")
    field(DTYP, "asynOctetRead")
    field(PINI, "YES")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_ID")
    field(SCAN, "I/O Intr")
}

record(stringin, "$(P)$(R)$(HYB):GeoPos-R") {
    field(DESC, "Hybrid $(HYB) Geo Position")
    field(DTYP, "asynOctetRead")
    field(PINI, "YES")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_GEOPOS")
    field(SCAN, "I/O Intr")
}

record(mbbi, "$(P)$(R)$(HYB):LinkStatus-R") {
    field(DESC, "Hybrid $(HYB) Link Status")
    field(PINI, "YES")
    field(DTYP, "asynInt32")
    field(ZRST, "not connected")
    field(ZRVL, "0")
    field(ONST, "start alignment")
    field(ONVL, "1")
    field(TWST, "align")
    field(TWVL, "2")
    field(THST, "link")
    field(THVL, "3")
    field(FRST, "idle")
    field(FRVL, "4")
    field(FVST, "acq")
    field(FVVL, "5")
    field(SCAN, ".5 second")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_LINK_STATUS")
}