From abf1d74ba004345638c1cecc8d2ed21581231154 Mon Sep 17 00:00:00 2001 From: Douglas Araujo <douglas.araujo@ess.eu> Date: Mon, 25 Mar 2024 16:47:29 +0100 Subject: [PATCH] Add configHybrid method --- vmmTblApp/src/hybrid.cpp | 11 ++++++++++- vmmTblApp/src/hybrid.h | 1 + vmmTblApp/src/vmm_config.cpp | 25 +++++++++++++++++++++++++ vmmTblApp/src/vmm_config.h | 2 ++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/vmmTblApp/src/hybrid.cpp b/vmmTblApp/src/hybrid.cpp index de6fca4..5397c35 100644 --- a/vmmTblApp/src/hybrid.cpp +++ b/vmmTblApp/src/hybrid.cpp @@ -7,7 +7,7 @@ Hybrid::Hybrid() { Hybrid::~Hybrid() {} void Hybrid::loadDefault(){ - hybrid_registers = {{"TP_skew", 0}, {"TP_width", 0}, {"TP_pol", 0}, {"TP_disable", 0}}; + hybrid_registers = {{"TP_skew", 0}, {"TP_width", 0}, {"TP_pol", 0}}; hybrid_info = {{"firmware_version", ""}, {"geo_id", ""}, {"hybrid_id", ""},{"link_status", "0"}, {"description", ""}}; } @@ -16,3 +16,12 @@ VMM3a& Hybrid::getVMM(int index) { throw std::out_of_range("Invalid VMM index"); return vmms[index]; } + +vmmStatus Hybrid::getRegister(std::string feature, unsigned short& result) { + vmmStatus status = vmmSuccess; + if(hybrid_registers.find(feature) != hybrid_registers.end()) + result = hybrid_registers[feature]; + else + status = vmmParamNotFound; + return status; +} diff --git a/vmmTblApp/src/hybrid.h b/vmmTblApp/src/hybrid.h index 18a4de2..79664b6 100644 --- a/vmmTblApp/src/hybrid.h +++ b/vmmTblApp/src/hybrid.h @@ -14,6 +14,7 @@ public: void loadDefault(); VMM3a& getVMM(int index); + vmmStatus getRegister(std::string feature, unsigned short& result); private: VMM3a vmms[VMMS_PER_HYBRID]; diff --git a/vmmTblApp/src/vmm_config.cpp b/vmmTblApp/src/vmm_config.cpp index d7414c0..316de95 100644 --- a/vmmTblApp/src/vmm_config.cpp +++ b/vmmTblApp/src/vmm_config.cpp @@ -4,6 +4,7 @@ #include <algorithm> #include <chrono> #include <thread> +#include <array> #include "FrontEndBase.h" @@ -17,6 +18,15 @@ FENConfigModule::FENConfigModule(FrontEndBase& frontend) : pFEN(&frontend) { FENConfigModule::~FENConfigModule() { } +void FENConfigModule::sendAll(bool useConfigCheck) { + configFEN(); + for(int hybrid = 0; hybrid <= HYBRIDS_PER_FEN; hybrid++) { + if (isHybridEnabled(hybrid)) { + + } + } +} + void FENConfigModule::configFEN() { pFEN->user_reg_write("app_debug_data_format", 0); pFEN->user_reg_write("app_latency_reset", 27); @@ -63,6 +73,21 @@ Hybrid& FENConfigModule::getHybrid(int index) { return hybrids[index]; } +void FENConfigModule::configHybrid(int hybrid_index) { + std::array<std::string, 3> registers = {"hyb_tp_skew0", "hyb_tp_width0", "hyb_tp_polarity0"}; + + for (const auto& reg : registers) { + unsigned short result = 0; + hybrids[hybrid_index].getRegister(reg, result); + pFEN->user_reg_write(reg + std::to_string(hybrid_index), result); + } + + uint32_t value = (1 << hybrid_index); + pFEN->user_reg_write("sc_cfg_hyb", 0x0); + pFEN->user_reg_write("sc_cfg_hyb", value); + pFEN->user_reg_write("sc_cfg_hyb", 0x0); +} + bool FENConfigModule::configVMM(int hybrid_index, int vmm_index, bool enableConfigCheck) { bool result = true; diff --git a/vmmTblApp/src/vmm_config.h b/vmmTblApp/src/vmm_config.h index a6850de..f436f5d 100644 --- a/vmmTblApp/src/vmm_config.h +++ b/vmmTblApp/src/vmm_config.h @@ -15,6 +15,7 @@ public: FENConfigModule(FrontEndBase& frontend); ~FENConfigModule(); void configFEN(); + void configHybrid(int hybrid_index); bool configVMM(int hybrid_index, int vmm_index, bool enableConfigCheck=false); void fillGlobalRegisters(std::vector<std::string>& global, int hybrid_index, int vmm_index); void fillGlobalRegisters2(std::vector<std::string>& global, int hybrid_index, int vmm_index); @@ -23,6 +24,7 @@ public: Hybrid& getHybrid(int index); bool enableHybrid(int hybrid, bool onOff); bool isHybridEnabled(int hybrid); + void sendAll(bool useConfigCheck); private: FrontEndBase *pFEN; -- GitLab