Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
90c130b6
Commit
90c130b6
authored
Feb 10, 2011
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eeschema: intermediate netlist : fix duplicate pins in list of nets, with multi parts per package.
parent
0cb6cd8c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
77 additions
and
70 deletions
+77
-70
netform.cpp
eeschema/netform.cpp
+73
-66
netlist_form_OrcadPcb2.xsl
eeschema/plugins/netlist_form_OrcadPcb2.xsl
+4
-4
No files found.
eeschema/netform.cpp
View file @
90c130b6
...
...
@@ -127,7 +127,7 @@ class EXPORT_HELP
* <ul>
* <li> "?" if pin not connected
* <li> "netname" for global net (like gnd, vcc ..
* <li> "
netname_sheetnumber
" for the usual nets
* <li> "
/path/netname
" for the usual nets
* </ul>
*/
static
void
sprintPinNetName
(
wxString
*
aResult
,
const
wxString
&
aNetNameFormat
,
NETLIST_OBJECT
*
aPin
);
...
...
@@ -135,11 +135,11 @@ class EXPORT_HELP
/**
* Function findNextComponentAndCreatePinList
* finds a "suitable" component from the DrawList and optionally builds
* its pin list in
t
m_SortedComponentPinList. The list is sorted by pin num.
* A suitable component is a "new" real component
(power symbols are not
*
consider
ed).
* its pin list in m_SortedComponentPinList. The list is sorted by pin num.
* A suitable component is a "new" real component
*
(power symbols and virtual components that have their reference starting by '#'are skipp
ed).
*/
SCH_COMPONENT
*
findNextComponentAndCreatPinList
(
EDA_ITEM
*
aItem
,
SCH_SHEET_PATH
*
aSheetPath
);
SCH_COMPONENT
*
findNextComponentAndCreat
e
PinList
(
EDA_ITEM
*
aItem
,
SCH_SHEET_PATH
*
aSheetPath
);
SCH_COMPONENT
*
findNextComponent
(
EDA_ITEM
*
aItem
,
SCH_SHEET_PATH
*
aSheetPath
);
...
...
@@ -158,9 +158,9 @@ class EXPORT_HELP
void
eraseDuplicatePins
(
NETLIST_OBJECT_LIST
&
aPinList
);
/**
* Function addPin
t
ToComponentPinList
* Function addPinToComponentPinList
* adds a new pin description to the pin list m_SortedComponentPinList.
* A
.a
pin description is a pointer to the corresponding structure
* A pin description is a pointer to the corresponding structure
* created by BuildNetList() in the table g_NetObjectslist.
*/
bool
addPinToComponentPinList
(
SCH_COMPONENT
*
Component
,
...
...
@@ -191,7 +191,7 @@ class EXPORT_HELP
* writes a net list (ranked by Netcode), and
* Pins connected to it
* Format:
*. ADD_TER RR2 6 "$
42"
*. ADD_TER RR2 6 "$42"
*. B U1 100
* 6 CA
*/
...
...
@@ -242,22 +242,20 @@ public:
/**
* Function WriteGENERICNetList
* creates a generic netlist, now in XML.
* @param frame = the parent SCH_EDIT_FRAME frame
* @param aOutFileName = the full filename of the file to create
* @return bool - true if there were no errors, else false.
*/
bool
WriteGENERICNetList
(
SCH_EDIT_FRAME
*
frame
,
const
wxString
&
aOutFileName
);
bool
WriteGENERICNetList
(
const
wxString
&
aOutFileName
);
/**
* Function WriteNetListPCBNEW
* generates a net list file (Format 2 improves ORCAD PCB)
*
* @param frame = the parent SCH_EDIT_FRAME frame
* @param f = the file to write to
* @param with_pcbnew if true, then
format Pcbnew (OrcadPcb2 + reviews and lists
of net),<p>
* else
output ORCADPCB2 strict
format.
* @param with_pcbnew if true, then
use Pcbnew format (OrcadPcb2 + a list
of net),<p>
* else
use ORCADPCB2 basic
format.
*/
bool
WriteNetListPCBNEW
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
,
bool
with_pcbnew
);
bool
WriteNetListPCBNEW
(
FILE
*
f
,
bool
with_pcbnew
);
/**
* Function WriteNetListCADSTAR
...
...
@@ -287,22 +285,21 @@ public:
* .. B * T3 1
*U1 * 14
*/
void
WriteNetListCADSTAR
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
);
void
WriteNetListCADSTAR
(
FILE
*
f
);
/**
* Function WriteNetListPspice
* generates a netlist file in PSPICE format.
* <p>
* All graphics text commentary by a [.-+] PSpice or [.-+] gnucap
* Are considered in placing orders in the netlist
* [.-] Or PSpice gnucap are beginning
* + + Gnucap and PSpice are ultimately NetList
* @param frame = the parent SCH_EDIT_FRAME frame
* All graphics text starting by [.-+] PSpice or [.-+] gnucap
* are seen as spice directives and put in netlist
* .-PSpice or .-gnucap put at beginning of the netlist
* .+PSpice or .-genucap are put at end of the netList
* @param f = the file to write to
* @param use_netnames
if true, then nodes are identified by the netname
,
*
else by
net number.
* @param use_netnames
= true, to use netnames in netlist
,
*
false to use
net number.
*/
bool
WriteNetListPspice
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
,
bool
use_netnames
);
bool
WriteNetListPspice
(
FILE
*
f
,
bool
use_netnames
);
/**
* Function MakeCommandLine
...
...
@@ -385,22 +382,22 @@ bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileNam
switch
(
aFormat
)
{
case
NET_TYPE_PCBNEW
:
ret
=
helper
.
WriteNetListPCBNEW
(
this
,
f
,
true
);
ret
=
helper
.
WriteNetListPCBNEW
(
f
,
true
);
fclose
(
f
);
break
;
case
NET_TYPE_ORCADPCB2
:
ret
=
helper
.
WriteNetListPCBNEW
(
this
,
f
,
false
);
ret
=
helper
.
WriteNetListPCBNEW
(
f
,
false
);
fclose
(
f
);
break
;
case
NET_TYPE_CADSTAR
:
helper
.
WriteNetListCADSTAR
(
this
,
f
);
helper
.
WriteNetListCADSTAR
(
f
);
fclose
(
f
);
break
;
case
NET_TYPE_SPICE
:
ret
=
helper
.
WriteNetListPspice
(
this
,
f
,
aUse_netnames
);
ret
=
helper
.
WriteNetListPspice
(
f
,
aUse_netnames
);
fclose
(
f
);
break
;
...
...
@@ -411,7 +408,7 @@ bool SCH_EDIT_FRAME::WriteNetListFile( int aFormat, const wxString& aFullFileNam
D
(
printf
(
"tmpFile:'%s'
\n
"
,
CONV_TO_UTF8
(
tmpFile
.
GetFullPath
()
)
);)
ret
=
helper
.
WriteGENERICNetList
(
t
his
,
t
mpFile
.
GetFullPath
()
);
ret
=
helper
.
WriteGENERICNetList
(
tmpFile
.
GetFullPath
()
);
if
(
!
ret
)
break
;
...
...
@@ -542,7 +539,7 @@ SCH_COMPONENT* EXPORT_HELP::findNextComponent( EDA_ITEM* aItem, SCH_SHEET_PATH*
}
SCH_COMPONENT
*
EXPORT_HELP
::
findNextComponentAndCreatPinList
(
EDA_ITEM
*
aItem
,
SCH_COMPONENT
*
EXPORT_HELP
::
findNextComponentAndCreat
e
PinList
(
EDA_ITEM
*
aItem
,
SCH_SHEET_PATH
*
aSheetPath
)
{
wxString
ref
;
...
...
@@ -863,6 +860,9 @@ XNODE* EXPORT_HELP::makeGenericListOfNets()
if
(
nitem
->
m_Type
!=
NET_PIN
)
continue
;
if
(
nitem
->
m_Flag
!=
0
)
// Redundant pin, skip it
continue
;
comp
=
(
SCH_COMPONENT
*
)
nitem
->
m_Link
;
// Get the reference for the net name and the main parent component
...
...
@@ -953,7 +953,7 @@ XNODE* EXPORT_HELP::makeGenericComponents()
{
for
(
EDA_ITEM
*
schItem
=
path
->
LastDrawList
();
schItem
;
schItem
=
schItem
->
Next
()
)
{
SCH_COMPONENT
*
comp
=
findNextComponent
(
schItem
,
path
);
SCH_COMPONENT
*
comp
=
findNextComponent
AndCreatePinList
(
schItem
,
path
);
if
(
!
comp
)
break
;
// No component left
...
...
@@ -1025,8 +1025,12 @@ XNODE* EXPORT_HELP::makeGenericComponents()
#include <wx/wfstream.h> // wxFFileOutputStream
bool
EXPORT_HELP
::
WriteGENERICNetList
(
SCH_EDIT_FRAME
*
frame
,
const
wxString
&
aOutFileName
)
bool
EXPORT_HELP
::
WriteGENERICNetList
(
const
wxString
&
aOutFileName
)
{
// Prepare list of nets generation
for
(
unsigned
ii
=
0
;
ii
<
g_NetObjectslist
.
size
();
ii
++
)
g_NetObjectslist
[
ii
]
->
m_Flag
=
0
;
#if 0
// this code seems to work now, for S-expression support.
...
...
@@ -1038,7 +1042,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO
{
L_error:
wxString msg = _( "Failed to create file " ) + aOutFileName;
DisplayError(
frame
, msg );
DisplayError(
NULL
, msg );
}
else
{
...
...
@@ -1080,7 +1084,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO
if
(
(
out
=
wxFopen
(
aOutFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
{
wxString
msg
=
_
(
"Failed to create file "
)
+
aOutFileName
;
DisplayError
(
frame
,
msg
);
DisplayError
(
NULL
,
msg
);
return
false
;
}
...
...
@@ -1097,7 +1101,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO
{
for
(
EDA_ITEM
*
schItem
=
path
->
LastDrawList
();
schItem
;
schItem
=
schItem
->
Next
()
)
{
SCH_COMPONENT
*
comp
=
findNextComponentAndCreatPinList
(
schItem
,
path
);
SCH_COMPONENT
*
comp
=
findNextComponentAndCreat
e
PinList
(
schItem
,
path
);
if
(
!
comp
)
break
;
// No component left
...
...
@@ -1163,7 +1167,7 @@ bool EXPORT_HELP::WriteGENERICNetList( SCH_EDIT_FRAME* frame, const wxString& aO
}
bool
EXPORT_HELP
::
WriteNetListPspice
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
,
bool
use_netnames
)
bool
EXPORT_HELP
::
WriteNetListPspice
(
FILE
*
f
,
bool
use_netnames
)
{
int
ret
=
0
;
char
Line
[
1024
];
...
...
@@ -1181,6 +1185,10 @@ bool EXPORT_HELP::WriteNetListPspice( SCH_EDIT_FRAME* frame, FILE* f, bool use_n
ret
|=
fprintf
(
f
,
"* %s (Spice format) creation date: %s
\n\n
"
,
NETLIST_HEAD_STRING
,
Line
);
// Prepare list of nets generation (not used here, but...
for
(
unsigned
ii
=
0
;
ii
<
g_NetObjectslist
.
size
();
ii
++
)
g_NetObjectslist
[
ii
]
->
m_Flag
=
0
;
// Create text list starting by [.-]pspice , or [.-]gnucap (simulator
// commands) and create text list starting by [+]pspice , or [+]gnucap
// (simulator commands)
...
...
@@ -1255,7 +1263,7 @@ bool EXPORT_HELP::WriteNetListPspice( SCH_EDIT_FRAME* frame, FILE* f, bool use_n
{
for
(
EDA_ITEM
*
item
=
sheet
->
LastDrawList
();
item
;
item
=
item
->
Next
()
)
{
SCH_COMPONENT
*
comp
=
findNextComponentAndCreatPinList
(
item
,
sheet
);
SCH_COMPONENT
*
comp
=
findNextComponentAndCreat
e
PinList
(
item
,
sheet
);
if
(
!
comp
)
break
;
...
...
@@ -1316,7 +1324,7 @@ bool EXPORT_HELP::WriteNetListPspice( SCH_EDIT_FRAME* frame, FILE* f, bool use_n
}
bool
EXPORT_HELP
::
WriteNetListPCBNEW
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
,
bool
with_pcbnew
)
bool
EXPORT_HELP
::
WriteNetListPCBNEW
(
FILE
*
f
,
bool
with_pcbnew
)
{
wxString
field
;
wxString
footprint
;
...
...
@@ -1333,8 +1341,11 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_
else
ret
|=
fprintf
(
f
,
"( { %s created %s }
\n
"
,
NETLIST_HEAD_STRING
,
dateBuf
);
// Create netlist module section
// Prepare list of nets generation
for
(
unsigned
ii
=
0
;
ii
<
g_NetObjectslist
.
size
();
ii
++
)
g_NetObjectslist
[
ii
]
->
m_Flag
=
0
;
// Create netlist module section
m_ReferencesAlreadyFound
.
Clear
();
SCH_SHEET_LIST
sheetList
;
...
...
@@ -1343,7 +1354,7 @@ bool EXPORT_HELP::WriteNetListPCBNEW( SCH_EDIT_FRAME* frame, FILE* f, bool with_
{
for
(
EDA_ITEM
*
item
=
path
->
LastDrawList
();
item
;
item
=
item
->
Next
()
)
{
SCH_COMPONENT
*
comp
=
findNextComponentAndCreatPinList
(
item
,
path
);
SCH_COMPONENT
*
comp
=
findNextComponentAndCreat
e
PinList
(
item
,
path
);
if
(
!
comp
)
break
;
...
...
@@ -1494,7 +1505,11 @@ bool EXPORT_HELP::addPinToComponentPinList( SCH_COMPONENT* aComponent,
return
false
;
}
/*
* remove duplicate pins from aPinList (list of pins relative to a given component)
* (i.e. set pointer to duplicate pins to NULL in this list).
* also set .m_Flag member of "removed" NETLIST_OBJECT pins to 1
*/
void
EXPORT_HELP
::
eraseDuplicatePins
(
NETLIST_OBJECT_LIST
&
aPinList
)
{
if
(
aPinList
.
size
()
==
0
)
// Trivial case: component with no pin
...
...
@@ -1519,26 +1534,33 @@ void EXPORT_HELP::eraseDuplicatePins( NETLIST_OBJECT_LIST& aPinList )
if
(
aPinList
[
jj
]
==
NULL
)
// Already removed
continue
;
// other pin num end of duplicate list.
// if other pin num, stop search,
// because all pins having the same number are consecutive in list.
if
(
aPinList
[
idxref
]
->
m_PinNum
!=
aPinList
[
jj
]
->
m_PinNum
)
break
;
if
(
aPinList
[
idxref
]
->
m_FlagOfConnection
==
PAD_CONNECT
)
{
aPinList
[
jj
]
->
m_Flag
=
1
;
aPinList
[
jj
]
=
NULL
;
}
else
/* the reference pin is not connected: remove this pin if the
* other pin is connected */
{
if
(
aPinList
[
jj
]
->
m_FlagOfConnection
==
PAD_CONNECT
)
{
aPinList
[
idxref
]
->
m_Flag
=
1
;
aPinList
[
idxref
]
=
NULL
;
idxref
=
jj
;
}
else
// the 2 pins are not connected: remove the tested pin,
// and continue ...
{
// and continue ...
aPinList
[
jj
]
->
m_Flag
=
1
;
aPinList
[
jj
]
=
NULL
;
}
}
}
}
}
...
...
@@ -1634,6 +1656,9 @@ bool EXPORT_HELP::writeGENERICListOfNets( FILE* f, NETLIST_OBJECT_LIST& aObjects
if
(
aObjectsList
[
ii
]
->
m_Type
!=
NET_PIN
)
continue
;
if
(
aObjectsList
[
ii
]
->
m_Flag
!=
0
)
// Redundant pin, skip it
continue
;
comp
=
(
SCH_COMPONENT
*
)
aObjectsList
[
ii
]
->
m_Link
;
// Get the reference for the net name and the main parent component
...
...
@@ -1674,7 +1699,7 @@ bool EXPORT_HELP::writeGENERICListOfNets( FILE* f, NETLIST_OBJECT_LIST& aObjects
static
wxString
StartLine
(
wxT
(
"."
)
);
void
EXPORT_HELP
::
WriteNetListCADSTAR
(
SCH_EDIT_FRAME
*
frame
,
FILE
*
f
)
void
EXPORT_HELP
::
WriteNetListCADSTAR
(
FILE
*
f
)
{
wxString
StartCmpDesc
=
StartLine
+
wxT
(
"ADD_COM"
);
wxString
msg
;
...
...
@@ -1692,6 +1717,10 @@ void EXPORT_HELP::WriteNetListCADSTAR( SCH_EDIT_FRAME* frame, FILE* f )
fprintf
(
f
,
"
\"
%s
\"\n
"
,
CONV_TO_UTF8
(
Title
)
);
fprintf
(
f
,
"
\n
"
);
// Prepare list of nets generation
for
(
unsigned
ii
=
0
;
ii
<
g_NetObjectslist
.
size
();
ii
++
)
g_NetObjectslist
[
ii
]
->
m_Flag
=
0
;
// Create netlist module section
m_ReferencesAlreadyFound
.
Clear
();
...
...
@@ -1701,7 +1730,7 @@ void EXPORT_HELP::WriteNetListCADSTAR( SCH_EDIT_FRAME* frame, FILE* f )
{
for
(
DrawList
=
sheet
->
LastDrawList
();
DrawList
!=
NULL
;
DrawList
=
DrawList
->
Next
()
)
{
DrawList
=
Component
=
findNextComponentAndCreatPinList
(
DrawList
,
sheet
);
DrawList
=
Component
=
findNextComponentAndCreat
e
PinList
(
DrawList
,
sheet
);
if
(
Component
==
NULL
)
break
;
...
...
@@ -1748,9 +1777,6 @@ void EXPORT_HELP::writeListOfNetsCADSTAR( FILE* f, NETLIST_OBJECT_LIST& aObjects
SCH_COMPONENT
*
Cmp
;
wxString
NetName
;
for
(
ii
=
0
;
ii
<
aObjectsList
.
size
();
ii
++
)
aObjectsList
[
ii
]
->
m_Flag
=
0
;
for
(
ii
=
0
;
ii
<
g_NetObjectslist
.
size
();
ii
++
)
{
// Get the NetName of the current net :
...
...
@@ -1829,24 +1855,5 @@ void EXPORT_HELP::writeListOfNetsCADSTAR( FILE* f, NETLIST_OBJECT_LIST& aObjects
}
aObjectsList
[
ii
]
->
m_Flag
=
1
;
// Search for redundant pins to avoid generation of the same connection
// more than once.
for
(
unsigned
jj
=
ii
+
1
;
jj
<
aObjectsList
.
size
();
jj
++
)
{
if
(
aObjectsList
[
jj
]
->
GetNet
()
!=
NetCode
)
break
;
if
(
aObjectsList
[
jj
]
->
m_Type
!=
NET_PIN
)
continue
;
SCH_COMPONENT
*
tstcmp
=
(
SCH_COMPONENT
*
)
aObjectsList
[
jj
]
->
m_Link
;
wxString
p
=
Cmp
->
GetPath
(
&
(
aObjectsList
[
ii
]
->
m_SheetList
)
);
wxString
tstp
=
tstcmp
->
GetPath
(
&
(
aObjectsList
[
jj
]
->
m_SheetList
)
);
if
(
p
.
Cmp
(
tstp
)
!=
0
)
continue
;
if
(
aObjectsList
[
jj
]
->
m_PinNum
==
aObjectsList
[
ii
]
->
m_PinNum
)
aObjectsList
[
jj
]
->
m_Flag
=
1
;
}
}
}
eeschema/plugins/netlist_form_OrcadPcb2.xsl
View file @
90c130b6
...
...
@@ -126,10 +126,10 @@
<pin num="1" type="passive"/>
<pin num="2" type="passive"/>
</pins>
Output pin list is (
pin num = net name
)
Output pin list is (
<pin num> <net name>
)
something like
( 1
=
VCC )
( 2
=
GND )
( 1 VCC )
( 2 GND )
-->
<xsl:template
name=
"build_pin_list"
match=
"pin"
>
<xsl:param
name=
"cmp_ref"
select=
"0"
/>
...
...
@@ -137,7 +137,7 @@
<!-- write pin numner and separator -->
<xsl:text>
(
</xsl:text>
<xsl:value-of
select=
"@num"
/>
<xsl:text>
=
</xsl:text>
<xsl:text>
</xsl:text>
<!-- search net name in nets section and write it: -->
<xsl:variable
name=
"pinNum"
select=
"@num"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment