From a07a6a517c3765754e4d86460c3f14c03de6f65e Mon Sep 17 00:00:00 2001
From: marcofilho <marco.filho@ess.eu>
Date: Tue, 7 Jan 2025 10:50:51 +0100
Subject: [PATCH] Add actual ADC reading

---
 vmmTblApp/Db/vmm.template     |  8 ++++++++
 vmmTblApp/Db/vmm_tbl.template | 14 --------------
 vmmTblApp/src/vmm_tbl.cpp     | 14 +++++++++++++-
 vmmTblApp/src/vmm_tbl.h       |  1 +
 4 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/vmmTblApp/Db/vmm.template b/vmmTblApp/Db/vmm.template
index 8c64b2d..de3a452 100644
--- a/vmmTblApp/Db/vmm.template
+++ b/vmmTblApp/Db/vmm.template
@@ -52,4 +52,12 @@ record(ai, "$(P)$(R)$(HYB)$(VMM)$(C)AnalogMon-R"){
     field(PINI, "YES")
     field(SCAN, "I/O Intr")
     field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_ANALOGMON")
+}
+
+record(ai, "$(P)$(R)$(HYB)$(VMM)$(C)DACVal-R"){
+    field(DESC, "Read DAC value")
+    field(DTYP, "asynInt32")
+    field(PINI, "YES")
+    field(SCAN, "I/O Intr")
+    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_DACVAL")
 }
\ No newline at end of file
diff --git a/vmmTblApp/Db/vmm_tbl.template b/vmmTblApp/Db/vmm_tbl.template
index 036a525..2bd1b9f 100644
--- a/vmmTblApp/Db/vmm_tbl.template
+++ b/vmmTblApp/Db/vmm_tbl.template
@@ -6,20 +6,6 @@ record(bo, "$(P)$(R)ReadADC-VMMs-S") {
     field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))READ_ADC_VMMS")
 }
 
-record(ai, "$(P)$(R)MonValue-VMM0-RB") {
-    field(DESC, "Monitor Value Read")
-    field(DTYP, "asynFloat64")
-    field(SCAN, "I/O Intr")
-    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ADC_VALUE_VMM0")
-}
-
-record(ai, "$(P)$(R)MonValue-VMM1-RB") {
-    field(DESC, "Monitor Value Read")
-    field(DTYP, "asynFloat64")
-    field(SCAN, "I/O Intr")
-    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ADC_VALUE_VMM1")
-}
-
 record(bo, "$(P)$(R)Acquire-S") {
     field(DESC, "Start/stop FEN acquisition")
     field(VAL,  "0")
diff --git a/vmmTblApp/src/vmm_tbl.cpp b/vmmTblApp/src/vmm_tbl.cpp
index 4b43239..1805c91 100644
--- a/vmmTblApp/src/vmm_tbl.cpp
+++ b/vmmTblApp/src/vmm_tbl.cpp
@@ -79,6 +79,13 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) {
     goto endOfReadInt32;
   }
 
+  param_index = VecUtils::getIndex(vmmDACVAL_, function, hyb_index, vmm_index);
+  if (param_index == 0) {
+    this->pVmmAPI->readADC(hyb_index, vmm_index, tmp_val);
+    *value = tmp_val;
+    goto endOfReadInt32;
+  }
+
   endOfReadInt32:
   if (param_index < 0) {
     asynPrint(pasynUserSelf, ASYN_TRACE_ERROR,
@@ -188,7 +195,7 @@ asynStatus VMMTbl::createEpicsParams() {
       createParamAndStoreInVector("HYB_" + std::to_string(hyb) + key, typ, vec);
     }
 
-    std::vector<int> SC, SL, ST, STH, SM, SD, SMX, DACIDX;
+    std::vector<int> SC, SL, ST, STH, SM, SD, SMX, DACIDX, DACVAL;
     
     for (int vmm=0; vmm < VMMS_PER_HYBRID; vmm++) {
 
@@ -225,6 +232,10 @@ asynStatus VMMTbl::createEpicsParams() {
       param_name << "HYB_" << hyb <<"_" << vmm << "_ANALOGMON";
       createParamAndStoreInVector(param_name.str(), asynParamInt32, &DACIDX);
 
+      param_name.str("");
+      param_name << "HYB_" << hyb <<"_" << vmm << "_DACVAL";
+      createParamAndStoreInVector(param_name.str(), asynParamInt32, &DACVAL);
+
     }
 
     this->vmmSC_.push_back(SC);
@@ -235,6 +246,7 @@ asynStatus VMMTbl::createEpicsParams() {
     this->vmmSD_.push_back(SD);
     this->vmmSMX_.push_back(SMX);
     this->vmmDACIDX_.push_back(DACIDX);
+    this->vmmDACVAL_.push_back(DACVAL);
 
   }
 
diff --git a/vmmTblApp/src/vmm_tbl.h b/vmmTblApp/src/vmm_tbl.h
index dbefed4..ece1351 100644
--- a/vmmTblApp/src/vmm_tbl.h
+++ b/vmmTblApp/src/vmm_tbl.h
@@ -50,6 +50,7 @@ protected:
   std::vector<std::vector<int>> vmmSD_;
   std::vector<std::vector<int>> vmmSMX_;
   std::vector<std::vector<int>> vmmDACIDX_;
+  std::vector<std::vector<int>> vmmDACVAL_;
 
 private:
   static constexpr const char *driverName = "VMMTbl";
-- 
GitLab