|
|
|
@ -50,125 +50,6 @@ bool NETLIST_EXPORTER_KICAD::WriteNetlist( const wxString& aOutFileName, unsigne |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* Temporary QC measure: |
|
|
|
* Generate the netlist again using the old algorithm and compare. |
|
|
|
* In theory, if the schematic does not use any of the new bus techniques |
|
|
|
* (bus aliases, bus groups, etc) they should match. If not, we can throw |
|
|
|
* a warning and generate some debug output to fix the new netlister. |
|
|
|
* |
|
|
|
* This whole block can be removed once we are confident in the new code. |
|
|
|
*/ |
|
|
|
|
|
|
|
if( !m_graph->UsesNewBusFeatures() ) |
|
|
|
{ |
|
|
|
auto old_nets = makeListOfNets( false ); |
|
|
|
|
|
|
|
bool different = false; |
|
|
|
|
|
|
|
for( auto it : m_graph->m_net_code_to_subgraphs_map ) |
|
|
|
{ |
|
|
|
// auto code = it.first;
|
|
|
|
auto subgraphs = it.second; |
|
|
|
auto net_name = subgraphs[0]->GetNetName(); |
|
|
|
|
|
|
|
std::set<wxString> net_pins; |
|
|
|
|
|
|
|
for( auto subgraph : subgraphs ) |
|
|
|
{ |
|
|
|
auto sheet = subgraph->m_sheet; |
|
|
|
|
|
|
|
for( auto item : subgraph->m_items ) |
|
|
|
{ |
|
|
|
if( item->Type() == SCH_PIN_T ) |
|
|
|
{ |
|
|
|
auto pin = static_cast<SCH_PIN*>( item ); |
|
|
|
|
|
|
|
if( pin->IsPowerConnection() || |
|
|
|
(LIB_PART*)( pin->GetLibPin()->GetParent() )->IsPower() ) |
|
|
|
continue; |
|
|
|
|
|
|
|
const wxString& refText = pin->GetParentComponent()->GetRef( &sheet ); |
|
|
|
const wxString& pinText = pin->GetNumber(); |
|
|
|
|
|
|
|
net_pins.insert( refText + "-" + pinText ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool found = false; |
|
|
|
|
|
|
|
// Yes this is slow, but it's a temporary debugging thing.
|
|
|
|
for( auto kid = old_nets->GetChildren(); kid; kid = kid->GetNext() ) |
|
|
|
{ |
|
|
|
for( auto attr = kid->GetAttributes(); attr; attr = attr->GetNext() ) |
|
|
|
{ |
|
|
|
if( attr->GetName() == "name" && attr->GetValue() == net_name ) |
|
|
|
{ |
|
|
|
found = true; |
|
|
|
|
|
|
|
// Check members of this net
|
|
|
|
std::set<wxString> old_net_pins; |
|
|
|
|
|
|
|
for( auto pin_node = kid->GetChildren(); |
|
|
|
pin_node; pin_node = pin_node->GetNext() ) |
|
|
|
{ |
|
|
|
wxString ref, pin; |
|
|
|
|
|
|
|
for( auto pin_attr = pin_node->GetAttributes(); |
|
|
|
pin_attr; pin_attr = pin_attr->GetNext() ) |
|
|
|
{ |
|
|
|
if( pin_attr->GetName() == "ref" ) |
|
|
|
ref = pin_attr->GetValue(); |
|
|
|
|
|
|
|
if( pin_attr->GetName() == "pin" ) |
|
|
|
pin = pin_attr->GetValue(); |
|
|
|
} |
|
|
|
|
|
|
|
old_net_pins.insert( ref + "-" + pin ); |
|
|
|
} |
|
|
|
|
|
|
|
std::vector<wxString> difference( std::max( net_pins.size(), |
|
|
|
old_net_pins.size() ) ); |
|
|
|
|
|
|
|
auto end = std::set_symmetric_difference( net_pins.begin(), |
|
|
|
net_pins.end(), |
|
|
|
old_net_pins.begin(), |
|
|
|
old_net_pins.end(), |
|
|
|
difference.begin() ); |
|
|
|
|
|
|
|
difference.resize( end - difference.begin() ); |
|
|
|
|
|
|
|
if( difference.size() > 0 ) |
|
|
|
{ |
|
|
|
different = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if( !found ) |
|
|
|
{ |
|
|
|
different = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if( different ) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
FILE_OUTPUTFORMATTER formatter( aOutFileName + ".old_algo" ); |
|
|
|
Format( &formatter, GNL_ALL ); |
|
|
|
} |
|
|
|
|
|
|
|
catch( const IO_ERROR& ioe ) |
|
|
|
{ |
|
|
|
DisplayError( NULL, ioe.What() ); |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
|