34 auto saveViaOverrideConfigurationLine =
37 const nlohmann::json item_json = { {
"signal_layer_from",
LSET::Name( item.m_SignalLayerFrom ) },
38 {
"signal_layer_to",
LSET::Name( item.m_SignalLayerTo ) },
39 {
"via_layer_from",
LSET::Name( item.m_ViaLayerFrom ) },
40 {
"via_layer_to",
LSET::Name( item.m_ViaLayerTo ) },
41 {
"delay", item.m_Delay } };
43 json_array.push_back( item_json );
46 auto readViaOverrideConfigurationLine = [](
const nlohmann::json& entry )
48 wxString signalLayerFromName = entry[
"signal_layer_from"];
51 wxString signalLayerToName = entry[
"signal_layer_to"];
54 wxString viaLayerFromName = entry[
"via_layer_from"];
57 wxString viaLayerToName = entry[
"via_layer_to"];
60 int delay = entry[
"delay"];
70 auto saveUserDefinedProfileConfigurationLine =
71 [&saveViaOverrideConfigurationLine]( nlohmann::json& json_array,
const TUNING_PROFILE& item )
73 nlohmann::json layer_entries = nlohmann::json::array();
77 nlohmann::json layer_json;
82 layer_json[
"width"] = trackEntry.
m_width;
84 layer_json[
"delay"] = trackEntry.
m_delay;
86 layer_entries.push_back( layer_json );
89 nlohmann::json via_overrides = nlohmann::json::array();
93 saveViaOverrideConfigurationLine( via_overrides, viaOverride );
96 const nlohmann::json item_json = { {
"profile_name", item.m_ProfileName.ToUTF8() },
97 {
"type",
static_cast<int>( item.m_Type ) },
98 {
"target_impedance", item.m_TargetImpedance },
99 {
"enable_time_domain_tuning", item.m_EnableTimeDomainTuning },
100 {
"layer_entries", layer_entries },
101 {
"via_prop_delay", item.m_ViaPropagationDelay },
102 {
"via_overrides", via_overrides } };
104 json_array.push_back( item_json );
107 auto readUserDefinedProfileConfigurationLine = [&readViaOverrideConfigurationLine](
const nlohmann::json& entry )
109 const wxString profileName = entry[
"profile_name"];
111 const double targetImpedance = entry[
"target_impedance"];
112 const bool enableTimeDomainTuning = entry[
"enable_time_domain_tuning"];
113 const int viaPropDelay = entry[
"via_prop_delay"];
114 std::vector<DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntries;
115 std::map<PCB_LAYER_ID, DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntriesMap;
117 for(
const nlohmann::json& layerEntry : entry[
"layer_entries"] )
119 if( !layerEntry.is_object() )
122 wxString signalLayer = layerEntry[
"signal_layer"];
123 wxString topRefLayer = layerEntry[
"top_reference_layer"];
124 wxString bottomRefLayer = layerEntry[
"bottom_reference_layer"];
133 trackEntry.
m_width = layerEntry[
"width"];
135 trackEntry.
m_delay = layerEntry[
"delay"];
138 trackEntries.push_back( trackEntry );
139 trackEntriesMap[
static_cast<PCB_LAYER_ID>( signalLayerId )] = trackEntry;
142 std::vector<DELAY_PROFILE_VIA_OVERRIDE_ENTRY> viaOverrides;
144 for(
const nlohmann::json& viaEntry : entry[
"via_overrides"] )
146 if( !viaEntry.is_object() || !viaEntry.contains(
"signal_layer_from" ) )
149 viaOverrides.push_back( readViaOverrideConfigurationLine( viaEntry ) );
155 enableTimeDomainTuning,
156 std::move( trackEntries ),
158 std::move( viaOverrides ),
159 std::move( trackEntriesMap ) };
165 "tuning_profiles_impedance_geometric",
166 [&]() -> nlohmann::json
168 nlohmann::json ret = nlohmann::json::array();
171 saveUserDefinedProfileConfigurationLine( ret, entry );
175 [&](
const nlohmann::json& aJson )
177 if( !aJson.is_array() )
182 for(
const nlohmann::json& entry : aJson )
184 if( !entry.is_object() || !entry.contains(
"profile_name" ) )
187 m_tuningProfiles.emplace_back( readUserDefinedProfileConfigurationLine( entry ) );
Represents a single line in a time domain profile track propagation setup.
Represents a single line in the time domain configuration via overrides configuration grid.