diff --git a/CMakeLists.txt b/CMakeLists.txt index fb7eff5c9001926b4d264000abb033078045ad71..a4d7c83909b904038e52bdee86c17fa696ea1909 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16) project(doocs-linklock-server) set(${PROJECT_NAME}_MAJOR_VERSION 01) -set(${PROJECT_NAME}_MINOR_VERSION 24) +set(${PROJECT_NAME}_MINOR_VERSION 25) set(${PROJECT_NAME}_PATCH_VERSION 00) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) diff --git a/include/EqLinkLockCtrlFMC25VhdlServer.h b/include/EqLinkLockCtrlFMC25VhdlServer.h index 33c993a7b4886d838d9135a4035820471f9c43d3..458657d432db8b9f85fd8604ae4c358d8a95e90a 100644 --- a/include/EqLinkLockCtrlFMC25VhdlServer.h +++ b/include/EqLinkLockCtrlFMC25VhdlServer.h @@ -51,6 +51,8 @@ public: void interrupt_usr1_core(dmsg_info_t *msginfo); void post_init(void); static int conf_done; + + void names(EqAdr* ea, EqData* result) override; }; diff --git a/include/EqLinkLockServer.h b/include/EqLinkLockServer.h index fbc17e39f1b1a83394d2f0a0db6c4e52ce6735cf..641ef43c9a3ce8926f65520c710e8e702eb043af 100644 --- a/include/EqLinkLockServer.h +++ b/include/EqLinkLockServer.h @@ -48,6 +48,8 @@ public: void interrupt_usr1_core(dmsg_info_t *msginfo); void post_init(void); static int conf_done; + + void names(EqAdr* ea, EqData* result) override; }; diff --git a/src/EqLinkLockCtrlFMC25VhdlServer.cc b/src/EqLinkLockCtrlFMC25VhdlServer.cc index 5078eaa21a46b852a33f0569fd1ae2da0eec648d..f2787dcf3e5f8ee0a41f0b4a9a6e715066e614ff 100644 --- a/src/EqLinkLockCtrlFMC25VhdlServer.cc +++ b/src/EqLinkLockCtrlFMC25VhdlServer.cc @@ -87,4 +87,19 @@ void EqLinkLockCtrlFMC25VhdlServer::post_init(void) { } - +// Circumvent server library bug: +// https://mcs-gitlab.desy.de/doocs/doocs-core-libraries/serverlib/-/merge_requests/161 +void EqLinkLockCtrlFMC25VhdlServer::names(EqAdr* ea, EqData* result) { + const char* pp = ea->property(); + int k = 0; + int eol = 0; + for(int i = 0; eol == 0; ++i) { + D_fct* dp = prop_get(i, &eol); + std::string bname = dp->basename(); + if(doocs::name_match(pp, bname.c_str())) { + dp->names(ea, result, &k); + k++; + if(k == USTR_LENGTH) break; + } + } +} diff --git a/src/EqLinkLockServer.cc b/src/EqLinkLockServer.cc index 18fa7f78363901e341d0184d36662869c61512fd..36632cbcee31a70319a7ae80cc18c999264e01d7 100644 --- a/src/EqLinkLockServer.cc +++ b/src/EqLinkLockServer.cc @@ -86,4 +86,19 @@ void EqLinkLockServer::post_init(void) { } - +// Circumvent server library bug: +// https://mcs-gitlab.desy.de/doocs/doocs-core-libraries/serverlib/-/merge_requests/161 +void EqLinkLockServer::names(EqAdr* ea, EqData* result) { + const char* pp = ea->property(); + int k = 0; + int eol = 0; + for(int i = 0; eol == 0; ++i) { + D_fct* dp = prop_get(i, &eol); + std::string bname = dp->basename(); + if(doocs::name_match(pp, bname.c_str())) { + dp->names(ea, result, &k); + k++; + if(k == USTR_LENGTH) break; + } + } +}