diff --git a/vmmTblApp/src/vmm_config.cpp b/vmmTblApp/src/vmm_config.cpp index 90453fc7feafc0733ee5e1a032742e331d9b65e3..d7414c0b5758d7cd66b4d9cd4a8305ebfb07e6bb 100644 --- a/vmmTblApp/src/vmm_config.cpp +++ b/vmmTblApp/src/vmm_config.cpp @@ -17,6 +17,46 @@ FENConfigModule::FENConfigModule(FrontEndBase& frontend) : pFEN(&frontend) { FENConfigModule::~FENConfigModule() { } +void FENConfigModule::configFEN() { + pFEN->user_reg_write("app_debug_data_format", 0); + pFEN->user_reg_write("app_latency_reset", 27); + pFEN->user_reg_write("app_latency_data_max", 1024); + pFEN->user_reg_write("app_latency_data_jitter", 0); + pFEN->user_reg_write("app_tp_offset_first", 100); + pFEN->user_reg_write("app_tp_offset", 1000); + pFEN->user_reg_write("app_tp_latency", 46); + pFEN->user_reg_write("app_tp_number", 1); + pFEN->user_reg_write("app_chmask", getChMap()); + pFEN->user_reg_write("sc_cfg_app", 0x00000000); + pFEN->user_reg_write("sc_cfg_app", 0x00000001); + pFEN->user_reg_write("sc_cfg_app", 0x00000000); +} + +uint16_t FENConfigModule::getChMap() { + std::string chMapString = "0000000000000000"; + for (int hybrid = 0; hybrid < HYBRIDS_PER_FEN; hybrid++) { + if (isHybridEnabled(hybrid)) { + for (int vmm = 0; vmm < VMMS_PER_HYBRID; vmm++) { + chMapString.replace(15 - (hybrid * 2 + vmm), 1, "1"); + } + } + } + uint16_t chMap = std::stoi(chMapString, nullptr, 2); + return chMap; +} + +bool FENConfigModule::enableHybrid(int hybrid, bool onOff) { + if(hybrid < HYBRIDS_PER_FEN) { + enabled_hybrids[hybrid] = onOff; + return true; + } else return false; +} + +bool FENConfigModule::isHybridEnabled(int hybrid) { + if(hybrid < HYBRIDS_PER_FEN) return enabled_hybrids[hybrid]; + else return false; +} + Hybrid& FENConfigModule::getHybrid(int index) { if (index < 0 || index >= HYBRIDS_PER_FEN) throw std::out_of_range("Invalid hybrid index"); diff --git a/vmmTblApp/src/vmm_config.h b/vmmTblApp/src/vmm_config.h index 6e221d2822b304d3743b5c166be7578631b6ae5f..a6850def7a478e599d4380fb9898a285483bc3f9 100644 --- a/vmmTblApp/src/vmm_config.h +++ b/vmmTblApp/src/vmm_config.h @@ -14,15 +14,20 @@ class FENConfigModule { public: FENConfigModule(FrontEndBase& frontend); ~FENConfigModule(); + void configFEN(); 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); void fillChRegisters(std::vector<std::string>& registers, int hybrid_index, int vmm_index); int readADC(int hybrid_index, int vmm_index); Hybrid& getHybrid(int index); + bool enableHybrid(int hybrid, bool onOff); + bool isHybridEnabled(int hybrid); private: FrontEndBase *pFEN; Hybrid hybrids[HYBRIDS_PER_FEN]; + bool enabled_hybrids[HYBRIDS_PER_FEN] = {}; uint32_t readWriteRegs(std::string command_reg, int index, std::string read_reg); + uint16_t getChMap(); };