73 lines
3.5 KiB
C++
73 lines
3.5 KiB
C++
// Copyright (2019-2023) Paul Scherrer Institute
|
|
|
|
#ifndef JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
|
|
#define JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
|
|
|
|
#include "JFJochReceiver.h"
|
|
#include "jfjoch.grpc.pb.h"
|
|
|
|
#include <mutex>
|
|
|
|
#include "../common/NUMAHWPolicy.h"
|
|
|
|
class JFJochReceiverService final : public JFJochProtoBuf::gRPC_JFJochReceiver::Service {
|
|
NUMAHWPolicy numa_policy;
|
|
std::unique_ptr<JFJochReceiver> receiver;
|
|
AcquisitionDeviceGroup &aq_devices;
|
|
std::unique_ptr<JFCalibration> calibration;
|
|
std::unique_ptr<DiffractionExperiment> experiment;
|
|
Logger &logger;
|
|
|
|
ImagePusher &image_pusher;
|
|
ZMQPreviewPublisher *preview_publisher = nullptr;
|
|
int64_t nthreads = 8;
|
|
|
|
int64_t send_buffer_count = 32;
|
|
|
|
enum class ReceiverState {Idle, Running};
|
|
ReceiverState state = ReceiverState::Idle;
|
|
std::mutex state_mutex;
|
|
std::condition_variable measurement_done;
|
|
std::future<void> measurement;
|
|
void FinalizeMeasurement();
|
|
DataProcessingSettings data_processing_settings;
|
|
public:
|
|
JFJochReceiverService(AcquisitionDeviceGroup &aq_devices,
|
|
Logger &logger, ImagePusher &pusher);
|
|
JFJochReceiverService& PreviewPublisher(ZMQPreviewPublisher *in_preview_writer);
|
|
JFJochReceiverService& NumThreads(int64_t input);
|
|
JFJochReceiverService& SendBufferCount(int64_t input);
|
|
JFJochReceiverService& NUMAPolicy(const NUMAHWPolicy& policy);
|
|
JFJochReceiverService& NUMAPolicy(const std::string& policy);
|
|
|
|
void Start(const DiffractionExperiment &experiment, const JFCalibration *calibration);
|
|
void Abort();
|
|
void Cancel();
|
|
JFJochReceiverOutput Stop();
|
|
void SetDataProcessingSettings(const DataProcessingSettings& settings);
|
|
Plot GetDataProcessingPlot(const PlotRequest& request);
|
|
RadialIntegrationProfiles GetRadialIntegrationProfiles();
|
|
|
|
grpc::Status Start(grpc::ServerContext* context, const JFJochProtoBuf::ReceiverInput* request,
|
|
JFJochProtoBuf::Empty* response) override;
|
|
grpc::Status Abort(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
|
|
JFJochProtoBuf::Empty* response) override;
|
|
grpc::Status Cancel(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
|
|
JFJochProtoBuf::Empty* response) override;
|
|
grpc::Status Stop(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
|
|
JFJochProtoBuf::ReceiverOutput* response) override;
|
|
grpc::Status GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
|
|
JFJochProtoBuf::ReceiverStatus *response) override;
|
|
grpc::Status SetDataProcessingSettings(grpc::ServerContext *context, const JFJochProtoBuf::DataProcessingSettings *request,
|
|
JFJochProtoBuf::Empty *response) override;
|
|
grpc::Status GetNetworkConfig(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
|
|
JFJochProtoBuf::ReceiverNetworkConfig *response) override;
|
|
grpc::Status GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
|
|
JFJochProtoBuf::Plot *response) override;
|
|
grpc::Status GetRadialIntegrationProfiles(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
|
|
JFJochProtoBuf::RadialIntegrationProfiles *response) override;
|
|
};
|
|
|
|
|
|
#endif //JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
|