// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_DECTRISSIMPLONCLIENT_H #define JFJOCH_DECTRISSIMPLONCLIENT_H #include #include #include "../common/DetectorSetup.h" #include "../common/DiffractionExperiment.h" struct SimplonConfig { nlohmann::json min; nlohmann::json max; nlohmann::json val; std::vector allowed_values; std::string unit; }; enum class SimplonState {Na, Ready, Initialize, Configure, Acquire, Idle, Test, Error}; enum class SimplonDetectorCommand {Initialize, Arm, Disarm, Trigger, Cancel}; std::string to_string(SimplonState state); class DectrisSimplonClient { std::string hostname; uint16_t port; enum class SimplonModule {Detector, Stream, Filewriter, Monitor}; enum class SimplonTask {Config, Command, Status}; constexpr static const std::string_view api_version = "1.8.0"; static std::string GenAddr(SimplonModule element, SimplonTask task, const std::string& key); SimplonConfig GetDetCfg(const std::string& key); SimplonConfig GetConfig(SimplonModule element, SimplonTask task, const std::string &key); SimplonConfig GetConfig(SimplonModule element, const std::string &key); nlohmann::json GetStatus(SimplonModule element, const std::string &key); void SetConfig(SimplonModule element, const std::string &key, const nlohmann::json &value); void SendDetectorCommand(SimplonDetectorCommand cmd); public: explicit DectrisSimplonClient(const std::string& hostname, uint16_t port = 80); void ReadDetectorConfig(DetectorSetup &setup); void ConfigureDetector(const DiffractionExperiment& experiment); void StartAcquisition(); void EndAcquisitionFinished(); void CancelAcquisition(); void TriggerAcquisition(); void InitializeDetector(DetectorSetup& setup); SimplonState GetState(); float GetHumidity(); float GetTemperature(); std::vector GetPixelMask(); }; #endif //JFJOCH_DECTRISSIMPLONCLIENT_H