From c154164effad22b3f2c13771bf3c7023b7057d52 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 5 Jan 2026 17:51:54 +0100 Subject: [PATCH] refactoring --- .../slsDetectorServer/include/XILINX_FMC.h | 4 +- .../slsDetectorServer/src/XILINX_FMC.c | 39 +++++++++++++------ .../slsDetectorFunctionList.c | 11 ++++-- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/slsDetectorServers/slsDetectorServer/include/XILINX_FMC.h b/slsDetectorServers/slsDetectorServer/include/XILINX_FMC.h index 99647ef28..a01ce69f6 100644 --- a/slsDetectorServers/slsDetectorServer/include/XILINX_FMC.h +++ b/slsDetectorServers/slsDetectorServer/include/XILINX_FMC.h @@ -1,5 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -void XILINX_FMC_enable_all(); -void XILINX_FMC_disable_all(); \ No newline at end of file +int XILINX_FMC_enable_all(char* error_message, int message_size); +int XILINX_FMC_disable_all(char* error_message, int message_size); \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer/src/XILINX_FMC.c b/slsDetectorServers/slsDetectorServer/src/XILINX_FMC.c index 6d55d8c7f..4451ca1f0 100644 --- a/slsDetectorServers/slsDetectorServer/src/XILINX_FMC.c +++ b/slsDetectorServers/slsDetectorServer/src/XILINX_FMC.c @@ -24,41 +24,56 @@ static const char *fmc_files[] = { FMC_12V_EN, FMCP_12V_EN }; +#define FMC_NUM_FILES (sizeof(fmc_files) / sizeof(fmc_files[0])) // clang-format on -void XILINX_FMC_enable_all() { +int XILINX_FMC_enable_all(char* error_message, int message_size) { LOG(logINFOBLUE, ("enable FMC power\n")); #ifdef VIRTUAL return; #endif char full_path[64]; - for (size_t i = 0; i < sizeof(fmc_files) / sizeof(fmc_files[0]); ++i) { - snprintf(full_path, sizeof(full_path), "%s%s", FMC_BASE_PATH, fmc_files[i]); + for (size_t i = 0; i < FMC_NUM_FILES; ++i) { + const char* file = fmc_files[i]; + snprintf(full_path, sizeof(full_path), "%s%s", FMC_BASE_PATH, file); FILE *fp = fopen(full_path, "w"); if (fp == NULL) { - LOG(logERROR,("XILINX_FMC: enable Error\n")); - continue; + snprintf(error_message, message_size, "XILINX_FMC: Couuld not enable.\n"); + LOG(logERROR, (error_message)); + return 1; } - fprintf(fp, "1\n"); + if (fprintf(fp, "1\n") != 1) { + snprintf(error_message, message_size, "XILINX_FMC: Could not write enable.\n"); + LOG(logERROR, (error_message)); + return 1; + } fclose(fp); } + return 0; } -void XILINX_FMC_disable_all() { +int XILINX_FMC_disable_all(char* error_message, int message_size) { LOG(logINFOBLUE, ("disable FMC power\n")); #ifdef VIRTUAL return; #endif char full_path[64]; - for (size_t i = 0; i < sizeof(fmc_files) / sizeof(fmc_files[0]); ++i) { - snprintf(full_path, sizeof(full_path), "%s%s", FMC_BASE_PATH, fmc_files[i]); + for (size_t i = 0; i < FMC_NUM_FILES; ++i) { + const char* file = fmc_files[i]; + snprintf(full_path, sizeof(full_path), "%s%s", FMC_BASE_PATH, file); FILE *fp = fopen(full_path, "w"); if (fp == NULL) { - LOG(logERROR,("XILINX_FMC: disable Error\n")); - continue; + snprintf(error_message, message_size, "XILINX_FMC: Could not disable\n"); + LOG(logERROR, (error_message)); + return 1; + } + if (fprintf(fp, "0\n") != 1) { + snprintf(error_message, message_size, "XILINX_FMC: Could not write disable.\n"); + LOG(logERROR, (error_message)); + return 1; } - fprintf(fp, "0\n"); fclose(fp); } + return 0; } \ No newline at end of file diff --git a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c index f62cef29a..3f1d4a10c 100644 --- a/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/xilinx_ctbDetectorServer/slsDetectorFunctionList.c @@ -407,7 +407,10 @@ void setupDetector() { NPWR, DAC_POWERDOWN_DRIVER_FILE_NAME); // power LTC2620 before talking to it: - XILINX_FMC_enable_all(); + initError = XILINX_FMC_enable_all(initErrorMessage, MAX_STR_LENGTH); + if (initError == FAIL) { + return; + } LOG(logINFOBLUE, ("Powering down all dacs\n")); for (int idac = 0; idac < NDAC; ++idac) { @@ -583,10 +586,10 @@ int powerChip(int on, char *mess) { } else { LOG(logINFOBLUE, ("Powering chip: off\n")); bus_w(addr, bus_r(addr) & ~mask); - XILINX_FMC_disable_all(); - chipConfigured = 0; - + if (FAIL == XILINX_FMC_disable_all(mess, MAX_STR_LENGTH)) { + return FAIL; + } #ifdef VIRTUAL setTransceiverAlignment(0); #endif