refactoring
Some checks failed
Build on RHEL9 / build (push) Failing after 30s
Build on RHEL8 / build (push) Successful in 4m43s

This commit is contained in:
2026-01-05 17:51:54 +01:00
parent d95dff56e4
commit c154164eff
3 changed files with 36 additions and 18 deletions

View File

@@ -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();
int XILINX_FMC_enable_all(char* error_message, int message_size);
int XILINX_FMC_disable_all(char* error_message, int message_size);

View File

@@ -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;
}

View File

@@ -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