Fix a few issues with global buses
This commit is contained in:
parent
69a66fc826
commit
49d8c29608
|
@ -522,6 +522,23 @@ void CONNECTION_GRAPH::updateItemConnectivity( SCH_SHEET_PATH aSheet,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we got this far and did not find a connected bus item for a bus entry,
|
||||
// we should do a manual scan in case there is a bus item on this connection
|
||||
// point but we didn't pick it up earlier because there is *also* a net item here.
|
||||
if( connected_item->Type() == SCH_BUS_WIRE_ENTRY_T )
|
||||
{
|
||||
auto bus_entry = static_cast<SCH_BUS_WIRE_ENTRY*>( connected_item );
|
||||
|
||||
if( !bus_entry->m_connected_bus_item )
|
||||
{
|
||||
auto screen = aSheet.LastScreen();
|
||||
auto bus = screen->GetBus( it.first );
|
||||
|
||||
if( bus )
|
||||
bus_entry->m_connected_bus_item = bus;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1006,7 +1023,12 @@ void CONNECTION_GRAPH::buildConnectionGraph()
|
|||
auto candidate_connection = candidate->m_driver_connection;
|
||||
|
||||
if( candidate_connection->Name() == member->Name() )
|
||||
subgraph->m_neighbor_map[ member ].push_back( candidate );
|
||||
{
|
||||
wxLogTrace( "CONN", "%lu (%s) has neighbor %lu", subgraph->m_code,
|
||||
connection->Name(), candidate->m_code );
|
||||
subgraph->m_neighbor_map[member].push_back( candidate );
|
||||
candidate->m_neighbor_map[member].push_back( subgraph );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1157,8 +1179,8 @@ void CONNECTION_GRAPH::buildConnectionGraph()
|
|||
if( bus_conn->Driver() &&
|
||||
bus_conn->Driver()->Type() == SCH_GLOBAL_LABEL_T )
|
||||
{
|
||||
wxLogTrace( "CONN", "Net %s connected to global bus %s",
|
||||
connection->Name(), bus_conn->Name() );
|
||||
wxLogTrace( "CONN", "%lu (%s) connected to global bus %s",
|
||||
subgraph->m_code, connection->Name(), bus_conn->Name() );
|
||||
|
||||
std::shared_ptr<SCH_CONNECTION> parent;
|
||||
|
||||
|
@ -1176,8 +1198,8 @@ void CONNECTION_GRAPH::buildConnectionGraph()
|
|||
|
||||
if( parent && ( parent->Name() != connection->Name() ) )
|
||||
{
|
||||
wxLogTrace( "CONN", "Promoting %s to %s", connection->Name(),
|
||||
parent->Name() );
|
||||
wxLogTrace( "CONN", "Promoting %lu (%s) to %s", subgraph->m_code,
|
||||
connection->Name(), parent->Name() );
|
||||
|
||||
connection->Clone( *parent );
|
||||
|
||||
|
@ -1186,11 +1208,30 @@ void CONNECTION_GRAPH::buildConnectionGraph()
|
|||
auto item_conn = item->Connection( sheet );
|
||||
item_conn->Clone( *connection );
|
||||
}
|
||||
|
||||
// Also check for local neighbors
|
||||
for( auto& kv : subgraph->m_neighbor_map )
|
||||
{
|
||||
for( auto sg : kv.second )
|
||||
{
|
||||
// Neighbors had better be on the same sheet
|
||||
wxASSERT( sg->m_sheet == sheet );
|
||||
|
||||
wxLogTrace( "CONN", "Promoting neighbor %lu to %s", sg->m_code,
|
||||
parent->Name() );
|
||||
|
||||
for( auto item : sg->m_items )
|
||||
{
|
||||
auto item_conn = item->Connection( sheet );
|
||||
item_conn->Clone( *connection );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogTrace( "CONN", "Could not find matching parent for %s!",
|
||||
connection->Name() );
|
||||
wxLogTrace( "CONN", "Could not find matching parent for %lu (%s)!",
|
||||
subgraph->m_code, connection->Name() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue