Sync with main branch r6532

This commit is contained in:
Cirilo Bernardo 2016-02-02 17:25:14 +11:00
commit 06e766b8b2
56 changed files with 3637 additions and 1282 deletions

View File

@ -21,6 +21,10 @@ eeschema/template_fieldnames_lexer.h
pcbnew/dialogs/dialog_freeroute_exchange_help_html.h
pcbnew/pcb_plot_params_keywords.cpp
pcbnew/pcb_plot_params_lexer.h
pcb_calculator/attenuators/bridget_tee_formula.h
pcb_calculator/attenuators/pi_formula.h
pcb_calculator/attenuators/splitter_formula.h
pcb_calculator/attenuators/tee_formula.h
Makefile
CMakeCache.txt
auto_renamed_to_cpp

View File

@ -20,6 +20,13 @@ set_source_files_properties( bitmap2cmp_gui.cpp PROPERTIES
COMPILE_DEFINITIONS "COMPILING_DLL"
)
if( MINGW )
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
mingw_resource_compiler( bitmap2component )
else()
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
endif()
if( APPLE )
# setup bundle
set( BITMAP2COMPONENT_RESOURCES bitmap2component.icns )
@ -80,11 +87,3 @@ if( false ) # linker map with cross reference
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
)
endif()
if( MINGW )
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
mingw_resource_compiler( bitmap2component )
else()
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
endif()

View File

@ -57,6 +57,8 @@ set( CVPCB_SRCS
if( MINGW )
# CVPCB_RESOURCES variable is set by the macro.
mingw_resource_compiler( cvpcb )
else()
set( CVPCB_RESOURCES cvpcb.rc )
endif()

View File

@ -0,0 +1,3 @@
(fp_lib_table
(lib (name LEDs)(type KiCad)(uri "$(KISYSMOD)\\LEDs.pretty")(options "")(descr ""))
)

View File

@ -355,20 +355,22 @@ ENDDEF
# C
#
DEF C C 0 10 N Y 1 F N
F0 "C" 0 100 40 H V L CNN
F1 "C" 6 -85 40 H V L CNN
F0 "C" 25 100 50 H V L CNN
F1 "C" 25 -100 50 H V L CNN
F2 "" 38 -150 30 H V C CNN
F3 "" 0 100 30 H V C CNN
F3 "" 0 0 60 H V C CNN
$FPLIST
SM*
C?
C1-1
C_????_*
C_????
SMD*_c
Capacitor*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
P 2 0 1 20 -80 30 80 30 N
X ~ 1 0 200 170 D 40 40 1 1 P
X ~ 2 0 -200 170 U 40 40 1 1 P
X ~ 1 0 150 110 D 40 40 1 1 P
X ~ 2 0 -150 110 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -402,21 +404,29 @@ ENDDEF
#
# CP
#
DEF CP C 0 10 N N 1 F N
F0 "C" 50 100 40 H V L CNN
F1 "CP" 50 -100 40 H V L CNN
F2 "" 100 -150 30 H V C CNN
F3 "" 50 100 30 H V C CNN
ALIAS CAPAPOL
DEF CP C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "CP" 25 -100 50 H V L CNN
F2 "" 38 -150 30 H V C CNN
F3 "" 0 0 60 H V C CNN
$FPLIST
CP*
SM*
Elko*
TantalC*
C*elec
c_elec*
SMD*_Pol
$ENDFPLIST
DRAW
P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
X ~ 1 0 200 150 D 40 40 1 1 P
X ~ 2 0 -200 150 U 40 40 1 1 P
S -90 20 -90 40 0 1 0 N
S -90 20 90 20 0 1 0 N
S -70 90 -30 90 0 1 0 N
S -50 70 -50 110 0 1 0 N
S 90 -20 -90 -40 0 1 0 F
S 90 40 -90 40 0 1 0 N
S 90 40 90 20 0 1 0 N
X ~ 1 0 150 110 D 40 40 1 1 P
X ~ 2 0 -150 110 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -599,12 +609,12 @@ $FPLIST
LEDV
$ENDFPLIST
DRAW
P 2 0 1 0 50 50 50 -50 N
P 3 0 1 0 -50 50 50 0 -50 -50 F
P 3 0 1 0 65 -40 110 -80 105 -55 N
P 3 0 1 0 80 -25 125 -65 120 -40 N
X A 1 -200 0 150 R 40 40 1 1 P
X K 2 200 0 150 L 40 40 1 1 P
P 2 0 1 0 -50 50 -50 -50 N
P 3 0 1 0 -80 -25 -125 -65 -120 -40 N
P 3 0 1 0 -65 -40 -110 -80 -105 -55 N
P 3 0 1 0 50 50 -50 0 50 -50 F
X K 1 -200 0 150 R 40 40 1 1 P
X A 2 200 0 150 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -624,29 +634,26 @@ ENDDEF
# R
#
DEF R R 0 0 N Y 1 F N
F0 "R" 80 0 40 V V C CNN
F1 "R" 7 1 40 V V C CNN
F0 "R" 80 0 50 V V C CNN
F1 "R" 0 0 50 V V C CNN
F2 "" -70 0 30 V V C CNN
F3 "" 0 0 30 H V C CNN
$FPLIST
R?
SM0603
SM0805
R?-*
SM1206
R_*
Resistor_*
$ENDFPLIST
DRAW
S -40 150 40 -150 0 1 12 N
X ~ 1 0 250 100 D 60 60 1 1 P
X ~ 2 0 -250 100 U 60 60 1 1 P
S -40 -100 40 100 0 1 10 N
X ~ 1 0 150 50 D 60 60 1 1 P
X ~ 2 0 -150 50 U 60 60 1 1 P
ENDDRAW
ENDDEF
#
# RR9
#
DEF RR9 RR 0 40 Y N 1 F N
F0 "RR" 50 600 70 H V C CNN
F1 "RR9" 30 0 70 V V C CNN
F0 "RR" 50 600 50 H V C CNN
F1 "RR9" 30 0 50 V V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW

View File

@ -1,15 +1,15 @@
(kicad_pcb (version 4) (host pcbnew "(2015-10-31 BZR 6288)-product")
(kicad_pcb (version 4) (host pcbnew "(2016-01-28 BZR 6518)-product")
(general
(links 200)
(no_connects 0)
(area 15.992729 24.89454 202.259001 195.5652)
(area 69.241669 24.89454 202.259001 142.646401)
(thickness 1.6002)
(drawings 19)
(tracks 782)
(zones 0)
(modules 25)
(nets 111)
(nets 174)
)
(page A4)
@ -65,11 +65,13 @@
(pad_size 1.397 1.397)
(pad_drill 0.89916)
(pad_to_mask_clearance 0.254)
(solder_mask_min_width 0.5)
(aux_axis_origin 74.93 140.97)
(visible_elements 7FFFFF7F)
(pcbplotparams
(layerselection 0x00030_80000001)
(layerselection 0x000f0_ffffffff)
(usegerberextensions false)
(usegerberattributes true)
(excludeedgelayer false)
(linewidth 0.150000)
(plotframeref false)
@ -89,7 +91,7 @@
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(drillshape 0)
(scaleselection 1)
(outputdirectory plot_files/))
)
@ -198,13 +200,76 @@
(net 101 VCC)
(net 102 "Net-(C2-Pad1)")
(net 103 "Net-(C3-Pad1)")
(net 104 "Net-(D1-Pad1)")
(net 105 "Net-(D2-Pad1)")
(net 106 "Net-(R3-Pad1)")
(net 107 "Net-(U3-Pad15)")
(net 108 "Net-(U3-Pad16)")
(net 109 "Net-(U3-Pad17)")
(net 110 "Net-(U3-Pad18)")
(net 104 "Net-(R3-Pad1)")
(net 105 "Net-(U3-Pad15)")
(net 106 "Net-(U3-Pad16)")
(net 107 "Net-(U3-Pad17)")
(net 108 "Net-(U3-Pad18)")
(net 109 "Net-(BUS1-Pad4)")
(net 110 "Net-(BUS1-Pad5)")
(net 111 "Net-(BUS1-Pad6)")
(net 112 "Net-(BUS1-Pad7)")
(net 113 "Net-(BUS1-Pad8)")
(net 114 "Net-(BUS1-Pad9)")
(net 115 "Net-(BUS1-Pad10)")
(net 116 "Net-(BUS1-Pad11)")
(net 117 "Net-(BUS1-Pad12)")
(net 118 "Net-(BUS1-Pad15)")
(net 119 "Net-(BUS1-Pad16)")
(net 120 "Net-(BUS1-Pad17)")
(net 121 "Net-(BUS1-Pad18)")
(net 122 "Net-(BUS1-Pad19)")
(net 123 "Net-(BUS1-Pad20)")
(net 124 "Net-(BUS1-Pad21)")
(net 125 "Net-(BUS1-Pad22)")
(net 126 "Net-(BUS1-Pad23)")
(net 127 "Net-(BUS1-Pad24)")
(net 128 "Net-(BUS1-Pad25)")
(net 129 "Net-(BUS1-Pad26)")
(net 130 "Net-(BUS1-Pad27)")
(net 131 "Net-(BUS1-Pad28)")
(net 132 "Net-(BUS1-Pad30)")
(net 133 "Net-(BUS1-Pad32)")
(net 134 "Net-(BUS1-Pad41)")
(net 135 "Net-(BUS1-Pad43)")
(net 136 "Net-(BUS1-Pad44)")
(net 137 "Net-(BUS1-Pad45)")
(net 138 "Net-(BUS1-Pad46)")
(net 139 "Net-(BUS1-Pad47)")
(net 140 "Net-(BUS1-Pad48)")
(net 141 "Net-(BUS1-Pad49)")
(net 142 "Net-(BUS1-Pad50)")
(net 143 "Net-(D1-Pad2)")
(net 144 "Net-(D2-Pad2)")
(net 145 "Net-(RR1-Pad10)")
(net 146 "Net-(U3-Pad11)")
(net 147 "Net-(U8-Pad8)")
(net 148 "Net-(U8-Pad9)")
(net 149 "Net-(U8-Pad10)")
(net 150 "Net-(U9-PadN1)")
(net 151 "Net-(U9-PadN3)")
(net 152 "Net-(U9-PadM1)")
(net 153 "Net-(U9-PadM2)")
(net 154 "Net-(U9-PadJ3)")
(net 155 "Net-(U9-PadE2)")
(net 156 "Net-(U9-PadE3)")
(net 157 "Net-(U9-PadC5)")
(net 158 "Net-(U9-PadB1)")
(net 159 "Net-(U9-PadB4)")
(net 160 "Net-(U9-PadB5)")
(net 161 "Net-(U9-PadB10)")
(net 162 "Net-(U9-PadB13)")
(net 163 "Net-(U9-PadA1)")
(net 164 "Net-(U9-PadA2)")
(net 165 "Net-(U9-PadA3)")
(net 166 "Net-(U9-PadN5)")
(net 167 "Net-(U9-PadN12)")
(net 168 "Net-(U9-PadL5)")
(net 169 "Net-(U9-PadL6)")
(net 170 "Net-(U9-PadL9)")
(net 171 "Net-(U9-PadK12)")
(net 172 "Net-(U9-PadJ11)")
(net 173 "Net-(U9-PadE11)")
(net_class Default ""
(clearance 0.254)
@ -312,15 +377,78 @@
(add_net /STROBE)
(add_net /WR-)
(add_net /WR_REG)
(add_net "Net-(BUS1-Pad10)")
(add_net "Net-(BUS1-Pad11)")
(add_net "Net-(BUS1-Pad12)")
(add_net "Net-(BUS1-Pad15)")
(add_net "Net-(BUS1-Pad16)")
(add_net "Net-(BUS1-Pad17)")
(add_net "Net-(BUS1-Pad18)")
(add_net "Net-(BUS1-Pad19)")
(add_net "Net-(BUS1-Pad20)")
(add_net "Net-(BUS1-Pad21)")
(add_net "Net-(BUS1-Pad22)")
(add_net "Net-(BUS1-Pad23)")
(add_net "Net-(BUS1-Pad24)")
(add_net "Net-(BUS1-Pad25)")
(add_net "Net-(BUS1-Pad26)")
(add_net "Net-(BUS1-Pad27)")
(add_net "Net-(BUS1-Pad28)")
(add_net "Net-(BUS1-Pad30)")
(add_net "Net-(BUS1-Pad32)")
(add_net "Net-(BUS1-Pad4)")
(add_net "Net-(BUS1-Pad41)")
(add_net "Net-(BUS1-Pad43)")
(add_net "Net-(BUS1-Pad44)")
(add_net "Net-(BUS1-Pad45)")
(add_net "Net-(BUS1-Pad46)")
(add_net "Net-(BUS1-Pad47)")
(add_net "Net-(BUS1-Pad48)")
(add_net "Net-(BUS1-Pad49)")
(add_net "Net-(BUS1-Pad5)")
(add_net "Net-(BUS1-Pad50)")
(add_net "Net-(BUS1-Pad6)")
(add_net "Net-(BUS1-Pad7)")
(add_net "Net-(BUS1-Pad8)")
(add_net "Net-(BUS1-Pad9)")
(add_net "Net-(C2-Pad1)")
(add_net "Net-(C3-Pad1)")
(add_net "Net-(D1-Pad1)")
(add_net "Net-(D2-Pad1)")
(add_net "Net-(D1-Pad2)")
(add_net "Net-(D2-Pad2)")
(add_net "Net-(R3-Pad1)")
(add_net "Net-(RR1-Pad10)")
(add_net "Net-(U3-Pad11)")
(add_net "Net-(U3-Pad15)")
(add_net "Net-(U3-Pad16)")
(add_net "Net-(U3-Pad17)")
(add_net "Net-(U3-Pad18)")
(add_net "Net-(U8-Pad10)")
(add_net "Net-(U8-Pad8)")
(add_net "Net-(U8-Pad9)")
(add_net "Net-(U9-PadA1)")
(add_net "Net-(U9-PadA2)")
(add_net "Net-(U9-PadA3)")
(add_net "Net-(U9-PadB1)")
(add_net "Net-(U9-PadB10)")
(add_net "Net-(U9-PadB13)")
(add_net "Net-(U9-PadB4)")
(add_net "Net-(U9-PadB5)")
(add_net "Net-(U9-PadC5)")
(add_net "Net-(U9-PadE11)")
(add_net "Net-(U9-PadE2)")
(add_net "Net-(U9-PadE3)")
(add_net "Net-(U9-PadJ11)")
(add_net "Net-(U9-PadJ3)")
(add_net "Net-(U9-PadK12)")
(add_net "Net-(U9-PadL5)")
(add_net "Net-(U9-PadL6)")
(add_net "Net-(U9-PadL9)")
(add_net "Net-(U9-PadM1)")
(add_net "Net-(U9-PadM2)")
(add_net "Net-(U9-PadN1)")
(add_net "Net-(U9-PadN12)")
(add_net "Net-(U9-PadN3)")
(add_net "Net-(U9-PadN5)")
)
(net_class Power ""
@ -334,7 +462,7 @@
(add_net VCC)
)
(module LOGO (layer Composant) (tedit 0) (tstamp 56372FFF)
(module LOGO locked (layer Composant) (tedit 0) (tstamp 56372FFF)
(at 89.027 98.552)
(fp_text reference G*** (at 0 0) (layer F.SilkS) hide
(effects (font (thickness 0.3)))
@ -567,39 +695,64 @@
(net 81 /PC-RST))
(pad 3 connect rect (at 33.02 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 101 VCC))
(pad 4 connect rect (at 30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 5 connect rect (at 27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 6 connect rect (at 25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 7 connect rect (at 22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 8 connect rect (at 20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 9 connect rect (at 17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 10 connect rect (at 15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 11 connect rect (at 12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 12 connect rect (at 10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 4 connect rect (at 30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 109 "Net-(BUS1-Pad4)"))
(pad 5 connect rect (at 27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 110 "Net-(BUS1-Pad5)"))
(pad 6 connect rect (at 25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 111 "Net-(BUS1-Pad6)"))
(pad 7 connect rect (at 22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 112 "Net-(BUS1-Pad7)"))
(pad 8 connect rect (at 20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 113 "Net-(BUS1-Pad8)"))
(pad 9 connect rect (at 17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 114 "Net-(BUS1-Pad9)"))
(pad 10 connect rect (at 15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 115 "Net-(BUS1-Pad10)"))
(pad 11 connect rect (at 12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 116 "Net-(BUS1-Pad11)"))
(pad 12 connect rect (at 10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 117 "Net-(BUS1-Pad12)"))
(pad 13 connect rect (at 7.62 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 79 /PC-IOW))
(pad 14 connect rect (at 5.08 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 78 /PC-IOR))
(pad 15 connect rect (at 2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 16 connect rect (at 0 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 17 connect rect (at -2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 18 connect rect (at -5.08 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 19 connect rect (at -7.62 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 20 connect rect (at -10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 21 connect rect (at -12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 22 connect rect (at -15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 23 connect rect (at -17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 24 connect rect (at -20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 25 connect rect (at -22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 26 connect rect (at -25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 27 connect rect (at -27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 28 connect rect (at -30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 15 connect rect (at 2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 118 "Net-(BUS1-Pad15)"))
(pad 16 connect rect (at 0 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 119 "Net-(BUS1-Pad16)"))
(pad 17 connect rect (at -2.54 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 120 "Net-(BUS1-Pad17)"))
(pad 18 connect rect (at -5.08 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 121 "Net-(BUS1-Pad18)"))
(pad 19 connect rect (at -7.62 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 122 "Net-(BUS1-Pad19)"))
(pad 20 connect rect (at -10.16 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 123 "Net-(BUS1-Pad20)"))
(pad 21 connect rect (at -12.7 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 124 "Net-(BUS1-Pad21)"))
(pad 22 connect rect (at -15.24 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 125 "Net-(BUS1-Pad22)"))
(pad 23 connect rect (at -17.78 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 126 "Net-(BUS1-Pad23)"))
(pad 24 connect rect (at -20.32 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 127 "Net-(BUS1-Pad24)"))
(pad 25 connect rect (at -22.86 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 128 "Net-(BUS1-Pad25)"))
(pad 26 connect rect (at -25.4 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 129 "Net-(BUS1-Pad26)"))
(pad 27 connect rect (at -27.94 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 130 "Net-(BUS1-Pad27)"))
(pad 28 connect rect (at -30.48 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 131 "Net-(BUS1-Pad28)"))
(pad 29 connect rect (at -33.02 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 101 VCC))
(pad 30 connect rect (at -35.56 0) (size 1.778 7.62) (layers Cuivre B.Mask))
(pad 30 connect rect (at -35.56 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 132 "Net-(BUS1-Pad30)"))
(pad 31 connect rect (at -38.1 0) (size 1.778 7.62) (layers Cuivre B.Mask)
(net 100 GND))
(pad 32 connect rect (at 38.1 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 32 connect rect (at 38.1 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 133 "Net-(BUS1-Pad32)"))
(pad 33 connect rect (at 35.56 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 77 /PC-DB7))
(pad 34 connect rect (at 33.02 0) (size 1.778 7.62) (layers Composant F.Mask)
@ -616,17 +769,26 @@
(net 71 /PC-DB1))
(pad 40 connect rect (at 17.78 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 70 /PC-DB0))
(pad 41 connect rect (at 15.24 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 41 connect rect (at 15.24 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 134 "Net-(BUS1-Pad41)"))
(pad 42 connect rect (at 12.7 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 69 /PC-AEN))
(pad 43 connect rect (at 10.16 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 44 connect rect (at 7.62 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 45 connect rect (at 5.08 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 46 connect rect (at 2.54 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 47 connect rect (at 0 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 48 connect rect (at -2.54 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 49 connect rect (at -5.08 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 50 connect rect (at -7.62 0) (size 1.778 7.62) (layers Composant F.Mask))
(pad 43 connect rect (at 10.16 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 135 "Net-(BUS1-Pad43)"))
(pad 44 connect rect (at 7.62 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 136 "Net-(BUS1-Pad44)"))
(pad 45 connect rect (at 5.08 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 137 "Net-(BUS1-Pad45)"))
(pad 46 connect rect (at 2.54 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 138 "Net-(BUS1-Pad46)"))
(pad 47 connect rect (at 0 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 139 "Net-(BUS1-Pad47)"))
(pad 48 connect rect (at -2.54 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 140 "Net-(BUS1-Pad48)"))
(pad 49 connect rect (at -5.08 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 141 "Net-(BUS1-Pad49)"))
(pad 50 connect rect (at -7.62 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 142 "Net-(BUS1-Pad50)"))
(pad 51 connect rect (at -10.16 0) (size 1.778 7.62) (layers Composant F.Mask)
(net 60 /PC-A11))
(pad 52 connect rect (at -12.7 0) (size 1.778 7.62) (layers Composant F.Mask)
@ -729,7 +891,7 @@
(pad 29 thru_hole circle (at -11.43 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 98 /WR-))
(pad 30 thru_hole circle (at -13.97 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 106 "Net-(R3-Pad1)"))
(net 104 "Net-(R3-Pad1)"))
(pad 31 thru_hole circle (at -16.51 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 37 /MA15))
(pad 32 thru_hole circle (at -19.05 -7.62) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
@ -847,12 +1009,16 @@
(fp_line (start 16.51 -16.51) (end -16.51 -16.51) (layer F.SilkS) (width 0.15))
(fp_line (start -16.51 -16.51) (end -16.51 16.51) (layer F.SilkS) (width 0.15))
(fp_line (start -16.51 16.51) (end 15.24 16.51) (layer F.SilkS) (width 0.15))
(pad N1 thru_hole circle (at 15.24 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad N1 thru_hole circle (at 15.24 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 150 "Net-(U9-PadN1)"))
(pad N2 thru_hole circle (at 12.7 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 15 /D0))
(pad N3 thru_hole circle (at 10.16 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad M1 thru_hole circle (at 15.24 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad M2 thru_hole circle (at 12.7 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad N3 thru_hole circle (at 10.16 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 151 "Net-(U9-PadN3)"))
(pad M1 thru_hole circle (at 15.24 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 152 "Net-(U9-PadM1)"))
(pad M2 thru_hole circle (at 12.7 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 153 "Net-(U9-PadM2)"))
(pad M3 thru_hole circle (at 10.16 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 28 /LED1))
(pad L1 thru_hole circle (at 15.24 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -871,7 +1037,8 @@
(net 65 /PC-A6))
(pad J2 thru_hole circle (at 12.7 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 64 /PC-A5))
(pad J3 thru_hole circle (at 10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad J3 thru_hole circle (at 10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 154 "Net-(U9-PadJ3)"))
(pad H1 thru_hole circle (at 15.24 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 67 /PC-A8))
(pad H2 thru_hole circle (at 12.7 -2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -891,8 +1058,10 @@
(net 34 /MA12))
(pad E1 thru_hole circle (at 15.24 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 41 /MA4))
(pad E2 thru_hole circle (at 12.7 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad E3 thru_hole circle (at 10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad E2 thru_hole circle (at 12.7 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 155 "Net-(U9-PadE2)"))
(pad E3 thru_hole circle (at 10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 156 "Net-(U9-PadE3)"))
(pad D1 thru_hole circle (at 15.24 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 36 /MA14))
(pad D2 thru_hole circle (at 12.7 7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -907,7 +1076,8 @@
(net 101 VCC))
(pad C4 thru_hole circle (at 7.62 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad C5 thru_hole circle (at 5.08 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad C5 thru_hole circle (at 5.08 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 157 "Net-(U9-PadC5)"))
(pad C6 thru_hole circle (at 2.54 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 48 /MD0))
(pad C7 thru_hole circle (at 0 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
@ -923,13 +1093,16 @@
(net 3 /AUTOFD-))
(pad C13 thru_hole circle (at -15.24 10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 42 /MA5))
(pad B1 thru_hole circle (at 15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad B1 thru_hole circle (at 15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 158 "Net-(U9-PadB1)"))
(pad B2 thru_hole circle (at 12.7 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 31 /MA1))
(pad B3 thru_hole circle (at 10.16 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 44 /MA7))
(pad B4 thru_hole circle (at 7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad B5 thru_hole circle (at 5.08 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad B4 thru_hole circle (at 7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 159 "Net-(U9-PadB4)"))
(pad B5 thru_hole circle (at 5.08 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 160 "Net-(U9-PadB5)"))
(pad B6 thru_hole circle (at 2.54 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 50 /MD2))
(pad B7 thru_hole circle (at 0 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -938,15 +1111,20 @@
(net 55 /MD7))
(pad B9 thru_hole circle (at -5.08 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 56 /OE-))
(pad B10 thru_hole circle (at -7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad B10 thru_hole circle (at -7.62 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 161 "Net-(U9-PadB10)"))
(pad B11 thru_hole circle (at -10.16 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 101 VCC))
(pad B12 thru_hole circle (at -12.7 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 101 VCC))
(pad B13 thru_hole circle (at -15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad A1 thru_hole rect (at 15.24 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad A2 thru_hole circle (at 12.7 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad A3 thru_hole circle (at 10.16 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad B13 thru_hole circle (at -15.24 12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 162 "Net-(U9-PadB13)"))
(pad A1 thru_hole rect (at 15.24 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 163 "Net-(U9-PadA1)"))
(pad A2 thru_hole circle (at 12.7 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 164 "Net-(U9-PadA2)"))
(pad A3 thru_hole circle (at 10.16 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 165 "Net-(U9-PadA3)"))
(pad A4 thru_hole circle (at 7.62 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 46 /MA9))
(pad A5 thru_hole circle (at 5.08 15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -969,7 +1147,8 @@
(net 98 /WR-))
(pad N4 thru_hole circle (at 7.62 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 58 /PC-A1))
(pad N5 thru_hole circle (at 5.08 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad N5 thru_hole circle (at 5.08 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 166 "Net-(U9-PadN5)"))
(pad N6 thru_hole circle (at 2.54 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 82 /PC-WR))
(pad N7 thru_hole circle (at 0 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -982,7 +1161,8 @@
(net 69 /PC-AEN))
(pad N11 thru_hole circle (at -10.16 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 20 /D5))
(pad N12 thru_hole circle (at -12.7 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad N12 thru_hole circle (at -12.7 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 167 "Net-(U9-PadN12)"))
(pad N13 thru_hole circle (at -15.24 -15.24 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 95 /SLCT+))
(pad M4 thru_hole circle (at 7.62 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -1006,13 +1186,16 @@
(pad M13 thru_hole circle (at -15.24 -12.7 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad L4 thru_hole circle (at 7.62 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 13 /CLKLCA))
(pad L5 thru_hole circle (at 5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad L6 thru_hole circle (at 2.54 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad L5 thru_hole circle (at 5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 168 "Net-(U9-PadL5)"))
(pad L6 thru_hole circle (at 2.54 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 169 "Net-(U9-PadL6)"))
(pad L7 thru_hole circle (at 0 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad L8 thru_hole circle (at -2.54 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 59 /PC-A10))
(pad L9 thru_hole circle (at -5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad L9 thru_hole circle (at -5.08 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 170 "Net-(U9-PadL9)"))
(pad L10 thru_hole circle (at -7.62 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 101 VCC))
(pad L11 thru_hole circle (at -10.16 -10.16 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -1023,10 +1206,12 @@
(net 83 /PE+))
(pad K11 thru_hole circle (at -10.16 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad K12 thru_hole circle (at -12.7 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad K12 thru_hole circle (at -12.7 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 171 "Net-(U9-PadK12)"))
(pad K13 thru_hole circle (at -15.24 -7.62 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 2 /ACK))
(pad J11 thru_hole circle (at -10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad J11 thru_hole circle (at -10.16 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 172 "Net-(U9-PadJ11)"))
(pad J12 thru_hole circle (at -12.7 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 12 /BUST+))
(pad J13 thru_hole circle (at -15.24 -5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -1049,7 +1234,8 @@
(net 6 /BIT2))
(pad F13 thru_hole circle (at -15.24 2.54 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 29 /LED2))
(pad E11 thru_hole circle (at -10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS))
(pad E11 thru_hole circle (at -10.16 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 173 "Net-(U9-PadE11)"))
(pad E12 thru_hole circle (at -12.7 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
(net 27 /INIT-))
(pad E13 thru_hole circle (at -15.24 5.08 180) (size 1.397 1.397) (drill 0.7874) (layers *.Cu *.Mask F.SilkS)
@ -1091,18 +1277,21 @@
(pad 2 thru_hole circle (at -11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 47 /MATCHL))
(pad 3 thru_hole circle (at -8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 110 "Net-(U3-Pad18)"))
(net 108 "Net-(U3-Pad18)"))
(pad 4 thru_hole circle (at -6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 109 "Net-(U3-Pad17)"))
(net 107 "Net-(U3-Pad17)"))
(pad 5 thru_hole circle (at -3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 108 "Net-(U3-Pad16)"))
(net 106 "Net-(U3-Pad16)"))
(pad 6 thru_hole circle (at -1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 107 "Net-(U3-Pad15)"))
(net 105 "Net-(U3-Pad15)"))
(pad 7 thru_hole circle (at 1.27 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 82 /PC-WR))
(pad 8 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
(pad 9 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
(pad 10 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
(pad 8 thru_hole circle (at 3.81 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 147 "Net-(U8-Pad8)"))
(pad 9 thru_hole circle (at 6.35 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 148 "Net-(U8-Pad9)"))
(pad 10 thru_hole circle (at 8.89 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 149 "Net-(U8-Pad10)"))
(pad 11 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 93 /RSTL))
(pad 12 thru_hole circle (at 13.97 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
@ -1176,7 +1365,8 @@
(net 81 /PC-RST))
(pad 10 thru_hole circle (at 11.43 3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad 11 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
(pad 11 thru_hole circle (at 11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 146 "Net-(U3-Pad11)"))
(pad 12 thru_hole circle (at 8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 93 /RSTL))
(pad 13 thru_hole circle (at 6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
@ -1184,13 +1374,13 @@
(pad 14 thru_hole circle (at 3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 82 /PC-WR))
(pad 15 thru_hole circle (at 1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 107 "Net-(U3-Pad15)"))
(net 105 "Net-(U3-Pad15)"))
(pad 16 thru_hole circle (at -1.27 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 108 "Net-(U3-Pad16)"))
(net 106 "Net-(U3-Pad16)"))
(pad 17 thru_hole circle (at -3.81 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 109 "Net-(U3-Pad17)"))
(net 107 "Net-(U3-Pad17)"))
(pad 18 thru_hole circle (at -6.35 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 110 "Net-(U3-Pad18)"))
(net 108 "Net-(U3-Pad18)"))
(pad 19 thru_hole circle (at -8.89 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad 20 thru_hole circle (at -11.43 -3.81) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
@ -1480,7 +1670,7 @@
(fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
(fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 105 "Net-(D2-Pad1)"))
(net 144 "Net-(D2-Pad2)"))
(pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 29 /LED2))
(model Discret.3dshapes/R3.wrl
@ -1510,7 +1700,7 @@
(fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
(fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 104 "Net-(D1-Pad1)"))
(net 143 "Net-(D1-Pad2)"))
(pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 28 /LED1))
(model Discret.3dshapes/R3.wrl
@ -1540,7 +1730,7 @@
(fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.15))
(fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 106 "Net-(R3-Pad1)"))
(net 104 "Net-(R3-Pad1)"))
(pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 101 VCC))
(model Discret.3dshapes/R3.wrl
@ -1644,7 +1834,8 @@
(net 86 /REF11))
(pad 9 thru_hole circle (at 8.89 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 85 /REF10))
(pad 10 thru_hole circle (at 11.43 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS))
(pad 10 thru_hole circle (at 11.43 0) (size 1.397 1.397) (drill 0.8128) (layers *.Cu *.Mask F.SilkS)
(net 145 "Net-(RR1-Pad10)"))
(model Discret.3dshapes/r_pack9.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
@ -1681,14 +1872,14 @@
)
(module LEDs:LED-5MM (layer Composant) (tedit 560D3011) (tstamp 322D32AC)
(at 158.115 38.1 180)
(at 155.58 38.06)
(descr "LED 5mm round vertical")
(tags "LED 5mm round vertical")
(path /322D32AC)
(fp_text reference D1 (at -2.355 -0.18 180) (layer F.SilkS)
(fp_text reference D1 (at -2.355 -0.18) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED (at 1.524 -3.937 180) (layer F.Fab) hide
(fp_text value LED (at 1.524 -3.937) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
@ -1696,13 +1887,13 @@
(fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
(fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
(fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
(fp_text user K (at -1.905 1.905 180) (layer F.SilkS) hide
(fp_text user K (at -1.905 1.905) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0 270) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 104 "Net-(D1-Pad1)"))
(pad 2 thru_hole circle (at 2.54 0 180) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(pad 1 thru_hole rect (at 0 0 90) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad 2 thru_hole circle (at 2.54 0) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 143 "Net-(D1-Pad2)"))
(model LEDs.3dshapes/LED-5MM.wrl
(at (xyz 0.05 0 0))
(scale (xyz 1 1 1))
@ -1711,14 +1902,14 @@
)
(module LEDs:LED-5MM (layer Composant) (tedit 560D3020) (tstamp 322D32BE)
(at 168.275 38.1 180)
(at 165.71 38.08)
(descr "LED 5mm round vertical")
(tags "LED 5mm round vertical")
(path /322D32BE)
(fp_text reference D2 (at -2.415 -0.02 180) (layer F.SilkS)
(fp_text reference D2 (at -2.415 -0.02) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED (at 1.524 -3.937 180) (layer F.Fab) hide
(fp_text value LED (at 1.524 -3.937) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.5 -1.55) (end -1.5 1.55) (layer F.CrtYd) (width 0.05))
@ -1726,13 +1917,13 @@
(fp_arc (start 1.27 0) (end -1.23 -1.5) (angle 297.5) (layer F.SilkS) (width 0.15))
(fp_line (start -1.23 1.5) (end -1.23 -1.5) (layer F.SilkS) (width 0.15))
(fp_circle (center 1.27 0) (end 0.97 -2.5) (layer F.SilkS) (width 0.15))
(fp_text user K (at -1.905 1.905 180) (layer F.SilkS) hide
(fp_text user K (at -1.905 1.905) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0 270) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 105 "Net-(D2-Pad1)"))
(pad 2 thru_hole circle (at 2.54 0 180) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(pad 1 thru_hole rect (at 0 0 90) (size 2 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 100 GND))
(pad 2 thru_hole circle (at 2.54 0) (size 1.9 1.9) (drill 1.00076) (layers *.Cu *.Mask F.SilkS)
(net 144 "Net-(D2-Pad2)"))
(model LEDs.3dshapes/LED-5MM.wrl
(at (xyz 0.05 0 0))
(scale (xyz 1 1 1))
@ -2458,13 +2649,6 @@
(segment (start 146.685 106.3625) (end 147.0025 106.68) (width 0.4318) (layer Cuivre) (net 99))
(segment (start 151.4475 106.68) (end 151.765 106.3625) (width 0.4318) (layer Cuivre) (net 99))
(segment (start 147.0025 106.68) (end 151.4475 106.68) (width 0.4318) (layer Cuivre) (net 99))
(segment (start 155.575 38.1) (end 155.575 36.635) (width 0.5588) (layer Composant) (net 100))
(segment (start 160.655 38.1) (end 165.735 38.1) (width 0.5588) (layer Composant) (net 100) (status 400))
(segment (start 160.08 37.525) (end 160.655 38.1) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBD))
(segment (start 160.08 36.54) (end 160.08 37.525) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBA))
(segment (start 159.55 36.01) (end 160.08 36.54) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAE))
(segment (start 156.2 36.01) (end 159.55 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAC))
(segment (start 155.575 36.635) (end 156.2 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAA))
(segment (start 184.785 104.14) (end 184.785 101.346) (width 0.5588) (layer Cuivre) (net 100) (status C00))
(segment (start 184.785 101.346) (end 184.785 98.6028) (width 0.5588) (layer Cuivre) (net 100) (status C00))
(segment (start 184.785 98.6028) (end 184.785 95.9104) (width 0.5588) (layer Cuivre) (net 100) (status C00))
@ -2532,7 +2716,6 @@
(segment (start 149.225 121.92) (end 172.72 121.92) (width 0.5588) (layer Cuivre) (net 100))
(segment (start 154.305 43.18) (end 155.575 44.45) (width 0.5588) (layer Composant) (net 100))
(segment (start 154.305 39.37) (end 154.305 43.18) (width 0.5588) (layer Composant) (net 100))
(segment (start 155.575 38.1) (end 154.305 39.37) (width 0.5588) (layer Composant) (net 100) (status 800))
(segment (start 155.575 44.45) (end 155.575 52.07) (width 0.5588) (layer Composant) (net 100) (status 400))
(segment (start 98.425 105.41) (end 88.265 105.41) (width 0.5588) (layer Cuivre) (net 100) (status 800))
(segment (start 88.265 105.41) (end 85.09 108.585) (width 0.5588) (layer Cuivre) (net 100))
@ -2557,6 +2740,14 @@
(segment (start 118.745 124.46) (end 123.825 124.46) (width 0.5588) (layer Cuivre) (net 100) (status C00))
(segment (start 100.965 105.41) (end 103.505 105.41) (width 0.5588) (layer Cuivre) (net 100) (status C00))
(segment (start 167.005 88.9) (end 167.005 83.82) (width 0.5588) (layer Composant) (net 100))
(segment (start 155.575 38.1) (end 155.575 36.635) (width 0.5588) (layer Composant) (net 100))
(segment (start 155.575 36.635) (end 156.2 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAA))
(segment (start 155.575 38.1) (end 154.305 39.37) (width 0.5588) (layer Composant) (net 100) (status 800))
(segment (start 156.2 36.01) (end 159.55 36.01) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAC))
(segment (start 160.655 38.1) (end 165.735 38.1) (width 0.5588) (layer Composant) (net 100) (status 400))
(segment (start 160.08 37.525) (end 160.655 38.1) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBD))
(segment (start 160.08 36.54) (end 160.08 37.525) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FBA))
(segment (start 159.55 36.01) (end 160.08 36.54) (width 0.5588) (layer Composant) (net 100) (tstamp 560D2FAE))
(segment (start 84.455 57.15) (end 86.995 59.69) (width 0.5588) (layer Composant) (net 101) (status 800))
(segment (start 170.815 119.38) (end 170.815 128.27) (width 0.5588) (layer Composant) (net 101))
(segment (start 86.995 113.03) (end 86.995 91.44) (width 0.5588) (layer Composant) (net 101) (status 800))
@ -2634,14 +2825,14 @@
(segment (start 126.365 97.79) (end 127.635 99.06) (width 0.4318) (layer Cuivre) (net 103) (status 400))
(segment (start 114.935 99.06) (end 113.665 97.79) (width 0.4318) (layer Cuivre) (net 103) (status 400))
(segment (start 122.555 97.79) (end 126.365 97.79) (width 0.4318) (layer Cuivre) (net 103))
(segment (start 155.575 41.91) (end 158.115 39.37) (width 0.4318) (layer Composant) (net 104) (status 800))
(segment (start 158.115 39.37) (end 158.115 38.1) (width 0.4318) (layer Composant) (net 104) (status 400))
(segment (start 168.275 41.91) (end 168.275 38.1) (width 0.4318) (layer Composant) (net 105) (status C00))
(segment (start 92.075 57.15) (end 92.075 60.96) (width 0.4318) (layer Cuivre) (net 106) (status C00))
(segment (start 136.525 116.84) (end 136.525 113.03) (width 0.4318) (layer Composant) (net 107) (status C00))
(segment (start 133.985 116.84) (end 133.985 113.03) (width 0.4318) (layer Composant) (net 108) (status C00))
(segment (start 131.445 116.84) (end 131.445 113.03) (width 0.4318) (layer Composant) (net 109) (status C00))
(segment (start 128.905 116.84) (end 128.905 113.03) (width 0.4318) (layer Composant) (net 110) (status C00))
(segment (start 92.075 57.15) (end 92.075 60.96) (width 0.4318) (layer Cuivre) (net 104) (status C00))
(segment (start 136.525 116.84) (end 136.525 113.03) (width 0.4318) (layer Composant) (net 105) (status C00))
(segment (start 133.985 116.84) (end 133.985 113.03) (width 0.4318) (layer Composant) (net 106) (status C00))
(segment (start 131.445 116.84) (end 131.445 113.03) (width 0.4318) (layer Composant) (net 107) (status C00))
(segment (start 128.905 116.84) (end 128.905 113.03) (width 0.4318) (layer Composant) (net 108) (status C00))
(segment (start 158.115 39.37) (end 158.115 38.1) (width 0.4318) (layer Composant) (net 143) (status 400))
(segment (start 155.575 41.91) (end 158.115 39.37) (width 0.4318) (layer Composant) (net 143) (status 800))
(segment (start 168.275 41.91) (end 168.275 38.1) (width 0.4318) (layer Composant) (net 144) (status C00))
(zone (net 100) (net_name GND) (layer Cuivre) (tstamp 4CDEC22B) (hatch edge 0.508)
(connect_pads (clearance 0.508))

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
update=18/05/2015 09:03:59
update=23/01/2016 15:05:13
version=1
last_client=kicad
[common]

View File

@ -1,17 +1,7 @@
EESchema Schematic File Version 2
LIBS:power
LIBS:device
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:image
LIBS:interf_u-cache
LIBS:interf_u_schlib
LIBS:power
EELAYER 25 0
EELAYER END
$Descr A3 16535 11693
@ -28,7 +18,7 @@ Comment4 "Comment 4"
$EndDescr
$Bitmap
Pos 11050 10550
Scale 1.000000
Scale 1,000000
Data
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 E5 00 00 01 0E 08 02 00 00 00 F9 5F 47
B4 00 00 00 03 73 42 49 54 08 08 08 DB E1 4F E0 00 00 20 00 49 44 41 54 78 9C EC BD 77 94 5D 47
@ -1181,7 +1171,7 @@ BF FD 96 77 9E 38 7E F1 EC E1 55 E2 AF 2F E0 1B 5F F9 FC FE BD 4F B9 56 EB C9 C9
29 65 D5 9A 89 35 EB 37 F6 E3 02 4F 95 57 89 BF 1E 63 D9 CA D5 CB 7E 65 BC F3 FF E1 D5 7A 1F CE
A2 94 8E 79 E6 79 49 E6 FD 75 9E B9 C4 BC BF CE 33 97 98 F7 D7 79 E6 12 F3 FE 3A CF 5C E2 E7 E2
03 93 93 93 FD BA 8E 79 E6 39 19 8E FB EB DC 15 0B E6 F9 D5 61 7E 3F 30 CF 5C 62 DE 5F E7 99 4B
FC 1F 94 BD 62 D3 EE A5 8B 6B 00 00 00 00 49 45 4E 44 AE 42 60 82 F9
FC 1F 94 BD 62 D3 EE A5 8B 6B 00 00 00 00 49 45 4E 44 AE 42 60 82 0E
EndData
$EndBitmap
Wire Bus Line
@ -1203,7 +1193,7 @@ Wire Wire Line
Wire Wire Line
3150 2250 3650 2250
Wire Wire Line
1000 9850 1000 9950
1000 9750 1000 9850
Wire Wire Line
4500 3100 4000 3100
Wire Wire Line
@ -1448,9 +1438,9 @@ Wire Wire Line
Wire Wire Line
10100 4200 9650 4200
Wire Wire Line
13450 1500 13000 1500
13650 1500 13200 1500
Wire Wire Line
13450 1050 13000 1050
13650 1050 13200 1050
Wire Wire Line
10100 4600 9650 4600
Wire Wire Line
@ -1521,7 +1511,7 @@ Wire Wire Line
Wire Wire Line
12300 3400 12700 3400
Wire Wire Line
15200 3700 15200 3500
15000 3700 15000 3500
Wire Wire Line
12300 4200 12850 4200
Wire Wire Line
@ -1769,13 +1759,13 @@ Wire Bus Line
Wire Bus Line
3900 2450 3900 3700
Wire Wire Line
12300 3700 13700 3700
12300 3700 13800 3700
Wire Wire Line
14200 3700 14650 3700
14100 3700 14650 3700
Wire Wire Line
15200 3700 15150 3700
15000 3700 14950 3700
Wire Wire Line
15200 3500 12300 3500
15000 3500 12300 3500
Entry Bus Bus
3750 2350 3850 2450
$Comp
@ -1784,7 +1774,7 @@ U 1 1 4A087146
P 5250 1950
F 0 "U3" H 5250 2525 60 0000 C BNN
F 1 "74LS541" H 5250 1375 60 0000 C TNN
F 2 "dip_sockets:DIP-20__300" H 5250 1250 60 0000 C CNN
F 2 "Dip_sockets:DIP-20__300" H 5250 1250 60 0000 C CNN
F 3 "" H 5250 1950 60 0001 C CNN
1 5250 1950
1 0 0 -1
@ -1794,23 +1784,23 @@ Selection
$Comp
L GND #PWR01
U 1 1 43020357
P 14400 4800
F 0 "#PWR01" H 14400 4800 30 0001 C CNN
F 1 "GND" H 14400 4730 30 0001 C CNN
F 2 "" H 14400 4800 60 0001 C CNN
F 3 "" H 14400 4800 60 0001 C CNN
1 14400 4800
P 14400 4700
F 0 "#PWR01" H 14400 4700 30 0001 C CNN
F 1 "GND" H 14400 4630 30 0001 C CNN
F 2 "" H 14400 4700 60 0001 C CNN
F 3 "" H 14400 4700 60 0001 C CNN
1 14400 4700
1 0 0 -1
$EndComp
$Comp
L GND #PWR02
U 1 1 43020354
P 13500 4800
F 0 "#PWR02" H 13500 4800 30 0001 C CNN
F 1 "GND" H 13500 4730 30 0001 C CNN
F 2 "" H 13500 4800 60 0001 C CNN
F 3 "" H 13500 4800 60 0001 C CNN
1 13500 4800
P 13500 4700
F 0 "#PWR02" H 13500 4700 30 0001 C CNN
F 1 "GND" H 13500 4630 30 0001 C CNN
F 2 "" H 13500 4700 60 0001 C CNN
F 3 "" H 13500 4700 60 0001 C CNN
1 13500 4700
1 0 0 -1
$EndComp
$Comp
@ -1838,23 +1828,23 @@ $EndComp
$Comp
L GND #PWR05
U 1 1 43020328
P 1000 9950
F 0 "#PWR05" H 1000 9950 30 0001 C CNN
F 1 "GND" H 1000 9880 30 0001 C CNN
F 2 "" H 1000 9950 60 0001 C CNN
F 3 "" H 1000 9950 60 0001 C CNN
1 1000 9950
P 1000 9850
F 0 "#PWR05" H 1000 9850 30 0001 C CNN
F 1 "GND" H 1000 9780 30 0001 C CNN
F 2 "" H 1000 9850 60 0001 C CNN
F 3 "" H 1000 9850 60 0001 C CNN
1 1000 9850
1 0 0 -1
$EndComp
$Comp
L PWR_FLAG #FLG06
U 1 1 38CEA284
P 2850 9950
F 0 "#FLG06" H 2850 10220 30 0001 C CNN
F 1 "PWR_FLAG" H 2850 10180 30 0000 C CNN
F 2 "" H 2850 9950 60 0001 C CNN
F 3 "" H 2850 9950 60 0001 C CNN
1 2850 9950
P 2850 9850
F 0 "#FLG06" H 2850 10120 30 0001 C CNN
F 1 "PWR_FLAG" H 2850 10080 30 0000 C CNN
F 2 "" H 2850 9850 60 0001 C CNN
F 3 "" H 2850 9850 60 0001 C CNN
1 2850 9850
-1 0 0 1
$EndComp
$Comp
@ -1915,12 +1905,12 @@ $EndComp
$Comp
L VCC #PWR012
U 1 1 4A33B1D2
P 6050 9900
F 0 "#PWR012" H 6050 10000 30 0001 C CNN
F 1 "VCC" H 6050 10000 40 0000 C CNN
F 2 "" H 6050 9900 60 0001 C CNN
F 3 "" H 6050 9900 60 0001 C CNN
1 6050 9900
P 6250 9900
F 0 "#PWR012" H 6250 10000 30 0001 C CNN
F 1 "VCC" H 6250 10000 40 0000 C CNN
F 2 "" H 6250 9900 60 0001 C CNN
F 3 "" H 6250 9900 60 0001 C CNN
1 6250 9900
1 0 0 -1
$EndComp
$Comp
@ -2064,7 +2054,7 @@ U 1 1 325679C1
P 2750 8300
F 0 "RR1" V 2800 8300 70 0000 C CNN
F 1 "9x1K" V 2770 8630 70 0000 C CNN
F 2 "discret:r_pack9" V 2900 8350 60 0000 C CNN
F 2 "Discret:r_pack9" V 2900 8350 60 0000 C CNN
F 3 "" H 2750 8300 60 0001 C CNN
1 2750 8300
0 1 1 0
@ -2281,9 +2271,9 @@ Text Label 9700 4700 0 60 ~ 0
MA4
Text Label 9700 4600 0 60 ~ 0
MA15
Text Label 13000 1050 0 60 ~ 0
Text Label 13200 1050 0 60 ~ 0
LED1
Text Label 13000 1500 0 60 ~ 0
Text Label 13200 1500 0 60 ~ 0
LED2
Text Label 9700 4200 0 60 ~ 0
MA5
@ -2320,12 +2310,12 @@ MD0
$Comp
L R R3
U 1 1 324002E6
P 6350 9900
F 0 "R3" V 6430 9900 50 0000 C CNN
F 1 "10K" V 6350 9900 50 0000 C CNN
F 2 "discret:R3" V 6500 9900 50 0000 C CNN
F 3 "" H 6350 9900 60 0001 C CNN
1 6350 9900
P 6450 9900
F 0 "R3" V 6530 9900 50 0000 C CNN
F 1 "10K" V 6450 9900 50 0000 C CNN
F 2 "Discret:R3" V 6600 9900 50 0000 C CNN
F 3 "" H 6450 9900 60 0001 C CNN
1 6450 9900
0 1 1 0
$EndComp
Text Label 6700 10100 0 60 ~ 0
@ -2374,7 +2364,7 @@ U 1 1 3240023F
P 7700 9050
F 0 "U5" H 7700 10200 70 0000 C CNN
F 1 "628128" H 7700 7850 70 0000 C CNN
F 2 "dip_sockets:DIP-32__600" H 7700 7750 50 0000 C CNN
F 2 "Dip_sockets:DIP-32__600" H 7700 7750 50 0000 C CNN
F 3 "" H 7700 9050 60 0001 C CNN
1 7700 9050
1 0 0 -1
@ -2614,23 +2604,23 @@ $EndComp
$Comp
L C C3
U 1 1 32307ED4
P 14400 4600
F 0 "C3" H 14650 4650 50 0000 C CNN
F 1 "47pF" H 14650 4550 50 0000 C CNN
F 2 "discret:C1" H 14650 4450 50 0000 C CNN
F 3 "" H 14400 4600 60 0001 C CNN
1 14400 4600
P 14400 4550
F 0 "C3" H 14650 4600 50 0000 C CNN
F 1 "47pF" H 14650 4500 50 0000 C CNN
F 2 "Discret:C1" H 14650 4400 30 0000 C CNN
F 3 "" H 14400 4550 60 0001 C CNN
1 14400 4550
1 0 0 -1
$EndComp
$Comp
L C C2
U 1 1 32307ECF
P 13500 4600
F 0 "C2" H 13750 4650 50 0000 C CNN
F 1 "47pF" H 13750 4550 50 0000 C CNN
F 2 "discret:C1" H 13750 4450 50 0000 C CNN
F 3 "" H 13500 4600 60 0001 C CNN
1 13500 4600
P 13500 4550
F 0 "C2" H 13750 4600 50 0000 C CNN
F 1 "47pF" H 13750 4500 50 0000 C CNN
F 2 "Discret:C1" H 13750 4400 30 0000 C CNN
F 3 "" H 13500 4550 60 0001 C CNN
1 13500 4550
1 0 0 -1
$EndComp
$Comp
@ -2638,8 +2628,8 @@ L CRYSTAL X1
U 1 1 32307EC0
P 13950 4150
F 0 "X1" H 13950 4350 70 0000 C CNN
F 1 "8MHz" H 13950 3950 70 0000 C CNN
F 2 "discret:HC-18UH" H 13950 3850 50 0000 C CNN
F 1 "8MHz" H 13950 3950 50 0000 C CNN
F 2 "Discret:HC-18UH" H 13950 3900 30 0000 C CNN
F 3 "" H 13950 4150 60 0001 C CNN
1 13950 4150
1 0 0 -1
@ -2647,12 +2637,12 @@ $EndComp
$Comp
L R R2
U 1 1 32307EAA
P 14900 3700
F 0 "R2" V 14800 3700 50 0000 C CNN
F 1 "1K" V 14900 3700 50 0000 C CNN
F 2 "discret:R3" V 15000 3700 50 0000 C CNN
F 3 "" H 14900 3700 60 0001 C CNN
1 14900 3700
P 14800 3700
F 0 "R2" V 14700 3700 50 0000 C CNN
F 1 "1K" V 14800 3700 50 0000 C CNN
F 2 "Discret:R3" V 14900 3700 50 0000 C CNN
F 3 "" H 14800 3700 60 0001 C CNN
1 14800 3700
0 1 1 0
$EndComp
$Comp
@ -2661,7 +2651,7 @@ U 1 1 32307EA1
P 13950 3700
F 0 "R1" V 13850 3700 50 0000 C CNN
F 1 "100K" V 13950 3700 50 0000 C CNN
F 2 "discret:R3" V 14050 3700 50 0000 C CNN
F 2 "Discret:R3" V 14050 3700 50 0000 C CNN
F 3 "" H 13950 3700 60 0001 C CNN
1 13950 3700
0 1 1 0
@ -2669,45 +2659,45 @@ $EndComp
$Comp
L CP C1
U 1 1 32307DE2
P 2850 9650
F 0 "C1" H 2950 9700 50 0000 L CNN
F 1 "47uF" H 2950 9600 50 0000 L CNN
F 2 "discret:CP6" H 3100 9500 50 0000 C CNN
F 3 "" H 2850 9650 60 0001 C CNN
1 2850 9650
P 2850 9600
F 0 "C1" H 2968 9692 50 0000 L CNN
F 1 "47uF" H 2968 9600 50 0000 L CNN
F 2 "Discret:CP6" H 2968 9508 50 0000 L CNN
F 3 "" H 2850 9600 60 0001 C CNN
1 2850 9600
1 0 0 -1
$EndComp
$Comp
L CP C4
U 1 1 32307DCF
P 2200 9650
F 0 "C4" H 2300 9700 50 0000 L CNN
F 1 "47uF" H 2300 9600 50 0000 L CNN
F 2 "discret:CP6" H 2450 9500 50 0000 C CNN
F 3 "" H 2200 9650 60 0001 C CNN
1 2200 9650
P 2200 9600
F 0 "C4" H 2300 9650 50 0000 L CNN
F 1 "47uF" H 2300 9550 50 0000 L CNN
F 2 "Discret:CP6" H 2450 9450 50 0000 C CNN
F 3 "" H 2200 9600 60 0001 C CNN
1 2200 9600
1 0 0 -1
$EndComp
$Comp
L CP C5
U 1 1 32307DCA
P 1650 9650
F 0 "C5" H 1750 9700 50 0000 L CNN
F 1 "47uF" H 1750 9600 50 0000 L CNN
F 2 "discret:CP6" H 1900 9500 50 0000 C CNN
F 3 "" H 1650 9650 60 0001 C CNN
1 1650 9650
P 1650 9600
F 0 "C5" H 1750 9650 50 0000 L CNN
F 1 "47uF" H 1750 9550 50 0000 L CNN
F 2 "Discret:CP6" H 1900 9450 50 0000 C CNN
F 3 "" H 1650 9600 60 0001 C CNN
1 1650 9600
1 0 0 -1
$EndComp
$Comp
L CP C6
U 1 1 32307DC0
P 1000 9650
F 0 "C6" H 1100 9700 50 0000 L CNN
F 1 "47uF" H 1100 9600 50 0000 L CNN
F 2 "discret:CP6" H 1250 9500 50 0000 C CNN
F 3 "" H 1000 9650 60 0001 C CNN
1 1000 9650
P 1000 9600
F 0 "C6" H 1100 9650 50 0000 L CNN
F 1 "47uF" H 1100 9550 50 0000 L CNN
F 2 "Discret:CP6" H 1250 9450 50 0000 C CNN
F 3 "" H 1000 9600 60 0001 C CNN
1 1000 9600
1 0 0 -1
$EndComp
Text Label 3250 2250 0 60 ~ 0
@ -2732,7 +2722,7 @@ U 1 1 322D35B4
P 4600 6900
F 0 "U2" H 4600 7850 60 0000 C CNN
F 1 "74LS688" H 4600 5950 60 0000 C CIB
F 2 "dip_sockets:DIP-20__300" H 4600 5850 50 0000 C CNN
F 2 "Dip_sockets:DIP-20__300" H 4600 5850 50 0000 C CNN
F 3 "" H 4600 6900 60 0001 C CNN
1 4600 6900
1 0 0 -1
@ -2743,7 +2733,7 @@ U 1 1 322D32FA
P 11200 5700
F 0 "U9" H 11200 8450 70 0000 C CNN
F 1 "4003APG120" H 11200 2950 70 0000 C CNN
F 2 "PGA120" H 11200 2850 50 0000 C CNN
F 2 "Sockets_PGA:PGA120" H 11200 2850 50 0000 C CNN
F 3 "" H 11200 5700 60 0001 C CNN
F 4 "50$" H 11200 5700 60 0001 C CNN "price"
F 5 "test" H 11200 5700 60 0001 C CNN "Field5"
@ -2754,44 +2744,44 @@ $Comp
L LED D2
U 1 1 322D32BE
P 14250 2000
F 0 "D2" V 14150 1850 50 0000 C CNN
F 1 "LED" V 14250 2250 50 0000 C CNN
F 2 "discret:LEDV" V 14350 2250 50 0000 C CNN
F 0 "D2" V 14326 1892 50 0000 R CNN
F 1 "LED" V 14234 1892 50 0000 R CNN
F 2 "LEDs:LED-5MM" V 14158 1892 30 0000 R CNN
F 3 "" H 14250 2000 60 0001 C CNN
1 14250 2000
0 1 1 0
0 -1 -1 0
$EndComp
$Comp
L LED D1
U 1 1 322D32AC
P 14650 1550
F 0 "D1" V 14550 1400 50 0000 C CNN
F 1 "LED" V 14650 1800 50 0000 C CNN
F 2 "discret:LEDV" V 14750 1800 50 0000 C CNN
F 0 "D1" V 14726 1442 50 0000 R CNN
F 1 "LED" V 14634 1442 50 0000 R CNN
F 2 "LEDs:LED-5MM" V 14558 1442 30 0000 R CNN
F 3 "" H 14650 1550 60 0001 C CNN
1 14650 1550
0 1 1 0
0 -1 -1 0
$EndComp
$Comp
L R R5
U 1 1 322D32A0
P 13700 1500
F 0 "R5" V 13600 1500 50 0000 C CNN
F 1 "330" V 13700 1500 50 0000 C CNN
F 2 "discret:R3" V 13800 1500 50 0000 C CNN
F 3 "" H 13700 1500 60 0001 C CNN
1 13700 1500
P 13800 1500
F 0 "R5" V 13700 1500 50 0000 C CNN
F 1 "330" V 13800 1500 50 0000 C CNN
F 2 "Discret:R3" V 13900 1500 50 0000 C CNN
F 3 "" H 13800 1500 60 0001 C CNN
1 13800 1500
0 1 1 0
$EndComp
$Comp
L R R4
U 1 1 322D3295
P 13700 1050
F 0 "R4" V 13600 1050 50 0000 C CNN
F 1 "330" V 13700 1050 50 0000 C CNN
F 2 "discret:R3" V 13800 1050 50 0000 C CNN
F 3 "" H 13700 1050 60 0001 C CNN
1 13700 1050
P 13800 1050
F 0 "R4" V 13700 1050 50 0000 C CNN
F 1 "330" V 13800 1050 50 0000 C CNN
F 2 "Discret:R3" V 13900 1050 50 0000 C CNN
F 3 "" H 13800 1050 60 0001 C CNN
1 13800 1050
0 1 1 0
$EndComp
$Comp
@ -2800,7 +2790,7 @@ U 1 1 322D321C
P 7650 1800
F 0 "U8" H 7650 2700 70 0000 C CNN
F 1 "EP600" H 7650 850 70 0000 C CNN
F 2 "dip_sockets:DIP-24__300" H 7700 750 60 0000 C CNN
F 2 "Dip_sockets:DIP-24__300" H 7700 750 60 0000 C CNN
F 3 "" H 7650 1800 60 0001 C CNN
1 7650 1800
1 0 0 -1
@ -2811,7 +2801,7 @@ U 1 1 322D31F4
P 5200 3600
F 0 "U1" H 5200 4200 60 0000 C CNN
F 1 "74LS245" H 5200 2950 60 0000 C CNN
F 2 "dip_sockets:DIP-20__300" H 5200 2850 50 0000 C CNN
F 2 "Dip_sockets:DIP-20__300" H 5200 2850 50 0000 C CNN
F 3 "" H 5200 3600 60 0001 C CNN
1 5200 3600
1 0 0 -1
@ -2828,17 +2818,17 @@ F 3 "" H 2250 2950 60 0001 C CNN
1 0 0 -1
$EndComp
Wire Wire Line
1000 9900 2850 9900
1000 9800 2850 9800
Wire Wire Line
2850 9850 2850 9950
Connection ~ 1000 9900
Connection ~ 2850 9900
2850 9750 2850 9850
Connection ~ 1000 9800
Connection ~ 2850 9800
Wire Wire Line
2200 9850 2200 9900
Connection ~ 2200 9900
2200 9750 2200 9800
Connection ~ 2200 9800
Wire Wire Line
1650 9850 1650 9900
Connection ~ 1650 9900
1650 9750 1650 9800
Connection ~ 1650 9800
Wire Wire Line
1000 9350 1000 9450
Wire Wire Line
@ -2870,7 +2860,7 @@ Wire Wire Line
Wire Wire Line
6800 1050 6850 1050
Wire Wire Line
6050 9900 6100 9900
6250 9900 6300 9900
Wire Wire Line
3300 7950 3250 7950
$EndSCHEMATC

View File

@ -355,20 +355,22 @@ ENDDEF
# C
#
DEF C C 0 10 N Y 1 F N
F0 "C" 0 100 40 H V L CNN
F1 "C" 6 -85 40 H V L CNN
F0 "C" 25 100 50 H V L CNN
F1 "C" 25 -100 50 H V L CNN
F2 "" 38 -150 30 H V C CNN
F3 "" 0 100 30 H V C CNN
F3 "" 0 0 60 H V C CNN
$FPLIST
SM*
C?
C1-1
C_????_*
C_????
SMD*_c
Capacitor*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
P 2 0 1 20 -80 30 80 30 N
X ~ 1 0 200 170 D 40 40 1 1 P
X ~ 2 0 -200 170 U 40 40 1 1 P
X ~ 1 0 150 110 D 40 40 1 1 P
X ~ 2 0 -150 110 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -402,21 +404,29 @@ ENDDEF
#
# CP
#
DEF CP C 0 10 N N 1 F N
F0 "C" 50 100 40 H V L CNN
F1 "CP" 50 -100 40 H V L CNN
F2 "" 100 -150 30 H V C CNN
F3 "" 50 100 30 H V C CNN
ALIAS CAPAPOL
DEF CP C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "CP" 25 -100 50 H V L CNN
F2 "" 38 -150 30 H V C CNN
F3 "" 0 0 60 H V C CNN
$FPLIST
CP*
SM*
Elko*
TantalC*
C*elec
c_elec*
SMD*_Pol
$ENDFPLIST
DRAW
P 4 0 1 8 -80 50 -80 -50 80 -50 80 50 N
P 4 0 1 0 -50 50 -50 -20 50 -20 50 50 F
X ~ 1 0 200 150 D 40 40 1 1 P
X ~ 2 0 -200 150 U 40 40 1 1 P
S -90 20 -90 40 0 1 0 N
S -90 20 90 20 0 1 0 N
S -70 90 -30 90 0 1 0 N
S -50 70 -50 110 0 1 0 N
S 90 -20 -90 -40 0 1 0 F
S 90 40 -90 40 0 1 0 N
S 90 40 90 20 0 1 0 N
X ~ 1 0 150 110 D 40 40 1 1 P
X ~ 2 0 -150 110 U 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -599,12 +609,12 @@ $FPLIST
LEDV
$ENDFPLIST
DRAW
P 2 0 1 0 50 50 50 -50 N
P 3 0 1 0 -50 50 50 0 -50 -50 F
P 3 0 1 0 65 -40 110 -80 105 -55 N
P 3 0 1 0 80 -25 125 -65 120 -40 N
X A 1 -200 0 150 R 40 40 1 1 P
X K 2 200 0 150 L 40 40 1 1 P
P 2 0 1 0 -50 50 -50 -50 N
P 3 0 1 0 -80 -25 -125 -65 -120 -40 N
P 3 0 1 0 -65 -40 -110 -80 -105 -55 N
P 3 0 1 0 50 50 -50 0 50 -50 F
X K 1 -200 0 150 R 40 40 1 1 P
X A 2 200 0 150 L 40 40 1 1 P
ENDDRAW
ENDDEF
#
@ -624,29 +634,26 @@ ENDDEF
# R
#
DEF R R 0 0 N Y 1 F N
F0 "R" 80 0 40 V V C CNN
F1 "R" 7 1 40 V V C CNN
F0 "R" 80 0 50 V V C CNN
F1 "R" 0 0 50 V V C CNN
F2 "" -70 0 30 V V C CNN
F3 "" 0 0 30 H V C CNN
$FPLIST
R?
SM0603
SM0805
R?-*
SM1206
R_*
Resistor_*
$ENDFPLIST
DRAW
S -40 150 40 -150 0 1 12 N
X ~ 1 0 250 100 D 60 60 1 1 P
X ~ 2 0 -250 100 U 60 60 1 1 P
S -40 -100 40 100 0 1 10 N
X ~ 1 0 150 50 D 60 60 1 1 P
X ~ 2 0 -150 50 U 60 60 1 1 P
ENDDRAW
ENDDEF
#
# RR9
#
DEF RR9 RR 0 40 Y N 1 F N
F0 "RR" 50 600 70 H V C CNN
F1 "RR9" 30 0 70 V V C CNN
F0 "RR" 50 600 50 H V C CNN
F1 "RR9" 30 0 50 V V C CNN
F2 "" 0 0 60 H V C CNN
F3 "" 0 0 60 H V C CNN
DRAW

View File

@ -197,6 +197,8 @@ set( EESCHEMA_COMMON_SRCS
if( MINGW )
# EESCHEMA_RESOURCES variable is set by the macro.
mingw_resource_compiler( eeschema )
else()
set( EESCHEMA_RESOURCES eeschema.rc )
endif()
# Create a C++ compilable string initializer containing html text into a *.h file:

View File

@ -197,6 +197,14 @@ void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
ExecuteRemoteCommand( payload.c_str() );
break;
case MAIL_SCH_PCB_UPDATE_REQUEST:
{
wxCommandEvent dummy;
OnUpdatePCB( dummy );
break;
}
case MAIL_BACKANNOTATE_FOOTPRINTS:
try
{

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 28 2015)
// C++ code generated with wxFormBuilder (version Jan 1 2016)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@ -91,7 +91,7 @@ DIALOG_SCH_FIND_BASE::DIALOG_SCH_FIND_BASE( wxWindow* parent, wxWindowID id, con
m_checkAllPins = new wxCheckBox( this, wxID_ANY, _("Search all pin &names and numbers"), wxDefaultPosition, wxDefaultSize, 0 );
leftSizer->Add( m_checkAllPins, 0, wxBOTTOM|wxRIGHT|wxLEFT, 6 );
m_checkCurrentSheetOnly = new wxCheckBox( this, wxID_ANY, _("Search the current &sheet onl&y"), wxDefaultPosition, wxDefaultSize, 0 );
m_checkCurrentSheetOnly = new wxCheckBox( this, wxID_ANY, _("Search the current &sheet only"), wxDefaultPosition, wxDefaultSize, 0 );
leftSizer->Add( m_checkCurrentSheetOnly, 0, wxBOTTOM|wxLEFT|wxRIGHT, 6 );
m_checkReplaceReferences = new wxCheckBox( this, wxID_ANY, _("Replace componen&t reference designators"), wxDefaultPosition, wxDefaultSize, 0 );

View File

@ -1299,7 +1299,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Search the current &amp;sheet onl&amp;y</property>
<property name="label">Search the current &amp;sheet only</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 28 2015)
// C++ code generated with wxFormBuilder (version Jan 1 2016)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!

View File

@ -247,7 +247,10 @@ enum id_eeschema_frm
ID_LIBVIEW_CMP_EXPORT_TO_SCHEMATIC,
ID_SET_RELATIVE_OFFSET,
ID_END_EESCHEMA_ID_LIST
ID_END_EESCHEMA_ID_LIST,
ID_UPDATE_PCB_FROM_SCH,
ID_UPDATE_SCH_FROM_PCB
};

View File

@ -223,6 +223,8 @@ static EDA_HOTKEY HkLoadSchematic( _HKI( "Load Schematic" ), HK_LOAD_SCH, 'L' +
static EDA_HOTKEY HkAutoplaceFields( _HKI( "Autoplace Fields" ), HK_AUTOPLACE_FIELDS, 'O',
ID_AUTOPLACE_FIELDS );
static EDA_HOTKEY HkUpdatePcbFromSch( _HKI( "Update PCB from Schematics" ), HK_UPDATE_PCB_FROM_SCH, WXK_F8 );
// List of common hotkey descriptors
static EDA_HOTKEY* common_Hotkey_List[] =
{
@ -295,8 +297,9 @@ static EDA_HOTKEY* schematic_Hotkey_List[] =
&HkAddBusEntry,
&HkAddGraphicPolyLine,
&HkAddGraphicText,
&HkLeaveSheet,
&HkUpdatePcbFromSch,
&HkAutoplaceFields,
&HkLeaveSheet,
&HkDeleteNode,
NULL
};

View File

@ -78,8 +78,9 @@ enum hotkey_id_commnand {
HK_LEFT_CLICK,
HK_LEFT_DCLICK,
HK_LEAVE_SHEET,
HK_DELETE_NODE,
HK_AUTOPLACE_FIELDS,
HK_DELETE_NODE
HK_UPDATE_PCB_FROM_SCH
};
// List of hotkey descriptors for Eeschema

View File

@ -427,6 +427,22 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
// Menu Tools:
wxMenu* toolsMenu = new wxMenu;
text = AddHotkeyName( _( "Update PCB from Schematics" ), g_Schematic_Hokeys_Descr, HK_UPDATE_PCB_FROM_SCH );
AddMenuItem( toolsMenu,
ID_UPDATE_PCB_FROM_SCH,
text, _( "Updates the PCB design with the current schematic (forward annotation)." ),
KiBitmap( pcbnew_xpm ) );
// Run Pcbnew
AddMenuItem( toolsMenu,
ID_RUN_PCB,
_( "&Open PCB Editor" ),
_( "Run Pcbnew" ),
KiBitmap( pcbnew_xpm ) );
toolsMenu->AppendSeparator();
AddMenuItem( toolsMenu,
ID_RUN_LIBRARY,
_( "Library &Editor" ), HELP_RUN_LIB_EDITOR,
@ -474,17 +490,10 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
// Run CvPcb
AddMenuItem( toolsMenu,
ID_RUN_CVPCB,
_( "A&ssign Component Footprint" ),
_( "A&ssign Component Footprints" ),
_( "Run CvPcb" ),
KiBitmap( cvpcb_xpm ) );
// Run Pcbnew
AddMenuItem( toolsMenu,
ID_RUN_PCB,
_( "&Layout Printed Circuit Board" ),
_( "Run Pcbnew" ),
KiBitmap( pcbnew_xpm ) );
// Help Menu:
wxMenu* helpMenu = new wxMenu;

View File

@ -60,6 +60,9 @@
#include <build_version.h>
#include <wildcards_and_files_ext.h>
#include <netlist_exporter_kicad.h>
#include <kiway.h>
// non-member so it can be moved easily, and kept REALLY private.
// Do NOT Clear() in here.
@ -260,6 +263,7 @@ BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_TOOL( wxID_PRINT, SCH_EDIT_FRAME::OnPrint )
EVT_TOOL( ID_GET_ERC, SCH_EDIT_FRAME::OnErc )
EVT_TOOL( ID_GET_NETLIST, SCH_EDIT_FRAME::OnCreateNetlist )
EVT_TOOL( ID_UPDATE_PCB_FROM_SCH, SCH_EDIT_FRAME::OnUpdatePCB )
EVT_TOOL( ID_GET_TOOLS, SCH_EDIT_FRAME::OnCreateBillOfMaterials )
EVT_TOOL( ID_FIND_ITEMS, SCH_EDIT_FRAME::OnFindItems )
EVT_TOOL( wxID_REPLACE, SCH_EDIT_FRAME::OnFindItems )
@ -817,6 +821,50 @@ void SCH_EDIT_FRAME::OnErc( wxCommandEvent& event )
InvokeDialogERC( this );
}
void SCH_EDIT_FRAME::OnUpdatePCB( wxCommandEvent& event )
{
wxFileName fn = Prj().AbsolutePath( g_RootSheet->GetScreen()->GetFileName() );
fn.SetExt( PcbFileExtension );
if( Kiface().IsSingle() )
{
DisplayError( this, _( "Cannot update the PCB, because the Schematic Editor is"
" opened in stand-alone mode. In order to create/update"
" PCBs from schematics, you need to launch Kicad shell"
" and create a PCB project." ) );
return;
} else {
KIWAY_PLAYER* frame = Kiway().Player( FRAME_PCB, true );
// a pcb frame can be already existing, but not yet used.
// this is the case when running the footprint editor, or the footprint viewer first
// if the frame is not visible, the board is not yet loaded
if( !frame->IsVisible() )
{
frame->OpenProjectFiles( std::vector<wxString>( 1, fn.GetFullPath() ) );
frame->Show( true );
}
// On Windows, Raise() does not bring the window on screen, when iconized
if( frame->IsIconized() )
frame->Iconize( false );
frame->Raise();
}
NETLIST_OBJECT_LIST* net_atoms = BuildNetListBase();
NETLIST_EXPORTER_KICAD exporter( net_atoms, Prj().SchLibs() );
STRING_FORMATTER formatter;
exporter.Format( &formatter, GNL_ALL );
Kiway().ExpressMail( FRAME_PCB,
MAIL_SCH_PCB_UPDATE,
formatter.GetString(), // an abbreviated "kicad" (s-expr) netlist
this
);
}
void SCH_EDIT_FRAME::OnCreateNetlist( wxCommandEvent& event )
{

View File

@ -809,6 +809,7 @@ private:
void OnAnnotate( wxCommandEvent& event );
void OnErc( wxCommandEvent& event );
void OnCreateNetlist( wxCommandEvent& event );
void OnUpdatePCB( wxCommandEvent& event );
void OnCreateBillOfMaterials( wxCommandEvent& event );
void OnFindItems( wxCommandEvent& event );
void OnFindDialogClose( wxFindDialogEvent& event );

View File

@ -78,6 +78,8 @@ set( GERBVIEW_EXTRA_SRCS
if( MINGW )
# GERBVIEW_RESOURCES variable is set by the macro.
mingw_resource_compiler( gerbview )
else()
set( GERBVIEW_RESOURCES gerbview.rc )
endif()
if( APPLE )

View File

@ -60,6 +60,7 @@ enum KICAD_T
PCB_TARGET_T, ///< class PCB_TARGET, a target (graphic item)
PCB_ZONE_AREA_T, ///< class ZONE_CONTAINER, a zone area
PCB_ITEM_LIST_T, ///< class BOARD_ITEM_LIST, a list of board items
PCB_NETINFO_T, ///< class NETINFO_ITEM, a description of a net
// Schematic draw Items. The order of these items effects the sort order.
// It is currently ordered to mimic the old Eeschema locate behavior where

View File

@ -39,6 +39,9 @@ enum MAIL_T
MAIL_CROSS_PROBE, ///< PCB<->SCH, CVPCB->SCH cross-probing.
MAIL_BACKANNOTATE_FOOTPRINTS, ///< CVPCB->SCH footprint stuffing at cvpcb termination
MAIL_EESCHEMA_NETLIST, ///< EESCHEMA->CVPCB netlist immediately after launching CVPCB
MAIL_SCH_PCB_UPDATE, ///< Sch->PCB forward update
MAIL_SCH_PCB_UPDATE_REQUEST ///< Sch->PCB forward update, requests SCH to re-generate netlist and send it to PCB via another mail (kind of bootstrap)
};
#endif // MAIL_TYPE_H_

View File

@ -89,17 +89,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME
/// The auxiliary right vertical tool bar used to access the microwave tools.
wxAuiToolBar* m_microWaveToolBar;
/**
* Function loadFootprints
* loads the footprints for each #COMPONENT in \a aNetlist from the list of libraries.
*
* @param aNetlist is the netlist of components to load the footprints into.
* @param aReporter is the #REPORTER object to report to.
* @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
* occurs while reading footprint library files.
*/
void loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
throw( IO_ERROR, PARSE_ERROR );
protected:
PCB_LAYER_WIDGET* m_Layers;
@ -225,6 +214,18 @@ public:
virtual ~PCB_EDIT_FRAME();
/**
* Function loadFootprints
* loads the footprints for each #COMPONENT in \a aNetlist from the list of libraries.
*
* @param aNetlist is the netlist of components to load the footprints into.
* @param aReporter is the #REPORTER object to report to.
* @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
* occurs while reading footprint library files.
*/
void LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
throw( IO_ERROR, PARSE_ERROR );
void OnQuit( wxCommandEvent& event );
/**
@ -280,6 +281,7 @@ public:
void OnUpdateMuWaveToolbar( wxUpdateUIEvent& aEvent );
void OnLayerColorChange( wxCommandEvent& aEvent );
void OnConfigurePaths( wxCommandEvent& aEvent );
void OnUpdatePCBFromSch( wxCommandEvent& event );
/**
* called when the alt key is pressed during a mouse wheel action

View File

@ -25,6 +25,8 @@ set( KICAD_SRCS
if( MINGW )
# KICAD_RESOURCES variable is set by the macro.
mingw_resource_compiler( kicad )
else()
set( KICAD_RESOURCES kicad.rc )
endif()
if( APPLE )

View File

@ -50,6 +50,8 @@ set( PL_EDITOR_EXTRA_SRCS
if( MINGW )
# PL_EDITOR_RESOURCES variable is set by the macro.
mingw_resource_compiler( pl_editor )
else()
set( PL_EDITOR_RESOURCES pl_editor.rc )
endif()

View File

@ -237,8 +237,9 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel
m_out->Print( 0, " (%s %s)", getTokenName( T_rotate ),
double2Str(aItem->m_Orient ).c_str() );
// Write font info
bool write_size = aItem->m_TextSize.x != 0.0 && aItem->m_TextSize.y != 0.0;
// Write font info, only if it is not the default setup
bool write_size = aItem->m_TextSize.x != 0.0 || aItem->m_TextSize.y != 0.0;
if( write_size || aItem->IsBold() || aItem->IsItalic() )
{
m_out->Print( 0, " (%s", getTokenName( T_font ) );

View File

@ -40,6 +40,8 @@ set( PCB_CALCULATOR_SRCS
if( MINGW )
# PCB_CALCULATOR_RESOURCES variable is set by the macro.
mingw_resource_compiler( pcb_calculator )
else()
set( PCB_CALCULATOR_RESOURCES pcb_calculator.rc )
endif()
if( APPLE )

View File

@ -145,6 +145,8 @@ set( PCBNEW_DIALOGS
dialogs/dialog_track_via_properties_base.cpp
dialogs/dialog_track_via_size.cpp
dialogs/dialog_track_via_size_base.cpp
dialogs/dialog_update_pcb_base.cpp
dialogs/dialog_update_pcb.cpp
footprint_wizard.cpp
footprint_wizard_frame.cpp
dialogs/dialog_footprint_wizard_list_base.cpp
@ -193,6 +195,7 @@ set( PCBNEW_CLASS_SRCS
attribut.cpp
board_items_to_polygon_shape_transform.cpp
board_undo_redo.cpp
board_netlist_updater.cpp
block.cpp
block_module_editor.cpp
build_BOM_from_board.cpp
@ -499,6 +502,8 @@ endif()
if( MINGW )
# PCBNEW_RESOURCES variable is set by the macro.
mingw_resource_compiler( pcbnew )
else()
set( PCBNEW_RESOURCES pcbnew.rc )
endif()

View File

@ -0,0 +1,715 @@
/**
* @file board_netlist_updater.h
* @brief BOARD_NETLIST_UPDATER class definition
*/
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2015 CERN
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
*
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <common.h> // for PAGE_INFO
#include <class_board.h>
#include <class_netinfo.h>
#include <class_module.h>
#include <class_pad.h>
#include <class_zone.h>
#include <pcb_netlist.h>
#include <ratsnest_data.h>
#include <reporter.h>
#include <board_netlist_updater.h>
#include <wxPcbStruct.h>
BOARD_NETLIST_UPDATER::BOARD_NETLIST_UPDATER ( PCB_EDIT_FRAME *aFrame, BOARD *aBoard ) :
m_frame ( aFrame ),
m_board( aBoard )
{
m_reporter = &NULL_REPORTER::GetInstance();
m_undoList = new PICKED_ITEMS_LIST;
}
BOARD_NETLIST_UPDATER::~BOARD_NETLIST_UPDATER ()
{
delete m_undoList;
}
void BOARD_NETLIST_UPDATER::pushUndo( BOARD_ITEM* aItem, UNDO_REDO_T aCommandType, BOARD_ITEM* aCopy )
{
ITEM_PICKER picker( aItem, aCommandType );
if( aCommandType == UR_CHANGED )
{
if( m_undoList->FindItem ( aItem ) >= 0 ) // add only once
return;
picker.SetLink( aCopy ? aCopy : aItem->Clone() );
}
m_undoList->PushItem( picker );
}
wxPoint BOARD_NETLIST_UPDATER::estimateComponentInsertionPosition()
{
wxPoint bestPosition;
if( !m_board->IsEmpty() )
{
// Position new components below any existing board features.
EDA_RECT bbox = m_board->ComputeBoundingBox( true );
if( bbox.GetWidth() || bbox.GetHeight() )
{
bestPosition.x = bbox.Centre().x;
bestPosition.y = bbox.GetBottom() + Millimeter2iu( 10 );
}
}
else
{
// Position new components in the center of the page when the board is empty.
wxSize pageSize = m_board->GetPageSettings().GetSizeIU();
bestPosition.x = pageSize.GetWidth() / 2;
bestPosition.y = pageSize.GetHeight() / 2;
}
return bestPosition;
}
MODULE* BOARD_NETLIST_UPDATER::addNewComponent( COMPONENT* aComponent )
{
wxString msg;
if( aComponent->GetModule() != NULL )
{
msg.Printf( _( "Adding new component \"%s:%s\" footprint \"%s\".\n" ),
GetChars( aComponent->GetReference() ),
GetChars( aComponent->GetTimeStamp() ),
GetChars( aComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
msg.Printf( _( "Add component %s, footprint: %s.\n" ),
GetChars( aComponent->GetReference() ),
GetChars( aComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
if( !m_isDryRun )
{
// Owned by NETLIST, can only copy it.
MODULE *footprint = new MODULE( *aComponent->GetModule() );
footprint->SetParent( m_board );
footprint->SetPosition( estimateComponentInsertionPosition( ) );
footprint->SetTimeStamp( GetNewTimeStamp() );
m_board->Add( footprint, ADD_APPEND );
m_addedComponents.push_back( footprint );
pushUndo( footprint, UR_NEW );
return footprint;
}
}
else
{
msg.Printf( _( "Cannot add component %s due to missing footprint %s.\n" ),
GetChars( aComponent->GetReference() ),
GetChars( aComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_ERROR );
msg.Printf( _( "Cannot add new component \"%s:%s\" due to missing "
"footprint \"%s\".\n" ),
GetChars( aComponent->GetReference() ),
GetChars( aComponent->GetTimeStamp() ),
GetChars( aComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
m_errorCount ++;
}
return NULL;
}
MODULE* BOARD_NETLIST_UPDATER::replaceComponent( NETLIST& aNetlist, MODULE *aPcbComponent, COMPONENT* aNewComponent )
{
wxString msg;
if( !m_replaceFootprints )
return NULL;
// Test if the footprint has not changed
if( aNewComponent->GetFPID().empty() ||
aPcbComponent->GetFPID() == aNewComponent->GetFPID() )
return NULL;
if( aNewComponent->GetModule() != NULL )
{
msg.Printf( _( "Change component %s footprint from %s to %s.\n"),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetFPID().Format() ),
GetChars( aNewComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Replacing component \"%s:%s\" footprint \"%s\" with "
"\"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( aPcbComponent->GetFPID().Format() ),
GetChars( aNewComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if( !m_isDryRun )
{
wxASSERT( aPcbComponent != NULL );
MODULE* newFootprint = new MODULE( *aNewComponent->GetModule() );
if( aNetlist.IsFindByTimeStamp() )
newFootprint->SetReference( aPcbComponent->GetReference() );
else
newFootprint->SetPath( aPcbComponent->GetPath() );
aPcbComponent->CopyNetlistSettings( newFootprint, false );
m_board->Remove( aPcbComponent );
m_board->Add( newFootprint, ADD_APPEND );
pushUndo( aPcbComponent, UR_DELETED );
pushUndo( newFootprint, UR_NEW );
return newFootprint;
}
} else {
msg.Printf( _( "Cannot change component %s footprint due to missing "
"footprint %s.\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aNewComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_ERROR );
msg.Printf( _( "Cannot replace component \"%s:%s\" due to missing "
"footprint \"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( aNewComponent->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
m_errorCount ++;
}
return NULL;
}
bool BOARD_NETLIST_UPDATER::updateComponentParameters( MODULE *aPcbComponent, COMPONENT* aNewComponent )
{
wxString msg;
if( !aPcbComponent )
return false;
bool changed = false;
MODULE* copy = (MODULE*) aPcbComponent->Clone();
// Test for reference designator field change.
if( aPcbComponent->GetReference() != aNewComponent->GetReference() )
{
msg.Printf( _( "Change component %s reference to %s.\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aNewComponent->GetReference() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Changing component \"%s:%s\" reference to \"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( aNewComponent->GetReference() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if ( !m_isDryRun )
{
changed = true;
aPcbComponent->SetReference( aNewComponent->GetReference() );
}
}
// Test for value field change.
if( aPcbComponent->GetValue() != aNewComponent->GetValue() )
{
msg.Printf( _( "Change component %s value from %s to %s.\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetValue() ),
GetChars( aNewComponent->GetValue() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Changing component \"%s:%s\" value from \"%s\" to \"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( aPcbComponent->GetValue() ),
GetChars( aNewComponent->GetValue() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
if ( !m_isDryRun )
{
changed = true;
aPcbComponent->SetValue( aNewComponent->GetValue() );
}
}
// Test for time stamp change.
if( aPcbComponent->GetPath() != aNewComponent->GetTimeStamp() )
{
msg.Printf( _( "Changing component path \"%s:%s\" to \"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( aNewComponent->GetTimeStamp() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if ( !m_isDryRun )
{
changed = true;
aPcbComponent->SetPath( aNewComponent->GetTimeStamp() );
}
}
if( changed )
pushUndo( aPcbComponent, UR_CHANGED, copy );
else
delete copy;
return true;
}
bool BOARD_NETLIST_UPDATER::updateComponentPadConnections( MODULE *aPcbComponent, COMPONENT* aNewComponent )
{
wxString msg;
bool changed = false;
MODULE* copy = (MODULE*) aPcbComponent->Clone();
// At this point, the component footprint is updated. Now update the nets.
for( D_PAD *pad = aPcbComponent->Pads(); pad; pad = pad->Next() )
{
COMPONENT_NET net = aNewComponent->GetNet( pad->GetPadName() );
if( !net.IsValid() ) // New footprint pad has no net.
{
if( !pad->GetNetname().IsEmpty() )
{
msg.Printf( _( "Disconnect component %s pin %s.\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( pad->GetPadName() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Clearing component \"%s:%s\" pin \"%s\" net name.\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( pad->GetPadName() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
}
if( !m_isDryRun )
{
changed = true;
pad->SetNetCode( NETINFO_LIST::UNCONNECTED );
}
}
else // New footprint pad has a net.
{
if( net.GetNetName() != pad->GetNetname() )
{
NETINFO_ITEM* netinfo = m_board->FindNet( net.GetNetName() );
if( netinfo == NULL )
{
// It is a new net, we have to add it
if( !m_isDryRun )
{
changed = true;
netinfo = new NETINFO_ITEM( m_board, net.GetNetName() );
m_board->AppendNet( netinfo );
pushUndo( netinfo, UR_NEW );
}
msg.Printf( _( "Add net %s.\n" ),
GetChars( net.GetNetName() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
}
if( pad->GetNetname() != wxString("") )
{
msg.Printf( _( "Reconnect component %s pin %s from net %s to net %s.\n"),
GetChars( aPcbComponent->GetReference() ),
GetChars( pad->GetPadName() ),
GetChars( pad->GetNetname() ),
GetChars( net.GetNetName() ) );
} else {
msg.Printf( _( "Connect component %s pin %s to net %s.\n"),
GetChars( aPcbComponent->GetReference() ),
GetChars( pad->GetPadName() ),
GetChars( net.GetNetName() ) );
}
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Changing component \"%s:%s\" pin \"%s\" net name from "
"\"%s\" to \"%s\".\n" ),
GetChars( aPcbComponent->GetReference() ),
GetChars( aPcbComponent->GetPath() ),
GetChars( pad->GetPadName() ),
GetChars( pad->GetNetname() ),
GetChars( net.GetNetName() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if ( !m_isDryRun )
{
changed = true;
pad->SetNetCode( netinfo->GetNet() );
}
}
}
}
if( changed )
pushUndo( aPcbComponent, UR_CHANGED, copy );
else
delete copy;
return true;
}
bool BOARD_NETLIST_UPDATER::deleteUnusedComponents( NETLIST& aNetlist )
{
wxString msg;
MODULE* nextModule;
const COMPONENT* component;
for( MODULE* module = m_board->m_Modules; module != NULL; module = nextModule )
{
nextModule = module->Next();
if( module->IsLocked() )
continue;
if( m_lookupByTimestamp )
component = aNetlist.GetComponentByTimeStamp( module->GetPath() );
else
component = aNetlist.GetComponentByReference( module->GetReference() );
if( component == NULL )
{
msg.Printf( _( "Remove component %s." ),
GetChars( module->GetReference() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Removing unused component \"%s:%s\".\n" ),
GetChars( module->GetReference() ),
GetChars( module->GetPath() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if( !m_isDryRun )
{
pushUndo( module, UR_DELETED );
m_board->Remove( module );
}
}
}
return true;
}
bool BOARD_NETLIST_UPDATER::deleteSinglePadNets()
{
int count = 0;
wxString netname;
wxString msg;
D_PAD* pad = NULL;
D_PAD* previouspad = NULL;
// We need the pad list, for next tests.
// padlist is the list of pads, sorted by netname.
m_board->BuildListOfNets();
if( m_isDryRun )
return false;
std::vector<D_PAD*> padlist = m_board->GetPads();
for( unsigned ii = 0; ii < padlist.size(); ii++ )
{
pad = padlist[ii];
if( pad->GetNetname().IsEmpty() )
continue;
if( netname != pad->GetNetname() ) // End of net
{
if( previouspad && count == 1 )
{
// First, see if we have a copper zone attached to this pad.
// If so, this is not really a single pad net
for( int ii = 0; ii < m_board->GetAreaCount(); ii++ )
{
ZONE_CONTAINER* zone = m_board->GetArea( ii );
if( !zone->IsOnCopperLayer() )
continue;
if( zone->GetIsKeepout() )
continue;
if( zone->GetNet() == previouspad->GetNet() )
{
count++;
break;
}
}
if( count == 1 ) // Really one pad, and nothing else
{
msg.Printf( _( "Remove single pad net %s." ),
GetChars( previouspad->GetNetname() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
msg.Printf( _( "Remove single pad net \"%s\" on \"%s\" pad '%s'\n" ),
GetChars( previouspad->GetNetname() ),
GetChars( previouspad->GetParent()->GetReference() ),
GetChars( previouspad->GetPadName() ) );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
//pushUndo( previouspad, UR_CHANGED );
previouspad->SetNetCode( NETINFO_LIST::UNCONNECTED );
}
}
netname = pad->GetNetname();
count = 1;
}
else
{
count++;
}
previouspad = pad;
}
// Examine last pad
if( pad && count == 1 )
{
//pushUndo( pad, UR_CHANGED );
pad->SetNetCode( NETINFO_LIST::UNCONNECTED );
}
return true;
}
bool BOARD_NETLIST_UPDATER::testConnectivity( NETLIST& aNetlist )
{
// Last step: Some tests:
// verify all pads found in netlist:
// They should exist in footprints, otherwise the footprint is wrong
// note also references or time stamps are updated, so we use only
// the reference to find a footprint
//
// Also verify if zones have acceptable nets, i.e. nets with pads.
// Zone with no pad belongs to a "dead" net which happens after changes in schematic
// when no more pad use this net name.
wxString msg;
wxString padname;
for( int i = 0; i < (int) aNetlist.GetCount(); i++ )
{
const COMPONENT* component = aNetlist.GetComponent( i );
MODULE* footprint = m_board->FindModuleByReference( component->GetReference() );
if( footprint == NULL ) // It can be missing in partial designs
continue;
// Explore all pins/pads in component
for( unsigned jj = 0; jj < component->GetNetCount(); jj++ )
{
COMPONENT_NET net = component->GetNet( jj );
padname = net.GetPinName();
if( footprint->FindPadByName( padname ) )
continue; // OK, pad found
// not found: bad footprint, report error
msg.Printf( _( "Component %s pad %s not found in footprint %s\n" ),
GetChars( component->GetReference() ),
GetChars( padname ),
GetChars( footprint->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_ERROR );
m_errorCount ++;
}
}
// Test copper zones to detect "dead" nets (nets without any pad):
for( int i = 0; i < m_board->GetAreaCount(); i++ )
{
ZONE_CONTAINER* zone = m_board->GetArea( i );
if( !zone->IsOnCopperLayer() || zone->GetIsKeepout() )
continue;
int nc = zone->GetNet()->GetNodesCount();
if( nc == 0 )
{
msg.Printf( _( "Copper zone (net name %s): net has no pads connected." ),
GetChars( zone->GetNet()->GetNetname() ) );
m_reporter->Report( msg, REPORTER::RPT_WARNING );
m_warningCount ++;
}
}
return true;
}
bool BOARD_NETLIST_UPDATER::UpdateNetlist( NETLIST& aNetlist )
{
wxString msg;
m_errorCount = 0;
m_warningCount = 0;
if( !m_isDryRun )
{
m_board->SetStatus( 0 );
}
for( int i = 0; i < (int) aNetlist.GetCount(); i++ )
{
COMPONENT* component = aNetlist.GetComponent( i );
MODULE *footprint = NULL;
msg.Printf( _( "Processing component \"%s:%s:%s\".\n" ),
GetChars( component->GetReference() ),
GetChars( component->GetTimeStamp() ),
GetChars( component->GetFPID().Format() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
if( aNetlist.IsFindByTimeStamp() )
footprint = m_board->FindModule( component->GetTimeStamp(), true );
else
footprint = m_board->FindModule( component->GetReference() );
if( footprint ) // An existing footprint.
{
MODULE *newFootprint = replaceComponent ( aNetlist, footprint, component );
if ( newFootprint )
footprint = newFootprint;
}
else
{
footprint = addNewComponent( component );
}
if( footprint )
{
updateComponentParameters( footprint, component );
updateComponentPadConnections( footprint, component );
}
}
//aNetlist.GetDeleteExtraFootprints()
if( m_deleteUnusedComponents )
deleteUnusedComponents( aNetlist );
if( m_deleteSinglePadNets )
deleteSinglePadNets();
if ( !m_isDryRun )
{
m_frame->SaveCopyInUndoList( *m_undoList, UR_UNSPECIFIED, wxPoint(0, 0) );
m_frame->OnModify();
m_frame->Compile_Ratsnest( NULL, true );
m_board->GetRatsnest()->ProcessBoard();
testConnectivity( aNetlist );
}
// Update the ratsnest
m_reporter->Report( wxT(""), REPORTER::RPT_ACTION );
m_reporter->Report( wxT(""), REPORTER::RPT_ACTION );
msg.Printf( _( "Total warnings: %d, errors: %d." ),
m_warningCount, m_errorCount );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
if ( m_errorCount )
{
m_reporter->Report( _("Errors occured during the netlist update. Unless you "
"fix them, your board will not be consistent with the schematics." ),
REPORTER::RPT_ERROR );
return false;
} else {
m_reporter->Report( _("Netlist update successful!" ),
REPORTER::RPT_ACTION );
}
return true;
}
bool BOARD_NETLIST_UPDATER::UpdateNetlist( const wxString& aNetlistFileName,
const wxString& aCmpFileName )
{
return false;
}

View File

@ -0,0 +1,165 @@
/**
* @file board_netlist_updater.h
* @brief BOARD_NETLIST_UPDATER class definition
*/
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2015 CERN
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
*
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __BOARD_NETLIST_UPDATER_H
#define __BOARD_NETLIST_UPDATER_H
class BOARD;
class REPORTER;
class NETLIST;
class COMPONENT;
class MODULE;
class PICKED_ITEMS_LIST;
class PCB_EDIT_FRAME;
#include <class_undoredo_container.h>
/**
* Class BOARD_NETLIST_UPDATER
* updates the #BOARD with a new netlist.
*
* The changes are made to the board are as follows they are not disabled in the status
* settings in the #NETLIST:
* - If a new component is found in the #NETLIST and not in the #BOARD, it is added
* to the #BOARD.
* - If a the component in the #NETLIST is already on the #BOARD, then one or more of the
* following actions can occur:
* + If the footprint name in the #NETLIST does not match the footprint name on the
* #BOARD, the footprint on the #BOARD is replaced with the footprint specified in
* the #NETLIST and the proper parameters are copied from the existing footprint.
* + If the reference designator in the #NETLIST does not match the reference designator
* on the #BOARD, the reference designator is updated from the #NETLIST.
* + If the value field in the #NETLIST does not match the value field on the #BOARD,
* the value field is updated from the #NETLIST.
* + If the time stamp in the #NETLIST does not match the time stamp on the #BOARD,
* the time stamp is updated from the #NETLIST.
* - After each footprint is added or update as described above, each footprint pad net
* name is compared and updated to the value defined in the #NETLIST.
* - After all of the footprints have been added, updated, and net names properly set,
* any extra unlock footprints are removed from the #BOARD.
*
*/
class BOARD_NETLIST_UPDATER
{
public:
BOARD_NETLIST_UPDATER( PCB_EDIT_FRAME *aFrame, BOARD *aBoard );
~BOARD_NETLIST_UPDATER();
/**
* Function UpdateNetlist()
*
* Updates the board's components according to the new netlist.
* See BOARD_NETLIST_UPDATER class description for the details of the process.
* @param aNetlist the new netlist
* @return true if process was completed successfully
*/
bool UpdateNetlist( NETLIST& aNetlist );
// @todo: implement and move NETLIST::ReadPcbNetlist here
bool UpdateNetlist( const wxString& aNetlistFileName,
const wxString& aCmpFileName );
///> Sets the reporter object
void SetReporter ( REPORTER *aReporter )
{
m_reporter = aReporter;
}
///> Enables "delete single pad nets" option
void SetDeleteSinglePadNets( bool aEnabled )
{
m_deleteSinglePadNets = aEnabled;
}
///> Enables dry run mode (just report, no changes to PCB)
void SetIsDryRun ( bool aEnabled )
{
m_isDryRun = aEnabled;
}
///> Enables replacing footprints with new ones
void SetReplaceFootprints ( bool aEnabled )
{
m_replaceFootprints = aEnabled;
}
///> Enables removing unused components
void SetDeleteUnusedComponents ( bool aEnabled )
{
m_deleteUnusedComponents = aEnabled;
}
///> Enables component lookup by timestamp instead of reference
void SetLookupByTimestamp ( bool aEnabled )
{
m_lookupByTimestamp = aEnabled;
}
std::vector<MODULE*> GetAddedComponents() const
{
return m_addedComponents;
}
private:
void pushUndo( BOARD_ITEM* aItem, UNDO_REDO_T aCommandType, BOARD_ITEM* aCopy = NULL );
wxPoint estimateComponentInsertionPosition();
MODULE* addNewComponent( COMPONENT* aComponent );
MODULE* replaceComponent( NETLIST& aNetlist, MODULE *aPcbComponent, COMPONENT* aNewComponent );
bool updateComponentParameters( MODULE *aPcbComponent, COMPONENT* aNewComponent );
bool updateComponentPadConnections( MODULE *aPcbComponent, COMPONENT* aNewComponent );
bool deleteUnusedComponents( NETLIST& aNetlist );
bool deleteSinglePadNets();
bool testConnectivity( NETLIST& aNetlist );
PICKED_ITEMS_LIST *m_undoList;
PCB_EDIT_FRAME *m_frame;
BOARD *m_board;
REPORTER *m_reporter;
std::vector<MODULE*> m_addedComponents;
bool m_deleteSinglePadNets;
bool m_deleteUnusedComponents;
bool m_isDryRun;
bool m_replaceFootprints;
bool m_lookupByTimestamp;
int m_warningCount;
int m_errorCount;
};
#endif

View File

@ -116,6 +116,7 @@
* @param aItem = item to find
* = NULL to build the list of existing items
*/
static bool TestForExistingItem( BOARD* aPcb, BOARD_ITEM* aItem )
{
static std::vector<BOARD_ITEM*> itemsList;
@ -145,6 +146,10 @@ static bool TestForExistingItem( BOARD* aPcb, BOARD_ITEM* aItem )
for( item = aPcb->m_Zone; item != NULL; item = item->Next() )
icnt++;
NETINFO_LIST& netInfo = aPcb->GetNetInfo();
icnt += netInfo.GetNetCount();
// Build candidate list:
itemsList.clear();
itemsList.reserve(icnt);
@ -170,6 +175,9 @@ static bool TestForExistingItem( BOARD* aPcb, BOARD_ITEM* aItem )
for( item = aPcb->m_Zone; item != NULL; item = item->Next() )
itemsList.push_back( item );
for( NETINFO_LIST::iterator i = netInfo.begin(); i != netInfo.end(); ++i )
itemsList.push_back( *i );
// Sort list
std::sort( itemsList.begin(), itemsList.end() );
return false;
@ -310,12 +318,11 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( BOARD_ITEM* aItem,
if( aItem->Type() == PCB_MODULE_TEXT_T )
{
aItem = aItem->GetParent();
wxASSERT( aItem->Type() == PCB_MODULE_T );
aCommandType = UR_CHANGED;
if( aItem == NULL )
return;
wxASSERT( aItem->Type() == PCB_MODULE_T );
aCommandType = UR_CHANGED;
}
PICKED_ITEMS_LIST* commandToUndo = new PICKED_ITEMS_LIST();
@ -380,28 +387,47 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
commandToUndo->m_TransformPoint = aTransformPoint;
// Copy picker list:
commandToUndo->CopyList( aItemsList );
// First, filter unnecessary stuff from the list (i.e. for multiple pads / labels modified),
// take the first occurence of the module.
// Verify list, and creates data if needed
for( unsigned ii = 0; ii < commandToUndo->GetCount(); ii++ )
for( unsigned ii = 0; ii < aItemsList.GetCount(); ii++ )
{
BOARD_ITEM* item = (BOARD_ITEM*) commandToUndo->GetPickedItem( ii );
ITEM_PICKER picker = aItemsList.GetItemWrapper(ii);
BOARD_ITEM* item = (BOARD_ITEM*) aItemsList.GetPickedItem( ii );
// For texts belonging to modules, we need to save state of the parent module
if( item->Type() == PCB_MODULE_TEXT_T || item->Type() == PCB_PAD_T )
{
item = item->GetParent();
wxASSERT( item->Type() == PCB_MODULE_T );
if( item == NULL )
continue;
wxASSERT( item->Type() == PCB_MODULE_T );
bool found = false;
commandToUndo->SetPickedItem( item, ii );
commandToUndo->SetPickedItemStatus( UR_CHANGED, ii );
for( unsigned j = 0; j < commandToUndo->GetCount(); j++ )
{
if( commandToUndo->GetPickedItem( j ) == item && commandToUndo->GetPickedItemStatus( j ) == UR_CHANGED )
{
found = true;
break;
}
}
if( !found )
commandToUndo->PushItem( ITEM_PICKER(item, UR_CHANGED ) );
else
continue;
} else {
commandToUndo->PushItem( picker );
}
}
for( unsigned ii = 0; ii < commandToUndo->GetCount(); ii++ )
{
BOARD_ITEM* item = (BOARD_ITEM*) commandToUndo->GetPickedItem( ii );
UNDO_REDO_T command = commandToUndo->GetPickedItemStatus( ii );
if( command == UR_UNSPECIFIED )
@ -421,7 +447,10 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
* If this link is not null, the copy is already done
*/
if( commandToUndo->GetPickedItemLink( ii ) == NULL )
commandToUndo->SetPickedItemLink( item->Clone(), ii );
{
EDA_ITEM* cloned = item->Clone();
commandToUndo->SetPickedItemLink( cloned, ii );
}
break;
case UR_MOVED:
@ -465,6 +494,8 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed
BOARD_ITEM* item;
bool not_found = false;
bool reBuild_ratsnest = false;
bool deep_reBuild_ratsnest = false;
KIGFX::VIEW* view = GetGalCanvas()->GetView();
RN_DATA* ratsnest = GetBoard()->GetRatsnest();
@ -518,6 +549,11 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed
reBuild_ratsnest = true;
break;
case PCB_NETINFO_T:
reBuild_ratsnest = true;
deep_reBuild_ratsnest = true;
break;
default:
break;
}
@ -564,8 +600,8 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed
MODULE* module = static_cast<MODULE*>( item );
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) );
}
view->Remove( item );
view->Remove( item );
item->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
break;
@ -625,12 +661,18 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed
wxMessageBox( wxT( "Incomplete undo/redo operation: some items not found" ) );
// Rebuild pointers and ratsnest that can be changed.
if( reBuild_ratsnest && aRebuildRatsnet )
if( reBuild_ratsnest )
{
Compile_Ratsnest( NULL, true );
if( IsGalCanvasActive() )
ratsnest->Recalculate();
else
Compile_Ratsnest( NULL, true );
{
if( deep_reBuild_ratsnest )
ratsnest->ProcessBoard();
else
ratsnest->Recalculate();
}
}
}
@ -649,7 +691,6 @@ void PCB_EDIT_FRAME::RestoreCopyFromUndoList( wxCommandEvent& aEvent )
/* Get the old list */
PICKED_ITEMS_LIST* List = GetScreen()->PopCommandFromUndoList();
/* Undo the command */
PutDataInPreviousState( List, false );

View File

@ -672,6 +672,10 @@ void BOARD::Add( BOARD_ITEM* aBoardItem, int aControl )
switch( aBoardItem->Type() )
{
case PCB_NETINFO_T:
aBoardItem->SetParent( this );
m_NetInfo.AppendNet( (NETINFO_ITEM*) aBoardItem );
// this one uses a vector
case PCB_MARKER_T:
aBoardItem->SetParent( this );
@ -759,6 +763,12 @@ BOARD_ITEM* BOARD::Remove( BOARD_ITEM* aBoardItem )
switch( aBoardItem->Type() )
{
case PCB_NETINFO_T:
{
NETINFO_ITEM* item = (NETINFO_ITEM*) aBoardItem;
m_NetInfo.RemoveNet( item );
break;
}
case PCB_MARKER_T:
// find the item in the vector, then remove it
@ -1252,7 +1262,7 @@ NETINFO_ITEM* BOARD::FindNet( int aNetcode ) const
wxASSERT( m_NetInfo.GetNetCount() > 0 ); // net zero should exist
if( aNetcode == NETINFO_LIST::UNCONNECTED && m_NetInfo.GetNetCount() == 0 )
return &NETINFO_LIST::ORPHANED;
return &NETINFO_LIST::ORPHANED_ITEM;
else
return m_NetInfo.GetNetItem( aNetcode );
}

View File

@ -821,6 +821,11 @@ public:
m_NetInfo.AppendNet( aNewNet );
}
NETINFO_LIST& GetNetInfo()
{
return m_NetInfo;
}
#ifndef SWIG
/**
* Function BeginNets

View File

@ -35,7 +35,7 @@
#include <class_board_item.h>
BOARD_CONNECTED_ITEM::BOARD_CONNECTED_ITEM( BOARD_ITEM* aParent, KICAD_T idtype ) :
BOARD_ITEM( aParent, idtype ), m_netinfo( &NETINFO_LIST::ORPHANED ),
BOARD_ITEM( aParent, idtype ), m_netinfo( &NETINFO_LIST::ORPHANED_ITEM ),
m_Subnet( 0 ), m_ZoneSubnet( 0 )
{
}
@ -59,7 +59,7 @@ bool BOARD_CONNECTED_ITEM::SetNetCode( int aNetCode, bool aNoAssert )
if( ( aNetCode >= 0 ) && board )
m_netinfo = board->FindNet( aNetCode );
else
m_netinfo = &NETINFO_LIST::ORPHANED;
m_netinfo = &NETINFO_LIST::ORPHANED_ITEM;
if( !aNoAssert )
assert( m_netinfo );

View File

@ -115,6 +115,7 @@ MODULE::MODULE( const MODULE& aModule ) :
for( D_PAD* pad = aModule.m_Pads; pad; pad = pad->Next() )
{
D_PAD* newpad = new D_PAD( *pad );
assert( newpad->GetNet() == pad->GetNet() );
newpad->SetParent( this );
m_Pads.PushBack( newpad );
}
@ -186,7 +187,7 @@ void MODULE::ClearAllNets()
// Force the ORPHANED dummy net info for all pads.
// ORPHANED dummy net does not depend on a board
for( D_PAD* pad = Pads(); pad; pad = pad->Next() )
pad->SetNetCode( NETINFO_LIST::FORCE_ORPHANED );
pad->SetNetCode( NETINFO_LIST::ORPHANED );
}

View File

@ -36,6 +36,7 @@
#include <gr_basic.h>
#include <class_netclass.h>
#include <class_board_item.h>
#include <boost/unordered_map.hpp>
#include <hashtables.h>
@ -290,12 +291,17 @@ public:
unsigned GetNetCount() const { return m_netNames.size(); }
/**
* Function Append
* adds \a aNewElement to the end of the list. Negative net code means it is going to be
* Function AppendNet
* adds \a aNewElement to the end of the net list. Negative net code means it is going to be
* auto-assigned.
*/
void AppendNet( NETINFO_ITEM* aNewElement );
/**
* Function RemoveNet
* Removes a new from the net list.
*/
void RemoveNet( NETINFO_ITEM* aNet );
/**
* Function GetPadCount
* @return the number of pads in board
@ -347,11 +353,11 @@ public:
///> Constant that forces initialization of a netinfo item to the NETINFO_ITEM ORPHANED
///> (typically -1) when calling SetNetCode od board connected items
static const int FORCE_ORPHANED;
static const int ORPHANED;
///> NETINFO_ITEM meaning that there was no net assigned for an item, as there was no
///> board storing net list available.
static NETINFO_ITEM ORPHANED;
static NETINFO_ITEM ORPHANED_ITEM;
#if defined(DEBUG)
void Show() const;
@ -422,6 +428,11 @@ public:
}
#endif
BOARD* GetParent() const
{
return m_Parent;
}
private:
/**
* Function clear
@ -468,7 +479,7 @@ private:
* Class NETINFO_ITEM
* handles the data for a net
*/
class NETINFO_ITEM
class NETINFO_ITEM : public BOARD_ITEM
{
friend class NETINFO_LIST;
@ -485,7 +496,7 @@ private:
// item of the net classes list
NETCLASSPTR m_NetClass;
BOARD_ITEM* m_parent; ///< The parent board item object the net belongs to.
BOARD* m_parent; ///< The parent board the net belongs to.
public:
std::vector<D_PAD*> m_PadInNetList; ///< List of pads connected to this net
@ -498,9 +509,33 @@ public:
unsigned m_RatsnestEndIdx; // Ending point of ratsnests of this net
// (excluded) in this buffer
NETINFO_ITEM( BOARD_ITEM* aParent, const wxString& aNetName = wxEmptyString, int aNetCode = -1 );
NETINFO_ITEM( BOARD* aParent, const wxString& aNetName = wxEmptyString, int aNetCode = -1 );
~NETINFO_ITEM();
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && PCB_T == aItem->Type();
}
wxString GetClass() const
{
return wxT( "NETINFO_ITEM" );
}
void Show( int nestLevel, std::ostream& os ) const
{
}
const wxPoint& GetPosition() const
{
static wxPoint dummy(0, 0);
return dummy;
}
void SetPosition( const wxPoint& aPos )
{
}
/**
* Function SetClass
* sets \a aNetclass into this NET
@ -622,6 +657,8 @@ public:
*/
int GetNet() const { return m_NetCode; }
void SetNetCode( int aNetCode ) { m_NetCode = aNetCode; }
/**
* Function GetNodesCount
* @return int - number of nodes in the net
@ -663,6 +700,12 @@ public:
SetClass( NETCLASSPTR() );
}
BOARD* GetParent() const
{
return m_parent;
}
};

View File

@ -49,7 +49,8 @@
/* class NETINFO_ITEM: handle data relative to a given net */
/*********************************************************/
NETINFO_ITEM::NETINFO_ITEM( BOARD_ITEM* aParent, const wxString& aNetName, int aNetCode ) :
NETINFO_ITEM::NETINFO_ITEM( BOARD* aParent, const wxString& aNetName, int aNetCode ) :
BOARD_ITEM( aParent, PCB_NETINFO_T ),
m_NetCode( aNetCode ), m_Netname( aNetName ), m_ShortNetname( m_Netname.AfterLast( '/' ) )
{
m_parent = aParent;

View File

@ -69,6 +69,30 @@ void NETINFO_LIST::clear()
}
void NETINFO_LIST::RemoveNet( NETINFO_ITEM* aNet )
{
for( NETCODES_MAP::iterator i = m_netCodes.begin(); i != m_netCodes.end(); ++i )
{
if ( i->second == aNet )
{
m_netCodes.erase(i);
break;
}
}
for( NETNAMES_MAP::iterator i = m_netNames.begin(); i != m_netNames.end(); ++i )
{
if ( i->second == aNet )
{
m_netNames.erase(i);
break;
}
}
m_newNetCode = std::min( m_newNetCode, aNet->m_NetCode - 1 );
}
void NETINFO_LIST::AppendNet( NETINFO_ITEM* aNewElement )
{
// if there is a net with such name then just assign the correct number
@ -295,6 +319,6 @@ NETINFO_ITEM* NETINFO_MAPPING::iterator::operator->() const
const int NETINFO_LIST::UNCONNECTED = 0;
const int NETINFO_LIST::FORCE_ORPHANED = -1;
const int NETINFO_LIST::ORPHANED = -1;
NETINFO_ITEM NETINFO_LIST::ORPHANED = NETINFO_ITEM( NULL, wxEmptyString, NETINFO_LIST::UNCONNECTED );
NETINFO_ITEM NETINFO_LIST::ORPHANED_ITEM = NETINFO_ITEM( NULL, wxEmptyString, NETINFO_LIST::UNCONNECTED );

View File

@ -24,6 +24,9 @@
#include <collectors.h>
#include <pcbnew.h>
#include <netlist_reader.h>
#include <pcb_netlist.h>
#include <dialogs/dialog_update_pcb.h>
#include <tools/common_actions.h>
#include <tool/tool_manager.h>
@ -243,6 +246,28 @@ void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
ExecuteRemoteCommand( payload.c_str() );
break;
case MAIL_SCH_PCB_UPDATE:
{
NETLIST netlist;
try {
STRING_LINE_READER* lineReader = new STRING_LINE_READER( payload, _( "EEschema netlist" ) );
KICAD_NETLIST_READER netlistReader( lineReader, &netlist );
netlistReader.LoadNetlist();
}
catch( const IO_ERROR& ioe )
{
assert( false ); // should never happen
}
DIALOG_UPDATE_PCB updateDialog( this, &netlist );
updateDialog.PerformUpdate( true );
updateDialog.ShowModal();
break;
}
// many many others.
default:
;

View File

@ -0,0 +1,128 @@
#include <common.h>
#include <wxPcbStruct.h>
#include <pcb_netlist.h>
#include <dialog_update_pcb.h>
#include <wx_html_report_panel.h>
#include <board_netlist_updater.h>
#include <tool/tool_manager.h>
#include <tools/common_actions.h>
#include <class_draw_panel_gal.h>
#include <class_board.h>
#include <ratsnest_data.h>
#include <boost/bind.hpp>
DIALOG_UPDATE_PCB::DIALOG_UPDATE_PCB( PCB_EDIT_FRAME* aParent, NETLIST *aNetlist ) :
DIALOG_UPDATE_PCB_BASE ( aParent ),
m_frame (aParent),
m_netlist (aNetlist)
{
m_messagePanel->SetLabel( _("Changes to be applied:") );
m_messagePanel->SetLazyUpdate ( true );
m_netlist->SortByReference();
m_btnPerformUpdate->SetFocus();
m_messagePanel->SetVisibleSeverities( REPORTER::RPT_WARNING | REPORTER::RPT_ERROR | REPORTER::RPT_ACTION );
}
DIALOG_UPDATE_PCB::~DIALOG_UPDATE_PCB()
{
}
void DIALOG_UPDATE_PCB::PerformUpdate( bool aDryRun )
{
m_messagePanel->Clear();
REPORTER &reporter = m_messagePanel->Reporter();
KIGFX::VIEW* view = m_frame->GetGalCanvas()->GetView();
TOOL_MANAGER *toolManager = m_frame->GetToolManager();
BOARD *board = m_frame->GetBoard();
if( !aDryRun )
{
// Remove old modules
for( MODULE* module = board->m_Modules; module; module = module->Next() )
{
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) );
view->Remove( module );
}
// Clear selection, just in case a selected item has to be removed
toolManager->RunAction( COMMON_ACTIONS::selectionClear, true );
}
m_netlist->SetDeleteExtraFootprints( true );
m_netlist->SetFindByTimeStamp( m_matchByTimestamp->GetValue() );
m_netlist->SetReplaceFootprints( true );
try {
m_frame->LoadFootprints( *m_netlist, &reporter );
}
catch( IO_ERROR &error )
{
wxString msg;
reporter.Report( _( "Failed to load one or more footprints. Please add the missing libraries in PCBNew configuration. "
"The PCB will not update completely." ), REPORTER::RPT_ERROR );
reporter.Report( error.errorText, REPORTER::RPT_INFO );
}
BOARD_NETLIST_UPDATER updater( m_frame, m_frame->GetBoard() );
updater.SetReporter ( &reporter );
updater.SetIsDryRun( aDryRun);
updater.SetLookupByTimestamp( m_matchByTimestamp->GetValue() );
updater.SetDeleteUnusedComponents ( true );
updater.SetReplaceFootprints( true );
updater.SetDeleteSinglePadNets ( false );
updater.UpdateNetlist( *m_netlist );
m_messagePanel->Flush();
if( aDryRun )
return;
std::vector<MODULE*> newFootprints = updater.GetAddedComponents();
m_frame->OnModify();
m_frame->SetCurItem( NULL );
// Reload modules
for( MODULE* module = board->m_Modules; module; module = module->Next() )
{
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) );
view->Add( module );
module->ViewUpdate();
}
// Rebuild the board connectivity:
if( m_frame->IsGalCanvasActive() )
board->GetRatsnest()->ProcessBoard();
m_frame->Compile_Ratsnest( NULL, true );
m_frame->SetMsgPanel( board );
m_btnPerformUpdate->Enable( false );
m_btnPerformUpdate->SetLabel( _( "Update complete" ) );
m_btnCancel->SetFocus();
}
void DIALOG_UPDATE_PCB::OnMatchChange( wxCommandEvent& event )
{
PerformUpdate( true );
}
void DIALOG_UPDATE_PCB::OnCancelClick( wxCommandEvent& event )
{
EndModal( wxID_CANCEL );
}
void DIALOG_UPDATE_PCB::OnUpdateClick( wxCommandEvent& event )
{
m_messagePanel->SetLabel( _("Changes applied to the PCB:") );
PerformUpdate( false );
m_btnCancel->SetFocus( );
}

View File

@ -0,0 +1,661 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_php_events">0</property>
<property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_update_pcb_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="internationalize">1</property>
<property name="name">dialog_update_pcb_base</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center"></property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size">800,700</property>
<property name="name">DIALOG_UPDATE_PCB_BASE</property>
<property name="pos"></property>
<property name="size">-1,-1</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title">Update PCB from Schematics</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bMainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALL</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols"></property>
<property name="growablerows"></property>
<property name="hgap">0</property>
<property name="minimum_size"></property>
<property name="name">fgSizer2</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">0</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Match components by:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxRadioButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Reference</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_matchByReference</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioButton">OnMatchChange</event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxRadioButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Timestamp</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_matchByTimestamp</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioButton">OnMatchChange</event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bLowerSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property>
<object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">-300,150</property>
<property name="moveable">1</property>
<property name="name">m_messagePanel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">5</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols">0</property>
<property name="growablerows"></property>
<property name="hgap">0</property>
<property name="minimum_size"></property>
<property name="name">fgSizer1</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">1</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT</property>
<property name="proportion">1</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_CANCEL</property>
<property name="label">Close</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_btnCancel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnCancelClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Perform PCB Update</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_btnPerformUpdate</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnUpdateClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>

View File

@ -0,0 +1,56 @@
/**
* @file pcbnew/dialogs/dialog_update_pcb.h
*/
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _DIALOG_UPDATE_PCB_H_
#define _DIALOG_UPDATE_PCB_H_
#include <dialog_update_pcb_base.h>
class NETLIST;
class PCB_EDIT_FRAME;
class DIALOG_UPDATE_PCB : public DIALOG_UPDATE_PCB_BASE
{
private:
PCB_EDIT_FRAME* m_frame;
NETLIST *m_netlist;
public:
DIALOG_UPDATE_PCB( PCB_EDIT_FRAME* aParent, NETLIST *aNetlist );
~DIALOG_UPDATE_PCB();
void PerformUpdate( bool aDryRun );
private:
virtual void OnMatchChange( wxCommandEvent& event );
virtual void OnCancelClick( wxCommandEvent& event );
virtual void OnUpdateClick( wxCommandEvent& event );
};
#endif

View File

@ -0,0 +1,85 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_update_pcb_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_UPDATE_PCB_BASE::DIALOG_UPDATE_PCB_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( 800,700 ), wxDefaultSize );
wxBoxSizer* bMainSizer;
bMainSizer = new wxBoxSizer( wxVERTICAL );
wxFlexGridSizer* fgSizer2;
fgSizer2 = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizer2->SetFlexibleDirection( wxBOTH );
fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Match components by:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
fgSizer2->Add( m_staticText1, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_matchByReference = new wxRadioButton( this, wxID_ANY, _("Reference"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer2->Add( m_matchByReference, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_matchByTimestamp = new wxRadioButton( this, wxID_ANY, _("Timestamp"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer2->Add( m_matchByTimestamp, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bMainSizer->Add( fgSizer2, 0, wxEXPAND|wxALL, 5 );
wxBoxSizer* bLowerSizer;
bLowerSizer = new wxBoxSizer( wxVERTICAL );
m_messagePanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_messagePanel->SetMinSize( wxSize( -300,150 ) );
bLowerSizer->Add( m_messagePanel, 1, wxEXPAND | wxALL, 5 );
bMainSizer->Add( bLowerSizer, 1, wxEXPAND, 5 );
wxFlexGridSizer* fgSizer1;
fgSizer1 = new wxFlexGridSizer( 1, 5, 0, 0 );
fgSizer1->AddGrowableCol( 0 );
fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_btnCancel = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_btnCancel, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
m_btnPerformUpdate = new wxButton( this, wxID_ANY, _("Perform PCB Update"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer1->Add( m_btnPerformUpdate, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
bMainSizer->Add( fgSizer1, 0, wxEXPAND, 5 );
this->SetSizer( bMainSizer );
this->Layout();
bMainSizer->Fit( this );
// Connect Events
m_matchByReference->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnMatchChange ), NULL, this );
m_matchByTimestamp->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnMatchChange ), NULL, this );
m_btnCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnCancelClick ), NULL, this );
m_btnPerformUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnUpdateClick ), NULL, this );
}
DIALOG_UPDATE_PCB_BASE::~DIALOG_UPDATE_PCB_BASE()
{
// Disconnect Events
m_matchByReference->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnMatchChange ), NULL, this );
m_matchByTimestamp->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnMatchChange ), NULL, this );
m_btnCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnCancelClick ), NULL, this );
m_btnPerformUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_UPDATE_PCB_BASE::OnUpdateClick ), NULL, this );
}

View File

@ -0,0 +1,60 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_UPDATE_PCB_BASE_H__
#define __DIALOG_UPDATE_PCB_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/radiobut.h>
#include <wx/sizer.h>
#include <wx/panel.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_UPDATE_PCB_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_UPDATE_PCB_BASE : public DIALOG_SHIM
{
private:
protected:
wxStaticText* m_staticText1;
wxRadioButton* m_matchByReference;
wxRadioButton* m_matchByTimestamp;
WX_HTML_REPORT_PANEL* m_messagePanel;
wxButton* m_btnCancel;
wxButton* m_btnPerformUpdate;
// Virtual event handlers, overide them in your derived class
virtual void OnMatchChange( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnUpdateClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_UPDATE_PCB_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Update PCB from Schematics"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_UPDATE_PCB_BASE();
};
#endif //__DIALOG_UPDATE_PCB_BASE_H__

View File

@ -23,6 +23,8 @@
# These are additions to any inherited from pcbnew dir:
include_directories( . )
include_directories( ${CURL_INCLUDE_DIRS} )
set( GITHUB_PLUGIN_SRCS
github_plugin.cpp
github_getliblist.cpp

View File

@ -422,9 +422,10 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
// column 1 (COLUMN_COLORBM)
col = COLUMN_COLORBM;
wxBitmapButton* bmb = makeColorButton( m_LayerScrolledWindow, aSpec.color, encodeId( col, aSpec.id ) );
bmb->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownLayerColor ), NULL, this );
bmb->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
bmb->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownLayerColor ), NULL, this );
bmb->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownLayerColor ), NULL, this );
bmb->SetToolTip( _("Left click for color change, right click for menu" ) );
bmb->SetToolTip( _("Left double click or middle click for color change, right click for menu" ) );
m_LayersFlexGridSizer->wxSizer::Insert( index+col, bmb, 0, flags );
// column 2 (COLUMN_COLOR_LYR_CB)
@ -458,9 +459,9 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
if( aSpec.color != -1 )
{
wxBitmapButton* bmb = makeColorButton( m_RenderScrolledWindow, aSpec.color, encodeId( col, aSpec.id ) );
bmb->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownRenderColor ), NULL, this );
bmb->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownRenderColor ), NULL, this );
bmb->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownRenderColor ), NULL, this );
bmb->SetToolTip( _( "Left click for color change" ) );
bmb->SetToolTip( _( "Left double click or middle click for color change" ) );
m_RenderFlexGridSizer->wxSizer::Insert( index+col, bmb, 0, flags );
// could add a left click handler on the color button that toggles checkbox.

View File

@ -605,6 +605,14 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
//----- Tools menu ----------------------------------------------------------
wxMenu* toolsMenu = new wxMenu;
AddMenuItem( toolsMenu,
ID_UPDATE_PCB_FROM_SCH,
_( "Update PCB from Schematics" ),
_( "Updates the PCB design with the current schematic (forward annotation)." ),
KiBitmap( libedit_xpm ) );
toolsMenu->AppendSeparator( );
AddMenuItem( toolsMenu, ID_GET_NETLIST,
_( "&Netlist" ),
_( "Read the netlist and update board connectivity" ),

View File

@ -87,7 +87,7 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName,
SetLastNetListRead( aNetlistFileName );
netlistReader->LoadNetlist();
loadFootprints( netlist, aReporter );
LoadFootprints( netlist, aReporter );
}
catch( const IO_ERROR& ioe )
{
@ -115,7 +115,6 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName,
netlist.SortByReference();
board->ReplaceNetlist( netlist, aDeleteSinglePadNets, &newFootprints, aReporter );
// If it was a dry run, nothing has changed so we're done.
if( netlist.IsDryRun() )
@ -124,12 +123,14 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName,
if( IsGalCanvasActive() )
{
SpreadFootprints( &newFootprints, false, false );
BOOST_FOREACH( MODULE* footprint, newFootprints )
if( !newFootprints.empty() )
{
m_toolManager->RunAction( COMMON_ACTIONS::selectItem, true, footprint );
BOOST_FOREACH( MODULE* footprint, newFootprints )
{
m_toolManager->RunAction( COMMON_ACTIONS::selectItem, true, footprint );
}
m_toolManager->InvokeTool( "pcbnew.InteractiveEdit" );
}
m_toolManager->InvokeTool( "pcbnew.InteractiveEdit" );
}
OnModify();
@ -205,7 +206,7 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName()
#define ALLOW_PARTIAL_FPID 1
void PCB_EDIT_FRAME::loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
void PCB_EDIT_FRAME::LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
throw( IO_ERROR, PARSE_ERROR )
{
wxString msg;
@ -329,4 +330,3 @@ void PCB_EDIT_FRAME::loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
component->SetModule( module );
}
}

View File

@ -70,6 +70,8 @@
#include <tool/tool_dispatcher.h>
#include <tools/common_actions.h>
#include <wildcards_and_files_ext.h>
#if defined(KICAD_SCRIPTING) || defined(KICAD_SCRIPTING_WXPYTHON)
#include <python_scripting.h>
#endif
@ -232,6 +234,8 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
EVT_TOOL( ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR_MICROWAVE,
PCB_EDIT_FRAME::OnSelectOptionToolbar )
EVT_TOOL( ID_UPDATE_PCB_FROM_SCH, PCB_EDIT_FRAME::OnUpdatePCBFromSch )
EVT_TOOL_RANGE( ID_TB_OPTIONS_SHOW_ZONES, ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY,
PCB_EDIT_FRAME::OnSelectOptionToolbar )
@ -1080,3 +1084,30 @@ void PCB_EDIT_FRAME::OnConfigurePaths( wxCommandEvent& aEvent )
{
Pgm().ConfigurePaths( this );
}
void PCB_EDIT_FRAME::OnUpdatePCBFromSch( wxCommandEvent& event )
{
if( Kiface().IsSingle() )
{
DisplayError( this, _( "Cannot update the PCB, because the Kicad is"
" opened in stand-alone mode. In order to create/update"
" PCBs from schematics, you need to launch Kicad shell"
" and create a PCB project." ) );
return;
} else {
KIWAY_PLAYER* frame = Kiway().Player( FRAME_SCH, true );
wxFileName schfn = Prj().AbsolutePath( Prj().GetProjectName() );
schfn.SetExt( SchematicFileExtension );
if( !frame->IsVisible() )
{
frame->OpenProjectFiles( std::vector<wxString>( 1, schfn.GetFullPath() ) );
frame->Show( false );
}
Kiway().ExpressMail( FRAME_SCH, MAIL_SCH_PCB_UPDATE_REQUEST, "", this );
}
}

View File

@ -393,6 +393,7 @@ enum pcbnew_ids
ID_FOOTPRINT_WIZARD_SELECT_WIZARD,
ID_FOOTPRINT_WIZARD_EXPORT_TO_BOARD,
ID_UPDATE_PCB_FROM_SCH,
ID_PCBNEW_END_LIST
};

View File

@ -1003,7 +1003,7 @@ void RN_NET::processPads()
m_links.RemoveConnection( edge );
LSET layers = pad->GetLayerSet();
RN_LINKS::RN_NODE_SET candidates = m_links.GetNodes();
const RN_LINKS::RN_NODE_SET& candidates = m_links.GetNodes();
RN_LINKS::RN_NODE_SET::iterator point, pointEnd;
point = candidates.begin();

View File

@ -39,6 +39,7 @@
// ignore a couple of items that generate warnings from swig built code
%ignore NETINFO_ITEM;
%ignore BOARD_ITEM::ZeroOffset;
%ignore D_PAD::m_PadSketchModePenSize;

View File

@ -357,7 +357,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
m_view->Add( dimension );
m_board->Add( dimension );
dimension->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
//dimension->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
m_frame->OnModify();
m_frame->SaveCopyInUndoList( dimension, UR_NEW );

View File

@ -69,7 +69,7 @@ int PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
if( !getNext )
break;
else
m_toolMgr->PassEvent();
setControls();
}
else if( evt->IsCancel() || evt->IsActivate() )