FERS 0.1.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
vita49_context_builder.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2//
3// Copyright (c) 2026-present FERS Contributors (see AUTHORS.md).
4//
5// See the GNU GPLv2 LICENSE file in the FERS project root for more information.
6
8
9#include <string_view>
10
11namespace serial::vita49
12{
13 namespace
14 {
15 [[nodiscard]] bool modeAllowsMetadata(const std::string& receiver_mode, const std::string_view metadata_mode)
16 {
17 return receiver_mode.empty() || receiver_mode == metadata_mode;
18 }
19 }
20
22 {
23 std::uint32_t flags = 0;
24 if (request.stream.dechirped)
25 {
27 }
28 if (request.stream.if_resampled)
29 {
31 }
32 if (request.sample_loss)
33 {
35 }
36 if (request.stream_open)
37 {
39 }
40 if (request.stream_close)
41 {
43 }
44 if (request.stream.fmcw.present && modeAllowsMetadata(request.stream.mode, "fmcw"))
45 {
47 }
48 if (request.stream.cw.present && modeAllowsMetadata(request.stream.mode, "cw"))
49 {
51 }
52 if (request.stream.pulsed.present && modeAllowsMetadata(request.stream.mode, "pulsed"))
53 {
55 }
56
57 return ContextPacket{
58 .stream_id = request.stream_id,
59 .class_id = kFersVrtIqClassId,
60 .timestamp = request.timestamp,
61 .packet_count = request.packet_count,
62 .cif0 = kFersContextCif0,
63 .state_indicators =
64 makeContextStateIndicators(request.valid_data, request.calibrated_time, request.reference_lock,
65 request.over_range, request.sample_loss),
66 .payload_format = makeComplexInt16PayloadFormat(),
67 .sample_rate = request.stream.sample_rate,
68 .reference_frequency = request.stream.reference_frequency,
69 .if_offset = request.stream.if_offset,
70 .bandwidth = request.stream.bandwidth,
71 .adc_fullscale = request.adc_fullscale,
72 .receiver_id = request.stream.receiver_id,
73 .adc_bits = request.stream.adc_bits,
74 .context_flags = flags,
75 .receiver_name = request.stream.receiver_name,
76 .simulation_name = request.simulation_name,
77 .receiver_mode = request.stream.mode,
78 .coordinate = request.stream.coordinate,
79 .initial_platform_state = request.stream.initial_platform_state,
80 .pulsed = request.stream.pulsed,
81 .cw = request.stream.cw,
82 .fmcw = request.stream.fmcw,
83 };
84 }
85}
static ContextPacket build(const ContextBuildRequest &request)
constexpr std::uint32_t kFersContextCif0
@ ContextFlagFmcwMetadataPresent
@ ContextFlagCwMetadataPresent
@ ContextFlagPulsedMetadataPresent
constexpr std::uint64_t kFersVrtIqClassId
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::uint64_t makeComplexInt16PayloadFormat() noexcept
math::Vec3 max