Pcbnew: add more test when reading a netlist file: verify if all pads found in netlist are found in corresponding footprints (no missing pads).
This commit is contained in:
parent
4428d69a63
commit
3d40bd7e16
|
@ -2339,7 +2339,6 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, REPORTER* aReporter )
|
||||||
wxString msg;
|
wxString msg;
|
||||||
D_PAD* pad;
|
D_PAD* pad;
|
||||||
MODULE* footprint;
|
MODULE* footprint;
|
||||||
COMPONENT* component;
|
|
||||||
COMPONENT_NET net;
|
COMPONENT_NET net;
|
||||||
|
|
||||||
if( !IsEmpty() )
|
if( !IsEmpty() )
|
||||||
|
@ -2350,7 +2349,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, REPORTER* aReporter )
|
||||||
if( bbbox.GetWidth() || bbbox.GetHeight() )
|
if( bbbox.GetWidth() || bbbox.GetHeight() )
|
||||||
{
|
{
|
||||||
bestPosition.x = bbbox.Centre().x;
|
bestPosition.x = bbbox.Centre().x;
|
||||||
bestPosition.y = bbbox.GetBottom() + DMils2iu( 5000 );
|
bestPosition.y = bbbox.GetBottom() + Millimeter2iu( 10 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2366,7 +2365,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, REPORTER* aReporter )
|
||||||
|
|
||||||
for( i = 0; i < aNetlist.GetCount(); i++ )
|
for( i = 0; i < aNetlist.GetCount(); i++ )
|
||||||
{
|
{
|
||||||
component = aNetlist.GetComponent( i );
|
COMPONENT* component = aNetlist.GetComponent( i );
|
||||||
|
|
||||||
if( aReporter && aReporter->ReportAll() )
|
if( aReporter && aReporter->ReportAll() )
|
||||||
{
|
{
|
||||||
|
@ -2574,6 +2573,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, REPORTER* aReporter )
|
||||||
if( aNetlist.GetDeleteExtraFootprints() )
|
if( aNetlist.GetDeleteExtraFootprints() )
|
||||||
{
|
{
|
||||||
MODULE* nextModule;
|
MODULE* nextModule;
|
||||||
|
const COMPONENT* component;
|
||||||
|
|
||||||
for( MODULE* module = m_Modules; module != NULL; module = nextModule )
|
for( MODULE* module = m_Modules; module != NULL; module = nextModule )
|
||||||
{
|
{
|
||||||
|
@ -2602,5 +2602,39 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, REPORTER* aReporter )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Last step: verify all pads found in netlist:
|
||||||
|
// They should exist in footprints, otherwise the footprint is wrong
|
||||||
|
// note also references or time stamps are updated, so we use only
|
||||||
|
// the reference to find a footprint
|
||||||
|
if( aReporter && aReporter->ReportErrors() )
|
||||||
|
{
|
||||||
|
wxString padname;
|
||||||
|
for( i = 0; i < aNetlist.GetCount(); i++ )
|
||||||
|
{
|
||||||
|
const COMPONENT* component = aNetlist.GetComponent( i );
|
||||||
|
MODULE* footprint = FindModuleByReference( component->GetReference() );
|
||||||
|
|
||||||
|
if( footprint == NULL ) // It can be missing in partial designs
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Explore all pins/pads in component
|
||||||
|
for( unsigned jj = 0; jj < component->GetNetCount(); jj++ )
|
||||||
|
{
|
||||||
|
net = component->GetNet( jj );
|
||||||
|
padname = net.GetPinName();
|
||||||
|
|
||||||
|
if( footprint->FindPadByName( padname ) )
|
||||||
|
continue; // OK, pad found
|
||||||
|
|
||||||
|
// not found: bad footprint, report error
|
||||||
|
msg.Printf( _( "** Error: Component \"%s\" pad <%s> not found in footprint \"%s\" **\n" ),
|
||||||
|
GetChars( component->GetReference() ),
|
||||||
|
GetChars( padname ),
|
||||||
|
GetChars( footprint->GetLibRef() ) );
|
||||||
|
aReporter->Report( msg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue