Files
slsDetectorPackage/slsDetectorServers/matterhornServer/src/utils/HelperFunctions.cpp
T
mazzol_a cfccb1d749
Build on RHEL9 docker image / build (push) Successful in 4m17s
Build on RHEL8 docker image / build (push) Successful in 5m12s
Run Simulator Tests on local RHEL9 / build (push) Successful in 18m38s
Run Simulator Tests on local RHEL8 / build (push) Successful in 22m6s
refactoring directory structure and rename to .hpp
2026-07-07 18:37:21 +02:00

75 lines
2.1 KiB
C++

#include "HelperFunctions.hpp"
#include <stdexcept>
namespace sls {
uint32_t convertCounterMaskToSPICounterMask(const uint32_t counter_mask) {
uint32_t spi_counter_mask = 0;
switch (counter_mask) {
case 0b1:
spi_counter_mask = 0b0000; // counter 0 enabled
break;
case 0b10:
spi_counter_mask = 0b0001; // counter 1 enabled
break;
case 0b100:
spi_counter_mask = 0b0010; // counter 2 enabled
break;
case 0b1000:
spi_counter_mask = 0b0011; // counter 3 enabled
break;
case 0b11:
spi_counter_mask = 0b0100; // counter 0 and 1 enabled
break;
case 0b110:
spi_counter_mask = 0b0101; // counter 1 and 2 enabled
break;
case 0b1100:
spi_counter_mask = 0b0110; // counter 2 and 3 enabled
break;
case 0b1001:
spi_counter_mask = 0b0111; // counter 0 and 3 enabled
break;
case 0b111:
spi_counter_mask = 0b1000; // counter 0, 1 and 2 enabled
break;
case 0b1110:
spi_counter_mask = 0b1001; // counter 1, 2 and 3 enabled
break;
case 0b1101:
spi_counter_mask = 0b1010; // counter 0, 2 and 3 enabled
break;
case 0b1011:
spi_counter_mask = 0b1011; // counter 0, 1 and 3 enabled
break;
case 0b1111:
spi_counter_mask = 0b1100; // counter 0, 1, 2 and 3 enabled
break;
default:
throw std::invalid_argument(
"Invalid counter mask: Only contiguous counters are enabled "
"(including wrap around)");
}
return spi_counter_mask;
}
uint32_t convertSPICounterMaskToCounterMask(const uint32_t spi_counter_mask) {
uint32_t counter_mask{};
uint8_t start_counter = spi_counter_mask & 0b11; // extract starting counter
uint8_t num_counters =
((spi_counter_mask >> 2) & 0b11) + 1; // extract number of counters
constexpr uint8_t max_counters = 4;
for (uint8_t i = 0; i < num_counters; ++i) {
counter_mask |= (1 << ((start_counter + i) % max_counters));
}
return counter_mask;
}
} // namespace sls