Eeschema: ERC dialog code improvements.
* Rename the "net", "lastNet" and "nextNet" variables to "item", "lastItem" and "nextItem", respectively, because these refer to netlist items, not nets. * This adds a suffix "Idx" to the indexes into the list, and introduces local copies of the pointers to the objects we are looking at, in order to have a shorter way of addressing them. * The ERC code depends on netlist items to be sorted by net code, so verify that in debug builds. While this condition is stricter than necessary, it should still hold with the current code, and provide a good canary if a change to the sorting code might break ERC.
This commit is contained in:
parent
10c8dae794
commit
527c0eff8e
|
@ -49,11 +49,11 @@
|
||||||
#include <erc.h>
|
#include <erc.h>
|
||||||
#include <id.h>
|
#include <id.h>
|
||||||
|
|
||||||
|
|
||||||
extern int DiagErc[PINTYPE_COUNT][PINTYPE_COUNT];
|
extern int DiagErc[PINTYPE_COUNT][PINTYPE_COUNT];
|
||||||
extern int DefaultDiagErc[PINTYPE_COUNT][PINTYPE_COUNT];
|
extern int DefaultDiagErc[PINTYPE_COUNT][PINTYPE_COUNT];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool DIALOG_ERC::m_writeErcFile = false; // saved only for the current session
|
bool DIALOG_ERC::m_writeErcFile = false; // saved only for the current session
|
||||||
bool DIALOG_ERC::m_TestSimilarLabels = true; // Save in project config
|
bool DIALOG_ERC::m_TestSimilarLabels = true; // Save in project config
|
||||||
bool DIALOG_ERC::m_diagErcTableInit = false; // saved only for the current session
|
bool DIALOG_ERC::m_diagErcTableInit = false; // saved only for the current session
|
||||||
|
@ -62,6 +62,7 @@ bool DIALOG_ERC::m_tstUniqueGlobalLabels = true; // saved only for the curren
|
||||||
// Control identifiers for events
|
// Control identifiers for events
|
||||||
#define ID_MATRIX_0 1800
|
#define ID_MATRIX_0 1800
|
||||||
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( DIALOG_ERC, DIALOG_ERC_BASE )
|
BEGIN_EVENT_TABLE( DIALOG_ERC, DIALOG_ERC_BASE )
|
||||||
EVT_COMMAND_RANGE( ID_MATRIX_0, ID_MATRIX_0 + ( PINTYPE_COUNT * PINTYPE_COUNT ) - 1,
|
EVT_COMMAND_RANGE( ID_MATRIX_0, ID_MATRIX_0 + ( PINTYPE_COUNT * PINTYPE_COUNT ) - 1,
|
||||||
wxEVT_COMMAND_BUTTON_CLICKED, DIALOG_ERC::ChangeErrorLevel )
|
wxEVT_COMMAND_BUTTON_CLICKED, DIALOG_ERC::ChangeErrorLevel )
|
||||||
|
@ -80,6 +81,7 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||||
Centre();
|
Centre();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DIALOG_ERC::~DIALOG_ERC()
|
DIALOG_ERC::~DIALOG_ERC()
|
||||||
{
|
{
|
||||||
m_TestSimilarLabels = m_cbTestSimilarLabels->GetValue();
|
m_TestSimilarLabels = m_cbTestSimilarLabels->GetValue();
|
||||||
|
@ -157,6 +159,7 @@ void DIALOG_ERC::OnButtonCloseClick( wxCommandEvent& event )
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_ERC::OnCloseErcDialog( wxCloseEvent& event )
|
void DIALOG_ERC::OnCloseErcDialog( wxCloseEvent& event )
|
||||||
{
|
{
|
||||||
Destroy();
|
Destroy();
|
||||||
|
@ -438,7 +441,7 @@ void DIALOG_ERC::ChangeErrorLevel( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
setDRCMatrixButtonState( butt, level);
|
setDRCMatrixButtonState( butt, level );
|
||||||
|
|
||||||
DiagErc[y][x] = DiagErc[x][y] = level;
|
DiagErc[y][x] = DiagErc[x][y] = level;
|
||||||
}
|
}
|
||||||
|
@ -492,8 +495,8 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
|
||||||
// Reset the connection type indicator
|
// Reset the connection type indicator
|
||||||
objectsConnectedList->ResetConnectionsType();
|
objectsConnectedList->ResetConnectionsType();
|
||||||
|
|
||||||
unsigned lastNet;
|
unsigned lastItemIdx;
|
||||||
unsigned nextNet = lastNet = 0;
|
unsigned nextItemIdx = lastItemIdx = 0;
|
||||||
int MinConn = NOC;
|
int MinConn = NOC;
|
||||||
|
|
||||||
/* The netlist generated by SCH_EDIT_FRAME::BuildNetListBase is sorted
|
/* The netlist generated by SCH_EDIT_FRAME::BuildNetListBase is sorted
|
||||||
|
@ -505,17 +508,24 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
|
||||||
* pass.
|
* pass.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for( unsigned net = 0; net < objectsConnectedList->size(); net++ )
|
for( unsigned itemIdx = 0; itemIdx < objectsConnectedList->size(); itemIdx++ )
|
||||||
{
|
{
|
||||||
if( objectsConnectedList->GetItemNet( lastNet ) !=
|
auto item = objectsConnectedList->GetItem( itemIdx );
|
||||||
objectsConnectedList->GetItemNet( net ) )
|
auto lastItem = objectsConnectedList->GetItem( lastItemIdx );
|
||||||
|
|
||||||
|
auto lastNet = lastItem->GetNet();
|
||||||
|
auto net = item->GetNet();
|
||||||
|
|
||||||
|
wxASSERT_MSG( lastNet <= net, wxT( "Netlist not correctly ordered" ) );
|
||||||
|
|
||||||
|
if( lastNet != net )
|
||||||
{
|
{
|
||||||
// New net found:
|
// New net found:
|
||||||
MinConn = NOC;
|
MinConn = NOC;
|
||||||
nextNet = net;
|
nextItemIdx = itemIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( objectsConnectedList->GetItemType( net ) )
|
switch( item->m_Type )
|
||||||
{
|
{
|
||||||
// These items do not create erc problems
|
// These items do not create erc problems
|
||||||
case NET_ITEM_UNSPECIFIED:
|
case NET_ITEM_UNSPECIFIED:
|
||||||
|
@ -535,11 +545,11 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
|
||||||
// ERC problems when pin sheets do not match hierarchical labels.
|
// ERC problems when pin sheets do not match hierarchical labels.
|
||||||
// Each pin sheet must match a hierarchical label
|
// Each pin sheet must match a hierarchical label
|
||||||
// Each hierarchical label must match a pin sheet
|
// Each hierarchical label must match a pin sheet
|
||||||
objectsConnectedList->TestforNonOrphanLabel( net, nextNet );
|
objectsConnectedList->TestforNonOrphanLabel( itemIdx, nextItemIdx );
|
||||||
break;
|
break;
|
||||||
case NET_GLOBLABEL:
|
case NET_GLOBLABEL:
|
||||||
if( m_tstUniqueGlobalLabels )
|
if( m_tstUniqueGlobalLabels )
|
||||||
objectsConnectedList->TestforNonOrphanLabel( net, nextNet );
|
objectsConnectedList->TestforNonOrphanLabel( itemIdx, nextItemIdx );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_NOCONNECT:
|
case NET_NOCONNECT:
|
||||||
|
@ -547,19 +557,19 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
|
||||||
// ERC problems when a noconnect symbol is connected to more than one pin.
|
// ERC problems when a noconnect symbol is connected to more than one pin.
|
||||||
MinConn = NET_NC;
|
MinConn = NET_NC;
|
||||||
|
|
||||||
if( objectsConnectedList->CountPinsInNet( nextNet ) > 1 )
|
if( objectsConnectedList->CountPinsInNet( nextItemIdx ) > 1 )
|
||||||
Diagnose( objectsConnectedList->GetItem( net ), NULL, MinConn, UNC );
|
Diagnose( item, NULL, MinConn, UNC );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_PIN:
|
case NET_PIN:
|
||||||
|
|
||||||
// Look for ERC problems between pins:
|
// Look for ERC problems between pins:
|
||||||
TestOthersItems( objectsConnectedList.get(), net, nextNet, &MinConn );
|
TestOthersItems( objectsConnectedList.get(), itemIdx, nextItemIdx, &MinConn );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastNet = net;
|
lastItemIdx = itemIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test similar labels (i;e. labels which are identical when
|
// Test similar labels (i;e. labels which are identical when
|
||||||
|
|
Loading…
Reference in New Issue