From 349425adb63260cdd3d496ac9a0ff3c2b575f3dc Mon Sep 17 00:00:00 2001 From: Alice Date: Wed, 27 May 2026 11:56:19 +0200 Subject: [PATCH] update receiver parameters function --- .../include/SPICommunication.h | 29 +++++++++++++++---- .../src/VirtualMatterhornServer.cpp | 2 +- .../include/MemoryModel.hpp | 5 ++++ .../slsDetectorServer_cpp/src/MemoryModel.cpp | 4 +++ slsReceiverSoftware/src/ClientInterface.cpp | 6 +++- slsReceiverSoftware/src/Implementation.cpp | 3 +- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/slsDetectorServers/matterhornServer/include/SPICommunication.h b/slsDetectorServers/matterhornServer/include/SPICommunication.h index 92932c55f..6e3411949 100644 --- a/slsDetectorServers/matterhornServer/include/SPICommunication.h +++ b/slsDetectorServers/matterhornServer/include/SPICommunication.h @@ -22,23 +22,23 @@ template class SPICommunication { void SPIwrite(const SPIRegister &spi_reg, const uint8_t chip_id, const std::vector &data); - void MapToMemory(); + void mapToMemory(); - void UnmapMemory(); + void unmapMemory(); }; template SPICommunication::~SPICommunication() { - UnmapMemory(); + unmapMemory(); } template -void SPICommunication::MapToMemory() { +void SPICommunication::mapToMemory() { static_cast(this)->map_to_memory(); } template -void SPICommunication::UnmapMemory() { +void SPICommunication::unmapMemory() { static_cast(this)->unmap_memory(); } @@ -120,6 +120,12 @@ class VirtualSPICommunication ...); */ + LOG(logDEBUG) << fmt::format( + "Initializing virtual SPI communication with {} registers for {} " + "chips per module", + SPIRegisters::spiregisters.size(), + SPIRegisters::NUM_CHIPS_PER_MODULE); + for (const auto ® : SPIRegisters::spiregisters) { virtual_registers.emplace( reg.spi_register_id, @@ -127,6 +133,16 @@ class VirtualSPICommunication reg.spi_register_id, reg.n_bytes * SPIRegisters::NUM_CHIPS_PER_MODULE}); } + + LOG(logDEBUG) << fmt::format( + "Initialized virtual SPI communication with {} registers for {} " + "chips per module", + virtual_registers.size(), SPIRegisters::NUM_CHIPS_PER_MODULE); + + for (const auto &[register_id, register_memory] : virtual_registers) { + LOG(logDEBUG) << fmt::format( + "Virtual SPI register with id {} has virtual", register_id); + } } void map_to_memory() { @@ -134,6 +150,9 @@ class VirtualSPICommunication // resize the virtual register memory to the correct size based on // the defined SPI registers for (auto &[register_id, register_memory] : virtual_registers) { + LOG(logDEBUG) << fmt::format("Mapping virtual SPI register with id " + "{} to virtual memory", + register_id); register_memory.mapToMemory(); } } diff --git a/slsDetectorServers/matterhornServer/src/VirtualMatterhornServer.cpp b/slsDetectorServers/matterhornServer/src/VirtualMatterhornServer.cpp index f47ab2c4b..e502d01a2 100644 --- a/slsDetectorServers/matterhornServer/src/VirtualMatterhornServer.cpp +++ b/slsDetectorServers/matterhornServer/src/VirtualMatterhornServer.cpp @@ -13,7 +13,7 @@ VirtualMatterhornServer::VirtualMatterhornServer(uint16_t port) // map the IP core base addresses to virtual memory busCommunication.mapToMemory(); - spiCommunication.MapToMemory(); + spiCommunication.mapToMemory(); // should maybe be part of the constructor? tcpInterface->startTCPServer(); diff --git a/slsDetectorServers/slsDetectorServer_cpp/include/MemoryModel.hpp b/slsDetectorServers/slsDetectorServer_cpp/include/MemoryModel.hpp index 4131fb486..757edadfd 100644 --- a/slsDetectorServers/slsDetectorServer_cpp/include/MemoryModel.hpp +++ b/slsDetectorServers/slsDetectorServer_cpp/include/MemoryModel.hpp @@ -1,8 +1,11 @@ #pragma once #include "fmt/format.h" +#include "sls/logger.h" #include #include +namespace sls { + /// @brief class to handle memory mapping and access for hardware IP cores class HardwareMemoryModel { @@ -61,3 +64,5 @@ template class VirtualMemoryModel { /// @brief size mapped memory region [bytes] const size_t size_memory_space{0}; }; + +} // namespace sls \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer_cpp/src/MemoryModel.cpp b/slsDetectorServers/slsDetectorServer_cpp/src/MemoryModel.cpp index 0ba3b365a..d9aca863f 100644 --- a/slsDetectorServers/slsDetectorServer_cpp/src/MemoryModel.cpp +++ b/slsDetectorServers/slsDetectorServer_cpp/src/MemoryModel.cpp @@ -6,6 +6,8 @@ #include #include +namespace sls { + HardwareMemoryModel::HardwareMemoryModel(const uint32_t IPcore_base_address, const size_t size_memory_space_) : IPCore_base_address(IPcore_base_address), @@ -51,3 +53,5 @@ void HardwareMemoryModel::unmapMemory() { } HardwareMemoryModel::~HardwareMemoryModel() { unmapMemory(); } + +} // namespace sls \ No newline at end of file diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 32093a73d..4ea8267f5 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -398,7 +398,7 @@ int ClientInterface::setup_receiver(Interface &socket) { } impl()->setThresholdEnergy(val); } - if (detType == EIGER || detType == MYTHEN3) { + if (detType == EIGER || detType == MYTHEN3 || detType == MATTERHORN) { impl()->setDynamicRange(arg.dynamicRange); } impl()->setTimingMode(arg.timMode); @@ -429,6 +429,10 @@ int ClientInterface::setup_receiver(Interface &socket) { impl()->setGateDelay3(std::chrono::nanoseconds(arg.gateDelay3Ns)); impl()->setNumberOfGates(arg.gates); } + if (detType == MATTERHORN) { + impl()->setCounterMask(arg.countermask); + } + LOG(logDEBUG) << "set counter mask to " << arg.countermask; if (detType == GOTTHARD2) { impl()->setBurstMode(arg.burstType); } diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 6fff07b23..81d347414 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -269,7 +269,8 @@ void Implementation::setModulePositionId(const int id) { xy portGeometry = GetPortGeometry(); streamingPort = DEFAULT_ZMQ_RX_PORTNO + modulePos * portGeometry.x; - assert(numModules.y != 0); + assert(numModules.y != + 0); // TODO why an assert here? should we throw an exception instead? for (unsigned int i = 0; i < listener.size(); ++i) { uint16_t row = 0, col = 0; row = (modulePos % numModules.y) * portGeometry.y;