|
|
|
@ -52,15 +52,15 @@ void TestFootprints( NETLIST& aNetlist, BOARD* aBoard, std::vector<std::shared_p |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if( !aBoard->GetDesignSettings().Ignore( DRCE_MISSING_FOOTPRINT ) ) |
|
|
|
// Search for component footprints in the netlist but not on the board.
|
|
|
|
for( unsigned ii = 0; ii < aNetlist.GetCount(); ii++ ) |
|
|
|
{ |
|
|
|
// Search for component footprints in the netlist but not on the board.
|
|
|
|
for( unsigned ii = 0; ii < aNetlist.GetCount(); ii++ ) |
|
|
|
{ |
|
|
|
COMPONENT* component = aNetlist.GetComponent( ii ); |
|
|
|
MODULE* module = aBoard->FindModuleByReference( component->GetReference() ); |
|
|
|
COMPONENT* component = aNetlist.GetComponent( ii ); |
|
|
|
MODULE* module = aBoard->FindModuleByReference( component->GetReference() ); |
|
|
|
|
|
|
|
if( module == NULL ) |
|
|
|
if( module == nullptr ) |
|
|
|
{ |
|
|
|
if( !aBoard->GetDesignSettings().Ignore( DRCE_MISSING_FOOTPRINT ) && module == NULL ) |
|
|
|
{ |
|
|
|
msg.Printf( _( "Missing footprint %s (%s)" ), |
|
|
|
component->GetReference(), |
|
|
|
@ -71,6 +71,64 @@ void TestFootprints( NETLIST& aNetlist, BOARD* aBoard, std::vector<std::shared_p |
|
|
|
aDRCList.push_back( item ); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if( !aBoard->GetDesignSettings().Ignore( DRCE_NET_CONFLICT ) ) |
|
|
|
{ |
|
|
|
for( D_PAD* pad : module->Pads() ) |
|
|
|
{ |
|
|
|
const COMPONENT_NET& sch_net = component->GetNet( pad->GetName() ); |
|
|
|
const wxString& pcb_netname = pad->GetNetname(); |
|
|
|
|
|
|
|
if( !pcb_netname.IsEmpty() && sch_net.GetPinName().IsEmpty() ) |
|
|
|
{ |
|
|
|
msg.Printf( _( "No corresponding pin found in schematic." ) ); |
|
|
|
|
|
|
|
std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( DRCE_NET_CONFLICT ); |
|
|
|
item->SetErrorMessage( msg ); |
|
|
|
item->SetItems( pad ); |
|
|
|
aDRCList.push_back( item ); |
|
|
|
} |
|
|
|
else if( pcb_netname.IsEmpty() && !sch_net.GetNetName().IsEmpty() ) |
|
|
|
{ |
|
|
|
msg.Printf( _( "Pad missing net given by schematic (%s)." ), |
|
|
|
sch_net.GetNetName() ); |
|
|
|
|
|
|
|
std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( DRCE_NET_CONFLICT ); |
|
|
|
item->SetErrorMessage( msg ); |
|
|
|
item->SetItems( pad ); |
|
|
|
aDRCList.push_back( item ); |
|
|
|
} |
|
|
|
else if( pcb_netname != sch_net.GetNetName() ) |
|
|
|
{ |
|
|
|
msg.Printf( _( "Pad net (%s) doesn't match net given by schematic (%s)." ), |
|
|
|
pcb_netname, |
|
|
|
sch_net.GetNetName() ); |
|
|
|
|
|
|
|
std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( DRCE_NET_CONFLICT ); |
|
|
|
item->SetErrorMessage( msg ); |
|
|
|
item->SetItems( pad ); |
|
|
|
aDRCList.push_back( item ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for( unsigned jj = 0; jj < component->GetNetCount(); ++jj ) |
|
|
|
{ |
|
|
|
const COMPONENT_NET& sch_net = component->GetNet( jj ); |
|
|
|
|
|
|
|
if( !module->FindPadByName( sch_net.GetPinName() ) ) |
|
|
|
{ |
|
|
|
msg.Printf( _( "No pad found for pin %s in schematic." ), |
|
|
|
sch_net.GetPinName() ); |
|
|
|
|
|
|
|
std::shared_ptr<DRC_ITEM> item = DRC_ITEM::Create( DRCE_NET_CONFLICT ); |
|
|
|
item->SetErrorMessage( msg ); |
|
|
|
item->SetItems( module ); |
|
|
|
aDRCList.push_back( item ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if( !aBoard->GetDesignSettings().Ignore( DRCE_EXTRA_FOOTPRINT ) ) |
|
|
|
|