Files
Jungfraujoch/frame_serialize/JFJochFrameDeserializer.h

62 lines
1.9 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFJOCHFRAMEDESERIALIZER_H
#define JUNGFRAUJOCH_JFJOCHFRAMEDESERIALIZER_H
#include <cstdint>
#include <vector>
#include <string>
#include <memory>
#include "../common/SpotToSave.h"
#include "tinycbor/src/cbor.h"
#include "CBORMessages.h"
#include <mutex>
class JFJochFrameDeserializer {
public:
enum class Type {START, END, IMAGE};
private:
mutable std::mutex m;
Type msg_type;
DataMessage data_message;
StartMessage start_message;
EndMessage end_message;
void DecodeType(CborValue &value);
void GetCBORSpots(CborValue &value);
void ProcessGoniometerMap(CborValue &value);
GoniometerAxis ProcessGoniometer(CborValue &value);
void ProcessDetTranslation(CborValue &value);
void ProcessCalibration(CborValue &value);
void ProcessChannels(CborValue &value);
void ProcessImageData(CborValue &value);
void ProcessPixelMaskElement(CborValue &value);
void ProcessRadIntResultElement(CborValue &value);
void ProcessADUHistogramElement(CborValue &value);
void ProcessUnitCellElement(CborValue &value);
void ProcessStartMessageUserDataElement(CborValue &value);
void ProcessImageMessageUserDataElement(CborValue &value);
void ProcessEndMessageUserDataElement(CborValue &value);
bool ProcessImageMessageElement(CborValue &value);
bool ProcessStartMessageElement(CborValue &value);
bool ProcessEndMessageElement(CborValue &value);
public:
void Process(const std::vector<uint8_t>& buffer);
void Process(const uint8_t *msg, size_t msg_size);
[[nodiscard]] Type GetType() const;
[[nodiscard]] EndMessage GetEndMessage() const;
[[nodiscard]] StartMessage GetStartMessage() const;
// WARNING!!! pointer to data is valid only as long as input buffer is valid
[[nodiscard]] DataMessage GetDataMessage() const;
};
#endif //JUNGFRAUJOCH_JFJOCHFRAMEDESERIALIZER_H