Program Listing for File publisher.hpp
↰ Return to documentation for file (publisher.hpp
)
#ifndef FELIX_DATAPUBLISHER_H_
#define FELIX_DATAPUBLISHER_H_
#include <sys/uio.h>
#include <cstdint>
#include <functional>
#include <vector>
#include "elink.hpp"
#include "completion_table.hpp"
class Publisher
{
protected:
size_t m_max_msg_size{};
uint32_t m_max_iov_len{};
[[nodiscard]] std::uint8_t truncate_msg_if_too_large(iovec *iov, uint32_t &size, std::uint8_t status);
public:
using Callback = std::function<bool()>;
enum Result
{
OK = 0,
ERROR = 1,
AGAIN = 2,
PARTIAL = 3,
ERROR_TOO_BIG = 4,
NO_SUBSCRIBERS = 5,
DECODING_ERROR = 7
};
virtual ~Publisher() = default;
virtual bool declare(const std::vector<Elink> &elinks) = 0;
virtual Result publish(felix_id_t fid, iovec *iov, uint32_t iovlen, size_t bytes, uint32_t block_addr, std::uint8_t status) = 0;
virtual Result publish(felix_id_t fid, uint8_t *data, size_t len) = 0;
virtual Result flush(felix_id_t fid) = 0;
virtual void set_periodic_callback(uint32_t period_us, Callback callback) = 0;
virtual void set_asynch_callback(Callback callback) = 0;
virtual void fire_asynch_callback() = 0;
virtual const CompletionTable* get_completion_table() = 0;
// monitoring
virtual uint32_t get_resource_counter() = 0;
virtual uint32_t get_subscription_number() = 0;
virtual uint64_t get_resource_available_calls() = 0;
};
#endif /* FELIX_DATAPUBLISHER_H_ */