Skip to content
Snippets Groups Projects
Commit 4bb393a0 authored by Marco Filho's avatar Marco Filho
Browse files

Merge branch 'ICSHWI-20310-minor-changes' into 'main'

Add NTTable for seeing hybrids status. Minor changes.

See merge request !12
parents 1bfb516d 2de09a09
No related branches found
No related tags found
1 merge request!12Add NTTable for seeing hybrids status. Minor changes.
...@@ -33,6 +33,7 @@ dbLoadRecords("$(vmmTbl_DB)/channels-global.db", "P=$(P), R=$(VMM-DEV)$(Glob), P ...@@ -33,6 +33,7 @@ dbLoadRecords("$(vmmTbl_DB)/channels-global.db", "P=$(P), R=$(VMM-DEV)$(Glob), P
############## Particular rings ############## Particular rings
epicsEnvSet("RING", "00") epicsEnvSet("RING", "00")
epicsEnvSet("ORDER", "2")
epicsEnvSet("RING-1-DIGIT", "0") epicsEnvSet("RING-1-DIGIT", "0")
epicsEnvSet("PORT", "VMM0") epicsEnvSet("PORT", "VMM0")
epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):") epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):")
...@@ -42,6 +43,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)") ...@@ -42,6 +43,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)")
< ./vmm.cmd < ./vmm.cmd
epicsEnvSet("RING", "01") epicsEnvSet("RING", "01")
epicsEnvSet("ORDER", "3")
epicsEnvSet("RING-1-DIGIT", "1") epicsEnvSet("RING-1-DIGIT", "1")
epicsEnvSet("PORT", "VMM1") epicsEnvSet("PORT", "VMM1")
epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):") epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):")
...@@ -51,6 +53,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)") ...@@ -51,6 +53,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)")
< ./vmm.cmd < ./vmm.cmd
epicsEnvSet("RING", "02") epicsEnvSet("RING", "02")
epicsEnvSet("ORDER", "4")
epicsEnvSet("RING-1-DIGIT", "2") epicsEnvSet("RING-1-DIGIT", "2")
epicsEnvSet("PORT", "VMM2") epicsEnvSet("PORT", "VMM2")
epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):") epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):")
...@@ -60,6 +63,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)") ...@@ -60,6 +63,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)")
< ./vmm.cmd < ./vmm.cmd
epicsEnvSet("RING", "03") epicsEnvSet("RING", "03")
epicsEnvSet("ORDER", "5")
epicsEnvSet("RING-1-DIGIT", "3") epicsEnvSet("RING-1-DIGIT", "3")
epicsEnvSet("PORT", "VMM3") epicsEnvSet("PORT", "VMM3")
epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):") epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):")
...@@ -69,6 +73,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)") ...@@ -69,6 +73,7 @@ epicsEnvSet("R-VMM3A", "$(VMM3A-DEV)$(RING)")
< ./vmm.cmd < ./vmm.cmd
epicsEnvSet("RING", "04") epicsEnvSet("RING", "04")
epicsEnvSet("ORDER", "6")
epicsEnvSet("RING-1-DIGIT", "4") epicsEnvSet("RING-1-DIGIT", "4")
epicsEnvSet("PORT", "VMM4") epicsEnvSet("PORT", "VMM4")
epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):") epicsEnvSet("R-VMM", "$(VMM-DEV)$(RING):")
......
...@@ -5,7 +5,7 @@ dbLoadRecords("$(rmm_DB)/topology.template", "P=$(P), R=$(RMM-DEV), PORT=RMM, RI ...@@ -5,7 +5,7 @@ dbLoadRecords("$(rmm_DB)/topology.template", "P=$(P), R=$(RMM-DEV), PORT=RMM, RI
VMMTblConfig("RMM", "$(PORT)", "$(RING-1-DIGIT)", 5) VMMTblConfig("RMM", "$(PORT)", "$(RING-1-DIGIT)", 5)
# R = NDet-VMM-<RingNumber#2>: # R = NDet-VMM-<RingNumber#2>:
dbLoadRecords("$(vmmTbl_DB)/vmm_tbl.db", "P=$(P), R=$(R-VMM), Glob=$(VMM-DEV)$(Glob), PORT=$(PORT), RING=$(RING), NODE=0, ADDR=0, TIMEOUT=1") dbLoadRecords("$(vmmTbl_DB)/vmm_tbl.db", "P=$(P), R=$(R-VMM), Glob=$(VMM-DEV)$(Glob), PORT=$(PORT), RING-1-DIGIT=$(RING-1-DIGIT), ORDER=$(ORDER), NODE=0, ADDR=0, TIMEOUT=1")
# 'R' = NDet-VMM-<RingNumber#2><HybNumber#1>: # 'R' = NDet-VMM-<RingNumber#2><HybNumber#1>:
dbLoadRecords("$(vmmTbl_DB)/hybrid.db", "P=$(P), R=$(R-HYB), Glob=$(VMM-DEV)$(Glob), VMMPREFIX=$(P)$(R-VMM), PORT=$(PORT), ADDR=0, TIMEOUT=1") dbLoadRecords("$(vmmTbl_DB)/hybrid.db", "P=$(P), R=$(R-HYB), Glob=$(VMM-DEV)$(Glob), VMMPREFIX=$(P)$(R-VMM), PORT=$(PORT), ADDR=0, TIMEOUT=1")
......
record(bo, "$(P)$(R)Enable-S") { record(bo, "$(P)$(R)Enable-S") {
field(DESC, "Enable All hybrids") field(DESC, "Enable All hybrids")
field(PINI, "NO") field(PINI, "NO")
field(VAL, "1")
field(ZNAM, "Disable") field(ZNAM, "Disable")
field(ONAM, "Enable") field(ONAM, "Enable")
} }
......
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") { record(stringin, "$(P)$(R)$(HYB):FwVersion-R") {
field(DESC, "Hybrid $(HYB) Firmware version") field(DESC, "Hybrid $(HYB) Firmware version")
field(DTYP, "asynOctetRead") field(DTYP, "asynOctetRead")
......
...@@ -3,4 +3,18 @@ record(bo, "$(P)$(R)Acquire-S") { ...@@ -3,4 +3,18 @@ record(bo, "$(P)$(R)Acquire-S") {
field(VAL, "0") field(VAL, "0")
field(ZNAM, "Done") field(ZNAM, "Done")
field(ONAM, "Acquire") field(ONAM, "Acquire")
}
record(aai, "$(P)$(R)HybridStatTitles") {
field(FTVL, "STRING")
field(NELM, "12")
field(PINI,"YES")
field(INP , {const:["FEN0","FEN1","FEN2","FEN3","FEN4","FEN5","FEN6","FEN7","FEN8","FEN9","FEN0","FEN1"]})
info(Q:group, {
"$(P)$(R)AllHybStat-R":{
+id:"epics:nt/NTTable:1.0",
"labels":{+type:"plain", +channel:"VAL", +putorder:1}
}
})
} }
\ No newline at end of file
...@@ -58,4 +58,19 @@ record(ai, "$(P)$(R)EnabledHybrids-R"){ ...@@ -58,4 +58,19 @@ record(ai, "$(P)$(R)EnabledHybrids-R"){
field(DTYP, "asynInt32") field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NUM_HYBRIDS") field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NUM_HYBRIDS")
field(SCAN, "I/O Intr") field(SCAN, "I/O Intr")
}
record(aai, "$(P)$(R)HybStatuses-R") {
field(DESC, "Status of all hybrids")
field(NELM, "6")
field(DTYP, "asynInt8ArrayIn")
field(FTVL, "CHAR")
field(SCAN, "1 second")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_LINK_STATS_ARR")
info(Q:group, {
"$(P)$(Glob)AllHybStat-R":{
"value.Col$(RING-1-DIGIT)":{+type:"plain", +channel:"VAL", +putorder:"$(ORDER)"}
}
})
} }
\ No newline at end of file
...@@ -77,6 +77,7 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) { ...@@ -77,6 +77,7 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) {
if (param_index >= 0) { if (param_index >= 0) {
result = this->pVmmAPI->checkLinkStatus(param_index, tmp_val); result = this->pVmmAPI->checkLinkStatus(param_index, tmp_val);
*value = tmp_val; *value = tmp_val;
this->hybLinkStatArr_[param_index].store(*value);
goto endOfReadInt32; goto endOfReadInt32;
} }
...@@ -316,6 +317,7 @@ asynStatus VMMTbl::createEpicsParams() { ...@@ -316,6 +317,7 @@ asynStatus VMMTbl::createEpicsParams() {
createParam("VMM_GLOBAL_SD", asynParamInt8Array, &global_SD); createParam("VMM_GLOBAL_SD", asynParamInt8Array, &global_SD);
createParam("VMM_GLOBAL_SD_VMM0", asynParamInt8Array, &global_SD0); createParam("VMM_GLOBAL_SD_VMM0", asynParamInt8Array, &global_SD0);
createParam("VMM_GLOBAL_SD_VMM1", asynParamInt8Array, &global_SD1); createParam("VMM_GLOBAL_SD_VMM1", asynParamInt8Array, &global_SD1);
createParam("HYB_LINK_STATS_ARR", asynParamInt8Array, &hybLinkStatArr);
std::tuple<std::string, asynParamType, std::vector<int> *> hyb_params_to_create[8] = { std::tuple<std::string, asynParamType, std::vector<int> *> hyb_params_to_create[8] = {
{"_FW_VERSION", asynParamOctet, &vmmHybFwVersion_}, {"_FW_VERSION", asynParamOctet, &vmmHybFwVersion_},
...@@ -575,6 +577,14 @@ asynStatus VMMTbl::readInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t n ...@@ -575,6 +577,14 @@ asynStatus VMMTbl::readInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t n
goto endOfReadInt8Array; goto endOfReadInt8Array;
} }
if (function == hybLinkStatArr) {
found_param = 0;
for (size_t i = 0; i < nElements; i++) {
value[i] = this->hybLinkStatArr_[i].load();
}
goto endOfReadInt8Array;
}
found_param = VecUtils::getIndex(vmmSC_R, function, hyb_index, vmm_index); found_param = VecUtils::getIndex(vmmSC_R, function, hyb_index, vmm_index);
if (found_param == 0) { if (found_param == 0) {
for (size_t i = 0; i < nElements; i++) { for (size_t i = 0; i < nElements; i++) {
......
#pragma once #pragma once
#include <atomic>
#include "Utils.h" #include "Utils.h"
#include "VMMAPI.h" #include "VMMAPI.h"
#include "rmm.h" #include "rmm.h"
...@@ -41,6 +43,8 @@ class VMMTbl : public asynPortDriver { ...@@ -41,6 +43,8 @@ class VMMTbl : public asynPortDriver {
int global_SD; int global_SD;
int global_SD0; int global_SD0;
int global_SD1; int global_SD1;
int hybLinkStatArr;
std::atomic<int> hybLinkStatArr_[HYBRIDS_PER_FEN] = {};
std::vector<int> vmmHybFwVersion_; std::vector<int> vmmHybFwVersion_;
std::vector<int> vmmHybId_; std::vector<int> vmmHybId_;
std::vector<int> vmmHybGeoPos_; std::vector<int> vmmHybGeoPos_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment