From b331c58790df6faf6e9d7a624278404e31ab1def Mon Sep 17 00:00:00 2001
From: Douglas Araujo <douglas.araujo@ess.eu>
Date: Tue, 26 Mar 2024 15:31:01 +0100
Subject: [PATCH] Add acquire method

---
 vmmTblApp/src/vmm_config.cpp | 45 +++++++++++++++++++++++++++++++++---
 vmmTblApp/src/vmm_config.h   |  5 +++-
 2 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/vmmTblApp/src/vmm_config.cpp b/vmmTblApp/src/vmm_config.cpp
index 3b1df25..1e1132c 100644
--- a/vmmTblApp/src/vmm_config.cpp
+++ b/vmmTblApp/src/vmm_config.cpp
@@ -18,6 +18,20 @@ FENConfigModule::FENConfigModule(FrontEndBase& frontend) : pFEN(&frontend) {
 FENConfigModule::~FENConfigModule() {
 }
 
+void FENConfigModule::acquire(bool acquire) {
+  std::string message;
+  std::vector<std::string> linkStatus;
+  if (acquire) {
+    enableAcquisition(false);
+    sendAll(true);
+    enableAcquisition(true);
+    checkLinkStatus(message, linkStatus);
+  } else {
+    enableAcquisition(false);
+    checkLinkStatus(message, linkStatus);
+  }
+}
+
 void FENConfigModule::sendAll(bool useConfigCheck) {
   configFEN();
   for(int hybrid = 0; hybrid <= HYBRIDS_PER_FEN; hybrid++) {
@@ -31,6 +45,31 @@ void FENConfigModule::sendAll(bool useConfigCheck) {
   }
 }
 
+void FENConfigModule::enableAcquisition(bool enabled) {
+  pFEN->user_reg_write("app_acq_enable", enabled);
+  pFEN->user_reg_write("sc_acq_on_off", 0x00000000);
+  pFEN->user_reg_write("sc_acq_on_off", 0x00000001);
+  pFEN->user_reg_write("sc_acq_on_off", 0x00000000);
+}
+
+void FENConfigModule::checkLinkStatus(std::string& message, std::vector<std::string>& linkStatus) {
+  linkStatus.clear();
+  for (int n = 0; n < HYBRIDS_PER_FEN; n++) linkStatus.push_back("0");
+
+  uint32_t result = readWriteRegs("sc_app_link_status", 0, "app_link_status");
+
+  std::stringstream ss;
+
+  for (int n = 0; n < HYBRIDS_PER_FEN; n++) {
+    if (isHybridEnabled(n)) {
+      linkStatus[n] = std::to_string(result);
+      ss << "hybr. " + std::to_string(n) + ": " + linkStatus[n] << std::endl;
+    }
+  }
+  message = ss.str();
+  std::cout << "Message: " << message << std::endl;
+}
+
 void FENConfigModule::configFEN() {
   pFEN->user_reg_write("app_debug_data_format", 0);
   pFEN->user_reg_write("app_latency_reset", 27);
@@ -379,16 +418,16 @@ int FENConfigModule::readADC(int hybrid_index, int vmm_index) {
 
 uint32_t FENConfigModule::readWriteRegs(std::string command_reg, int index, std::string read_reg) {
   unsigned int data = 0x00000000;
-  pFEN->user_reg_write("sc_i2c_vmm_adc", data);
+  pFEN->user_reg_write(command_reg, data);
   data = (1 << index);
-  pFEN->user_reg_write("sc_i2c_vmm_adc", data);
+  pFEN->user_reg_write(command_reg, data);
 
   //Do not read registers back too soon, otherwise old ADC value is read
   delayMilliseconds(7);
 
   uint32_t value = pFEN->user_reg_read(read_reg);
   std::cout << "value: " << value << std::endl;
-  pFEN->user_reg_write("sc_i2c_vmm_adc", 0x0);
+  pFEN->user_reg_write(command_reg, 0x0);
 
   return value;
 }
diff --git a/vmmTblApp/src/vmm_config.h b/vmmTblApp/src/vmm_config.h
index f436f5d..8e301d4 100644
--- a/vmmTblApp/src/vmm_config.h
+++ b/vmmTblApp/src/vmm_config.h
@@ -24,7 +24,7 @@ public:
   Hybrid& getHybrid(int index);
   bool enableHybrid(int hybrid, bool onOff);
   bool isHybridEnabled(int hybrid);
-  void sendAll(bool useConfigCheck);
+  void acquire(bool acquire);
 
 private:
   FrontEndBase *pFEN;
@@ -32,4 +32,7 @@ private:
   bool enabled_hybrids[HYBRIDS_PER_FEN] = {};
   uint32_t readWriteRegs(std::string command_reg, int index, std::string read_reg);
   uint16_t getChMap();
+  void checkLinkStatus(std::string& message, std::vector<std::string>& linkStatus);
+  void sendAll(bool useConfigCheck);
+  void enableAcquisition(bool enabled);
 };
-- 
GitLab