62 lines
1.9 KiB
C++
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
|