37 auto saveViaOverrideConfigurationLine =
40 const nlohmann::json item_json = { {
"signal_layer_from",
LSET::Name( item.m_SignalLayerFrom ) },
41 {
"signal_layer_to",
LSET::Name( item.m_SignalLayerTo ) },
42 {
"via_layer_from",
LSET::Name( item.m_ViaLayerFrom ) },
43 {
"via_layer_to",
LSET::Name( item.m_ViaLayerTo ) },
44 {
"delay", item.m_Delay } };
46 json_array.push_back( item_json );
49 auto readViaOverrideConfigurationLine = [](
const nlohmann::json& entry )
51 wxString signalLayerFromName = entry[
"signal_layer_from"];
54 wxString signalLayerToName = entry[
"signal_layer_to"];
57 wxString viaLayerFromName = entry[
"via_layer_from"];
60 wxString viaLayerToName = entry[
"via_layer_to"];
63 int delay = entry[
"delay"];
73 auto saveUserDefinedProfileConfigurationLine =
74 [saveViaOverrideConfigurationLine]( nlohmann::json& json_array,
const TUNING_PROFILE& item )
76 nlohmann::json layer_entries = nlohmann::json::array();
80 nlohmann::json layer_json;
85 layer_json[
"width"] = trackEntry.
m_width;
87 layer_json[
"delay"] = trackEntry.
m_delay;
89 layer_entries.push_back( layer_json );
92 nlohmann::json via_overrides = nlohmann::json::array();
96 saveViaOverrideConfigurationLine( via_overrides, viaOverride );
99 const nlohmann::json item_json = { {
"profile_name", item.m_ProfileName.ToUTF8() },
100 {
"type",
static_cast<int>( item.m_Type ) },
101 {
"target_impedance", item.m_TargetImpedance },
102 {
"frequency", item.m_Frequency },
103 {
"model_solder_mask", item.m_ModelSolderMask },
104 {
"enable_time_domain_tuning", item.m_EnableTimeDomainTuning },
105 {
"layer_entries", layer_entries },
106 {
"via_prop_delay", item.m_ViaPropagationDelay },
107 {
"via_overrides", via_overrides } };
109 json_array.push_back( item_json );
112 auto readUserDefinedProfileConfigurationLine = [readViaOverrideConfigurationLine](
const nlohmann::json& entry )
114 const wxString profileName = entry[
"profile_name"];
116 const double targetImpedance = entry[
"target_impedance"];
117 const double frequency = entry[
"frequency"];
118 const bool modelSolderMask = entry[
"model_solder_mask"];
119 const bool enableTimeDomainTuning = entry[
"enable_time_domain_tuning"];
120 const int viaPropDelay = entry[
"via_prop_delay"];
121 std::vector<DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntries;
122 std::map<PCB_LAYER_ID, DELAY_PROFILE_TRACK_PROPAGATION_ENTRY> trackEntriesMap;
124 for(
const nlohmann::json& layerEntry : entry[
"layer_entries"] )
126 if( !layerEntry.is_object() )
129 wxString signalLayer = layerEntry[
"signal_layer"];
130 wxString topRefLayer = layerEntry[
"top_reference_layer"];
131 wxString bottomRefLayer = layerEntry[
"bottom_reference_layer"];
140 trackEntry.
m_width = layerEntry[
"width"];
142 trackEntry.
m_delay = layerEntry[
"delay"];
145 trackEntries.push_back( trackEntry );
146 trackEntriesMap[
static_cast<PCB_LAYER_ID>( signalLayerId )] = trackEntry;
149 std::vector<DELAY_PROFILE_VIA_OVERRIDE_ENTRY> viaOverrides;
151 for(
const nlohmann::json& viaEntry : entry[
"via_overrides"] )
153 if( !viaEntry.is_object() || !viaEntry.contains(
"signal_layer_from" ) )
156 viaOverrides.push_back( readViaOverrideConfigurationLine( viaEntry ) );
163 enableTimeDomainTuning,
165 std::move( trackEntries ),
167 std::move( viaOverrides ),
168 std::move( trackEntriesMap ) };
174 "tuning_profiles_impedance_geometric",
175 [
this, saveUserDefinedProfileConfigurationLine]() -> nlohmann::json
177 nlohmann::json ret = nlohmann::json::array();
180 saveUserDefinedProfileConfigurationLine( ret, entry );
184 [
this, readUserDefinedProfileConfigurationLine](
const nlohmann::json& aJson )
186 if( !aJson.is_array() )
191 for(
const nlohmann::json& entry : aJson )
193 if( !entry.is_object() || !entry.contains(
"profile_name" ) )
196 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.