Program Listing for File encoder.hpp

Return to documentation for file (encoder.hpp)

#ifndef FELIX_FROMHOST_ENCODER_H_
#define FELIX_FROMHOST_ENCODER_H_

#include "device.hpp"

class Encoder {

    public:

        Encoder() = default;

        void set_data_format(int format);

        void set_destination_parameters(uint8_t* dest_start, uint32_t dest_size);

        [[nodiscard]] size_t compute_max_msg_occupancy(size_t size) const;

        [[nodiscard]] int compute_full_blocks(size_t size) const;

        [[nodiscard]] size_t compute_final_bytes(size_t size) const;

        [[nodiscard]] size_t get_block_size() const {return m_block_bytes;};

        [[nodiscard]] uint64_t encode_and_write_msg(uint64_t elink, const uint8_t *source, size_t size, uint32_t dest_offset);

    private:
        uint8_t* m_dest_start{nullptr};
        uint32_t m_dest_size{0};

        //Default: FROMHOST_FORMAT_HDR32_PACKET32_8B (rm- >=5.1 PCIe Gen3)
        int m_header_size{4};
        int m_block_bytes{32};
        int m_payload_bytes{28};
        int m_length_mask{TOFLX_LENGTH_MASK_HDR32_8B};
        int m_elink_shift{TOFLX_ELINK_SHIFT_HDR32_8B};
};

#endif /* FELIX_FROMHOST_ENCODER_H_ */