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