A slightly better ERC check for hierarchical labels
Fixes: lp:1839822 * https://bugs.launchpad.net/kicad/+bug/1839822
This commit is contained in:
parent
972d765aea
commit
8b87dc7e0f
|
@ -1481,6 +1481,8 @@ void CONNECTION_GRAPH::propagateToNeighbors( CONNECTION_SUBGRAPH* aSubgraph )
|
||||||
wxLogTrace( "CONN", "%lu: found child %lu (%s)", aParent->m_code,
|
wxLogTrace( "CONN", "%lu: found child %lu (%s)", aParent->m_code,
|
||||||
candidate->m_code, candidate->m_driver_connection->Name() );
|
candidate->m_code, candidate->m_driver_connection->Name() );
|
||||||
|
|
||||||
|
candidate->m_hier_parent = aParent;
|
||||||
|
|
||||||
search_list.push_back( candidate );
|
search_list.push_back( candidate );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2269,6 +2271,18 @@ bool CONNECTION_GRAPH::ercCheckLabels( const CONNECTION_SUBGRAPH* aSubgraph,
|
||||||
&& m_net_name_to_subgraphs_map.at( name ).size() > 1 )
|
&& m_net_name_to_subgraphs_map.at( name ).size() > 1 )
|
||||||
has_other_connections = true;
|
has_other_connections = true;
|
||||||
}
|
}
|
||||||
|
else if (text->Type() == SCH_HIER_LABEL_T)
|
||||||
|
{
|
||||||
|
// For a hier label, check if the parent pin is connected
|
||||||
|
if (aSubgraph->m_hier_parent &&
|
||||||
|
(aSubgraph->m_hier_parent->m_strong_driver ||
|
||||||
|
aSubgraph->m_hier_parent->m_drivers.size() > 1))
|
||||||
|
{
|
||||||
|
// For now, a simple check: if there is more than one driver, the parent is probably
|
||||||
|
// connected elsewhere (because at least one driver will be the hier pin itself)
|
||||||
|
has_other_connections = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto pair = std::make_pair( aSubgraph->m_sheet, name );
|
auto pair = std::make_pair( aSubgraph->m_sheet, name );
|
||||||
|
|
|
@ -72,7 +72,7 @@ public:
|
||||||
m_dirty( false ), m_absorbed( false ), m_absorbed_by( nullptr ), m_code( -1 ),
|
m_dirty( false ), m_absorbed( false ), m_absorbed_by( nullptr ), m_code( -1 ),
|
||||||
m_multiple_drivers( false ), m_strong_driver( false ), m_local_driver( false ),
|
m_multiple_drivers( false ), m_strong_driver( false ), m_local_driver( false ),
|
||||||
m_no_connect( nullptr ), m_bus_entry( nullptr ), m_driver( nullptr ), m_frame( aFrame ),
|
m_no_connect( nullptr ), m_bus_entry( nullptr ), m_driver( nullptr ), m_frame( aFrame ),
|
||||||
m_driver_connection( nullptr )
|
m_driver_connection( nullptr ), m_hier_parent( nullptr )
|
||||||
{}
|
{}
|
||||||
/**
|
/**
|
||||||
* Determines which potential driver should drive the subgraph.
|
* Determines which potential driver should drive the subgraph.
|
||||||
|
@ -188,6 +188,9 @@ public:
|
||||||
|
|
||||||
// Cache for lookup of any hierarchical ports on this subgraph (for referring up)
|
// Cache for lookup of any hierarchical ports on this subgraph (for referring up)
|
||||||
std::vector<SCH_HIERLABEL*> m_hier_ports;
|
std::vector<SCH_HIERLABEL*> m_hier_ports;
|
||||||
|
|
||||||
|
// If not null, this indicates the subgraph on a higher level sheet that is linked to this one
|
||||||
|
CONNECTION_SUBGRAPH* m_hier_parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue