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 {
"generate_drc_rules", item.m_GenerateNetClassDRCRules },
100 {
"enable_time_domain_tuning", item.m_EnableTimeDomainTuning },
101 {
"layer_entries", layer_entries },
102 {
"via_prop_delay", item.m_ViaPropagationDelay },
103 {
"via_overrides", via_overrides } };
105 json_array.push_back( item_json );
108 auto readUserDefinedProfileConfigurationLine = [&readViaOverrideConfigurationLine](
const nlohmann::json& entry )
110 const wxString profileName = entry[
"profile_name"];
112 const double targetImpedance = entry[
"target_impedance"];
113 const bool generateDrcRules = entry[
"generate_drc_rules"];
114 const bool enableTimeDomainTuning = entry[
"enable_time_domain_tuning"];
115 const int viaPropDelay = entry[
"via_prop_delay"];
116 std::vector<DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntries;
117 std::map<PCB_LAYER_ID, DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntriesMap;
119 for(
const nlohmann::json& layerEntry : entry[
"layer_entries"] )
121 if( !layerEntry.is_object() )
124 wxString signalLayer = layerEntry[
"signal_layer"];
125 wxString topRefLayer = layerEntry[
"top_reference_layer"];
126 wxString bottomRefLayer = layerEntry[
"bottom_reference_layer"];
135 trackEntry.
m_width = layerEntry[
"width"];
137 trackEntry.
m_delay = layerEntry[
"delay"];
140 trackEntries.push_back( trackEntry );
141 trackEntriesMap[
static_cast<PCB_LAYER_ID>( signalLayerId )] = trackEntry;
144 std::vector<DELAY_PROFILE_VIA_OVERRIDE_ENTRY> viaOverrides;
146 for(
const nlohmann::json& viaEntry : entry[
"via_overrides"] )
148 if( !viaEntry.is_object() || !viaEntry.contains(
"signal_layer_from" ) )
151 viaOverrides.push_back( readViaOverrideConfigurationLine( viaEntry ) );
158 enableTimeDomainTuning,
159 std::move( trackEntries ),
161 std::move( viaOverrides ),
162 std::move( trackEntriesMap ) };
168 "tuning_profiles_impedance_geometric",
169 [&]() -> nlohmann::json
171 nlohmann::json ret = nlohmann::json::array();
174 saveUserDefinedProfileConfigurationLine( ret, entry );
178 [&](
const nlohmann::json& aJson )
180 if( !aJson.is_array() )
185 for(
const nlohmann::json& entry : aJson )
187 if( !entry.is_object() || !entry.contains(
"profile_name" ) )
190 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.