ifw-rtmslib 1.0.0-pre2
 
Loading...
Searching...
No Matches
common.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
8#include <array>
9#include <cstdint>
10#include <iostream>
11#include <thread>
12
13#include <boost/endian/arithmetic.hpp>
14
15#include <fmt/format.h>
16
17#include <fitsio.h>
18
19#include <llnetio/mudpi/io.hpp>
20#include <llnetio/rtms/io.hpp>
21#include <llnetio/rtms/rtms.hpp>
22
23#include <ifw/fnd/defs/dataType.hpp>
24#include <ifw/fnd/tools/tools.hpp>
26
27namespace ifw::rtmslib {
28
34
35 // Computed per-packet overheads (MUDPI + RTMS headers, no padding).
37 constexpr std::size_t RTMS_LEADER_HDR_SZ =
38 sizeof(llnetio::mudpi::Header) +
39 sizeof(llnetio::rtms::CommonHeader) +
40 sizeof(llnetio::rtms::LeaderHeader);
41 constexpr std::size_t RTMS_PAYLOAD_HDR_SZ =
42 sizeof(llnetio::mudpi::Header) +
43 sizeof(llnetio::rtms::CommonHeader) +
44 sizeof(llnetio::rtms::PayloadHeader);
45 constexpr std::size_t RTMS_TRAILER_HDR_SZ = RTMS_LEADER_HDR_SZ;
46 constexpr auto LEADER_TRAILER_PACKET_NB = 2;
47
48 inline constexpr uint16_t ExtInfoSizeFromMode(ExtendedInfoMode mode) {
49 switch (mode) {
51 return 0;
53 return static_cast<uint16_t>(sizeof(double));
55 default:
56 return static_cast<uint16_t>(SIZE_SAMPLE_EXT_INFO);
57 }
58 }
59
60 inline constexpr const char* ToString(ExtendedInfoMode mode) {
61 switch (mode) {
63 return "None";
65 return "TimestampOnly";
67 default:
68 return "BasicImageInfo";
69 }
70 }
71
72 std::string ExtInfoSummary(const std::vector<uint8_t>& packed_ext_info);
73
74// The RTMSLIB_DEBUG environment variable can be defined to switch on log level
75// debugging in the RTMS Lib.
76constexpr const char* RTMSLIB_DEBUG = "RTMSLIB_DEBUG";
77
78extern int8_t __rtmslib_debug__;
79
80#define RTT_DEBUG \
81 if (__rtmslib_debug__ == -1) { \
82 __rtmslib_debug__ = std::getenv(RTMSLIB_DEBUG) != nullptr; \
83 } \
84 if (__rtmslib_debug__)
85
86#define RTT_PRINT(msg) \
87 do { \
88 fmt::print("RTMSLIB-DEBUG:{}:{}: {}\n", ifw::rtmslib::Time(), IFWLOC, msg); \
89 } while (0);
90
91 inline double Time() {
92 std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
93 auto duration = now.time_since_epoch();
94 auto time_now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count();
95 return (time_now_ns / 1e9);
96 }
97
98 inline void Sleep(const double sleep_time) {
99 std::chrono::duration<double> chrono_sleep_time(sleep_time);
100 std::this_thread::sleep_for(chrono_sleep_time);
101 }
102
103 void HandleCfitsioError(const std::string& operation,
104 const int cfitsio_status);
105
106 std::tuple<std::vector<uint8_t>, int, int, int, int> LoadFitsImageCube(const char* filename);
107
108}
Common utilities for RTMS Lib.
Definition common.cpp:21
std::string ExtInfoSummary(const std::vector< uint8_t > &packed_ext_info)
Definition common.cpp:40
constexpr const char * ToString(ExtendedInfoMode mode)
Definition common.hpp:60
int8_t __rtmslib_debug__
Definition common.cpp:23
constexpr uint16_t ExtInfoSizeFromMode(ExtendedInfoMode mode)
Definition common.hpp:48
constexpr std::size_t RTMS_LEADER_HDR_SZ
Definition common.hpp:37
constexpr auto LEADER_TRAILER_PACKET_NB
Definition common.hpp:46
std::tuple< std::vector< uint8_t >, int, int, int, int > LoadFitsImageCube(const char *filename)
Definition common.cpp:99
void Sleep(const double sleep_time)
Definition common.hpp:98
constexpr std::size_t RTMS_PAYLOAD_HDR_SZ
Definition common.hpp:41
constexpr std::size_t SIZE_SAMPLE_EXT_INFO
Definition sampleExtInfo.hpp:22
constexpr std::size_t RTMS_TRAILER_HDR_SZ
Definition common.hpp:45
ExtendedInfoMode
Definition common.hpp:29
@ BasicImageInfo
Full SampleExtInfo block.
Definition common.hpp:32
@ None
Leader packets carry no extended info.
Definition common.hpp:30
@ TimestampOnly
Only the timestamp (8 bytes)
Definition common.hpp:31
double Time()
Definition common.hpp:91
constexpr auto MAX_NB_BUFFERS_FOR_UDP_PACKET
Definition common.hpp:36
constexpr const char * RTMSLIB_DEBUG
Definition common.hpp:76
void HandleCfitsioError(const std::string &operation, const int cfitsio_status)
Definition common.cpp:160