ifw-rtmslib 1.0.0
 
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 auto UDP_HDR_SZ = 8;
38 constexpr auto IP_HDR_SZ = 20;
39 constexpr auto CHECK_SUM_HDR_SZ = 2;
40 constexpr std::size_t RTMS_LEADER_HDR_SZ =
41 sizeof(llnetio::mudpi::Header) +
42 sizeof(llnetio::rtms::CommonHeader) +
43 sizeof(llnetio::rtms::LeaderHeader);
44 constexpr std::size_t RTMS_PAYLOAD_HDR_SZ =
45 sizeof(llnetio::mudpi::Header) +
46 sizeof(llnetio::rtms::CommonHeader) +
47 sizeof(llnetio::rtms::PayloadHeader);
48 constexpr std::size_t MUDPI_HDR_SZ =
51 IP_HDR_SZ +
53 constexpr std::size_t RTMS_TRAILER_HDR_SZ = RTMS_LEADER_HDR_SZ;
54 constexpr auto LEADER_TRAILER_PACKET_NB = 2;
55
56 inline constexpr uint16_t ExtInfoSizeFromMode(ExtendedInfoMode mode) {
57 switch (mode) {
59 return 0;
61 return static_cast<uint16_t>(sizeof(double));
63 default:
64 return static_cast<uint16_t>(SIZE_SAMPLE_EXT_INFO);
65 }
66 }
67
68 inline constexpr const char* ToString(ExtendedInfoMode mode) {
69 switch (mode) {
71 return "None";
73 return "TimestampOnly";
75 default:
76 return "BasicImageInfo";
77 }
78 }
79
80 std::string ExtInfoSummary(const std::vector<uint8_t>& packed_ext_info);
81
82// The RTMSLIB_DEBUG environment variable can be defined to switch on log level
83// debugging in the RTMS Lib.
84constexpr const char* RTMSLIB_DEBUG = "RTMSLIB_DEBUG";
85
86extern int8_t __rtmslib_debug__;
87
88#define RTT_DEBUG \
89 if (__rtmslib_debug__ == -1) { \
90 __rtmslib_debug__ = std::getenv(RTMSLIB_DEBUG) != nullptr; \
91 } \
92 if (__rtmslib_debug__)
93
94#define RTT_PRINT(msg) \
95 do { \
96 fmt::print("RTMSLIB-DEBUG:{}:{}: {}\n", ifw::rtmslib::Time(), IFWLOC, msg); \
97 } while (0);
98
99 inline double Time() {
100 std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
101 auto duration = now.time_since_epoch();
102 auto time_now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count();
103 return (time_now_ns / 1e9);
104 }
105
106 inline void Sleep(const double sleep_time) {
107 std::chrono::duration<double> chrono_sleep_time(sleep_time);
108 std::this_thread::sleep_for(chrono_sleep_time);
109 }
110
111 void HandleCfitsioError(const std::string& operation,
112 const int cfitsio_status);
113
114 std::tuple<std::vector<uint8_t>, int, int, int, int> LoadFitsImageCube(const char* filename);
115
116}
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:68
int8_t __rtmslib_debug__
Definition common.cpp:23
constexpr auto UDP_HDR_SZ
Definition common.hpp:37
constexpr uint16_t ExtInfoSizeFromMode(ExtendedInfoMode mode)
Definition common.hpp:56
constexpr std::size_t MUDPI_HDR_SZ
Definition common.hpp:48
constexpr std::size_t RTMS_LEADER_HDR_SZ
Definition common.hpp:40
constexpr auto LEADER_TRAILER_PACKET_NB
Definition common.hpp:54
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:106
constexpr auto IP_HDR_SZ
Definition common.hpp:38
constexpr std::size_t RTMS_PAYLOAD_HDR_SZ
Definition common.hpp:44
constexpr std::size_t SIZE_SAMPLE_EXT_INFO
Definition sampleExtInfo.hpp:22
constexpr std::size_t RTMS_TRAILER_HDR_SZ
Definition common.hpp:53
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:99
constexpr auto MAX_NB_BUFFERS_FOR_UDP_PACKET
Definition common.hpp:36
constexpr auto CHECK_SUM_HDR_SZ
Definition common.hpp:39
constexpr const char * RTMSLIB_DEBUG
Definition common.hpp:84
void HandleCfitsioError(const std::string &operation, const int cfitsio_status)
Definition common.cpp:160