5#ifndef CbmTrdFexMessageSpadic_H
6#define CbmTrdFexMessageSpadic_H
18 template<u
int8_t sys_ver>
28 template<
size_t bytes>
35 memcpy(&r,
b,
sizeof(
long));
43 throw std::invalid_argument(fmt::format(
"Reverse ranges not supported : low={:#x} > high={:#x}", l,
h));
49 uint16_t rbytes = bh - bl;
50 if ((bh + 1) > bytes) {
51 throw std::invalid_argument(fmt::format(
"High value: out-of-range, got={:#x}, size={:#x}",
h, (bytes * 8 - 1)));
53 if ((bl + 1) > bytes) {
54 throw std::invalid_argument(fmt::format(
"Low value: out-of-range, got={:#x}, size={:#x}", l, (bytes * 8 - 1)));
57 uint16_t bits_in_h =
h - (8 * bh - 1);
58 uint16_t bits_in_l = l - (8 * bl);
59 uint16_t mask_h = (1 << bits_in_h) - 1;
62 size_t r =
b[bl] >> bits_in_l;
63 if (bh != bl) r |= (
b[bh] & mask_h) << (rbytes * 8);
64 for (
int i = 1; i < rbytes; ++i)
65 r |=
b[bl + i] << (i * 8);
71 template<u
int8_t sys_ver>
79 static constexpr int hts = 62;
88 static constexpr int m_el = 0xff;
89 static constexpr int m_ch = 0xf;
90 static constexpr int m_ts = 0x1fffff;
91 static constexpr int m_pt = 0x1f;
92 static constexpr int m_mA = 0x1ff;
94 static constexpr int m_iMA = 0x7;
95 static constexpr int m_ht = 0x3;
96 static constexpr int m_mh = 0x7;
113 ht = (word >> 62) & 0x3;
126 FexWord(uint8_t elink_v, uint8_t channel_v, uint64_t timestamp_v, uint8_t prec_time_v, uint16_t maxAdc_v,
127 uint16_t timesample_v, uint8_t iMA_v, uint8_t ht_v, uint8_t mh_v)
142 uint8_t prec_time_fixed_point =
prec_time * (1 << 4);
154 memcpy(&nbc.b, &fw,
sizeof(
long));
Data class with information on a STS local track.
constexpr uint8_t BytesPerWord()
static constexpr int m_iMA
static constexpr int m_mh
static constexpr int imas
static constexpr int m_ht
static constexpr int m_mA
static constexpr int m_ch
static constexpr int m_ts
FexWord(NByteContainer< BytesPerWord< 0x10 >()> word)
FexWord(uint8_t elink_v, uint8_t channel_v, uint64_t timestamp_v, uint8_t prec_time_v, uint16_t maxAdc_v, uint16_t timesample_v, uint8_t iMA_v, uint8_t ht_v, uint8_t mh_v)
static constexpr int m_el
static constexpr int m_tsample
static constexpr int maxs
static constexpr int m_pt
size_t range(uint8_t h, uint8_t l)