KiCad PCB EDA Suite
erc_settings.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2018-2020 CERN
5  * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
6  * @author Jon Evans <jon@craftyjon.com>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef _ERC_SETTINGS_H
23 #define _ERC_SETTINGS_H
24 
25 #include <erc_item.h>
26 #include <pin_type.h>
28 #include <widgets/ui_common.h>
29 
30 
31 class SCH_MARKER;
32 class SCHEMATIC;
33 
34 
36 enum ERCE_T
37 {
72 
74 
75  // Errors after this point will not automatically appear in the Severities Panel
76 
77  ERCE_PIN_TO_PIN_WARNING, // pin connected to an other pin: warning level
78  ERCE_PIN_TO_PIN_ERROR, // pin connected to an other pin: error level
79  ERCE_ANNOTATION_ACTION // Not actually an error; just an action performed during
80  // annotation which is passed back through the error handler.
81 };
82 
84 enum class PIN_ERROR
85 {
86  OK,
87  WARNING,
88  PP_ERROR,
90 };
91 
93 #define NPI 4 // Net with Pin isolated, this pin has type Not Connected and must be left N.C.
94 #define DRV 3 // Net driven by a signal (a pin output for instance)
95 #define NET_NC 2 // Net "connected" to a "NoConnect symbol"
96 #define NOD 1 // Net not driven ( Such as 2 or more connected inputs )
97 #define NOC 0 // initial state of a net: no connection
98 
106 {
107 public:
108  ERC_SETTINGS( JSON_SETTINGS* aParent, const std::string& aPath );
109 
110  virtual ~ERC_SETTINGS();
111 
112  bool operator==( const ERC_SETTINGS& other ) const
113  {
114  return ( other.m_Severities == m_Severities );
115  }
116 
117  bool operator!=( const ERC_SETTINGS& other ) const
118  {
119  return !( other == *this );
120  }
121 
122  bool IsTestEnabled( int aErrorCode ) const
123  {
124  return GetSeverity( aErrorCode ) != RPT_SEVERITY_IGNORE;
125  }
126 
127  SEVERITY GetSeverity( int aErrorCode ) const;
128 
129  void SetSeverity( int aErrorCode, SEVERITY aSeverity );
130 
131  void ResetPinMap();
132 
133  PIN_ERROR GetPinMapValue( int aFirstType, int aSecondType ) const
134  {
135  wxASSERT( aFirstType < ELECTRICAL_PINTYPES_TOTAL
136  && aSecondType < ELECTRICAL_PINTYPES_TOTAL );
137  return m_PinMap[aFirstType][aSecondType];
138  }
139 
141  {
142  return m_PinMap[static_cast<int>( aFirstType )][static_cast<int>( aSecondType )];
143  }
144 
145  void SetPinMapValue( int aFirstType, int aSecondType, PIN_ERROR aValue )
146  {
147  wxASSERT( aFirstType < ELECTRICAL_PINTYPES_TOTAL
148  && aSecondType < ELECTRICAL_PINTYPES_TOTAL );
149  m_PinMap[aFirstType][aSecondType] = aValue;
150  }
151 
152  void SetPinMapValue( ELECTRICAL_PINTYPE aFirstType, ELECTRICAL_PINTYPE aSecondType,
153  PIN_ERROR aValue )
154  {
155  m_PinMap[static_cast<int>( aFirstType )][static_cast<int>( aSecondType )] = aValue;
156  }
157 
158  int GetPinMinDrive( ELECTRICAL_PINTYPE aFirstType, ELECTRICAL_PINTYPE aSecondType ) const
159  {
160  return m_PinMinDrive[static_cast<int>( aFirstType )][static_cast<int>( aSecondType )];
161  }
162 
163 public:
164 
165  std::map<int, SEVERITY> m_Severities;
166  std::set<wxString> m_ErcExclusions;
167 
169 
171 
172 private:
173 
175 };
176 
177 
183 {
184 private:
187  std::vector<SCH_MARKER*> m_filteredMarkers;
188 
189 public:
191  m_schematic( aSchematic ),
192  m_severities( 0 )
193  { }
194 
195  void SetSeverities( int aSeverities ) override;
196 
197  int GetCount( int aSeverity = -1 ) override;
198 
199  std::shared_ptr<RC_ITEM> GetItem( int aIndex ) override;
200 
201  std::shared_ptr<ERC_ITEM> GetERCItem( int aIndex );
202 
203  void DeleteItem( int aIndex, bool aDeep ) override;
204 
205  void DeleteAllItems( bool aIncludeExclusions, bool aDeep ) override;
206 
207 private:
208 
209  void visitMarkers( std::function<void( SCH_MARKER* )> aVisitor );
210 };
211 
212 
213 #endif
static int m_PinMinDrive[ELECTRICAL_PINTYPES_TOTAL][ELECTRICAL_PINTYPES_TOTAL]
Look up table which gives the minimal drive for a pair of connected pins on a net.
Definition: erc_settings.h:170
Pin not connected and not no connect symbol.
Definition: erc_settings.h:41
Units of same symbol have different values.
Definition: erc_settings.h:70
A connection between bus objects doesn't share at least one net.
Definition: erc_settings.h:59
int GetPinMinDrive(ELECTRICAL_PINTYPE aFirstType, ELECTRICAL_PINTYPE aSecondType) const
Definition: erc_settings.h:158
Different units of the same component have different footprints assigned.
Definition: erc_settings.h:51
Power input pin connected to some others pins but no power out pin to drive it.
Definition: erc_settings.h:44
Holds all the data relating to one schematic A schematic may consist of one or more sheets (and one r...
Definition: schematic.h:58
SEVERITY
Definition: ui_common.h:83
bool IsTestEnabled(int aErrorCode) const
Definition: erc_settings.h:122
A bus wire is graphically connected to a net port/pin (or vice versa).
Definition: erc_settings.h:61
void SetPinMapValue(ELECTRICAL_PINTYPE aFirstType, ELECTRICAL_PINTYPE aSecondType, PIN_ERROR aValue)
Definition: erc_settings.h:152
A label attached to a bus isn't in bus format.
Definition: erc_settings.h:58
Some wires are not connected to anything else.
Definition: erc_settings.h:65
PIN_ERROR
The values a pin-to-pin entry in the pin matrix can take on.
Definition: erc_settings.h:84
Label not connected to anything.
Definition: erc_settings.h:49
An implementation of the RC_ITEM_LIST interface which uses the global SHEETLIST to fulfill the contra...
Definition: erc_settings.h:182
void SetSeverity(int aErrorCode, SEVERITY aSeverity)
PIN_ERROR GetPinMapValue(ELECTRICAL_PINTYPE aFirstType, ELECTRICAL_PINTYPE aSecondType) const
Definition: erc_settings.h:140
Library symbol changed from current symbol in schematic or the library symbol link no longer valid.
Definition: erc_settings.h:66
bool operator==(const ERC_SETTINGS &other) const
Definition: erc_settings.h:112
std::set< wxString > m_ErcExclusions
Definition: erc_settings.h:166
Provide an abstract interface of a RC_ITEM* list manager.
Definition: rc_item.h:43
void ResetPinMap()
static PIN_ERROR m_defaultPinMap[ELECTRICAL_PINTYPES_TOTAL][ELECTRICAL_PINTYPES_TOTAL]
Default Look up table which gives the ERC error level for a pair of connected pins.
Definition: erc_settings.h:174
std::shared_ptr< RC_ITEM > GetItem(int aIndex) override
Retrieve a RC_ITEM by index.
void DeleteItem(int aIndex, bool aDeep) override
Remove (and optionally deletes) the indexed item from the list.
void visitMarkers(std::function< void(SCH_MARKER *)> aVisitor)
NESTED_SETTINGS is a JSON_SETTINGS that lives inside a JSON_SETTINGS.
std::vector< SCH_MARKER * > m_filteredMarkers
Definition: erc_settings.h:187
Pin connected to some others pins but no pin to drive it.
Definition: erc_settings.h:42
Shared pin in a multi-unit component is connected to more than one net.
Definition: erc_settings.h:53
2 labels are equal for case insensitive comparisons.
Definition: erc_settings.h:50
Functions to provide common constants and other functions to assist in making a consistent UI.
int GetCount(int aSeverity=-1) override
PIN_ERROR m_PinMap[ELECTRICAL_PINTYPES_TOTAL][ELECTRICAL_PINTYPES_TOTAL]
Definition: erc_settings.h:168
Container for ERC settings.
Definition: erc_settings.h:105
Symbol has not been annotated.
Definition: erc_settings.h:68
A wire connected to a bus doesn't match the bus.
Definition: erc_settings.h:57
ERCE_T
ERC error codes.
Definition: erc_settings.h:36
A no connect symbol is not connected to anything.
Definition: erc_settings.h:48
A global label is unique.
Definition: erc_settings.h:63
A text variable could not be resolved.
Definition: erc_settings.h:64
std::map< int, SEVERITY > m_Severities
Definition: erc_settings.h:165
A no connect symbol is connected to more than 1 pin.
Definition: erc_settings.h:47
ERC_SETTINGS(JSON_SETTINGS *aParent, const std::string &aPath)
More than one symbol with the same reference.
Definition: erc_settings.h:71
Mismatch between hierarchical labels and pins sheets.
Definition: erc_settings.h:46
ELECTRICAL_PINTYPE
The component library pin object electrical types used in ERC tests.
Definition: pin_type.h:34
void SetPinMapValue(int aFirstType, int aSecondType, PIN_ERROR aValue)
Definition: erc_settings.h:145
Conflicting bus alias definitions across sheets.
Definition: erc_settings.h:55
PIN_ERROR GetPinMapValue(int aFirstType, int aSecondType) const
Definition: erc_settings.h:133
void DeleteAllItems(bool aIncludeExclusions, bool aDeep) override
virtual ~ERC_SETTINGS()
#define ELECTRICAL_PINTYPES_TOTAL
Definition: pin_type.h:52
Symbol has more units than are defined.
Definition: erc_settings.h:69
Duplicate sheet names within a given sheet.
Definition: erc_settings.h:40
Conflicting drivers (labels, etc) on a subgraph.
Definition: erc_settings.h:56
std::shared_ptr< ERC_ITEM > GetERCItem(int aIndex)
SHEETLIST_ERC_ITEMS_PROVIDER(SCHEMATIC *aSchematic)
Definition: erc_settings.h:190
bool operator!=(const ERC_SETTINGS &other) const
Definition: erc_settings.h:117
void SetSeverities(int aSeverities) override
SEVERITY GetSeverity(int aErrorCode) const