17 const auto value =
static_cast<std::uint8_t
>(_next & 0x0Fu);
18 _next =
static_cast<std::uint8_t
>((_next + 1u) & 0x0Fu);
24 _next =
static_cast<std::uint8_t
>(packet_count & 0x0Fu);
33 std::uint32_t
header =
static_cast<std::uint32_t
>(type) << 28u;
44 header |=
static_cast<std::uint32_t
>(
tsi) << 22u;
45 header |=
static_cast<std::uint32_t
>(
tsf) << 20u;
46 header |=
static_cast<std::uint32_t
>(packet_count & 0x0Fu) << 16u;
55 throw std::invalid_argument(
"VITA timestamp sample time must be finite");
58 const auto epoch_seconds =
static_cast<std::uint64_t
>(epoch_unix_nanoseconds / 1'000'000'000ull);
59 const auto epoch_nanoseconds =
static_cast<std::uint64_t
>(epoch_unix_nanoseconds % 1'000'000'000ull);
82 throw std::out_of_range(
"VITA UTC integer timestamp is outside 32-bit range");
85 auto fractional_picoseconds =
88 if (fractional_picoseconds >= 1'000'000'000'000ull)
90 fractional_picoseconds -= 1'000'000'000'000ull;
91 if (integer_seconds == std::numeric_limits<std::uint32_t>::max())
93 throw std::out_of_range(
"VITA UTC integer timestamp overflow");
101 std::uint32_t
makeTrailer(
const bool valid_data,
const bool calibrated_time,
const bool reference_lock,
102 const bool over_range,
const bool sample_loss)
noexcept
130 const bool reference_lock,
const bool over_range,
131 const bool sample_loss)
noexcept
133 return makeTrailer(valid_data, calibrated_time, reference_lock, over_range, sample_loss);
144 constexpr std::uint64_t
item_bits = 16ull;
148 constexpr std::uint64_t
version = 1ull;
157 throw std::invalid_argument(
"VITA max UDP payload cannot fit one complex int16 sample");
void setNext(std::uint8_t packet_count) noexcept
std::uint8_t next() noexcept
std::uint8_t peek() const noexcept
double RealType
Type for real numbers.
std::size_t maxComplexSamplesPerSignalPacket(const std::uint16_t max_udp_payload_bytes)
constexpr std::uint32_t kSignalDataFixedBytes
Timestamp timestampFromEpoch(const std::uint64_t epoch_unix_nanoseconds, const RealType sample_time_seconds)
std::uint32_t makeTrailer(const bool valid_data, const bool calibrated_time, const bool reference_lock, const bool over_range, const bool sample_loss) noexcept
@ TrailerEnableSampleLoss
@ TrailerEnableReferenceLock
@ TrailerEnableCalibratedTime
std::uint32_t makeContextStateIndicators(const bool valid_data, const bool calibrated_time, const bool reference_lock, const bool over_range, const bool sample_loss) noexcept
std::uint32_t makeHeader(const PacketType type, const bool class_id_present, const bool trailer_present, const IntegerTimestampMode tsi, const FractionalTimestampMode tsf, const std::uint8_t packet_count, const std::uint16_t packet_size_words) noexcept
std::uint64_t makeComplexInt16PayloadFormat() noexcept
std::uint32_t integer_seconds