Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • icshwi/adsis8300bcm
  • julianomurari/adsis8300bcm
  • saeedhaghtalab/adsis8300bcm
  • beam-diagnostics/bde/modules/adsis8300bcm
4 results
Show changes
Commits on Source (47)
Showing
with 1009 additions and 119 deletions
# Beam Current Monitor module CHANGELOG
## 0.9.14
- [ PBIBCM-241 ](https://jira.esss.lu.se/browse/PBIBCM-241) Add differential interlock enable/disable
- [ PBIBCM-243 ](https://jira.esss.lu.se/browse/PBIBCM-243) Add range limit to Fast and Medium Window Width
- [ ICSHWI-19374](https://jira.esss.lu.se/browse/ICSHWI-19374) Fix PV security access ASG fields
## 0.9.13
- [ PBIBCM-236 ](https://jira.esss.lu.se/browse/PBIBCM-236) Increase medium speed diff moving averager
## 0.9.12
- [ PBIBCM-209 ](https://jira.esss.lu.se/browse/PBIBCM-209) Extend options of Trigger Source PVs
- [ PBIBCM-143 ](https://jira.esss.lu.se/browse/PBIBCM-143) Add Leaky Integrator
- [ PBIBCM-213 ](https://jira.esss.lu.se/browse/PBIBCM-213) Fix timestamp discrepancy
- [ PBIBCM-215 ](https://jira.esss.lu.se/browse/PBIBCM-215) Add autosave to LUT PVs (+ changes on st.cmd file)
- [ ICSHWI-9569](https://jira.esss.lu.se/browse/ICSHWI-9569) Fix error log on setting AdcScale with auto calibration
- [ PBIBCM-211 ](https://jira.esss.lu.se/browse/PBIBCM-211) Fiber Optic PVs
- [ PBIBCM-217 ](https://jira.esss.lu.se/browse/PBIBCM-217) Flattop ROI automatic mode
- [ PBIBCM-227 ](https://jira.esss.lu.se/browse/PBIBCM-227) Fix Droop Rate and Adc Scale calculation
- [ PBIBCM-225 ](https://jira.esss.lu.se/browse/PBIBCM-225) Fix AlarmControl PV issue
- [ PBIBCM-228 ](https://jira.esss.lu.se/browse/PBIBCM-228) Add auxiliary upper/lower/hysteresis threshold PVs
- [ PBIBCM-223 ](https://jira.esss.lu.se/browse/PBIBCM-223) Add beam absence signals per ACCT channel
## 0.9.11
- [ PBIBCM-146 ](https://jira.esss.lu.se/browse/PBIBCM-146) Add crate ID PV
- [ PBIBCM-152 ](https://jira.esss.lu.se/browse/PBIBCM-152) Auto-calibrator
- [ PBIBCM-200 ](https://jira.esss.lu.se/browse/PBIBCM-200) Remove restricted access from ROI PVs
- [ PBIBCM-201 ](https://jira.esss.lu.se/browse/PBIBCM-201) Define more discrete signals on probe channel 4
- [ PBIBCM-206 ](https://jira.esss.lu.se/browse/PBIBCM-206) Add pulse width filter length PV
- [ PBIBCM-207 ](https://jira.esss.lu.se/browse/PBIBCM-207) Independent beam exist threshold for each channel
## 0.9.10
- [ PBIBCM-195 ](https://jira.esss.lu.se/browse/PBIBCM-195) Add BeamOverThreshold PV as critical
- [ ICSHWI-5688](https://jira.esss.lu.se/browse/ICSHWI-5688) Remove NumSamples per channel from autosave
## 0.9.9
- [ PBIBCM-189 ](https://jira.esss.lu.se/browse/PBIBCM-189) Add LUT PVs for MinTriggerPeriod
- [ PBIBCM-190 ](https://jira.esss.lu.se/browse/PBIBCM-190) Add ACCT beam exists PVs
## 0.9.8
- [ PBIBCM-188 ](https://jira.esss.lu.se/browse/PBIBCM-188) Fix MinTriggerPeriod readback parameter type
## 0.9.7
- [ PBIBCM-185 ](https://jira.esss.lu.se/browse/PBIBCM-185) Add High Voltage Presence and OK signals
## 0.9.6
- [ CAP-26 ](https://jira.esss.lu.se/browse/CAP-26) Add access security
## 0.9.5
- [ PBIBCM-183 ](https://jira.esss.lu.se/browse/PBIBCM-183) Update minimum value of MinTriggerPeriod
## 0.9.4
- [ PBIBCM-178 ](https://jira.esss.lu.se/browse/PBIBCM-178) Update resolution of trigger repetition rate threshold
## 0.9.3
- [ PBIBCM-174 ](https://jira.esss.lu.se/browse/PBIBCM-174) Update measured trigger width window to 32-bit
......@@ -39,7 +39,7 @@ record(mbbo, "$(P)$(R)TriggerSource")
field(TEST, "BackPlane8")
field(PINI, "YES")
field(VAL, "3")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -106,7 +106,7 @@ record(ao, "$(P)$(R)AdcScale")
field(PREC, "5")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -122,9 +122,10 @@ record(calcout, "$(P)$(R)AdcScaleCalc")
{
field(INPA, "$(P)$(R)CalibrationSample1R")
field(INPB, "$(P)$(R)CalibrationSample2R")
field(INPC, "$(P_BCM=$(P))$(R)CalibrationActualCurrent")
field(INPD, "$(P_BCM=$(P))$(R)CalibrationPulseCounter CPP")
field(CALC, "(163.84*C) / (B-A)")
field(INPC, "$(P)$(R)CalibrationSample3R")
field(INPD, "$(P_BCM=$(P))$(R)CalibrationActualCurrent")
field(INPE, "$(P_BCM=$(P))$(R)CalibrationPulseCounter CPP")
field(CALC, "(163.84*D) / (1.125*B-A-0.125*C)")
field(FLNK, "$(P)$(R)AdcScaleCalcCheck.PROC")
}
......@@ -142,7 +143,7 @@ record(longout, "$(P)$(R)AdcOffset")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.ADC_OFFSET")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -212,7 +213,7 @@ record(ao, "$(P)$(R)FineDelay")
field(DRVL, "-11000.0")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -235,7 +236,7 @@ record(ao, "$(P)$(R)DroopRate")
field(DRVL, "0.0")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -250,10 +251,21 @@ record(ai, "$(P)$(R)DroopRateR")
record(calcout, "$(P)$(R)DroopRateCalc")
{
field(INPA, "$(P)$(R)CalibrationSample1R")
field(INPB, "$(P)$(R)CalibrationSample2R")
field(INPC, "$(P)$(R)CalibrationSample3R")
field(INPD, "$(P_BCM=$(P))$(R)CalibrationPulseCounter CPP")
field(CALC, "100*(B-C) / (2.86*B)")
field(CALC, "100*(B-C) / (2.4*(B-A))")
field(FLNK, "$(P)$(R)DroopRateCalcCheck.PROC")
}
record(calcout, "$(P)$(R)DroopRateCalcCheck")
{
field(INPA, "$(P)$(R)DroopRateCalc")
field(CALC, "(0 <= A) AND (A <= 5) ? 1 : 0")
field(OOPT, "When Non-zero")
field(OCAL, "A")
field(DOPT, "Use OCAL")
field(OUT, "$(P)$(R)DroopRate PP")
}
......@@ -265,7 +277,7 @@ record(bo, "$(P)$(R)DroopCompensating")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -276,7 +288,7 @@ record(bi, "$(P)$(R)DroopCompensatingR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)NoiseFiltering")
......@@ -287,7 +299,7 @@ record(bo, "$(P)$(R)NoiseFiltering")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -298,7 +310,7 @@ record(bi, "$(P)$(R)NoiseFilteringR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)BaseliningBefore")
......@@ -309,7 +321,7 @@ record(bo, "$(P)$(R)BaseliningBefore")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -320,7 +332,7 @@ record(bi, "$(P)$(R)BaseliningBeforeR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)BaseliningAfter")
......@@ -331,7 +343,7 @@ record(bo, "$(P)$(R)BaseliningAfter")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -342,7 +354,7 @@ record(bi, "$(P)$(R)BaseliningAfterR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)DcBlocking")
......@@ -353,7 +365,7 @@ record(bo, "$(P)$(R)DcBlocking")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -364,7 +376,7 @@ record(bi, "$(P)$(R)DcBlockingR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(ao, "$(P)$(R)UpperThreshold")
......@@ -375,7 +387,7 @@ record(ao, "$(P)$(R)UpperThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -396,7 +408,7 @@ record(ao, "$(P)$(R)LowerThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -417,7 +429,7 @@ record(ao, "$(P)$(R)ErrantThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -438,7 +450,7 @@ record(bo, "$(P)$(R)AlarmUpperControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -449,7 +461,7 @@ record(bi, "$(P)$(R)AlarmUpperControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmLowerControl")
......@@ -460,7 +472,7 @@ record(bo, "$(P)$(R)AlarmLowerControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -471,7 +483,7 @@ record(bi, "$(P)$(R)AlarmLowerControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmErrantControl")
......@@ -482,7 +494,7 @@ record(bo, "$(P)$(R)AlarmErrantControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -493,7 +505,7 @@ record(bi, "$(P)$(R)AlarmErrantControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmTriggerControl")
......@@ -504,7 +516,7 @@ record(bo, "$(P)$(R)AlarmTriggerControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -515,7 +527,7 @@ record(bi, "$(P)$(R)AlarmTriggerControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmLimitControl")
......@@ -526,7 +538,7 @@ record(bo, "$(P)$(R)AlarmLimitControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -537,7 +549,7 @@ record(bi, "$(P)$(R)AlarmLimitControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmAdcOverflowControl")
......@@ -548,7 +560,7 @@ record(bo, "$(P)$(R)AlarmAdcOverflowControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -559,7 +571,7 @@ record(bi, "$(P)$(R)AlarmAdcOverflowControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmAdcUnderflowControl")
......@@ -570,7 +582,7 @@ record(bo, "$(P)$(R)AlarmAdcUnderflowControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -581,7 +593,7 @@ record(bi, "$(P)$(R)AlarmAdcUnderflowControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmAdcStuckControl")
......@@ -592,7 +604,7 @@ record(bo, "$(P)$(R)AlarmAdcStuckControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -603,7 +615,7 @@ record(bi, "$(P)$(R)AlarmAdcStuckControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmAiuFaultControl")
......@@ -614,7 +626,7 @@ record(bo, "$(P)$(R)AlarmAiuFaultControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -625,7 +637,7 @@ record(bi, "$(P)$(R)AlarmAiuFaultControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)AlarmChargeTooHighControl")
......@@ -636,7 +648,7 @@ record(bo, "$(P)$(R)AlarmChargeTooHighControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -647,7 +659,7 @@ record(bi, "$(P)$(R)AlarmChargeTooHighControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bi, "$(P)$(R)AlarmUpperHoldR")
......@@ -1044,7 +1056,7 @@ record(longout, "$(P)$(R)MaxPulseLength")
field(EGU, "us")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(longin, "$(P)$(R)MaxPulseLengthR")
......@@ -1063,7 +1075,7 @@ record(ao, "$(P)$(R)LowerWindowStart")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1084,7 +1096,7 @@ record(ao, "$(P)$(R)LowerWindowEnd")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1105,7 +1117,7 @@ record(ao, "$(P)$(R)ErrantWindowStart")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1126,7 +1138,7 @@ record(ao, "$(P)$(R)ErrantWindowEnd")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1171,6 +1183,66 @@ record(ai, "$(P)$(R)CalibrationSample4R")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)AuxUpperThreshold")
{
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_UPPER_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(DRVH, "1.0")
field(DRVL, "-1.0")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(ai, "$(P)$(R)AuxUpperThresholdR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_UPPER_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)AuxLowerThreshold")
{
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_LOWER_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(DRVH, "1.0")
field(DRVL, "-1.0")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(ai, "$(P)$(R)AuxLowerThresholdR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_LOWER_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)AuxHysteresisThreshold")
{
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_HYSTERESIS_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(DRVH, "1.0")
field(DRVL, "-1.0")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(ai, "$(P)$(R)AuxHysteresisThresholdR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUX_HYSTERESIS_THRESHOLD")
field(EGU, "V")
field(PREC, "4")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)BeamOverThreshold")
{
field(DTYP, "asynFloat64")
......@@ -1180,7 +1252,7 @@ record(ao, "$(P)$(R)BeamOverThreshold")
field(DRVH, "63.0")
field(DRVL, "-63.0")
field(VAL, "3.0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1193,6 +1265,77 @@ record(ai, "$(P)$(R)BeamOverThresholdR")
field(SCAN, "I/O Intr")
}
record(ai, "$(P)$(R)TriggerWidthR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.TRIGGER_WIDTH")
field(EGU, "ms")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)AutoFlatTopStart")
{
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_START")
field(EGU, "ns")
field(PREC, "0")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(ai, "$(P)$(R)AutoFlatTopStartR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_START")
field(EGU, "ns")
field(PREC, "0")
field(SCAN, "I/O Intr")
}
record(ao, "$(P)$(R)AutoFlatTopEnd")
{
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_END")
field(EGU, "ns")
field(PREC, "0")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(ai, "$(P)$(R)AutoFlatTopEndR")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_END")
field(EGU, "ns")
field(PREC, "0")
field(SCAN, "I/O Intr")
}
record(bo, "$(P)$(R)AutoFlatTopEnable")
{
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_ENABLE")
field(ZNAM, "Disable")
field(ONAM, "Enable")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(bi, "$(P)$(R)AutoFlatTopEnableR")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.AUTO_FLATTOP_ENABLE")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
field(SCAN, "I/O Intr")
}
record(ai, "$(P)$(R)LICoefficientR")
{
field(DTYP, "asynFloat64")
......@@ -1208,7 +1351,7 @@ record(ao, "$(P)$(R)LICoefficient")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.LEAKY_INTEGRATOR_COEFFICIENT")
field(EGU, "ms")
field(PREC, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -1227,8 +1370,25 @@ record(ao, "$(P)$(R)LIThreshold")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.LEAKY_INTEGRATOR_THRESHOLD")
field(EGU, "nC")
field(PREC, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(bo, "$(P)$(R)BeamAbsenceMask")
{
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.BEAM_ABSENCE")
field(ZNAM, "Disable")
field(ONAM, "Enable")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(bi, "$(P)$(R)BeamAbsenceMaskR")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACCT.BEAM_ABSENCE")
field(SCAN, "I/O Intr")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
......@@ -17,7 +17,7 @@ record(longout, "$(P)$(R)MemoryAddress")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACQCFG.MEMORY_ADDRESS")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -49,7 +49,7 @@ record(longout, "$(P)$(R)FractionBits")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ACQCFG.FRACTION_BITS")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -67,7 +67,7 @@ record(ao, "$(P)$(R)Factor")
field(PREC, "3")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -86,7 +86,7 @@ record(ao, "$(P)$(R)Offset")
field(PREC, "3")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -124,7 +124,7 @@ record(bo, "$(P)$(R)Scaling")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -135,7 +135,7 @@ record(bi, "$(P)$(R)ScalingR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)Converting")
......@@ -146,7 +146,7 @@ record(bo, "$(P)$(R)Converting")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -157,7 +157,7 @@ record(bi, "$(P)$(R)ConvertingR")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bo, "$(P)$(R)Recording")
......
record(bo, "$(P)$(R)Lut$(N)InterlockEnable")
{
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.LUT$(N).INTERLOCK_ENABLE")
field(ZNAM, "Disable")
field(ONAM, "Enable")
field(VAL, "0")
field(ASG, "critical")
info(autosaveFields, "VAL")
}
record(bi, "$(P)$(R)Lut$(N)InterlockEnableR")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.LUT$(N).INTERLOCK_ENABLE")
field(SCAN, "I/O Intr")
field(ZNAM, "Disabled")
field(ONAM, "Enabled")
}
file sis8300bcm-diff-lut-interlock.template
{
pattern { P, R, ADDR N }
{ $(P), $(R), $(ADDR), 0 }
{ $(P), $(R), $(ADDR), 1 }
{ $(P), $(R), $(ADDR), 2 }
{ $(P), $(R), $(ADDR), 3 }
{ $(P), $(R), $(ADDR), 4 }
{ $(P), $(R), $(ADDR), 5 }
{ $(P), $(R), $(ADDR), 6 }
{ $(P), $(R), $(ADDR), 7 }
{ $(P), $(R), $(ADDR), 8 }
{ $(P), $(R), $(ADDR), 9 }
{ $(P), $(R), $(ADDR), 10 }
{ $(P), $(R), $(ADDR), 11 }
{ $(P), $(R), $(ADDR), 12 }
{ $(P), $(R), $(ADDR), 13 }
{ $(P), $(R), $(ADDR), 14 }
{ $(P), $(R), $(ADDR), 15 }
}
......@@ -41,7 +41,7 @@ record(mbbo, "$(P)$(R)SourceA")
field(ELST, "Fiber 2")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -106,7 +106,7 @@ record(mbbo, "$(P)$(R)SourceB")
field(ELST, "Fiber 2")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -151,7 +151,7 @@ record(ao, "$(P)$(R)Delay")
field(DRVL, "-11000.0")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -175,7 +175,7 @@ record(ao, "$(P)$(R)FastThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -214,7 +214,7 @@ record(bo, "$(P)$(R)AlarmFastControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -265,7 +265,7 @@ record(ao, "$(P)$(R)MediumThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -304,7 +304,7 @@ record(bo, "$(P)$(R)AlarmMediumControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -355,7 +355,7 @@ record(ao, "$(P)$(R)SlowThreshold")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -394,7 +394,7 @@ record(bo, "$(P)$(R)AlarmSlowControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -445,7 +445,7 @@ record(ao, "$(P)$(R)RisingWindowStart")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -466,7 +466,7 @@ record(ao, "$(P)$(R)RisingWindowEnd")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -487,7 +487,7 @@ record(ao, "$(P)$(R)FallingWindowStart")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -508,7 +508,7 @@ record(ao, "$(P)$(R)FallingWindowEnd")
field(PREC, "4")
field(VAL, "0.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -529,7 +529,7 @@ record(bo, "$(P)$(R)WsBetween")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -550,7 +550,7 @@ record(bo, "$(P)$(R)EmuBetween")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -571,7 +571,7 @@ record(bo, "$(P)$(R)RfqBetween")
field(ONAM, "Yes")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -590,9 +590,11 @@ record(ao, "$(P)$(R)FastWindowWidth")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.DIFF.FAST_WINDOW_WIDTH")
field(EGU, "ns")
field(PREC, "4")
field(VAL, "23.0")
field(DRVH, "2900.0")
field(DRVL, "30.0")
field(VAL, "30.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -611,9 +613,11 @@ record(ao, "$(P)$(R)MediumWindowWidth")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.DIFF.MEDIUM_WINDOW_WIDTH")
field(EGU, "us")
field(PREC, "4")
field(DRVH, "65000.0")
field(DRVL, "2.0")
field(VAL, "2.0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -660,7 +664,7 @@ record(ao, "$(P)$(R)LICoefficient")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.DIFF.LEAKY_INTEGRATOR_COEFFICIENT")
field(EGU, "ms")
field(PREC, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -679,7 +683,7 @@ record(ao, "$(P)$(R)LIThreshold")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.DIFF.LEAKY_INTEGRATOR_THRESHOLD")
field(EGU, "nC")
field(PREC, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -691,7 +695,7 @@ record(bo, "$(P)$(R)AlarmLIControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -731,3 +735,12 @@ record(bi, "$(P)$(R)AlarmLIDirectR")
field(SCAN, "I/O Intr")
}
record(bi, "$(P)$(R)InterlockEnableR")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.DIFF.INTERLOCK_ENABLE")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
}
......@@ -29,7 +29,7 @@ record(mbbo, "$(P)$(R)OutDataSelect")
field(EIST, "ACCT Ch09")
field(NIVL, "9")
field(NIST, "ACCT Ch10")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -68,7 +68,7 @@ record(bo, "$(P)$(R)OutDataEnable")
field(ONAM, "Enabled")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
record(bi, "$(P)$(R)OutDataEnableR")
......@@ -132,5 +132,5 @@ record(bo, "$(P)$(R)Reset")
field(ZNAM, "No")
field(ONAM, "Yes")
field(HIGH, "1")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
......@@ -11,7 +11,7 @@ record(longout, "$(P)$(R)Lut$(N)MaxPulseLength")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.LUT$(N).MAX_PULSE_LENGTH")
field(EGU, "us")
field(VAL, "0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -30,7 +30,7 @@ record(ao, "$(P)$(R)Lut$(N)LowerThreshold")
field(EGU, "mA")
field(PREC, "4")
field(VAL, "0.0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -50,7 +50,7 @@ record(ao, "$(P)$(R)Lut$(N)UpperThreshold")
field(EGU, "mA")
field(PREC, "4")
field(VAL, "0.0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -70,7 +70,7 @@ record(bo, "$(P)$(R)Lut$(N)BeamExists")
field(ZNAM, "No")
field(ONAM, "Yes")
field(VAL, "0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......
......@@ -16,8 +16,98 @@ record(longout, "$(P)$(R)Lut$(N)ModeID")
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.LUT$(N).MODE_ID")
field(VAL, "0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFieldsLutIDs, "VAL")
field(FLNK, "$(P)$(R)Lut$(N)ModeIDSeq.PROC PP MS")
}
# Mode ID will trigger writing update on:
# 1 - Minimum Repetition Period
# 2 - Upper Threshold (per ACCT channel)
# 3 - Lower Threshold (per ACCT channel)
# 4 - Max Pulse Length (per ACCT channel)
record(seq, "$(P)$(R)Lut$(N)ModeIDSeq")
{
field(DOL1, "1")
field(LNK1, "$(P)$(R)Lut$(N)MinTriggerPeriod.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(P)$(R)Lut$(N)AcctUpperThresholdSeq.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(P)$(R)Lut$(N)AcctLowerThresholdSeq.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(P)$(R)Lut$(N)AcctMaxPulseLengthSeq.PROC PP MS")
}
record(seq, "$(P)$(R)Lut$(N)AcctUpperThresholdSeq")
{
field(DOL1, "1")
field(LNK1, "$(SYSTEM1_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(SYSTEM2_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(SYSTEM3_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(SYSTEM4_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL5, "1")
field(LNK5, "$(SYSTEM5_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL6, "1")
field(LNK6, "$(SYSTEM6_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL7, "1")
field(LNK7, "$(SYSTEM7_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL8, "1")
field(LNK8, "$(SYSTEM8_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOL9, "1")
field(LNK9, "$(SYSTEM9_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
field(DOLA, "1")
field(LNKA, "$(SYSTEM10_PREFIX)Lut$(N)UpperThreshold.PROC PP MS")
}
record(seq, "$(P)$(R)Lut$(N)AcctLowerThresholdSeq")
{
field(DOL1, "1")
field(LNK1, "$(SYSTEM1_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(SYSTEM2_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(SYSTEM3_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(SYSTEM4_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL5, "1")
field(LNK5, "$(SYSTEM5_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL6, "1")
field(LNK6, "$(SYSTEM6_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL7, "1")
field(LNK7, "$(SYSTEM7_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL8, "1")
field(LNK8, "$(SYSTEM8_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOL9, "1")
field(LNK9, "$(SYSTEM9_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
field(DOLA, "1")
field(LNKA, "$(SYSTEM10_PREFIX)Lut$(N)LowerThreshold.PROC PP MS")
}
record(seq, "$(P)$(R)Lut$(N)AcctMaxPulseLengthSeq")
{
field(DOL1, "1")
field(LNK1, "$(SYSTEM1_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(SYSTEM2_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(SYSTEM3_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(SYSTEM4_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL5, "1")
field(LNK5, "$(SYSTEM5_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL6, "1")
field(LNK6, "$(SYSTEM6_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL7, "1")
field(LNK7, "$(SYSTEM7_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL8, "1")
field(LNK8, "$(SYSTEM8_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOL9, "1")
field(LNK9, "$(SYSTEM9_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
field(DOLA, "1")
field(LNKA, "$(SYSTEM10_PREFIX)Lut$(N)MaxPulseLength.PROC PP MS")
}
record(longin, "$(P)$(R)Lut$(N)ModeIDR")
......@@ -38,8 +128,68 @@ record(longout, "$(P)$(R)Lut$(N)DestinationID")
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.LUT$(N).DEST_ID")
field(VAL, "0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFieldsLutIDs, "VAL")
field(FLNK, "$(P)$(R)Lut$(N)DestinationIDSeq.PROC PP MS")
}
# Destination ID will trigger writing update
# on both Differential LUT Interlock Enable
# and ACCT LUT Beam Exists PVs
record(seq, "$(P)$(R)Lut$(N)DestinationIDSeq")
{
field(DOL1, "1")
field(LNK1, "$(P)$(R)Lut$(N)DiffInterlockEnableSeq.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(P)$(R)Lut$(N)AcctBeamExistsSeq.PROC PP MS")
}
record(seq, "$(P)$(R)Lut$(N)DiffInterlockEnableSeq")
{
field(DOL1, "1")
field(LNK1, "$(P)$(R)DF1-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(P)$(R)DF2-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(P)$(R)DF3-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(P)$(R)DF4-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL5, "1")
field(LNK5, "$(P)$(R)DF5-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL6, "1")
field(LNK6, "$(P)$(R)DF6-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL7, "1")
field(LNK7, "$(P)$(R)DF7-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL8, "1")
field(LNK8, "$(P)$(R)DF8-Lut$(N)InterlockEnable.PROC PP MS")
field(DOL9, "1")
field(LNK9, "$(P)$(R)DF9-Lut$(N)InterlockEnable.PROC PP MS")
field(DOLA, "1")
field(LNKA, "$(P)$(R)DF10-Lut$(N)InterlockEnable.PROC PP MS")
}
record(seq, "$(P)$(R)Lut$(N)AcctBeamExistsSeq")
{
field(DOL1, "1")
field(LNK1, "$(SYSTEM1_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL2, "1")
field(LNK2, "$(SYSTEM2_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL3, "1")
field(LNK3, "$(SYSTEM3_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL4, "1")
field(LNK4, "$(SYSTEM4_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL5, "1")
field(LNK5, "$(SYSTEM5_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL6, "1")
field(LNK6, "$(SYSTEM6_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL7, "1")
field(LNK7, "$(SYSTEM7_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL8, "1")
field(LNK8, "$(SYSTEM8_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOL9, "1")
field(LNK9, "$(SYSTEM9_PREFIX)Lut$(N)BeamExists.PROC PP MS")
field(DOLA, "1")
field(LNKA, "$(SYSTEM10_PREFIX)Lut$(N)BeamExists.PROC PP MS")
}
record(longin, "$(P)$(R)Lut$(N)DestinationIDR")
......@@ -56,7 +206,7 @@ record(ao, "$(P)$(R)Lut$(N)MinTriggerPeriod")
field(EGU, "ms")
field(PREC, "4")
field(VAL, "0.0")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......
......@@ -34,7 +34,7 @@ record(mbbo, "$(P)$(R)AcquisitionTriggerSource")
field(TEST, "BackPlane8")
field(PINI, "YES")
field(VAL, "3")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -95,7 +95,7 @@ record(mbbo, "$(P)$(R)BeamTriggerSource")
field(TEST, "BackPlane8")
field(PINI, "YES")
field(VAL, "3")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -132,14 +132,14 @@ record(mbbo, "$(P)$(R)ClockSource")
{
# select backplane A
field(VAL, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(longout, "$(P)$(R)CrateID")
{
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.CRATE_ID")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -156,7 +156,7 @@ record(ao, "$(P)$(R)PulseWidthFilter")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.PULSE_WIDTH_FILTER")
field(EGU, "us")
field(PREC, "4")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -230,7 +230,7 @@ record(ao, "$(P)$(R)MinTriggerPeriod")
field(DRVH, "65000.0")
field(VAL, "71")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -252,7 +252,7 @@ record(longout, "$(P)$(R)MaxPulseWidth")
field(DRVH, "8191")
field(VAL, "5")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -554,6 +554,15 @@ record(bi, "$(P)$(R)AlarmLUTMinTriggerPeriodDirectR")
field(SCAN, "I/O Intr")
}
record(bi, "$(P)$(R)AlarmDiffLUTDestinationModeDirectR")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BCM.ALARM.DIFF_LUT_DESTINATION_MODE_DIRECT")
field(ZNAM, "No")
field(ONAM, "Yes")
field(SCAN, "I/O Intr")
}
record(bi, "$(P)$(R)MainClockMissingR")
{
field(DTYP, "asynInt32")
......@@ -580,7 +589,7 @@ record(bo, "$(P)$(R)Ready")
field(ONAM, "OK")
field(VAL, "0")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bi, "$(P)$(R)ReadyR")
......@@ -600,7 +609,7 @@ record(bo, "$(P)$(R)LutControl")
field(ONAM, "Disable")
field(VAL, "1")
field(PINI, "YES")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -611,7 +620,7 @@ record(bi, "$(P)$(R)LutControlR")
field(ZNAM, "Enabled")
field(ONAM, "Disabled")
field(SCAN, "I/O Intr")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(bi, "$(P)$(R)ReadyFPGAR")
......@@ -658,7 +667,7 @@ record(bo, "$(P)$(R)EnableCalibrationPulse")
field(ONAM, "Enable")
field(HIGH, "1")
field(VAL, "0")
field(ASG, "critical")
field(ASG, "bcm-critical")
}
record(calcout, "$(P)$(R)CalibrationPulseMonitor")
......@@ -674,14 +683,13 @@ record(calc, "$(P)$(R)CalibrationPulseCounter")
{
field(INPA, "$(P)$(R)CalibrationPulseCounter")
field(CALC, "A + 1")
field(VAL, "-1")
field(PINI, "YES")
field(VAL, "0")
}
record(ao, "$(P)$(R)CalibrationActualCurrent")
{
field(PREC, "4")
field(EGU, "mA")
field(ASG, "critical")
field(ASG, "bcm-critical")
info(autosaveFields, "VAL")
}
......@@ -172,6 +172,7 @@ sis8300bcm::sis8300bcm(const char *portName, const char *devicePath,
createParam(BCMAlarmTriggerTooNarrowDirectString, asynParamInt32, &BCMAlarmTriggerTooNarrowDirect);
createParam(BCMAlarmTriggerPeriodTooShortDirectString, asynParamInt32, &BCMAlarmTriggerPeriodTooShortDirect);
createParam(BCMAlarmLUTMinTriggerPeriodDirectString, asynParamInt32, &BCMAlarmLUTMinTriggerPeriodDirect);
createParam(BCMAlarmDiffLUTDestinationModeDirectString, asynParamInt32, &BCMAlarmDiffLUTDestinationModeDirect);
createParam(BCMMainClockMissingString, asynParamInt32, &BCMMainClockMissing);
createParam(BCMAuxiliaryClockMissingString, asynParamInt32, &BCMAuxiliaryClockMissing);
createParam(BCMReadyString, asynParamInt32, &BCMReady);
......@@ -267,9 +268,17 @@ sis8300bcm::sis8300bcm(const char *portName, const char *devicePath,
createParam(BCMAcctCalibrationSample2String, asynParamFloat64, &BCMAcctCalibrationSample2);
createParam(BCMAcctCalibrationSample3String, asynParamFloat64, &BCMAcctCalibrationSample3);
createParam(BCMAcctCalibrationSample4String, asynParamFloat64, &BCMAcctCalibrationSample4);
createParam(BCMAcctAuxUpperThresholdString, asynParamFloat64, &BCMAcctAuxUpperThreshold);
createParam(BCMAcctAuxLowerThresholdString, asynParamFloat64, &BCMAcctAuxLowerThreshold);
createParam(BCMAcctAuxHysteresisThresholdString, asynParamFloat64, &BCMAcctAuxHysteresisThreshold);
createParam(BCMAcctBeamAboveThresholdString, asynParamFloat64, &BCMAcctBeamAboveThreshold);
createParam(BCMAcctLeakyCoefficientString, asynParamFloat64, &BCMAcctLeakyCoefficient);
createParam(BCMAcctLeakyThresholdString, asynParamFloat64, &BCMAcctLeakyThreshold);
createParam(BCMAcctTriggerWidthString, asynParamFloat64, &BCMAcctTriggerWidth);
createParam(BCMAcctAutoFlatTopStartString, asynParamFloat64, &BCMAcctAutoFlatTopStart);
createParam(BCMAcctAutoFlatTopEndString, asynParamFloat64, &BCMAcctAutoFlatTopEnd);
createParam(BCMAcctAutoFlatTopEnableString, asynParamInt32, &BCMAcctAutoFlatTopEnable);
createParam(BCMAcctBeamAbsenceString, asynParamInt32, &BCMAcctBeamAbsence);
// DIFF block, channel specific
createParam(BCMDiffSourceAString, asynParamInt32, &BCMDiffSourceA);
createParam(BCMDiffSourceBString, asynParamInt32, &BCMDiffSourceB);
......@@ -312,6 +321,7 @@ sis8300bcm::sis8300bcm(const char *portName, const char *devicePath,
createParam(BCMDiffAlarmLeakyHoldString, asynParamInt32, &BCMDiffAlarmLeakyHold);
createParam(BCMDiffAlarmLeakyFirstString, asynParamInt32, &BCMDiffAlarmLeakyFirst);
createParam(BCMDiffAlarmLeakyDirectString, asynParamInt32, &BCMDiffAlarmLeakyDirect);
createParam(BCMDiffInterlockEnableString, asynParamInt32, &BCMDiffInterlockEnable);
// PROBE block, channel specific
createParam(BCMProbeChannelString, asynParamInt32, &BCMProbeChannel);
createParam(BCMProbeSourceString, asynParamInt32, &BCMProbeSource);
......@@ -354,7 +364,11 @@ sis8300bcm::sis8300bcm(const char *portName, const char *devicePath,
snprintf(buf, 254, BCMLutMinTriggerPeriodString, i);
createParam(buf, asynParamFloat64, &BCMLutMinTriggerPeriod[i]);
}
for (int i = 0; i < BCM_LUT_SIZE; i++) {
snprintf(buf, 254, BCMLutInterlockEnableString, i);
createParam(buf, asynParamInt32, &BCMLutInterlockEnable[i]);
}
int ret = initDevice();
if (ret) {
asynPrintError(pasynUserSelf, "initialization FAILED");
......@@ -557,6 +571,45 @@ int sis8300bcm::setupLUTmasking(int function)
return ret;
}
int sis8300bcm::setupLUTinterlockEnable(int function)
{
int index = -1;
// find the LUT index by looking at the parameter function value
for (int i = 0; i < BCM_LUT_SIZE; i++) {
asynPrintDeviceInfo(pasynUserSelf, "LUT %d, want %d, have %d", i, function, BCMLutInterlockEnable[i]);
if (BCMLutInterlockEnable[i] == function) {
index = i;
break;
}
}
if (index == -1) {
asynPrintError(pasynUserSelf, "Invalid LUT index, function was %d", function);
return -1;
}
int dest;
int enable;
unsigned int mask;
getIntegerParam(BCMLutDestinationID[index], &dest);
mask = 0;
for (int addr = 0; addr < SIS8300BCM_NUM_DIFF_CHANNELS; addr++) {
getIntegerParam(addr, BCMLutInterlockEnable[index], &enable);
if (enable) {
mask |= (1 << addr);
}
}
asynPrintDeviceInfo(pasynUserSelf, "LUT %d: destination %d, interlock enable mask %04X", index, dest, mask);
int ret = sis8300drvbcm_set_lut_interlock_enable(mDeviceHandle, index, dest, mask);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_set_lut_interlock_enable returned %d", ret);
return ret;
}
return ret;
}
// perform (read/write) FPGA register readback *before* the acquisition start
// note that (read-only) FPGA register readout is performed *after* the acquisition ends
int sis8300bcm::readbackParameters()
......@@ -901,6 +954,27 @@ int sis8300bcm::readbackParameters()
}
setDoubleParam(addr, BCMAcctCalibrationSample4, doubleValue);
ret = sis8300drvbcm_get_channel_aux_upper_threshold(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_aux_upper_threshold returned %d", ret);
return ret;
}
setDoubleParam(addr, BCMAcctAuxUpperThreshold, doubleValue);
ret = sis8300drvbcm_get_channel_aux_lower_threshold(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_aux_lower_threshold returned %d", ret);
return ret;
}
setDoubleParam(addr, BCMAcctAuxLowerThreshold, doubleValue);
ret = sis8300drvbcm_get_channel_aux_hysteresis_threshold(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_aux_hysteresis_threshold returned %d", ret);
return ret;
}
setDoubleParam(addr, BCMAcctAuxHysteresisThreshold, doubleValue);
ret = sis8300drvbcm_get_channel_beam_above_threshold(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_beam_above_threshold returned %d", ret);
......@@ -922,6 +996,24 @@ int sis8300bcm::readbackParameters()
}
setDoubleParam(addr, BCMAcctLeakyThreshold, doubleValue);
ret = sis8300drvbcm_get_channel_auto_flattop_start(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_auto_flattop_start returned %d", ret);
return ret;
}
setDoubleParam(addr, BCMAcctAutoFlatTopStart, doubleValue);
ret = sis8300drvbcm_get_channel_auto_flattop_end(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_auto_flattop_end returned %d", ret);
return ret;
}
setDoubleParam(addr, BCMAcctAutoFlatTopEnd, doubleValue);
ret = sis8300drvbcm_get_channel_auto_flattop_enable(mDeviceHandle, addr, &uintValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_auto_flattop_enable returned %d", ret);
return ret;
}
setIntegerParam(addr, BCMAcctAutoFlatTopEnable, uintValue);
ret = sis8300drvbcm_get_channel_droop_rate(mDeviceHandle, addr, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_droop_rate returned %d", ret);
......@@ -965,6 +1057,12 @@ int sis8300bcm::readbackParameters()
return ret;
}
setIntegerParam(addr, BCMAcctTriggerSource, uintValue);
ret = sis8300drvbcm_get_channel_beam_absence(mDeviceHandle, addr, &uintValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_beam_absence returned %d", ret);
return ret;
}
setIntegerParam(addr, BCMAcctBeamAbsence, uintValue);
}
// readback DIFF parameters
......@@ -1141,6 +1239,8 @@ int sis8300bcm::deviceDone()
double doubleValue;
unsigned int uintValue;
double flattopStart, flattopEnd, flattopCharge;
int autoFlattopEnable;
double autoFlattopStart, autoFlattopEnd, triggerWidth;
// readout system wide parameters
asynPrintDeviceInfo(pasynUserSelf, "readout system wide parameters");
......@@ -1216,6 +1316,15 @@ int sis8300bcm::deviceDone()
setIntegerParam(BCMHighVoltagePresence, (uintValue & 0x80) ? 1 : 0);
setIntegerParam(BCMHighVoltageOK, (uintValue & 0x100) ? 1 : 0);
// BCMAlarmDiffLUTDestinationModeDirect is on bit 12 of
// SIS8300BCM_DIFF_INTERLOCK_ENABLE_REG register
ret = sis8300drvbcm_get_differential_interlock_enable(mDeviceHandle, 12, &uintValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_differential_interlock_enable bit 12 returned %d", ret);
return ret;
}
setIntegerParam(BCMAlarmDiffLUTDestinationModeDirect, uintValue);
// readout ACCT parameters
for (int addr = 0; addr < SIS8300BCM_NUM_PROC_CHANNELS; addr++) {
asynPrintDeviceInfo(pasynUserSelf, "readback ACCT %d parameters", addr);
......@@ -1238,16 +1347,39 @@ int sis8300bcm::deviceDone()
return ret;
}
setDoubleParam(addr, BCMAcctFlatTopCharge, flattopCharge);
// flat top start and end have been read-back before the start of acquisition
getDoubleParam(addr, BCMAcctFlatTopStart, &flattopStart);
getDoubleParam(addr, BCMAcctFlatTopEnd, &flattopEnd);
// calculate the average current over flattop
ret = sis8300drvbcm_get_channel_flattop_current(mDeviceHandle, addr, flattopEnd - flattopStart, flattopCharge, &doubleValue);
ret = sis8300drvbcm_get_channel_trigger_width(mDeviceHandle, addr, &triggerWidth);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_flattop_current returned %d", ret);
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_trigger_width returned %d", ret);
return ret;
}
asynPrintDeviceInfo(pasynUserSelf, "flattop current %f mA", doubleValue);
setDoubleParam(addr, BCMAcctTriggerWidth, triggerWidth);
// flat top current, check if automatic mode is enabled
getIntegerParam(addr, BCMAcctAutoFlatTopEnable, &autoFlattopEnable);
asynPrintDeviceInfo(pasynUserSelf, "Channel %d auto flattop enable is %d", addr, autoFlattopEnable);
if(autoFlattopEnable){
// auto flat top start and end have been read-back before the start of acquisition
getDoubleParam(addr, BCMAcctAutoFlatTopStart, &autoFlattopStart);
getDoubleParam(addr, BCMAcctAutoFlatTopEnd, &autoFlattopEnd);
// calculate the average current over automatic flattop (window in ms)
ret = sis8300drvbcm_get_channel_flattop_current(mDeviceHandle, addr, triggerWidth - (autoFlattopStart/1e6) + (autoFlattopEnd/1e6), flattopCharge, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_flattop_current auto returned %d", ret);
return ret;
}
asynPrintDeviceInfo(pasynUserSelf, "Channel %d auto flattop current %f mA", addr, doubleValue);
}else{
// flat top start and end have been read-back before the start of acquisition
getDoubleParam(addr, BCMAcctFlatTopStart, &flattopStart);
getDoubleParam(addr, BCMAcctFlatTopEnd, &flattopEnd);
// calculate the average current over flattop
ret = sis8300drvbcm_get_channel_flattop_current(mDeviceHandle, addr, flattopEnd - flattopStart, flattopCharge, &doubleValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_channel_flattop_current returned %d", ret);
return ret;
}
asynPrintDeviceInfo(pasynUserSelf, "Channel %d flattop current %f mA", addr, doubleValue);
}
setDoubleParam(addr, BCMAcctFlatTopCurrent, doubleValue);
ret = sis8300drvbcm_get_channel_alarm_hold(mDeviceHandle, addr, &uintValue);
......@@ -1364,6 +1496,13 @@ int sis8300bcm::deviceDone()
setIntegerParam(addr, BCMDiffAlarmMediumDirect, (uintValue & 0x02) ? 1 : 0);
setIntegerParam(addr, BCMDiffAlarmSlowDirect, (uintValue & 0x04) ? 1 : 0);
setIntegerParam(addr, BCMDiffAlarmLeakyDirect, (uintValue & 0x08) ? 1 : 0);
ret = sis8300drvbcm_get_differential_interlock_enable(mDeviceHandle, addr, &uintValue);
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_get_differential_interlock_enable returned %d", ret);
return ret;
}
setIntegerParam(addr, BCMDiffInterlockEnable, uintValue);
}
// readback FIBER parameters
......@@ -1897,6 +2036,8 @@ asynStatus sis8300bcm::writeInt32(asynUser *pasynUser, epicsInt32 value)
// currently we can not just call setupLUTmasking() cause function lookup will fail!
} else if (function >= BCMLutBeamExists[0] && function <= BCMLutBeamExists[BCM_LUT_SIZE-1]) {
ret = setupLUTmasking(function);
} else if (function >= BCMLutInterlockEnable[0] && function <= BCMLutInterlockEnable[BCM_LUT_SIZE-1]) {
ret = setupLUTinterlockEnable(function);
} else if (function >= BCMLutMaxPulseLength[0] && function <= BCMLutMaxPulseLength[BCM_LUT_SIZE-1]) {
ret = setupLUTmaxPulseLength(addr, function);
} else if (function >= BCMLutModeID[0] && function <= BCMLutModeID[BCM_LUT_SIZE-1]) {
......@@ -1922,6 +2063,16 @@ asynStatus sis8300bcm::writeInt32(asynUser *pasynUser, epicsInt32 value)
if (ret) {
asynPrintError(pasynUserSelf, "sis8300drvbcm_set_channel_trigger_source returned %d", ret);
}
} else if (function == BCMAcctAutoFlatTopEnable) {
ret = sis8300drvbcm_set_channel_auto_flattop_enable(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_auto_flattop_enable returned %d", ret);
}
} else if (function == BCMAcctBeamAbsence) {
ret = sis8300drvbcm_set_channel_beam_absence(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_beam_absence returned %d", ret);
}
} else if (function == BCMFiberOutDataSelect) {
ret = sis8300drvbcm_set_fiber_out_data_select(mDeviceHandle, addr, value);
if (ret) {
......@@ -2059,6 +2210,21 @@ asynStatus sis8300bcm::writeFloat64(asynUser *pasynUser, epicsFloat64 value)
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_errant_window_end returned %d", ret);
}
} else if (function == BCMAcctAuxUpperThreshold) {
ret = sis8300drvbcm_set_channel_aux_upper_threshold(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_aux_upper_threshold returned %d", ret);
}
} else if (function == BCMAcctAuxLowerThreshold) {
ret = sis8300drvbcm_set_channel_aux_lower_threshold(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_aux_lower_threshold returned %d", ret);
}
} else if (function == BCMAcctAuxHysteresisThreshold) {
ret = sis8300drvbcm_set_channel_aux_hysteresis_threshold(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_aux_hysteresis_threshold returned %d", ret);
}
} else if (function == BCMAcctBeamAboveThreshold) {
asynPrintDeviceInfo(pasynUserSelf, "set_channel_beam_above_threshold: addr %d, value %f", addr, value);
ret = sis8300drvbcm_set_channel_beam_above_threshold(mDeviceHandle, addr, value);
......@@ -2159,6 +2325,16 @@ asynStatus sis8300bcm::writeFloat64(asynUser *pasynUser, epicsFloat64 value)
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_pulse_width_filter returned %d", ret);
}
} else if (function == BCMAcctAutoFlatTopStart) {
ret = sis8300drvbcm_set_channel_auto_flattop_start(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_auto_flattop_start returned %d", ret);
}
} else if (function == BCMAcctAutoFlatTopEnd) {
ret = sis8300drvbcm_set_channel_auto_flattop_end(mDeviceHandle, addr, value);
if (ret) {
asynPrintError(pasynUser, "sis8300drvbcm_set_channel_auto_flattop_end returned %d", ret);
}
} else {
if (function < BCM_FIRST_PARAM) {
status = sis8300::writeFloat64(pasynUser, value);
......
......@@ -68,6 +68,7 @@
#define BCMAlarmLUTMinTriggerPeriodHoldString "BCM.ALARM.LUT_MIN_TRIGGER_PERIOD_HOLD"
#define BCMAlarmLUTMinTriggerPeriodFirstString "BCM.ALARM.LUT_MIN_TRIGGER_PERIOD_FIRST"
#define BCMAlarmLUTMinTriggerPeriodDirectString "BCM.ALARM.LUT_MIN_TRIGGER_PERIOD_DIRECT"
#define BCMAlarmDiffLUTDestinationModeDirectString "BCM.ALARM.DIFF_LUT_DESTINATION_MODE_DIRECT"
#define BCMMainClockMissingString "BCM.MAIN_CLOCK_MISSING"
#define BCMAuxiliaryClockMissingString "BCM.AUXILIARY_CLOCK_MISSING"
#define BCMReadyString "BCM.READY"
......@@ -163,9 +164,17 @@
#define BCMAcctCalibrationSample2String "BCM.ACCT.CALIBRATION_SAMPLE2"
#define BCMAcctCalibrationSample3String "BCM.ACCT.CALIBRATION_SAMPLE3"
#define BCMAcctCalibrationSample4String "BCM.ACCT.CALIBRATION_SAMPLE4"
#define BCMAcctAuxUpperThresholdString "BCM.ACCT.AUX_UPPER_THRESHOLD"
#define BCMAcctAuxLowerThresholdString "BCM.ACCT.AUX_LOWER_THRESHOLD"
#define BCMAcctAuxHysteresisThresholdString "BCM.ACCT.AUX_HYSTERESIS_THRESHOLD"
#define BCMAcctBeamAboveThresholdString "BCM.ACCT.BEAM_ABOVE_THRESHOLD"
#define BCMAcctLeakyCoefficientString "BCM.ACCT.LEAKY_INTEGRATOR_COEFFICIENT"
#define BCMAcctLeakyThresholdString "BCM.ACCT.LEAKY_INTEGRATOR_THRESHOLD"
#define BCMAcctTriggerWidthString "BCM.ACCT.TRIGGER_WIDTH"
#define BCMAcctAutoFlatTopStartString "BCM.ACCT.AUTO_FLATTOP_START"
#define BCMAcctAutoFlatTopEndString "BCM.ACCT.AUTO_FLATTOP_END"
#define BCMAcctAutoFlatTopEnableString "BCM.ACCT.AUTO_FLATTOP_ENABLE"
#define BCMAcctBeamAbsenceString "BCM.ACCT.BEAM_ABSENCE"
// DIFF block, channel specific
#define BCMDiffSourceAString "BCM.DIFF.SOURCE_A"
#define BCMDiffSourceBString "BCM.DIFF.SOURCE_B"
......@@ -208,6 +217,7 @@
#define BCMDiffAlarmLeakyHoldString "BCM.DIFF.ALARM.LEAKY_HOLD"
#define BCMDiffAlarmLeakyFirstString "BCM.DIFF.ALARM.LEAKY_FIRST"
#define BCMDiffAlarmLeakyDirectString "BCM.DIFF.ALARM.LEAKY_DIRECT"
#define BCMDiffInterlockEnableString "BCM.DIFF.INTERLOCK_ENABLE"
// PROBE block, channel specific
#define BCMProbeChannelString "BCM.PROBE.CHANNEL"
#define BCMProbeSourceString "BCM.PROBE.SOURCE"
......@@ -229,6 +239,7 @@
#define BCMLutLowerThresholdString "BCM.LUT%d.LOWER_THRESHOLD"
#define BCMLutUpperThresholdString "BCM.LUT%d.UPPER_THRESHOLD"
#define BCMLutBeamExistsString "BCM.LUT%d.BEAM_EXISTS"
#define BCMLutInterlockEnableString "BCM.LUT%d.INTERLOCK_ENABLE"
class epicsShareClass sis8300bcm : public sis8300 {
public:
......@@ -288,6 +299,7 @@ protected:
int BCMAlarmLUTMinTriggerPeriodHold;
int BCMAlarmLUTMinTriggerPeriodFirst;
int BCMAlarmLUTMinTriggerPeriodDirect;
int BCMAlarmDiffLUTDestinationModeDirect;
int BCMMainClockMissing;
int BCMAuxiliaryClockMissing;
int BCMReady;
......@@ -383,9 +395,17 @@ protected:
int BCMAcctCalibrationSample2;
int BCMAcctCalibrationSample3;
int BCMAcctCalibrationSample4;
int BCMAcctAuxUpperThreshold;
int BCMAcctAuxLowerThreshold;
int BCMAcctAuxHysteresisThreshold;
int BCMAcctBeamAboveThreshold;
int BCMAcctLeakyCoefficient;
int BCMAcctLeakyThreshold;
int BCMAcctTriggerWidth;
int BCMAcctAutoFlatTopStart;
int BCMAcctAutoFlatTopEnd;
int BCMAcctAutoFlatTopEnable;
int BCMAcctBeamAbsence;
// DIFF block, channel specific
int BCMDiffSourceA;
int BCMDiffSourceB;
......@@ -428,6 +448,7 @@ protected:
int BCMDiffAlarmLeakyHold;
int BCMDiffAlarmLeakyFirst;
int BCMDiffAlarmLeakyDirect;
int BCMDiffInterlockEnable;
// PROBE block, channel specific
int BCMProbeChannel;
int BCMProbeSource;
......@@ -449,6 +470,7 @@ protected:
int BCMLutMaxPulseLength[BCM_LUT_SIZE];
int BCMLutLowerThreshold[BCM_LUT_SIZE];
int BCMLutUpperThreshold[BCM_LUT_SIZE];
int BCMLutInterlockEnable[BCM_LUT_SIZE];
private:
// these are the methods that we override from sis8300
......@@ -464,6 +486,7 @@ private:
int setupLUTupperThreshold(unsigned int addr, int function);
int setupLUTminTriggerPeriod(int function);
int setupLUTmasking(int function);
int setupLUTinterlockEnable(int function);
};
#endif /* SIS8300BCM_H_ */
......@@ -70,6 +70,7 @@ extern "C" {
#define SIS8300BCM_ACQUITISION_TRIGGER_SOURCE_REG 0x436
#define SIS8300BCM_CRATE_ID_REG 0x437
#define SIS8300BCM_PULSE_WIDTH_FILTER_REG 0x43E
#define SIS8300BCM_DIFF_INTERLOCK_ENABLE_REG 0x443
/* channel specific registers start at 0x500 */
#define SIS8300BCM_CHANNEL_BLOCK_BASE 0x500
......@@ -146,7 +147,15 @@ extern "C" {
#define SIS8300BCM_ACCT_X_LEAKY_THR_REG 0x02E
#define SIS8300BCM_ACCT_X_FLATTOP_RISING_OFF 0x02F
#define SIS8300BCM_ACCT_X_FLATTOP_FALLING_OFF 0x030
#define SIS8300BCM_ACCT_X_AUX_UPPER_THRESHOLD_OFF 0x031
#define SIS8300BCM_ACCT_X_AUX_LOWER_THRESHOLD_OFF 0x032
#define SIS8300BCM_ACCT_X_AUX_HYSTERESIS_THRESHOLD_OFF 0x033
#define SIS8300BCM_ACCT_X_BEAM_ABOVE_THRESHOLD_REG 0x034
#define SIS8300BCM_ACCT_X_TRIGGER_WIDTH_OFF 0x035
#define SIS8300BCM_ACCT_X_AUTO_FLATTOP_RISING_OFF 0x036
#define SIS8300BCM_ACCT_X_AUTO_FLATTOP_FALLING_OFF 0x037
#define SIS8300BCM_ACCT_X_AUTO_FLATTOP_ENABLE_OFF 0x038
#define SIS8300BCM_ACCT_X_BEAM_ABSENCE_OFF 0x039
/*
DIFF block registers
......
......@@ -2094,12 +2094,12 @@ static int set_differential_alarms_control(sis8300drv_usr *sisuser, unsigned int
SIS8300BCM_DIFF_BANK_OFF + \
SIS8300BCM_DIFF_X_ALARM_CONTROL_OFF;
unsigned int value;
// register has lowest 3 bits defined
// register has lowest 4 bits defined
int ret = sis8300drv_reg_read(sisuser, reg, &value);
if (ret) {
return ret;
}
value &= 0x7;
value &= 0xF;
// set / clear the desired bit
if (disable) {
value |= (1 << bit);
......@@ -2221,6 +2221,19 @@ int sis8300drvbcm_get_differential_alarm_direct(sis8300drv_usr *sisuser, unsigne
return ret;
}
int sis8300drvbcm_get_differential_interlock_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable)
{
unsigned int reg = SIS8300BCM_DIFF_INTERLOCK_ENABLE_REG;
// register has lowest 10 bits defined
int ret = sis8300drv_reg_read(sisuser, reg, enable);
if (ret) {
return ret;
}
// 1 bit per channel masking
*enable = (*enable>>channel) & 0x01;
return ret;
}
int sis8300drvbcm_set_differential_rising_window_start(sis8300drv_usr *sisuser, unsigned int channel, double start)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
......@@ -2513,6 +2526,22 @@ int sis8300drvbcm_set_lut_interlock_masking(sis8300drv_usr *sisuser, unsigned in
return set_lut_value(sisuser, address, data);
}
int sis8300drvbcm_set_lut_interlock_enable(sis8300drv_usr *sisuser, unsigned int index, unsigned int beam_dest, unsigned int mask)
{
unsigned int address = 0;
// 0 .. 3 LUT index (0 .. 15)
address |= (index & 0xFF);
// 4 .. 5 0
address |= (0 << 4);
// 6 .. 9 0
address |= (0 << 6);
// 10 .. 11 LUT type (0 = ACCT, 1 = interlock masking, 3 = DIFF , 2 .. 15 = reserved)
address |= (3 << 10);
unsigned int data = mask;
data |= (beam_dest << 16);
return set_lut_value(sisuser, address, data);
}
// TODO?
// int sis8300drvbcm_get_differential_fast_minimum(sis8300drv_usr *sisuser, unsigned int channel, double *minimum);
// int sis8300drvbcm_get_differential_fast_maximum(sis8300drv_usr *sisuser, unsigned int channel, double *maximum);
......@@ -2720,9 +2749,9 @@ int sis8300drvbcm_set_differential_medium_window_width_inverse(sis8300drv_usr *s
SIS8300BCM_DIFF_BANK_OFF + \
SIS8300BCM_DIFF_X_MEDIUM_WINDOW_WIDTH_INV_OFF;
// non-inverted value
int value = width - 2.0;
unsigned int value = (unsigned int) (width - 2.0);
// inverted value
value = (int)((1 << 23) / (88 * (value + 2)));
value = (1 << 31) / (88 * (value + 2));
return sis8300drv_reg_write(sisuser, reg, value);
}
......@@ -2744,13 +2773,13 @@ int sis8300drvbcm_get_differential_medium_window_width_inverse(sis8300drv_usr *s
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_DIFF_BANK_OFF + \
SIS8300BCM_DIFF_X_MEDIUM_WINDOW_WIDTH_INV_OFF;
// register has lowest 24 bits defined
unsigned value;
// register has lowest 32 bits defined
unsigned int value;
ret = sis8300drv_reg_read(sisuser, reg, &value);
if (ret) {
return ret;
}
*width = ((double)value * 88.0 * (n_value + 2.0)) / (double)(1 << 23);
*width = ((double)value * 88.0 * (n_value + 2.0)) / (double)(1 << 31);
return ret;
}
......@@ -2762,6 +2791,96 @@ int sis8300drvbcm_set_enable_calibration_pulse(sis8300drv_usr *sisuser, unsigned
return ret;
}
// used to control aux upper threshold
int sis8300drvbcm_set_channel_aux_upper_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_UPPER_THRESHOLD_OFF;
// register takes a signed value
int value = (int)(threshold * 32768);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return sis8300drv_reg_write(sisuser, reg, value);
}
int sis8300drvbcm_get_channel_aux_upper_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_UPPER_THRESHOLD_OFF;
// register holds a signed value
int value;
int ret = sis8300drv_reg_read(sisuser, reg, (unsigned *)&value);
if (ret) {
return ret;
}
*threshold = (value / 32768.0);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return ret;
}
// used to control aux lower threshold
int sis8300drvbcm_set_channel_aux_lower_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_LOWER_THRESHOLD_OFF;
// register takes a signed value
int value = (int)(threshold * 32768);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return sis8300drv_reg_write(sisuser, reg, value);
}
int sis8300drvbcm_get_channel_aux_lower_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_LOWER_THRESHOLD_OFF;
// register holds a signed value
int value;
int ret = sis8300drv_reg_read(sisuser, reg, (unsigned *)&value);
if (ret) {
return ret;
}
*threshold = (value / 32768.0);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return ret;
}
// used to control aux hysteresis threshold
int sis8300drvbcm_set_channel_aux_hysteresis_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_HYSTERESIS_THRESHOLD_OFF;
// register takes a signed value
int value = (int)(threshold * 32768);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return sis8300drv_reg_write(sisuser, reg, value);
}
int sis8300drvbcm_get_channel_aux_hysteresis_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUX_HYSTERESIS_THRESHOLD_OFF;
// register holds a signed value
int value;
int ret = sis8300drv_reg_read(sisuser, reg, (unsigned *)&value);
if (ret) {
return ret;
}
*threshold = (value / 32768.0);
// printf("%s: channel %d, reg 0x%x, value: %d\n", __func__, channel, reg, value);
return ret;
}
// used to control beam above threshold
int sis8300drvbcm_set_channel_beam_above_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold)
{
......@@ -2792,6 +2911,123 @@ int sis8300drvbcm_get_channel_beam_above_threshold(sis8300drv_usr *sisuser, unsi
return ret;
}
int sis8300drvbcm_get_channel_trigger_width(sis8300drv_usr *sisuser, unsigned int channel, double *width)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_TRIGGER_WIDTH_OFF;
unsigned int value;
int ret = sis8300drv_reg_read(sisuser, reg, &value);
if (ret) {
return ret;
}
// register holds 32-bit unsigned value in 'sampling periods',
// function returns double value in miliseconds
*width = 1.0 / s_sampling_frequency * (double)value * 1000.0;
return ret;
}
// used to control auto flat top start
int sis8300drvbcm_set_channel_auto_flattop_start(sis8300drv_usr *sisuser, unsigned int channel, double start)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_RISING_OFF;
// register has lowest 13 bits defined
int value = (int)(start / 1000000000.0 * s_sampling_frequency);
// do not mask off higher bits because value is signed value!
int ret = sis8300drv_reg_write(sisuser, reg, (unsigned)value);
return ret;
}
int sis8300drvbcm_get_channel_auto_flattop_start(sis8300drv_usr *sisuser, unsigned int channel, double *start)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_RISING_OFF;
// register has lowest 13 bits defined
int value;
int ret = sis8300drv_reg_read(sisuser, reg, (unsigned *)&value);
if (ret) {
return ret;
}
// do not mask off higher bits because value is signed value!
*start = (double)value * 1000000000.0 / s_sampling_frequency;
return ret;
}
// used to control auto flat top end
int sis8300drvbcm_set_channel_auto_flattop_end(sis8300drv_usr *sisuser, unsigned int channel, double end)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_FALLING_OFF;
// register has lowest 13 bits defined
int value = (int)(end / 1000000000.0 * s_sampling_frequency);
// do not mask off higher bits because value is signed value!
int ret = sis8300drv_reg_write(sisuser, reg, (unsigned)value);
return ret;
}
int sis8300drvbcm_get_channel_auto_flattop_end(sis8300drv_usr *sisuser, unsigned int channel, double *end)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_FALLING_OFF;
// register has lowest 13 bits defined
int value;
int ret = sis8300drv_reg_read(sisuser, reg, (unsigned *)&value);
if (ret) {
return ret;
}
// do not mask off higher bits because value is signed value!
*end = (double)value * 1000000000.0 / s_sampling_frequency;
return ret;
}
// used to control auto flat top enable
int sis8300drvbcm_set_channel_auto_flattop_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_ENABLE_OFF;
int ret = sis8300drv_reg_write(sisuser, reg, enable);
return ret;
}
int sis8300drvbcm_get_channel_auto_flattop_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_AUTO_FLATTOP_ENABLE_OFF;
int ret = sis8300drv_reg_read(sisuser, reg, enable);
return ret;
}
// used to control beam absence enable
int sis8300drvbcm_set_channel_beam_absence(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_BEAM_ABSENCE_OFF;
int ret = sis8300drv_reg_write(sisuser, reg, enable);
return ret;
}
int sis8300drvbcm_get_channel_beam_absence(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable)
{
unsigned int reg = SIS8300BCM_CHANNEL_BLOCK_BASE + \
(SIS8300BCM_CHANNEL_BLOCK_SIZE * channel) + \
SIS8300BCM_ACCT_BANK_OFF + \
SIS8300BCM_ACCT_X_BEAM_ABSENCE_OFF;
int ret = sis8300drv_reg_read(sisuser, reg, enable);
return ret;
}
// used to control fiber out data select
int sis8300drvbcm_set_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int selection)
{
......
......@@ -211,8 +211,23 @@ int sis8300drvbcm_set_channel_errant_window_start(sis8300drv_usr *sisuser, unsig
int sis8300drvbcm_get_channel_errant_window_start(sis8300drv_usr *sisuser, unsigned int channel, double *start);
int sis8300drvbcm_set_channel_errant_window_end(sis8300drv_usr *sisuser, unsigned int channel, double end);
int sis8300drvbcm_get_channel_errant_window_end(sis8300drv_usr *sisuser, unsigned int channel, double *end);
int sis8300drvbcm_set_channel_aux_upper_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold);
int sis8300drvbcm_get_channel_aux_upper_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold);
int sis8300drvbcm_set_channel_aux_lower_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold);
int sis8300drvbcm_get_channel_aux_lower_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold);
int sis8300drvbcm_set_channel_aux_hysteresis_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold);
int sis8300drvbcm_get_channel_aux_hysteresis_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold);
int sis8300drvbcm_set_channel_beam_above_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold);
int sis8300drvbcm_get_channel_beam_above_threshold(sis8300drv_usr *sisuser, unsigned int channel, double *threshold);
int sis8300drvbcm_get_channel_trigger_width(sis8300drv_usr *sisuser, unsigned int channel, double *width);
int sis8300drvbcm_set_channel_auto_flattop_start(sis8300drv_usr *sisuser, unsigned int channel, double start);
int sis8300drvbcm_get_channel_auto_flattop_start(sis8300drv_usr *sisuser, unsigned int channel, double *start);
int sis8300drvbcm_set_channel_auto_flattop_end(sis8300drv_usr *sisuser, unsigned int channel, double end);
int sis8300drvbcm_get_channel_auto_flattop_end(sis8300drv_usr *sisuser, unsigned int channel, double *end);
int sis8300drvbcm_set_channel_auto_flattop_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable);
int sis8300drvbcm_get_channel_auto_flattop_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable);
int sis8300drvbcm_set_channel_beam_absence(sis8300drv_usr *sisuser, unsigned int channel, unsigned int enable);
int sis8300drvbcm_get_channel_beam_absence(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable);
int sis8300drvbcm_set_channel_leaky_coefficient(sis8300drv_usr *sisuser, unsigned int channel, double coefficient);
int sis8300drvbcm_get_channel_leaky_coefficient(sis8300drv_usr *sisuser, unsigned int channel, double *coefficient);
int sis8300drvbcm_set_channel_leaky_threshold(sis8300drv_usr *sisuser, unsigned int channel, double threshold);
......@@ -271,6 +286,7 @@ int sis8300drvbcm_set_lut_lower_threshold(sis8300drv_usr *sisuser, unsigned int
int sis8300drvbcm_set_lut_upper_threshold(sis8300drv_usr *sisuser, unsigned int channel, unsigned int index, unsigned int beam_mode, double threshold);
int sis8300drvbcm_set_lut_min_trigger_period(sis8300drv_usr *sisuser, unsigned int index, unsigned int beam_mode, double min_trigger_period);
int sis8300drvbcm_set_lut_interlock_masking(sis8300drv_usr *sisuser, unsigned int index, unsigned int beam_dest, unsigned int mask);
int sis8300drvbcm_set_lut_interlock_enable(sis8300drv_usr *sisuser, unsigned int index, unsigned int beam_dest, unsigned int mask);
int sis8300drvbcm_set_clock_source(sis8300drv_usr *sisuser, sis8300drv_clk_src source);
int sis8300drvbcm_get_clock_source(sis8300drv_usr *sisuser, sis8300drv_clk_src *source);
int sis8300drvbcm_set_differential_fast_window_width(sis8300drv_usr *sisuser, unsigned int channel, double width);
......@@ -290,6 +306,7 @@ int sis8300drvbcm_get_differential_alarm_leaky_control(sis8300drv_usr *sisuser,
int sis8300drvbcm_get_differential_alarm_hold(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *alarms);
int sis8300drvbcm_get_differential_alarm_first(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *alarms);
int sis8300drvbcm_get_differential_alarm_direct(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *alarms);
int sis8300drvbcm_get_differential_interlock_enable(sis8300drv_usr *sisuser, unsigned int channel, unsigned int *enable);
int sis8300drvbcm_set_enable_calibration_pulse(sis8300drv_usr *sisuser, unsigned int enable_calibration_pulse);
int sis8300drvbcm_get_calibration_sample(sis8300drv_usr *sisuser, unsigned int channel, unsigned int index, double *sample);
int sis8300drvbcm_set_fiber_out_data_select(sis8300drv_usr *sisuser, unsigned int channel, unsigned int selection);
......