Index: clipbug.lht =================================================================== --- clipbug.lht (nonexistent) +++ clipbug.lht (revision 35215) @@ -0,0 +1,1123 @@ +ha:pcb-rnd-board-v8 { + + ha:attributes { + thickness=1.6mm + } + + li:styles { + ha:Signal { + via_proto = 0 + thickness = 0.2mm + text_thick = 0.0 + text_scale = 100 + clearance = 6.0mil + } + ha:Power { + via_proto = 0 + thickness = 0.3mm + text_thick = 0.0 + text_scale = 100 + clearance = 0.2mm + } + ha:imp_diff100 { + via_proto = 2 + thickness = 0.2mm + text_thick = 0.0 + text_scale = 100 + clearance = 30.0mil + } + ha:thin { + via_proto = 4 + thickness = 0.1mm + text_thick = 0.0 + text_scale = 100 + clearance = 0.2mm + } + ha:outline { + via_proto = 3 + thickness = 0.1mm + text_thick = 0.0 + text_scale = 100 + clearance = 0.2mm + } + } + + ha:meta { + ha:size { + thermal_scale = 0.500000 + x = 100.0mm + y = 100.0mm + } + board_name = HDMI firewall dongle + ha:grid { + spacing = 0.05mm + offs_x = 0.0 + offs_y = 0.0 + } + } + + ha:data { + li:padstack_prototypes { + + ha:ps_proto_v6.0 { + hdia=0.3mm; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.0 + } + } + } + + ha:ps_proto_v6.1 { + hdia=0.6mm; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.3mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.3mm; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.3mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.0 + } + } + } + + ha:ps_proto_v6.2 { + hdia=0.2mm; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.45mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.45mm; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.45mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.0 + } + } + } + + ha:ps_proto_v6.3 { + hdia=0.5mm; hplated=0; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + ps_hshadow = + } + + ha:ps_shape_v4 { + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.0 + ps_hshadow = + } + + ha:ps_shape_v4 { + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.0 + ps_hshadow = + } + } + name = mouse bite + } + + ha:ps_proto_v6.4 { + hdia=0.5mm; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_circ { x=0.0; y=0.0; dia=0.6mm; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.0 + } + } + } + unused = 1 + } + + li:objects { + ha:subc.8619 { + ha:attributes { + value=untrusted device + footprint=CONNECTOR_HDMI-001S.lht + refdes=J1 + } + ha:data { + li:padstack_prototypes { + + ha:ps_proto_v6.0 { + hdia=0.0; hplated=0; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.0 + li:ps_poly { + -0.15mm + -1.3mm + 0.15mm + -1.3mm + 0.15mm + 1.3mm + -0.15mm + 1.3mm + } + } + + ha:ps_shape_v4 { + ha:combining { sub=1; auto=1; } + ha:layer_mask { + top = 1 + mask = 1 + } + clearance=0.0 + li:ps_poly { + -0.2mm + -1.35mm + 0.2mm + -1.35mm + 0.2mm + 1.35mm + -0.2mm + 1.35mm + } + } + + ha:ps_shape_v4 { + ha:combining { auto=1; } + ha:layer_mask { + top = 1 + paste = 1 + } + clearance=0.0 + li:ps_poly { + -0.15mm + -1.3mm + 0.15mm + -1.3mm + 0.15mm + 1.3mm + -0.15mm + 1.3mm + } + } + } + } + + ha:ps_proto_v6.1 { + hdia=0.0; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.35mm; x2=0.0; y2=0.35mm; thickness=0.9mm; square=0; } + ha:combining { auto=1; } + ha:layer_mask { + mech = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.4mm; x2=0.0; y2=0.4mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.4mm; x2=0.0; y2=0.4mm; thickness=1.6mm; square=0; } + ha:combining { sub=1; auto=1; } + ha:layer_mask { + top = 1 + mask = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.4mm; x2=0.0; y2=0.4mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.4mm; x2=0.0; y2=0.4mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.4mm; x2=0.0; y2=0.4mm; thickness=1.6mm; square=0; } + ha:combining { sub=1; auto=1; } + ha:layer_mask { + bottom = 1 + mask = 1 + } + clearance=0.0 + } + } + } + + ha:ps_proto_v6.2 { + hdia=0.0; hplated=1; htop=0; hbottom=0; + li:shape { + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.9mm; x2=0.0; y2=0.9mm; thickness=0.9mm; square=0; } + ha:combining { auto=1; } + ha:layer_mask { + mech = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.95mm; x2=0.0; y2=0.95mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + copper = 1 + top = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.95mm; x2=0.0; y2=0.95mm; thickness=1.6mm; square=0; } + ha:combining { sub=1; auto=1; } + ha:layer_mask { + top = 1 + mask = 1 + } + clearance=0.0 + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.95mm; x2=0.0; y2=0.95mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + copper = 1 + intern = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.95mm; x2=0.0; y2=0.95mm; thickness=1.5mm; square=0; } + ha:combining { } + ha:layer_mask { + bottom = 1 + copper = 1 + } + clearance=0.2mm + } + + ha:ps_shape_v4 { + ha:ps_line { x1=0.0; y1=-0.95mm; x2=0.0; y2=0.95mm; thickness=1.6mm; square=0; } + ha:combining { sub=1; auto=1; } + ha:layer_mask { + bottom = 1 + mask = 1 + } + clearance=0.0 + } + } + } + } + + li:objects { + ha:padstack_ref.8691 { + proto=0; x=32.735mm; y=17.65mm; rot=90.000000; xmirror=0; smirror=0; clearance=0.2mm; + ha:flags { + clearline=1 + } + + li:thermal { + } + + ha:attributes { + term=19 + name=19 + } + } + ha:padstack_ref.8693 { + proto=1; x=26.015mm; y=14.9mm; rot=90.000000; xmirror=0; smirror=0; clearance=0.2mm; + ha:flags { + clearline=1 + } + + li:thermal { + } + + ha:attributes { + term=NC2 + name=NC2 + } + } + } + li:layers { + + ha:subc-aux { + lid=0 + ha:combining { } + + li:objects { + ha:line.8620 { + x1=28.5mm; y1=22.15mm; x2=28.5mm; y2=22.15mm; thickness=0.1mm; clearance=0.0; + ha:attributes { + subc-role=origin + } + } + ha:line.8623 { + x1=28.5mm; y1=22.15mm; x2=28.5mm; y2=21.15mm; thickness=0.1mm; clearance=0.0; + ha:attributes { + subc-role=x + } + } + ha:line.8626 { + x1=28.5mm; y1=22.15mm; x2=29.5mm; y2=22.15mm; thickness=0.1mm; clearance=0.0; + ha:attributes { + subc-role=y + } + } + } + ha:type { + top = 1 + misc = 1 + virtual = 1 + } + } + + ha:top-silkscreen { + lid=1 + ha:combining { } + + li:objects { + } + ha:type { + silk = 1 + top = 1 + } + } + + ha:top-assembly { + lid=2 + ha:combining { } + + li:objects { + ha:line.8653 { + x1=28.5mm; y1=22.85mm; x2=28.5mm; y2=21.45mm; thickness=0.1mm; clearance=0.0; + } + ha:line.8656 { + x1=27.8mm; y1=22.15mm; x2=29.2mm; y2=22.15mm; thickness=0.1mm; clearance=0.0; + } + ha:line.8659 { + x1=22.425mm; y1=29.65mm; x2=22.425mm; y2=14.65mm; thickness=0.1mm; clearance=0.0; + } + ha:line.8662 { + x1=22.425mm; y1=14.65mm; x2=34.575mm; y2=14.65mm; thickness=0.1mm; clearance=0.0; + } + ha:line.8665 { + x1=34.575mm; y1=14.65mm; x2=34.575mm; y2=29.65mm; thickness=0.1mm; clearance=0.0; + } + ha:line.8668 { + x1=34.575mm; y1=29.65mm; x2=22.425mm; y2=29.65mm; thickness=0.1mm; clearance=0.0; + } + ha:arc.8671 { + x=28.5mm; y=22.15mm; width=0.5mm; height=0.5mm; astart=90.000000; adelta=360.000000; thickness=0.1mm; clearance=0.0; + } + ha:text.8672 { + string=%a.parent.refdes%; x=26.0mm; y=20.65mm; scale=100; fid=0; + ha:flags { + dyntext=1 + floater=1 + } + rot = 90.000000 + } + } + ha:type { + top = 1 + doc = 1 + } + purpose = assy + } + + ha:top-courtyard { + lid=3 + ha:combining { } + + li:objects { + ha:polygon.8696 { + li:geometry { + ta:contour { + { 22.175mm; 30.4mm } + { 22.175mm; 13.9mm } + { 34.825mm; 13.9mm } + { 34.825mm; 30.4mm } + } + } + } + } + ha:type { + top = 1 + doc = 1 + } + purpose = ko.courtyard + } + } + } + uid = UsZVGY9SkJLERZiC+TcAAAAj + } + } + li:layers { + + ha:top-sig { + lid=0 + group=3 + ha:combining { } + + ha:attributes { + {pcb-rnd::key::vis}={l; Shiftt} + {pcb-rnd::key::select}={l; t} + } + + li:objects { + } + color = {#238b27} + } + + ha:bottom-sig { + lid=1 + group=13 + ha:combining { } + + ha:attributes { + {pcb-rnd::key::vis}={l; Shiftb} + {pcb-rnd::key::select}={l; b} + } + + li:objects { + } + color = {#38ee39} + } + + ha:top-gnd { + lid=2 + group=3 + ha:combining { } + + li:objects { + ha:line.21180 { + x1=41.0mm; y1=21.0mm; x2=42.325mm; y2=21.0mm; thickness=0.5mm; clearance=0.4mm; + ha:flags { + clearline=1 + } + li:thermal { + on + solid + } + } + ha:polygon.21680 { clearance=0.4mm; + li:geometry { + ta:contour { + { 24.55mm; 12.95mm } + { 43.25mm; 12.95mm } + { 43.25mm; 30.05mm } + { 24.55mm; 30.05mm } + } + } + + ha:flags { + clearpoly=1 + } + } + } + color = {#104e8b} + } + + ha:bottom-gnd { + lid=3 + group=13 + ha:combining { } + + li:objects { + } + color = {#6164ff} + } + + ha:outline { + lid=4 + group=9 + ha:combining { } + + li:objects { + } + color = {#00868b} + } + + ha:bottom-silk { + lid=5 + group=15 + ha:combining { auto=1; } + + ha:attributes { + {pcb-rnd::key::vis}={l; Shiftx} + {pcb-rnd::key::select}={l; x} + } + + li:objects { + } + color = {#000000} + } + + ha:top-silk { + lid=6 + group=1 + ha:combining { auto=1; } + + ha:attributes { + {pcb-rnd::key::vis}={l; Shifts} + {pcb-rnd::key::select}={l; s} + } + + li:objects { + } + color = {#000000} + } + + ha:top-paste { + lid=7 + group=0 + ha:combining { auto=1; } + + li:objects { + } + color = {#cd00cd} + } + + ha:top-mask { + lid=8 + group=2 + ha:combining { sub=1; auto=1; } + + li:objects { + } + color = {#ff0000} + } + + ha:bottom-mask { + lid=9 + group=14 + ha:combining { sub=1; auto=1; } + + li:objects { + } + color = {#ff0000} + } + + ha:bottom-paste { + lid=10 + group=16 + ha:combining { auto=1; } + + li:objects { + } + color = {#cd00cd} + } + + ha:slot-plated { + lid=11 + group=17 + ha:combining { auto=1; } + + li:objects { + } + color = {#8b7355} + } + + ha:slot-unplated { + lid=12 + group=18 + ha:combining { auto=1; } + + li:objects { + } + color = {#00868b} + } + + ha:top-assy { + lid=13 + group=19 + ha:combining { } + + li:objects { + } + color = {#444444} + } + + ha:bot-assy { + lid=14 + group=20 + ha:combining { } + + li:objects { + } + color = {#444444} + } + + ha:fab { + lid=15 + group=21 + ha:combining { auto=1; } + + li:objects { + ha:text.905 { + string=board thickness needs to be 1.6 mm for edge mounted HDMI plug; x=1.7mm; y=1.15mm; scale=200; fid=0; + ha:flags { + clearline=1 + } + rot = 0.000000 + } + } + color = {#222222} + } + + ha:top-courtyard { + lid=16 + group=10 + ha:combining { } + + li:objects { + } + color = {#104e8b} + } + + ha:bot-courtyard { + lid=17 + group=11 + ha:combining { } + + li:objects { + } + color = {#cd3700} + } + + ha:top-pwr { + lid=18 + group=3 + ha:combining { } + + li:objects { + } + color = {#c24744} + } + + ha:bottom-pwr { + lid=19 + group=13 + ha:combining { } + + li:objects { + } + color = {#ff5759} + } + + ha:inner-top { + lid=20 + group=5 + ha:combining { } + + li:objects { + } + color = {#548b54} + } + + ha:inner-bottom { + lid=21 + group=7 + ha:combining { } + + li:objects { + } + color = {#8b7355} + } + + ha:break-tabs { + lid=22 + group=12 + ha:combining { } + + li:objects { + } + color = {#00868b} + } + } + } + + + ha:layer_stack { + li:groups { + ha:0 { + name = top_paste + ha:type { top=1; paste=1; } + li:layers { 7; } + } + ha:1 { + name = top_silk + ha:type { silk=1; top=1; } + li:layers { 6; } + } + ha:2 { + name = top_mask + ha:type { top=1; mask=1; } + li:layers { 8; } + } + ha:3 { + name = top_copper + ha:type { copper=1; top=1; } + li:layers { 0; 18; 2; } + ha:attributes { + thickness=0.035mm + } + } + ha:4 { + name = grp_4 + ha:type { substrate=1; intern=1; } + li:layers { } + ha:attributes { + thickness={0.2mm } + } + } + ha:5 { + name = Intern + ha:type { copper=1; intern=1; } + li:layers { 20; } + ha:attributes { + thickness=0.0175mm + } + } + ha:6 { + name = grp_6 + ha:type { substrate=1; intern=1; } + li:layers { } + ha:attributes { + thickness=1.065mm + } + } + ha:7 { + name = Intern + ha:type { copper=1; intern=1; } + li:layers { 21; } + ha:attributes { + thickness=0.0175mm + } + } + ha:8 { + name = grp_9 + ha:type { substrate=1; intern=1; } + li:layers { } + ha:attributes { + thickness=0.2mm + } + } + ha:9 { + name = global_outline + ha:type { boundary=1; } + li:layers { 4; } + purpose = uroute + } + ha:10 { + name = top-courtyard + ha:type { top=1; doc=1; } + li:layers { 16; } + ha:attributes { + init-invis=true + } + purpose = ko.courtyard + } + ha:11 { + name = bot-courtyard + ha:type { bottom=1; doc=1; } + li:layers { 17; } + ha:attributes { + init-invis=true + } + purpose = ko.courtyard + } + ha:12 { + name = global-doc + ha:type { doc=1; } + li:layers { 22; } + } + ha:13 { + name = bottom_copper + ha:type { bottom=1; copper=1; } + li:layers { 1; 19; 3; } + ha:attributes { + thickness=0.035mm + } + } + ha:14 { + name = bottom_mask + ha:type { bottom=1; mask=1; } + li:layers { 9; } + } + ha:15 { + name = bottom_silk + ha:type { silk=1; bottom=1; } + li:layers { 5; } + } + ha:16 { + name = bottom_paste + ha:type { bottom=1; paste=1; } + li:layers { 10; } + } + ha:17 { + name = pmech + ha:type { mech=1; } + li:layers { 11; } + purpose = proute + } + ha:18 { + name = umech + ha:type { mech=1; } + li:layers { 12; } + purpose = uroute + } + ha:19 { + name = top_assy + ha:type { top=1; doc=1; } + li:layers { 13; } + ha:attributes { + init-invis=1 + } + purpose = assy + } + ha:20 { + name = bot_assy + ha:type { bottom=1; doc=1; } + li:layers { 14; } + ha:attributes { + init-invis=1 + } + purpose = assy + } + ha:21 { + name = fab + ha:type { top=1; doc=1; } + li:layers { 15; } + ha:attributes { + init-invis=1 + } + purpose = fab + } + } + } + li:pcb-rnd-conf-v1 { + ha:overwrite { + ha:plugins { + ha:show_netnames { + enable = true + } + ha:import_sch { + li:args { + ./hdmi_firewall.sch + } + import_fmt = lepton + } + } + ha:design { + via_proto = 0 + text_font_id = 0 + text_scale = 100 + min_slk = 0.15240000 mm + text_thickness = 0 + line_thickness = 300.00 um + ha:drc { + min_ring = 0.125 mm + min_copper_overlap = 6.0 mil + min_copper_thickness = 5.0 mil + min_drill = 0.2 mm + } + min_wid = 0.15240000 mm + bloat = 0.15240000 mm + clearance = 200.00 um + } + ha:editor { + grid_unit = mm + grids_idx = 8 + clear_line = true + grid = 50.00 um + line_refraction = 1 + buffer_number = 0 + rubber_band_mode = false + ha:view { + flip_y = 0 + } + show_solder_side = 0 + wireframe_draw = false + } + ha:rc { + li:library_search_paths { + $(rc.path.design)/coraleda/subc + $(rc.path.design)/coraleda/subc + ?../pcblib + ?~/pcblib/ + $(rc.path.share)/pcblib + } + } + } + ha:append { + ha:plugins { + ha:drc_query { + li:rules { + ha:net-length { + type = net length + title = network length violation + desc = network length is not within the specified range + query = {rule net_len_min +let ALLNETS netlist() +let LNET (ALLNETS.a."len_min" != "") +assert (isvoid(netlen(LNET))) thus violation(DRCGRP1, LNET, DRCTEXT, "network can not be verified for length (not a 2-terminal net): ", DRCTEXT, LNET.name) +assert (netlen(LNET) < coord(LNET.a."len_min")) thus violation(DRCGRP1, LNET, DRCTEXT, "network is too short: ", DRCTEXT, LNET.name, DRCMEASURE, netlen(LNET), DRCEXPECT, LNET.a."len_min") +rule net_len_max +let ALLNETS netlist() +let LNET (ALLNETS.a."len_max" != "") +assert (isvoid(netlen(LNET))) thus violation(DRCGRP1, LNET, DRCTEXT, "network can not be verified for length (not a 2-terminal net): ", DRCTEXT, LNET.name) +assert (netlen(LNET) > coord(LNET.a."len_max")) thus violation(DRCGRP1, LNET, DRCTEXT, "network is too long: ", DRCTEXT, LNET.name, DRCMEASURE, netlen(LNET), DRCEXPECT, LNET.a."len_max") +rule net_len_match_net +let ALLNETS netlist() +let LNET ((ALLNETS.a."len_match_net" != "") && (ALLNETS.a."len_match_tol" != "")) +assert (isvoid(netlen(LNET))) thus violation(DRCGRP1, LNET, DRCTEXT, "network can not be verified for length (not a 2-terminal net): ", DRCTEXT, LNET.name) +assert (abs(netlen(LNET) - netlen(LNET.a."len_match_net")) > coord(LNET.a."len_match_tol")) thus violation(DRCGRP1, LNET, DRCTEXT, "network is length match out of range: ", DRCTEXT, LNET.name, DRCTEXT, " vs. ", DRCTEXT, LNET.a."len_match_net", DRCMEASURE, abs(netlen(LNET) - netlen(LNET.a."len_match_net")), DRCEXPECT, LNET.a."len_match_tol") +} + } + } + } + } + } + } + ha:pixmaps { + } +}