diff --git a/common/wildcards_and_files_ext.cpp b/common/wildcards_and_files_ext.cpp index 9b93e77020..68838c5145 100644 --- a/common/wildcards_and_files_ext.cpp +++ b/common/wildcards_and_files_ext.cpp @@ -309,6 +309,12 @@ wxString FILEEXT::PADSProjectFilesWildcard() } +wxString FILEEXT::GedaProjectFilesWildcard() +{ + return _( "gEDA / Lepton EDA project files" ) + AddFileExtListToFilter( { "prj", "sch", "pcb" } ); +} + + wxString FILEEXT::OrCadPcb2NetlistFileWildcard() { return _( "OrcadPCB2 netlist files" ) diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 5df0a55d91..9af78d1ec0 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -64,6 +64,9 @@ set( EESCHEMA_SCH_IO # Database IO plugin sch_io/database/sch_io_database.cpp + # gEDA IO plugin + sch_io/geda/sch_io_geda.cpp + # Eagle IO plugin sch_io/eagle/sch_io_eagle.cpp diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index dfbc15da49..c22dc11332 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -1470,6 +1470,7 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType, case SCH_IO_MGR::SCH_EASYEDA: case SCH_IO_MGR::SCH_EASYEDAPRO: case SCH_IO_MGR::SCH_PADS: + case SCH_IO_MGR::SCH_GEDA: { // We insist on caller sending us an absolute path, if it does not, we say it's a bug. // Unless we are passing the files in aproperties, in which case aFileName can be empty. diff --git a/eeschema/sch_io/geda/sch_io_geda.cpp b/eeschema/sch_io/geda/sch_io_geda.cpp new file mode 100644 index 0000000000..0d57d9a353 --- /dev/null +++ b/eeschema/sch_io/geda/sch_io_geda.cpp @@ -0,0 +1,4880 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright The 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 3 + * 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, see . + * + * This file contains embedded symbol definitions and file format knowledge + * derived from the gEDA and Lepton EDA projects: + * + * gEDA/gaf - Copyright (C) 1998-2010 Ales Hvezda + * Copyright (C) 1998-2016 gEDA Contributors + * Lepton EDA - Copyright (C) 2017-2024 Lepton EDA Contributors + * + * Both projects are licensed under the GNU General Public License v2 or later. + * See https://github.com/lepton-eda/lepton-eda and + * https://github.com/rlutz/geda-gaf + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// Default text size for imported text (50 mils) +static constexpr int GEDA_DEFAULT_TEXT_SIZE_MILS = 50; + +// Default body size for fallback rectangular symbols +static constexpr int DEFAULT_SYMBOL_SIZE_MILS = 200; + +/** + * Convert gEDA overbar markup to KiCad syntax. + * + * gEDA uses \_text\_ to indicate an overbar (text with a line above it). + * KiCad uses ~{text}. Escaped backslashes (\\) become a literal backslash. + */ +static wxString convertOverbars( const wxString& aInput ) +{ + wxString result; + result.reserve( aInput.length() + 8 ); + + size_t i = 0; + + while( i < aInput.length() ) + { + if( i + 1 < aInput.length() && aInput[i] == '\\' && aInput[i + 1] == '_' ) + { + size_t barEnd = aInput.find( wxT( "\\_" ), i + 2 ); + + if( barEnd != wxString::npos ) + { + result += wxT( "~{" ); + result += aInput.Mid( i + 2, barEnd - ( i + 2 ) ); + result += wxT( "}" ); + i = barEnd + 2; + } + else + { + result += aInput[i]; + i++; + } + } + else if( i + 1 < aInput.length() && aInput[i] == '\\' && aInput[i + 1] == '\\' ) + { + result += '\\'; + i += 2; + } + else + { + result += aInput[i]; + i++; + } + } + + return result; +} + + +// Standard gEDA symbol definitions embedded from the geda-gaf project (GPL v2+). +// These provide correct pin positions for common symbols so the importer works +// without requiring a gEDA system installation. +const std::map& SCH_IO_GEDA::getBuiltinSymbols() +{ + static const std::map symbols = { + { wxT( "resistor-1.sym" ), + wxT( "v 20031231 1\n" + "L 600 200 500 0 3 0 0 0 -1 -1\n" + "L 500 0 400 200 3 0 0 0 -1 -1\n" + "L 400 200 300 0 3 0 0 0 -1 -1\n" + "L 300 0 200 200 3 0 0 0 -1 -1\n" + "T 300 400 5 10 0 0 0 0 1\n" + "device=RESISTOR\n" + "L 600 200 700 0 3 0 0 0 -1 -1\n" + "L 700 0 750 100 3 0 0 0 -1 -1\n" + "P 900 100 750 100 1 0 0\n" + "{\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 800 150 5 8 0 0 0 0 1\n" + "pinseq=2\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pinlabel=2\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 0 100 152 100 1 0 0\n" + "{\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pinnumber=1\n" + "T 100 150 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "L 201 200 150 100 3 0 0 0 -1 -1\n" + "T 200 300 8 10 1 1 0 0 1\n" + "refdes=R?\n" ) }, + + { wxT( "resistor-2.sym" ), + wxT( "v 20031231 1\n" + "B 200 0 600 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "T 300 400 5 10 0 0 0 0 1\n" + "device=RESISTOR\n" + "P 900 100 800 100 1 0 0\n" + "{\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 800 150 5 8 0 0 0 0 1\n" + "pinseq=2\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pinlabel=2\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 0 100 200 100 1 0 0\n" + "{\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pinnumber=1\n" + "T 100 150 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 100 150 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "T 200 300 8 10 1 1 0 0 1\n" + "refdes=R?\n" ) }, + + { wxT( "capacitor-1.sym" ), + wxT( "v 20050820 1\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 150 250 5 8 0 1 0 6 1\n" + "pinnumber=1\n" + "T 150 150 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 200 200 9 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 200 200 5 8 0 1 0 2 1\n" + "pintype=pas\n" + "}\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 750 250 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 750 150 5 8 0 1 0 2 1\n" + "pinseq=2\n" + "T 700 200 9 8 0 1 0 6 1\n" + "pinlabel=2\n" + "T 700 200 5 8 0 1 0 8 1\n" + "pintype=pas\n" + "}\n" + "L 400 400 400 0 3 0 0 0 -1 -1\n" + "L 500 400 500 0 3 0 0 0 -1 -1\n" + "L 700 200 500 200 3 0 0 0 -1 -1\n" + "L 400 200 200 200 3 0 0 0 -1 -1\n" + "T 200 700 5 10 0 0 0 0 1\n" + "device=CAPACITOR\n" + "T 200 500 8 10 1 1 0 0 1\n" + "refdes=C?\n" ) }, + + { wxT( "capacitor-2.sym" ), + wxT( "v 20050820 1\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 150 250 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 200 150 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 250 200 9 8 0 1 0 0 1\n" + "pinlabel=+\n" + "T 250 200 5 8 0 1 0 2 1\n" + "pintype=pas\n" + "}\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 750 250 5 8 1 1 0 0 1\n" + "pinnumber=2\n" + "T 700 150 5 8 0 1 0 2 1\n" + "pinseq=2\n" + "T 650 200 9 8 0 1 0 6 1\n" + "pinlabel=-\n" + "T 650 200 5 8 0 1 0 8 1\n" + "pintype=pas\n" + "}\n" + "L 400 400 400 0 3 0 0 0 -1 -1\n" + "A 1200 200 700 165 30 3 0 0 0 -1 -1\n" + "L 700 200 500 200 3 0 0 0 -1 -1\n" + "L 400 200 200 200 3 0 0 0 -1 -1\n" + "L 289 400 289 300 3 0 0 0 -1 -1\n" + "L 340 349 240 349 3 0 0 0 -1 -1\n" + "T 200 700 5 10 0 0 0 0 1\n" + "device=POLARIZED_CAPACITOR\n" + "T 200 500 8 10 1 1 0 0 1\n" + "refdes=C?\n" ) }, + + { wxT( "gnd-1.sym" ), + wxT( "v 20031231 1\n" + "P 100 100 100 300 1 0 1\n" + "{\n" + "T 158 161 5 4 0 1 0 0 1\n" + "pinnumber=1\n" + "T 158 161 5 4 0 0 0 0 1\n" + "pinseq=1\n" + "T 158 161 5 4 0 1 0 0 1\n" + "pinlabel=1\n" + "T 158 161 5 4 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 0 100 200 100 3 0 0 0 -1 -1\n" + "L 55 50 145 50 3 0 0 0 -1 -1\n" + "L 80 10 120 10 3 0 0 0 -1 -1\n" + "T 300 50 8 10 0 0 0 0 1\n" + "net=GND:1\n" ) }, + + { wxT( "generic-power.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 200 250 8 10 1 1 0 3 1\n" + "net=Vcc:1\n" ) }, + + { wxT( "input-1.sym" ), + wxT( "v 20031231 1\n" + "P 600 100 800 100 1 0 1\n" + "{\n" + "T 450 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 450 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "}\n" + "L 0 200 0 0 3 0 0 0 -1 -1\n" + "L 0 200 500 200 3 0 0 0 -1 -1\n" + "L 500 200 600 100 3 0 0 0 -1 -1\n" + "L 600 100 500 0 3 0 0 0 -1 -1\n" + "L 500 0 0 0 3 0 0 0 -1 -1\n" + "T 0 300 5 10 0 0 0 0 1\n" + "device=INPUT\n" ) }, + + { wxT( "output-1.sym" ), + wxT( "v 20031231 1\n" + "P 0 100 200 100 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "}\n" + "L 200 200 200 0 3 0 0 0 -1 -1\n" + "L 200 200 700 200 3 0 0 0 -1 -1\n" + "L 700 200 800 100 3 0 0 0 -1 -1\n" + "L 800 100 700 0 3 0 0 0 -1 -1\n" + "L 700 0 200 0 3 0 0 0 -1 -1\n" + "T 100 300 5 10 0 0 0 0 1\n" + "device=OUTPUT\n" ) }, + + { wxT( "nc-right-1.sym" ), + wxT( "v 20060123 1\n" + "P 0 100 200 100 1 0 0\n" + "{\n" + "T 600 100 5 10 0 0 180 8 1\n" + "pinseq=1\n" + "T 600 300 5 10 0 0 180 8 1\n" + "pinnumber=1\n" + "}\n" + "L 200 0 200 200 3 0 0 0 -1 -1\n" + "T 100 500 8 10 0 0 0 0 1\n" + "value=NoConnection\n" + "T 250 100 9 10 1 0 0 1 1\n" + "NC\n" + "T 0 600 8 10 0 0 0 0 1\n" + "device=DRC_Directive\n" + "T 100 900 8 10 0 0 0 0 1\n" + "graphical=1\n" ) }, + + { wxT( "nc-left-1.sym" ), + wxT( "v 20060123 1\n" + "P 400 100 200 100 1 0 1\n" + "{\n" + "T 0 100 5 10 0 0 0 0 1\n" + "pinseq=1\n" + "T 0 300 5 10 0 0 0 0 1\n" + "pinnumber=1\n" + "}\n" + "L 200 0 200 200 3 0 0 0 -1 -1\n" + "T 100 500 8 10 0 0 0 0 1\n" + "value=NoConnection\n" + "T 50 100 9 10 1 0 0 5 1\n" + "NC\n" + "T 0 600 8 10 0 0 0 0 1\n" + "device=DRC_Directive\n" + "T 100 900 8 10 0 0 0 0 1\n" + "graphical=1\n" ) }, + + { wxT( "terminal-1.sym" ), + wxT( "v 20041228 1\n" + "T 310 750 8 10 0 0 0 0 1\n" + "device=terminal\n" + "P 560 100 900 100 1 0 1\n" + "{\n" + "T 660 150 5 10 0 0 0 0 1\n" + "pinseq=1\n" + "T 510 100 5 10 0 1 0 0 1\n" + "pinnumber=1\n" + "T 510 300 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "T 800 100 5 10 0 1 0 0 1\n" + "pinlabel=terminal\n" + "}\n" + "V 460 100 100 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "T 250 50 8 10 1 1 0 6 1\n" + "refdes=T?\n" ) }, + + // Power symbols + { wxT( "vcc-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "Vcc\n" + "T 450 200 8 10 0 0 0 0 1\n" + "net=Vcc:1\n" ) }, + + { wxT( "vdd-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "Vdd\n" + "T 450 200 8 10 0 0 0 0 1\n" + "net=Vdd:1\n" ) }, + + { wxT( "5V-plus-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "+5V\n" + "T 300 0 8 8 0 0 0 0 1\n" + "net=+5V:1\n" ) }, + + { wxT( "3.3V-plus-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "+3.3V\n" + "T 300 0 8 8 0 0 0 0 1\n" + "net=+3.3V:1\n" ) }, + + { wxT( "12V-plus-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "+12V\n" + "T 300 0 9 8 0 0 0 0 1\n" + "net=+12V:1\n" ) }, + + { wxT( "vcc-2.sym" ), + wxT( "v 20031231 1\n" + "V 200 350 50 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "P 200 300 200 0 1 0 1\n" + "{\n" + "T 300 50 5 10 0 1 0 0 1\n" + "pinnumber=1\n" + "T 300 50 5 10 0 0 0 0 1\n" + "pinseq=1\n" + "T 300 50 5 10 0 1 0 0 1\n" + "pinlabel=1\n" + "T 300 50 5 10 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "T 0 450 9 10 1 0 0 0 1\n" + "Vcc\n" + "T 400 300 8 8 0 0 0 0 1\n" + "net=Vcc:1\n" ) }, + + { wxT( "vss-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "Vss\n" + "T 450 200 8 10 0 0 0 0 1\n" + "net=Vss:1\n" ) }, + + { wxT( "vee-1.sym" ), + wxT( "v 20031231 1\n" + "P 200 0 200 200 1 0 0\n" + "{\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinnumber=1\n" + "T 250 50 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pinlabel=1\n" + "T 250 50 5 6 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 50 200 350 200 3 0 0 0 -1 -1\n" + "T 75 250 9 8 1 0 0 0 1\n" + "Vee\n" + "T 450 200 8 10 0 0 0 0 1\n" + "net=Vee:1\n" ) }, + + { wxT( "gnd-2.sym" ), + wxT( "v 20031231 1\n" + "P 100 100 100 300 1 0 1\n" + "{\n" + "T 158 161 5 4 0 1 0 0 1\n" + "pinnumber=1\n" + "T 158 161 5 4 0 0 0 0 1\n" + "pinseq=1\n" + "T 300 200 3 10 1 1 0 0 1\n" + "pinlabel=PGND\n" + "T 158 161 5 4 0 1 0 0 1\n" + "pintype=pwr\n" + "}\n" + "L 0 100 200 100 3 0 0 0 -1 -1\n" + "L 55 50 145 50 3 0 0 0 -1 -1\n" + "L 80 10 120 10 3 0 0 0 -1 -1\n" + "T 300 50 8 10 0 0 0 0 1\n" + "net=PGND:1\n" ) }, + + // Diodes + { wxT( "diode-1.sym" ), + wxT( "v 20031231 1\n" + "L 300 400 300 0 3 0 0 0 -1 -1\n" + "L 300 400 600 200 3 0 0 0 -1 -1\n" + "T 400 600 5 10 0 0 0 0 1\n" + "device=DIODE\n" + "L 600 200 300 0 3 0 0 0 -1 -1\n" + "L 600 400 600 0 3 0 0 0 -1 -1\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pinnumber=1\n" + "T 100 250 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 700 250 5 8 0 0 0 0 1\n" + "pinseq=2\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pinlabel=2\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "L 700 200 600 200 3 0 0 0 -1 -1\n" + "L 300 200 200 200 3 0 0 0 -1 -1\n" + "T 300 500 8 10 1 1 0 0 1\n" + "refdes=D?\n" ) }, + + { wxT( "zener-1.sym" ), + wxT( "v 20031231 1\n" + "L 300 400 300 0 3 0 0 0 -1 -1\n" + "L 600 200 300 0 3 0 0 0 -1 -1\n" + "L 600 200 300 400 3 0 0 0 -1 -1\n" + "T 400 600 5 10 0 0 0 0 1\n" + "device=ZENER_DIODE\n" + "L 600 400 600 0 3 0 0 0 -1 -1\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 700 250 5 8 0 0 0 0 1\n" + "pinseq=2\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pinlabel=2\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 200 200 0 200 1 0 1\n" + "{\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pinnumber=1\n" + "T 100 250 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 100 250 5 8 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "L 700 200 600 200 3 0 0 0 -1 -1\n" + "L 300 200 200 200 3 0 0 0 -1 -1\n" + "L 600 400 500 400 3 0 0 0 -1 -1\n" + "L 600 0 700 0 3 0 0 0 -1 -1\n" + "T 300 500 8 10 1 1 0 0 1\n" + "refdes=Z?\n" ) }, + + { wxT( "schottky-1.sym" ), + wxT( "v 20041228 1\n" + "L 300 400 300 0 3 0 0 0 -1 -1\n" + "L 300 400 600 200 3 0 0 0 -1 -1\n" + "T 322 672 8 10 0 0 0 0 1\n" + "device=DIODE\n" + "L 600 200 300 0 3 0 0 0 -1 -1\n" + "L 600 400 600 0 3 0 0 0 -1 -1\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 205 256 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 170 286 5 8 0 0 90 0 1\n" + "pinseq=2\n" + "T -10 81 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "T 75 288 5 10 0 1 90 0 1\n" + "pinlabel=anode\n" + "}\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 700 250 5 8 0 1 0 0 1\n" + "pinnumber=1\n" + "T 730 50 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 798 265 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "T 931 138 5 10 0 1 0 0 1\n" + "pinlabel=cathode\n" + "}\n" + "L 700 200 600 200 3 0 0 0 -1 -1\n" + "L 300 200 200 200 3 0 0 0 -1 -1\n" + "A 650 400 50 0 180 3 0 0 0 -1 -1\n" + "A 550 0 50 180 180 3 0 0 0 -1 -1\n" + "T 300 500 8 10 1 1 0 0 1\n" + "refdes=D?\n" + "T 567 515 8 10 0 0 0 0 1\n" + "numslots=0\n" ) }, + + { wxT( "led-1.sym" ), + wxT( "v 20210407 2\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 150 250 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 150 150 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 250 200 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 250 200 5 8 0 1 0 2 1\n" + "pintype=pas\n" + "}\n" + "P 900 200 700 200 1 0 0\n" + "{\n" + "T 750 250 5 8 1 1 0 0 1\n" + "pinnumber=2\n" + "T 750 150 5 8 0 1 0 2 1\n" + "pinseq=2\n" + "T 650 200 9 8 0 1 0 6 1\n" + "pinlabel=K\n" + "T 650 200 5 8 0 1 0 8 1\n" + "pintype=pas\n" + "}\n" + "L 400 300 500 200 3 0 0 0 -1 -1\n" + "L 500 200 400 100 3 0 0 0 -1 -1\n" + "L 400 300 400 100 3 0 0 0 -1 -1\n" + "L 500 300 500 100 3 0 0 0 -1 -1\n" + "L 500 200 700 200 3 0 0 0 -1 -1\n" + "L 400 200 200 200 3 0 0 0 -1 -1\n" + "V 450 200 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "T 800 600 5 10 0 0 0 0 1\n" + "device=LED\n" + "T 800 400 8 10 1 1 0 0 1\n" + "refdes=LED?\n" + "T 800 1000 5 10 0 0 0 0 1\n" + "numslots=0\n" + "T 800 800 5 10 0 0 0 0 1\n" + "symversion=0.2\n" ) }, + + // Transistors + { wxT( "npn-1.sym" ), + wxT( "v 20210407 2\n" + "L 200 800 200 200 3 0 0 0 -1 -1\n" + "T 600 500 5 10 0 0 0 0 1\n" + "device=NPN_TRANSISTOR\n" + "L 500 800 200 500 3 0 0 0 -1 -1\n" + "L 200 500 500 200 3 0 0 0 -1 -1\n" + "H 3 0 0 0 -1 -1 1 -1 -1 -1 -1 -1 5\n" + "M 410,240\n" + "L 501,200\n" + "L 455,295\n" + "L 435,265\n" + "z\n" + "P 0 500 200 500 1 0 0\n" + "{\n" + "T 100 550 5 6 1 1 0 0 1\n" + "pinnumber=B\n" + "T 100 550 5 6 0 0 0 0 1\n" + "pinseq=2\n" + "T 100 550 5 6 0 1 0 0 1\n" + "pinlabel=B\n" + "T 100 550 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 500 1000 500 800 1 0 0\n" + "{\n" + "T 400 850 5 6 1 1 0 0 1\n" + "pinnumber=C\n" + "T 400 850 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 400 850 5 6 0 1 0 0 1\n" + "pinlabel=C\n" + "T 400 850 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 500 200 500 0 1 0 1\n" + "{\n" + "T 400 50 5 6 1 1 0 0 1\n" + "pinnumber=E\n" + "T 400 50 5 6 0 0 0 0 1\n" + "pinseq=3\n" + "T 400 50 5 6 0 1 0 0 1\n" + "pinlabel=E\n" + "T 400 50 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "T 600 500 8 10 1 1 0 0 1\n" + "refdes=Q?\n" ) }, + + { wxT( "pnp-1.sym" ), + wxT( "v 20210407 2\n" + "L 200 800 200 200 3 0 0 0 -1 -1\n" + "T 600 500 5 10 0 0 0 0 1\n" + "device=PNP_TRANSISTOR\n" + "L 500 800 200 500 3 0 0 0 -1 -1\n" + "L 200 500 500 200 3 0 0 0 -1 -1\n" + "P 0 500 200 500 1 0 0\n" + "{\n" + "T 100 550 5 6 1 1 0 0 1\n" + "pinnumber=B\n" + "T 100 550 5 6 0 0 0 0 1\n" + "pinseq=2\n" + "T 100 550 5 6 0 1 0 0 1\n" + "pinlabel=B\n" + "T 100 550 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 500 1000 500 800 1 0 0\n" + "{\n" + "T 400 850 5 6 1 1 0 0 1\n" + "pinnumber=C\n" + "T 400 850 5 6 0 0 0 0 1\n" + "pinseq=1\n" + "T 400 850 5 6 0 1 0 0 1\n" + "pinlabel=C\n" + "T 400 850 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 500 200 500 0 1 0 1\n" + "{\n" + "T 400 50 5 6 1 1 0 0 1\n" + "pinnumber=E\n" + "T 400 50 5 6 0 0 0 0 1\n" + "pinseq=3\n" + "T 400 50 5 6 0 1 0 0 1\n" + "pinlabel=E\n" + "T 400 50 5 6 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "T 600 500 8 10 1 1 0 0 1\n" + "refdes=Q?\n" + "H 3 0 0 0 -1 -1 1 -1 -1 -1 -1 -1 5\n" + "M 340,290\n" + "L 300,401\n" + "L 395,355\n" + "L 365,335\n" + "z\n" ) }, + + { wxT( "nmos-1.sym" ), + wxT( "v 20210407 2\n" + "L 300 600 300 200 3 0 0 0 -1 -1\n" + "T 700 800 5 10 0 0 0 0 1\n" + "device=NMOS_TRANSISTOR\n" + "L 200 600 200 200 3 0 0 0 -1 -1\n" + "L 300 600 500 600 3 0 0 0 -1 -1\n" + "L 300 200 500 200 3 0 0 0 -1 -1\n" + "L 300 400 500 400 3 0 0 0 -1 -1\n" + "L 300 400 400 500 3 0 0 0 -1 -1\n" + "L 300 400 400 300 3 0 0 0 -1 -1\n" + "P 0 400 200 400 1 0 0\n" + "{\n" + "T 150 450 5 8 0 1 0 6 1\n" + "pinnumber=G\n" + "T 150 350 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 200 400 9 8 0 1 0 0 1\n" + "pinlabel=G\n" + "T 200 400 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 500 600 500 800 1 0 1\n" + "{\n" + "T 550 650 5 8 0 1 0 0 1\n" + "pinnumber=D\n" + "T 550 650 5 8 0 1 0 2 1\n" + "pinseq=1\n" + "T 500 600 9 8 0 1 0 5 1\n" + "pinlabel=D\n" + "T 500 400 5 8 0 1 0 5 1\n" + "pintype=pas\n" + "}\n" + "P 500 200 500 0 1 0 1\n" + "{\n" + "T 550 50 5 8 0 1 0 0 1\n" + "pinnumber=S\n" + "T 550 50 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 500 200 9 8 0 1 0 3 1\n" + "pinlabel=S\n" + "T 500 500 5 8 0 1 0 3 1\n" + "pintype=pas\n" + "}\n" + "T 700 600 8 10 1 1 0 0 1\n" + "refdes=Q?\n" + "T 700 1000 5 10 0 0 0 0 1\n" + "symversion=0.2\n" ) }, + + { wxT( "pmos-1.sym" ), + wxT( "v 20210407 2\n" + "L 300 600 300 200 3 0 0 0 -1 -1\n" + "T 600 200 5 10 0 0 0 0 1\n" + "device=PMOS_TRANSISTOR\n" + "L 200 600 200 200 3 0 0 0 -1 -1\n" + "L 300 600 500 600 3 0 0 0 -1 -1\n" + "L 300 200 500 200 3 0 0 0 -1 -1\n" + "L 300 400 500 400 3 0 0 0 -1 -1\n" + "L 500 400 400 300 3 0 0 0 -1 -1\n" + "L 500 400 400 500 3 0 0 0 -1 -1\n" + "P 500 600 500 800 1 0 1\n" + "{\n" + "T 300 700 5 10 0 1 0 0 1\n" + "pinnumber=D\n" + "T 300 700 5 10 0 0 0 0 1\n" + "pinseq=1\n" + "T 300 700 5 10 0 1 0 0 1\n" + "pinlabel=D\n" + "T 300 700 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 500 200 500 0 1 0 1\n" + "{\n" + "T 300 0 5 10 0 1 0 0 1\n" + "pinnumber=S\n" + "T 300 0 5 10 0 0 0 0 1\n" + "pinseq=3\n" + "T 300 0 5 10 0 1 0 0 1\n" + "pinlabel=S\n" + "T 300 0 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "P 200 400 0 400 1 0 1\n" + "{\n" + "T 0 500 5 10 0 1 0 0 1\n" + "pinnumber=G\n" + "T 0 500 5 10 0 0 0 0 1\n" + "pinseq=2\n" + "T 0 500 5 10 0 1 0 0 1\n" + "pinlabel=G\n" + "T 0 500 5 10 0 1 0 0 1\n" + "pintype=pas\n" + "}\n" + "T 700 600 8 10 1 1 0 0 1\n" + "refdes=Q?\n" + "T 1200 500 8 10 0 0 0 0 1\n" + "symversion=0.1\n" ) }, + + // Analog + { wxT( "opamp-1.sym" ), + wxT( "v 20050820 1\n" + "L 200 800 200 0 3 0 0 0 -1 -1\n" + "L 200 800 800 400 3 0 0 0 -1 -1\n" + "T 700 800 5 10 0 0 0 0 1\n" + "device=OPAMP\n" + "L 800 400 200 0 3 0 0 0 -1 -1\n" + "L 300 650 300 550 3 0 0 0 -1 -1\n" + "L 250 600 350 600 3 0 0 0 -1 -1\n" + "L 250 200 350 200 3 0 0 0 -1 -1\n" + "P 0 600 200 600 1 0 0\n" + "{\n" + "T 150 650 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 150 550 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 250 600 9 8 0 1 0 0 1\n" + "pinlabel=in+\n" + "T 250 600 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 0 200 200 200 1 0 0\n" + "{\n" + "T 150 250 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 150 150 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 250 200 9 8 0 1 0 0 1\n" + "pinlabel=in-\n" + "T 250 200 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 800 400 1000 400 1 0 1\n" + "{\n" + "T 800 450 5 8 1 1 0 0 1\n" + "pinnumber=5\n" + "T 800 350 5 8 0 1 0 2 1\n" + "pinseq=5\n" + "T 750 400 9 8 0 1 0 6 1\n" + "pinlabel=out\n" + "T 750 400 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "P 500 600 500 800 1 0 1\n" + "{\n" + "T 550 600 5 8 1 1 0 0 1\n" + "pinnumber=3\n" + "T 550 600 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 500 600 9 8 0 1 0 5 1\n" + "pinlabel=V+\n" + "T 500 550 5 8 0 1 0 5 1\n" + "pintype=pwr\n" + "}\n" + "P 500 200 500 0 1 0 1\n" + "{\n" + "T 550 100 5 8 1 1 0 0 1\n" + "pinnumber=4\n" + "T 550 100 5 8 0 1 0 2 1\n" + "pinseq=4\n" + "T 500 200 9 8 0 1 0 3 1\n" + "pinlabel=V-\n" + "T 500 300 5 8 0 1 0 3 1\n" + "pintype=pwr\n" + "}\n" + "T 700 600 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 700 1000 5 10 0 0 0 0 1\n" + "numslots=0\n" + "T 700 1400 5 10 0 0 0 0 1\n" + "symversion=0.1\n" ) }, + + { wxT( "inductor-1.sym" ), + wxT( "v 20210407 2\n" + "P 900 100 750 100 1 0 0\n" + "{\n" + "T 800 150 5 8 0 1 0 0 1\n" + "pinnumber=2\n" + "T 800 50 5 8 0 1 0 2 1\n" + "pinseq=2\n" + "T 700 100 9 8 0 1 0 6 1\n" + "pinlabel=2\n" + "T 700 100 5 8 0 1 0 8 1\n" + "pintype=pas\n" + "}\n" + "P 0 100 150 100 1 0 0\n" + "{\n" + "T 100 150 5 8 0 1 0 6 1\n" + "pinnumber=1\n" + "T 100 50 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 200 100 9 8 0 1 0 0 1\n" + "pinlabel=1\n" + "T 200 100 5 8 0 1 0 2 1\n" + "pintype=pas\n" + "}\n" + "A 237 100 75 0 180 3 0 0 0 -1 -1\n" + "A 379 100 75 0 180 3 0 0 0 -1 -1\n" + "A 521 100 75 0 180 3 0 0 0 -1 -1\n" + "A 663 100 75 0 180 3 0 0 0 -1 -1\n" + "T 200 500 5 10 0 0 0 0 1\n" + "device=INDUCTOR\n" + "T 200 300 8 10 1 1 0 0 1\n" + "refdes=L?\n" + "T 200 700 5 10 0 0 0 0 1\n" + "symversion=0.2\n" ) }, + + // 7400-series logic gates + { wxT( "7400-1.sym" ), + wxT( "v 20031231 1\n" + "L 300 200 300 800 3 0 0 0 -1 -1\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7400\n" + "L 300 800 700 800 3 0 0 0 -1 -1\n" + "T 500 900 5 10 0 0 0 0 1\n" + "device=7400\n" + "T 500 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 500 1300 5 10 0 0 0 0 1\n" + "numslots=4\n" + "T 500 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2,3\n" + "T 500 1700 5 10 0 0 0 0 1\n" + "slotdef=2:4,5,6\n" + "T 500 1900 5 10 0 0 0 0 1\n" + "slotdef=3:9,10,8\n" + "T 500 2100 5 10 0 0 0 0 1\n" + "slotdef=4:12,13,11\n" + "L 300 200 700 200 3 0 0 0 -1 -1\n" + "A 700 500 300 270 180 3 0 0 0 -1 -1\n" + "V 1050 500 50 6 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "P 1100 500 1300 500 1 0 1\n" + "{\n" + "T 1100 550 5 8 1 1 0 0 1\n" + "pinnumber=3\n" + "T 1100 450 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 950 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 950 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "P 300 300 0 300 1 0 1\n" + "{\n" + "T 200 350 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 200 250 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 350 300 9 8 0 1 0 0 1\n" + "pinlabel=B\n" + "T 350 300 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 300 700 0 700 1 0 1\n" + "{\n" + "T 200 750 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 200 650 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 350 700 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 700 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 500 2850 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 500 3050 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + { wxT( "7404-1.sym" ), + wxT( "v 20031231 1\n" + "L 300 800 800 500 3 0 0 0 -1 -1\n" + "T 600 900 5 10 0 0 0 0 1\n" + "device=7404\n" + "T 600 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 600 1300 5 10 0 0 0 0 1\n" + "numslots=6\n" + "T 600 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2\n" + "T 600 1700 5 10 0 0 0 0 1\n" + "slotdef=2:3,4\n" + "T 600 1900 5 10 0 0 0 0 1\n" + "slotdef=3:5,6\n" + "T 600 2100 5 10 0 0 0 0 1\n" + "slotdef=4:9,8\n" + "T 600 2300 5 10 0 0 0 0 1\n" + "slotdef=5:11,10\n" + "T 600 2500 5 10 0 0 0 0 1\n" + "slotdef=6:13,12\n" + "L 800 500 300 200 3 0 0 0 -1 -1\n" + "L 300 800 300 200 3 0 0 0 -1 -1\n" + "V 850 500 50 6 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "P 300 500 0 500 1 0 1\n" + "{\n" + "T 200 550 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 200 450 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 350 500 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 500 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 1100 500 900 500 1 0 0\n" + "{\n" + "T 900 550 5 8 1 1 0 0 1\n" + "pinnumber=2\n" + "T 900 450 5 8 0 1 0 2 1\n" + "pinseq=2\n" + "T 750 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 750 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7404\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 600 3100 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 600 3300 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + { wxT( "7408-1.sym" ), + wxT( "v 20031231 1\n" + "L 300 200 300 800 3 0 0 0 -1 -1\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7408\n" + "L 300 800 700 800 3 0 0 0 -1 -1\n" + "T 700 900 5 10 0 0 0 0 1\n" + "device=7408\n" + "T 700 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 700 1300 5 10 0 0 0 0 1\n" + "numslots=4\n" + "T 700 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2,3\n" + "T 700 1700 5 10 0 0 0 0 1\n" + "slotdef=2:4,5,6\n" + "T 700 1900 5 10 0 0 0 0 1\n" + "slotdef=3:9,10,8\n" + "T 700 2100 5 10 0 0 0 0 1\n" + "slotdef=4:12,13,11\n" + "L 300 200 700 200 3 0 0 0 -1 -1\n" + "A 700 500 300 270 180 3 0 0 0 -1 -1\n" + "P 1000 500 1300 500 1 0 1\n" + "{\n" + "T 1100 550 5 8 1 1 0 0 1\n" + "pinnumber=3\n" + "T 1100 450 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 950 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 950 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "P 300 700 0 700 1 0 1\n" + "{\n" + "T 200 750 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 200 650 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 350 700 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 700 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 300 300 0 300 1 0 1\n" + "{\n" + "T 200 350 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 200 250 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 350 300 9 8 0 1 0 0 1\n" + "pinlabel=B\n" + "T 350 300 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 700 2700 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 700 2900 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + { wxT( "7432-1.sym" ), + wxT( "v 20031231 1\n" + "L 260 200 600 200 3 0 0 0 -1 -1\n" + "L 260 800 600 800 3 0 0 0 -1 -1\n" + "T 600 900 5 10 0 0 0 0 1\n" + "device=7432\n" + "T 600 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 600 1300 5 10 0 0 0 0 1\n" + "numslots=4\n" + "T 600 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2,3\n" + "T 600 1700 5 10 0 0 0 0 1\n" + "slotdef=2:4,5,6\n" + "T 600 1900 5 10 0 0 0 0 1\n" + "slotdef=3:9,10,8\n" + "T 600 2100 5 10 0 0 0 0 1\n" + "slotdef=4:12,13,11\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7432\n" + "A 0 500 400 312 97 3 0 0 0 -1 -1\n" + "P 300 700 0 700 1 0 1\n" + "{\n" + "T 200 750 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 200 650 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 350 700 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 700 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 300 300 0 300 1 0 1\n" + "{\n" + "T 200 350 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 200 250 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 350 300 9 8 0 1 0 0 1\n" + "pinlabel=B\n" + "T 350 300 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 1300 500 988 500 1 0 0\n" + "{\n" + "T 1100 550 5 8 1 1 0 0 1\n" + "pinnumber=3\n" + "T 1100 450 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 950 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 950 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "A 600 600 400 270 76 3 0 0 0 -1 -1\n" + "A 600 400 400 14 76 3 0 0 0 -1 -1\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 600 2700 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 600 2900 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + { wxT( "7486-1.sym" ), + wxT( "v 20031231 1\n" + "L 260 200 600 200 3 0 0 0 -1 -1\n" + "L 260 800 600 800 3 0 0 0 -1 -1\n" + "T 700 900 5 10 0 0 0 0 1\n" + "device=7486\n" + "T 700 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 700 1300 5 10 0 0 0 0 1\n" + "numslots=4\n" + "T 700 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2,3\n" + "T 700 1700 5 10 0 0 0 0 1\n" + "slotdef=2:4,5,6\n" + "T 700 1900 5 10 0 0 0 0 1\n" + "slotdef=3:9,10,8\n" + "T 700 2100 5 10 0 0 0 0 1\n" + "slotdef=4:12,13,11\n" + "A 0 500 400 312 97 3 0 0 0 -1 -1\n" + "A -100 500 400 312 97 3 0 0 0 -1 -1\n" + "P 300 700 0 700 1 0 1\n" + "{\n" + "T 150 750 5 8 1 1 0 6 1\n" + "pinnumber=1\n" + "T 150 650 5 8 0 1 0 8 1\n" + "pinseq=1\n" + "T 350 700 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 700 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 300 300 0 300 1 0 1\n" + "{\n" + "T 150 350 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 150 250 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 350 300 9 8 0 1 0 0 1\n" + "pinlabel=B\n" + "T 350 300 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 988 500 1300 500 1 0 1\n" + "{\n" + "T 1100 550 5 8 1 1 0 0 1\n" + "pinnumber=3\n" + "T 1100 450 5 8 0 1 0 2 1\n" + "pinseq=3\n" + "T 950 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 950 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "A 600 600 400 270 76 3 0 0 0 -1 -1\n" + "A 600 400 400 14 76 3 0 0 0 -1 -1\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7486\n" + "T 700 2700 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 700 2900 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + { wxT( "7402-1.sym" ), + wxT( "v 20031231 1\n" + "L 260 200 600 200 3 0 0 0 -1 -1\n" + "L 260 800 600 800 3 0 0 0 -1 -1\n" + "T 600 900 5 10 0 0 0 0 1\n" + "device=7402\n" + "T 600 1100 5 10 0 0 0 0 1\n" + "slot=1\n" + "T 600 1300 5 10 0 0 0 0 1\n" + "numslots=4\n" + "T 600 1500 5 10 0 0 0 0 1\n" + "slotdef=1:1,2,3\n" + "T 600 1700 5 10 0 0 0 0 1\n" + "slotdef=2:4,5,6\n" + "T 600 1900 5 10 0 0 0 0 1\n" + "slotdef=3:10,8,9\n" + "T 600 2100 5 10 0 0 0 0 1\n" + "slotdef=4:13,11,12\n" + "T 300 0 9 8 1 0 0 0 1\n" + "7402\n" + "A 0 500 400 312 97 3 0 0 0 -1 -1\n" + "P 300 700 0 700 1 0 1\n" + "{\n" + "T 200 750 5 8 1 1 0 6 1\n" + "pinnumber=3\n" + "T 200 650 5 8 0 1 0 8 1\n" + "pinseq=3\n" + "T 350 700 9 8 0 1 0 0 1\n" + "pinlabel=B\n" + "T 350 700 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "P 300 300 0 300 1 0 1\n" + "{\n" + "T 200 350 5 8 1 1 0 6 1\n" + "pinnumber=2\n" + "T 200 250 5 8 0 1 0 8 1\n" + "pinseq=2\n" + "T 350 300 9 8 0 1 0 0 1\n" + "pinlabel=A\n" + "T 350 300 5 8 0 1 0 2 1\n" + "pintype=in\n" + "}\n" + "V 1038 500 50 6 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "P 1300 500 1088 500 1 0 0\n" + "{\n" + "T 1100 550 5 8 1 1 0 0 1\n" + "pinnumber=1\n" + "T 1100 450 5 8 0 1 0 2 1\n" + "pinseq=1\n" + "T 950 500 9 8 0 1 0 6 1\n" + "pinlabel=Y\n" + "T 950 500 5 8 0 1 0 8 1\n" + "pintype=out\n" + "}\n" + "A 600 600 400 270 76 3 0 0 0 -1 -1\n" + "A 600 400 400 14 76 3 0 0 0 -1 -1\n" + "T 300 900 8 10 1 1 0 0 1\n" + "refdes=U?\n" + "T 600 2700 5 10 0 0 0 0 1\n" + "net=Vcc:14\n" + "T 600 2900 5 10 0 0 0 0 1\n" + "net=GND:7\n" ) }, + + // Miscellaneous + { wxT( "busripper-1.sym" ), + wxT( "v 20031231 1\n" + "T 0 400 5 8 0 0 0 0 1\n" + "device=none\n" + "P 0 0 100 100 1 0 0\n" + "{\n" + "T 0 500 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 0 600 5 8 0 0 0 0 1\n" + "pinnumber=1\n" + "T 0 700 5 8 0 0 0 0 1\n" + "pintype=pas\n" + "T 0 800 5 8 0 0 0 0 1\n" + "pinlabel=netside\n" + "}\n" + "T 0 300 5 8 0 0 0 0 1\n" + "graphical=1\n" + "L 200 200 100 100 10 30 0 0 -1 -1\n" ) }, + + { wxT( "busripper-2.sym" ), + wxT( "v 20031231 1\n" + "T 0 400 5 8 0 0 0 0 1\n" + "device=none\n" + "P 0 0 0 100 1 0 0\n" + "{\n" + "T 0 500 5 8 0 0 0 0 1\n" + "pinseq=1\n" + "T 0 600 5 8 0 0 0 0 1\n" + "pinnumber=1\n" + "T 0 700 5 8 0 0 0 0 1\n" + "pintype=pas\n" + "T 0 800 5 8 0 0 0 0 1\n" + "pinlabel=netside\n" + "}\n" + "T 0 300 5 8 0 0 0 0 1\n" + "graphical=1\n" + "L 0 100 100 200 3 0 0 0 -1 -1\n" + "L 0 100 -100 200 3 0 0 0 -1 -1\n" ) }, + + { wxT( "title-B.sym" ), + wxT( "v 20031231 1\n" + "B 0 0 17000 11000 15 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "T 14400 1500 5 10 0 0 0 0 1\n" + "graphical=1\n" + "L 12900 600 12900 0 15 0 0 0 -1 -1\n" + "T 9500 400 15 8 1 0 0 0 1\n" + "FILE:\n" + "T 13000 400 15 8 1 0 0 0 1\n" + "REVISION:\n" + "T 13000 100 15 8 1 0 0 0 1\n" + "DRAWN BY:\n" + "T 9500 100 15 8 1 0 0 0 1\n" + "PAGE\n" + "T 11200 100 15 8 1 0 0 0 1\n" + "OF\n" + "T 9500 700 15 8 1 0 0 0 1\n" + "TITLE\n" + "B 9400 0 7600 1400 15 0 0 0 -1 -1 0 -1 -1 -1 -1 -1\n" + "L 9400 600 17000 600 15 0 0 0 -1 -1\n" ) }, + }; + + return symbols; +} + + +// ========================================================================== +// Construction +// ========================================================================== + +SCH_IO_GEDA::SCH_IO_GEDA() : + SCH_IO( wxS( "gEDA/gschem Schematic" ) ), + m_screen( nullptr ), + m_rootSheet( nullptr ), + m_schematic( nullptr ), + m_maxY( 0 ), + m_releaseVersion( 0 ), + m_fileFormatVersion( 0 ), + m_symLibraryInitialized( false ), + m_powerCounter( 0 ), + m_properties( nullptr ) +{ + m_reporter = &WXLOG_REPORTER::GetInstance(); +} + + +SCH_IO_GEDA::~SCH_IO_GEDA() = default; + + +// ========================================================================== +// Format detection +// ========================================================================== + +bool SCH_IO_GEDA::CanReadSchematicFile( const wxString& aFileName ) const +{ + wxFileName fn( aFileName ); + + if( fn.GetExt().CmpNoCase( wxT( "sch" ) ) != 0 ) + return false; + + wxTextFile file; + + if( !file.Open( aFileName ) ) + return false; + + if( file.GetLineCount() == 0 ) + return false; + + wxString firstLine = file.GetFirstLine().Trim( false ); + + if( !firstLine.StartsWith( wxT( "v " ) ) ) + return false; + + wxStringTokenizer tok( firstLine ); + tok.GetNextToken(); // skip 'v' + + if( !tok.HasMoreTokens() ) + return false; + + wxString dateStr = tok.GetNextToken(); + + if( dateStr.length() != 8 ) + return false; + + long dateVal = 0; + return dateStr.ToLong( &dateVal ) && dateVal >= 19700101; +} + + +// ========================================================================== +// Coordinate transformation +// ========================================================================== + +int SCH_IO_GEDA::toKiCadDist( int aMils ) const +{ + return aMils * MILS_TO_IU; +} + + +VECTOR2I SCH_IO_GEDA::toKiCad( int aGedaX, int aGedaY ) const +{ + return VECTOR2I( aGedaX * MILS_TO_IU, ( m_maxY - aGedaY ) * MILS_TO_IU ); +} + + +// ========================================================================== +// Version parsing +// ========================================================================== + +bool SCH_IO_GEDA::parseVersionLine( const wxString& aLine ) +{ + wxStringTokenizer tokenizer( aLine ); + + if( tokenizer.CountTokens() < 2 ) + return false; + + wxString v = tokenizer.GetNextToken(); + + if( v != wxT( "v" ) ) + return false; + + wxString dateStr = tokenizer.GetNextToken(); + dateStr.ToLong( &m_releaseVersion ); + + if( m_releaseVersion < 19700101 ) + return false; + + // File format version is optional in very old files + if( tokenizer.HasMoreTokens() ) + tokenizer.GetNextToken().ToLong( &m_fileFormatVersion ); + else + m_fileFormatVersion = 0; + + return true; +} + + +// ========================================================================== +// Attribute parsing +// ========================================================================== + +std::vector SCH_IO_GEDA::parseAttributes( wxTextFile& aFile, + size_t& aLineIdx ) +{ + std::vector attrs; + + while( aLineIdx < aFile.GetLineCount() ) + { + wxString line = aFile.GetLine( aLineIdx ); + + if( line.Trim() == wxT( "}" ) ) + { + aLineIdx++; + break; + } + + if( line.StartsWith( wxT( "T " ) ) ) + { + // T x y color size visibility show_name_value angle alignment num_lines + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'T' + + long x = 0, y = 0, color = 0, size = 0, vis = 0, showNV = 0, angle = 0, align = 0; + long numLines = 1; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &size ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &vis ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &showNV ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &angle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &align ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &numLines ); + + aLineIdx++; + + wxString textContent; + + for( long i = 0; i < numLines && aLineIdx < aFile.GetLineCount(); i++ ) + { + if( i > 0 ) + textContent += wxT( "\n" ); + + textContent += aFile.GetLine( aLineIdx ); + aLineIdx++; + } + + int eqPos = textContent.Find( '=' ); + + if( eqPos != wxNOT_FOUND ) + { + GEDA_ATTR attr; + attr.name = textContent.Left( eqPos ); + attr.value = textContent.Mid( eqPos + 1 ); + + // Strip surrounding double quotes from attribute values + if( attr.value.length() >= 2 + && attr.value.StartsWith( wxT( "\"" ) ) + && attr.value.EndsWith( wxT( "\"" ) ) ) + { + attr.value = attr.value.Mid( 1, attr.value.length() - 2 ); + } + + attr.x = static_cast( x ); + attr.y = static_cast( y ); + attr.size = static_cast( size ); + attr.angle = static_cast( angle ); + attr.align = static_cast( align ); + attr.visible = ( vis == 1 ); + attr.showNV = static_cast( showNV ); + attrs.push_back( attr ); + } + + continue; + } + + aLineIdx++; + } + + return attrs; +} + + +wxString SCH_IO_GEDA::findAttr( const std::vector& aAttrs, + const wxString& aName ) const +{ + for( const GEDA_ATTR& attr : aAttrs ) + { + if( attr.name == aName ) + return attr.value; + } + + return wxEmptyString; +} + + +const SCH_IO_GEDA::GEDA_ATTR* SCH_IO_GEDA::findAttrStruct( const std::vector& aAttrs, + const wxString& aName ) const +{ + for( const GEDA_ATTR& attr : aAttrs ) + { + if( attr.name == aName ) + return &attr; + } + + return nullptr; +} + + +std::vector SCH_IO_GEDA::maybeParseAttributes( wxTextFile& aFile, + size_t& aLineIdx ) +{ + if( aLineIdx < aFile.GetLineCount() && aFile.GetLine( aLineIdx ).Trim() == wxT( "{" ) ) + { + aLineIdx++; + return parseAttributes( aFile, aLineIdx ); + } + + return {}; +} + + +// ========================================================================== +// Style mapping +// ========================================================================== + +LINE_STYLE SCH_IO_GEDA::toLineStyle( int aDashStyle ) +{ + switch( aDashStyle ) + { + case 1: return LINE_STYLE::DOT; + case 2: return LINE_STYLE::DASH; + case 3: return LINE_STYLE::DASHDOT; + case 4: return LINE_STYLE::DASHDOTDOT; + default: return LINE_STYLE::DEFAULT; + } +} + + +FILL_T SCH_IO_GEDA::toFillType( int aFillType ) +{ + switch( aFillType ) + { + case 1: return FILL_T::FILLED_SHAPE; + case 2: return FILL_T::CROSS_HATCH; + case 3: return FILL_T::HATCH; + default: return FILL_T::NO_FILL; + } +} + + +// ========================================================================== +// Orientation mapping +// ========================================================================== + +int SCH_IO_GEDA::toKiCadOrientation( int aAngle, int aMirror ) const +{ + int orientation = SYM_ORIENT_0; + + switch( aAngle ) + { + case 0: orientation = SYM_ORIENT_0; break; + case 90: orientation = SYM_ORIENT_90; break; + case 180: orientation = SYM_ORIENT_180; break; + case 270: orientation = SYM_ORIENT_270; break; + default: orientation = SYM_ORIENT_0; break; + } + + if( aMirror ) + orientation |= SYM_MIRROR_Y; + + return orientation; +} + + +wxString SCH_IO_GEDA::getLibName() const +{ + wxString libName; + + if( m_schematic ) + libName = m_schematic->Project().GetProjectName(); + + if( libName.IsEmpty() ) + libName = m_filename.GetName(); + + if( libName.IsEmpty() ) + libName = wxT( "noname" ); + + libName += wxT( "-geda-import" ); + libName = LIB_ID::FixIllegalChars( libName, true ).wx_str(); + return libName; +} + + +// ========================================================================== +// Object parsers - connectivity +// ========================================================================== + +void SCH_IO_GEDA::parseComponent( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // Flush any previous pending component before starting a new one + flushPendingComponent(); + + // C x y selectable angle mirror basename.sym + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'C' + + long x = 0, y = 0, selectable = 0, angle = 0, mirror = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &selectable ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &angle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &mirror ); + + wxString basename; + + if( tok.HasMoreTokens() ) + basename = tok.GetNextToken(); + + // gEDA prefixes embedded component basenames with "EMBEDDED" + if( basename.StartsWith( wxT( "EMBEDDED" ) ) ) + basename = basename.Mid( 8 ); + + m_pendingComp = std::make_unique(); + m_pendingComp->basename = basename; + m_pendingComp->x = static_cast( x ); + m_pendingComp->y = static_cast( y ); + m_pendingComp->selectable = static_cast( selectable ); + m_pendingComp->angle = static_cast( angle ); + m_pendingComp->mirror = static_cast( mirror ); + + m_pendingComp->attrs = maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parseNet( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // N x1 y1 x2 y2 color + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'N' + + long x1 = 0, y1 = 0, x2 = 0, y2 = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y2 ); + + VECTOR2I start = toKiCad( static_cast( x1 ), static_cast( y1 ) ); + VECTOR2I end = toKiCad( static_cast( x2 ), static_cast( y2 ) ); + + auto wire = std::make_unique( start, LAYER_WIRE ); + wire->SetEndPoint( end ); + m_screen->Append( wire.release() ); + + trackEndpoint( static_cast( x1 ), static_cast( y1 ) ); + trackEndpoint( static_cast( x2 ), static_cast( y2 ) ); + + std::vector attrs = maybeParseAttributes( aFile, aLineIdx ); + wxString netname = findAttr( attrs, wxT( "netname" ) ); + + if( !netname.IsEmpty() ) + { + auto label = std::make_unique( start, netname ); + int textSize = toKiCadDist( GEDA_DEFAULT_TEXT_SIZE_MILS / 2 ); + label->SetTextSize( VECTOR2I( textSize, textSize ) ); + m_screen->Append( label.release() ); + } +} + + +void SCH_IO_GEDA::parseBus( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // U x1 y1 x2 y2 color [ripperdir] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'U' + + long x1 = 0, y1 = 0, x2 = 0, y2 = 0, color = 0, ripperDir = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20020825 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &ripperDir ); + } + + VECTOR2I start = toKiCad( static_cast( x1 ), static_cast( y1 ) ); + VECTOR2I end = toKiCad( static_cast( x2 ), static_cast( y2 ) ); + + auto line = std::make_unique( start, LAYER_BUS ); + line->SetEndPoint( end ); + m_screen->Append( line.release() ); + + m_busSegments.push_back( { start, end, static_cast( ripperDir ) } ); + + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parsePin( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // P x1 y1 x2 y2 color [pintype whichend] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'P' + + long x1 = 0, y1 = 0, x2 = 0, y2 = 0, color = 0, pintype = 0, whichend = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20020825 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pintype ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &whichend ); + } + + VECTOR2I start = toKiCad( static_cast( x1 ), static_cast( y1 ) ); + VECTOR2I end = toKiCad( static_cast( x2 ), static_cast( y2 ) ); + + // In schematic context, pin lines become wire stubs for connectivity + auto wire = std::make_unique( start, LAYER_WIRE ); + wire->SetEndPoint( end ); + m_screen->Append( wire.release() ); + + VECTOR2I connPt = ( whichend == 0 ) ? start : end; + int connX = ( whichend == 0 ) ? static_cast( x1 ) : static_cast( x2 ); + int connY = ( whichend == 0 ) ? static_cast( y1 ) : static_cast( y2 ); + trackEndpoint( connX, connY ); + + std::vector attrs = maybeParseAttributes( aFile, aLineIdx ); + + wxString pinlabel = findAttr( attrs, wxT( "pinlabel" ) ); + + if( !pinlabel.IsEmpty() ) + { + auto label = std::make_unique( connPt, pinlabel ); + int textSize = toKiCadDist( GEDA_DEFAULT_TEXT_SIZE_MILS / 2 ); + label->SetTextSize( VECTOR2I( textSize, textSize ) ); + m_screen->Append( label.release() ); + } +} + + +void SCH_IO_GEDA::parseEmbeddedComponent( wxTextFile& aFile, size_t& aLineIdx ) +{ + if( !m_pendingComp ) + return; + + auto libSym = std::make_unique( m_pendingComp->basename ); + + // Parse until ] closing bracket + while( aLineIdx < aFile.GetLineCount() ) + { + wxString line = aFile.GetLine( aLineIdx ); + + if( line.Trim() == wxT( "]" ) ) + { + aLineIdx++; + break; + } + + if( line.IsEmpty() ) + { + aLineIdx++; + continue; + } + + wxChar type = line[0]; + aLineIdx++; + + switch( type ) + { + case 'P': + { + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'P' + long px1 = 0, py1 = 0, px2 = 0, py2 = 0, pc = 0, pt = 0, pw = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &px1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &py1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &px2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &py2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pc ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pt ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pw ); + + std::vector pinAttrs = maybeParseAttributes( aFile, aLineIdx ); + addSymbolPin( *libSym, static_cast( px1 ), static_cast( py1 ), + static_cast( px2 ), static_cast( py2 ), + static_cast( pw ), pinAttrs ); + break; + } + + case 'L': + case 'B': + case 'V': + case 'A': + case 'H': + addSymbolGraphic( *libSym, line, aFile, aLineIdx, type ); + break; + + case 'T': + { + // Skip text lines in embedded symbols (they're attribute text) + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'T' + long numLines = 1; + + // Parse enough to get numLines (9th field) + for( int i = 0; i < 8 && tok.HasMoreTokens(); i++ ) + { + if( i == 7 ) + tok.GetNextToken().ToLong( &numLines ); + else + tok.GetNextToken(); + } + + for( long i = 0; i < numLines && aLineIdx < aFile.GetLineCount(); i++ ) + aLineIdx++; + + maybeParseAttributes( aFile, aLineIdx ); + break; + } + + case '{': + { + // Skip nested attribute block + while( aLineIdx < aFile.GetLineCount() ) + { + if( aFile.GetLine( aLineIdx ).Trim() == wxT( "}" ) ) + { + aLineIdx++; + break; + } + + aLineIdx++; + } + + break; + } + + case 'v': + default: + break; + } + } + + m_pendingComp->embedded = true; + m_pendingComp->embeddedSym = std::move( libSym ); +} + + +// ========================================================================== +// Object parsers - graphics +// ========================================================================== + +void SCH_IO_GEDA::parseText( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // T x y color size visibility show_name_value angle alignment num_lines + // Old formats may omit alignment and/or num_lines fields + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'T' + + long x = 0, y = 0, color = 0, size = 0, vis = 0, showNV = 0, angle = 0, align = 0; + long numLines = 1; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &size ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &vis ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &showNV ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &angle ); + + if( m_fileFormatVersion >= 1 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &align ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &numLines ); + } + else if( m_releaseVersion >= 20000220 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &align ); + + numLines = 1; + } + else + { + align = 0; + numLines = 1; + } + + wxString textContent; + + for( long i = 0; i < numLines && aLineIdx < aFile.GetLineCount(); i++ ) + { + if( i > 0 ) + textContent += wxT( "\n" ); + + textContent += aFile.GetLine( aLineIdx ); + aLineIdx++; + } + + textContent = convertOverbars( textContent ); + + if( vis == 0 ) + { + maybeParseAttributes( aFile, aLineIdx ); + return; + } + + // Handle attribute text (contains '=') with show_name_value field + int eqPos = textContent.Find( '=' ); + + if( eqPos != wxNOT_FOUND ) + { + wxString name = textContent.Left( eqPos ); + wxString value = textContent.Mid( eqPos + 1 ); + + switch( static_cast( showNV ) ) + { + case 1: textContent = value; break; + case 2: textContent = name; break; + default: textContent = name + wxT( "=" ) + value; break; + } + } + + VECTOR2I pos = toKiCad( static_cast( x ), static_cast( y ) ); + + auto text = std::make_unique( pos, textContent ); + + int textSize = toKiCadDist( static_cast( size ) * 10 ); + + if( textSize < toKiCadDist( 10 ) ) + textSize = toKiCadDist( 10 ); + + text->SetTextSize( VECTOR2I( textSize, textSize ) ); + + // gEDA allows arbitrary angles but KiCad text only supports orthogonal. + // Snap to the nearest 90-degree increment. + int normAngle = ( ( static_cast( angle ) % 360 ) + 360 ) % 360; + int snapped = ( ( normAngle + 45 ) / 90 ) * 90; + + if( snapped == 360 ) + snapped = 0; + + switch( snapped ) + { + case 90: text->SetTextAngle( ANGLE_90 ); break; + case 180: text->SetTextAngle( ANGLE_180 ); break; + case 270: text->SetTextAngle( ANGLE_270 ); break; + default: break; + } + + // Horizontal alignment: gEDA align / 3 gives column (0=left, 1=center, 2=right) + switch( static_cast( align ) / 3 ) + { + case 1: text->SetHorizJustify( GR_TEXT_H_ALIGN_CENTER ); break; + case 2: text->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT ); break; + default: text->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT ); break; + } + + // Vertical alignment: gEDA align % 3 gives row (0=bottom, 1=middle, 2=top) + switch( static_cast( align ) % 3 ) + { + case 1: text->SetVertJustify( GR_TEXT_V_ALIGN_CENTER ); break; + case 2: text->SetVertJustify( GR_TEXT_V_ALIGN_TOP ); break; + default: text->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM ); break; + } + + m_screen->Append( text.release() ); + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parseLine( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // L x1 y1 x2 y2 color [width capstyle dashstyle dashlength dashspace] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'L' + + long x1 = 0, y1 = 0, x2 = 0, y2 = 0, color = 0, width = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20000704 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &width ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + } + + VECTOR2I start = toKiCad( static_cast( x1 ), static_cast( y1 ) ); + VECTOR2I end = toKiCad( static_cast( x2 ), static_cast( y2 ) ); + + auto line = std::make_unique( start, LAYER_NOTES ); + line->SetEndPoint( end ); + line->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( width ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + m_screen->Append( line.release() ); + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parseBox( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // B x y width height color [linewidth capstyle dashstyle dashlength dashspace + // filltype fillwidth a1 p1 a2 p2] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'B' + + long x = 0, y = 0, w = 0, h = 0, color = 0, linewidth = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + long filltype = 0, fillwidth = 0, a1 = 0, p1 = 0, a2 = 0, p2 = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &w ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &h ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20000704 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &fillwidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p2 ); + } + + VECTOR2I topLeft = toKiCad( static_cast( x ), static_cast( y + h ) ); + VECTOR2I botRight = toKiCad( static_cast( x + w ), static_cast( y ) ); + + auto rect = std::make_unique( SHAPE_T::RECTANGLE, LAYER_NOTES ); + rect->SetStart( topLeft ); + rect->SetEnd( botRight ); + rect->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + + FILL_T fill = toFillType( static_cast( filltype ) ); + + if( fill != FILL_T::NO_FILL ) + { + rect->SetFilled( true ); + rect->SetFillMode( fill ); + } + + m_screen->Append( rect.release() ); + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parseCircle( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // V cx cy radius color [linewidth capstyle dashstyle dashlength dashspace + // filltype fillwidth a1 p1 a2 p2] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'V' + + long cx = 0, cy = 0, radius = 0, color = 0, linewidth = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + long filltype = 0, fillwidth = 0, a1 = 0, p1 = 0, a2 = 0, p2 = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cx ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cy ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &radius ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20000704 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &fillwidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p2 ); + } + + VECTOR2I center = toKiCad( static_cast( cx ), static_cast( cy ) ); + + auto circle = std::make_unique( SHAPE_T::CIRCLE, LAYER_NOTES ); + circle->SetCenter( center ); + circle->SetEnd( VECTOR2I( center.x + toKiCadDist( static_cast( radius ) ), center.y ) ); + circle->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + + FILL_T fill = toFillType( static_cast( filltype ) ); + + if( fill != FILL_T::NO_FILL ) + { + circle->SetFilled( true ); + circle->SetFillMode( fill ); + } + + m_screen->Append( circle.release() ); + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parseArc( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // A cx cy radius startangle sweepangle color [linewidth capstyle dashstyle dashlength dashspace] + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'A' + + long cx = 0, cy = 0, radius = 0, startAngle = 0, sweepAngle = 0; + long color = 0, linewidth = 0, capstyle = 0, dashstyle = 0; + long dashlength = 0, dashspace = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cx ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cy ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &radius ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &startAngle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &sweepAngle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + + if( m_releaseVersion > 20000704 ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + } + + VECTOR2I center = toKiCad( static_cast( cx ), static_cast( cy ) ); + int r = toKiCadDist( static_cast( radius ) ); + + double startRad = DEG2RAD( static_cast( startAngle ) ); + double endRad = DEG2RAD( static_cast( startAngle + sweepAngle ) ); + + // Y-flip negates the Y component of angle calculations + VECTOR2I arcStart( center.x + KiROUND( r * cos( startRad ) ), + center.y - KiROUND( r * sin( startRad ) ) ); + VECTOR2I arcEnd( center.x + KiROUND( r * cos( endRad ) ), + center.y - KiROUND( r * sin( endRad ) ) ); + + auto arc = std::make_unique( SHAPE_T::ARC, LAYER_NOTES ); + arc->SetCenter( center ); + + // Y-flip reverses angular sweep direction, so swap start and end + // to preserve the original arc visual appearance. + arc->SetStart( arcEnd ); + arc->SetEnd( arcStart ); + + arc->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + m_screen->Append( arc.release() ); + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parsePath( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // H color width capstyle dashstyle dashlength dashspace + // filltype fillwidth a1 p1 a2 p2 numlines + // followed by numlines of SVG-style path data + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'H' + + long color = 0, width = 0, capstyle = 0, dashstyle = 0; + long dashlength = 0, dashspace = 0, filltype = 0, fillwidth = 0; + long a1 = 0, p1 = 0, a2 = 0, p2 = 0, numlines = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &width ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &fillwidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &numlines ); + + // Collect all path data lines + wxString pathData; + + for( long i = 0; i < numlines && aLineIdx < aFile.GetLineCount(); i++ ) + { + if( i > 0 ) + pathData += wxT( " " ); + + pathData += aFile.GetLine( aLineIdx ).Trim(); + aLineIdx++; + } + + VECTOR2I startPt; + VECTOR2I currentPt; + STROKE_PARAMS stroke( toKiCadDist( static_cast( width ) ), + toLineStyle( static_cast( dashstyle ) ) ); + + auto emitSeg = [&]( const VECTOR2I& aFrom, const VECTOR2I& aTo ) + { + auto seg = std::make_unique( aFrom, LAYER_NOTES ); + seg->SetEndPoint( aTo ); + seg->SetStroke( stroke ); + m_screen->Append( seg.release() ); + }; + + wxStringTokenizer pathTok( pathData, wxT( " ,\t" ) ); + + // For relative (lowercase) SVG commands, deltas are in gEDA mils (Y-up). + // Convert to KiCad IU (Y-down) by scaling X and negating+scaling Y. + auto relToAbs = [&]( long dx, long dy ) -> VECTOR2I + { + return currentPt + VECTOR2I( static_cast( dx ) * MILS_TO_IU, + -static_cast( dy ) * MILS_TO_IU ); + }; + + while( pathTok.HasMoreTokens() ) + { + wxString token = pathTok.GetNextToken(); + + if( token == wxT( "M" ) ) + { + long px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + currentPt = toKiCad( static_cast( px ), static_cast( py ) ); + startPt = currentPt; + } + } + else if( token == wxT( "m" ) ) + { + long dx = 0, dy = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dx ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dy ) ) + { + currentPt = relToAbs( dx, dy ); + startPt = currentPt; + } + } + else if( token == wxT( "L" ) ) + { + long px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + VECTOR2I pt = toKiCad( static_cast( px ), static_cast( py ) ); + emitSeg( currentPt, pt ); + currentPt = pt; + } + } + else if( token == wxT( "l" ) ) + { + long dx = 0, dy = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dx ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dy ) ) + { + VECTOR2I pt = relToAbs( dx, dy ); + emitSeg( currentPt, pt ); + currentPt = pt; + } + } + else if( token == wxT( "C" ) ) + { + long cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + VECTOR2I cp1 = toKiCad( static_cast( cx1 ), static_cast( cy1 ) ); + VECTOR2I cp2 = toKiCad( static_cast( cx2 ), static_cast( cy2 ) ); + VECTOR2I endPt = toKiCad( static_cast( px ), static_cast( py ) ); + + auto bezier = std::make_unique( SHAPE_T::BEZIER, LAYER_NOTES ); + bezier->SetStart( currentPt ); + bezier->SetBezierC1( cp1 ); + bezier->SetBezierC2( cp2 ); + bezier->SetEnd( endPt ); + bezier->SetStroke( stroke ); + bezier->RebuildBezierToSegmentsPointsList( + schIUScale.mmToIU( ARC_LOW_DEF_MM ) ); + m_screen->Append( bezier.release() ); + currentPt = endPt; + } + } + else if( token == wxT( "c" ) ) + { + long cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, dx = 0, dy = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dx ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &dy ) ) + { + VECTOR2I cp1 = relToAbs( cx1, cy1 ); + VECTOR2I cp2 = relToAbs( cx2, cy2 ); + VECTOR2I endPt = relToAbs( dx, dy ); + + auto bezier = std::make_unique( SHAPE_T::BEZIER, LAYER_NOTES ); + bezier->SetStart( currentPt ); + bezier->SetBezierC1( cp1 ); + bezier->SetBezierC2( cp2 ); + bezier->SetEnd( endPt ); + bezier->SetStroke( stroke ); + bezier->RebuildBezierToSegmentsPointsList( + schIUScale.mmToIU( ARC_LOW_DEF_MM ) ); + m_screen->Append( bezier.release() ); + currentPt = endPt; + } + } + else if( token == wxT( "Z" ) || token == wxT( "z" ) ) + { + if( currentPt != startPt ) + { + emitSeg( currentPt, startPt ); + currentPt = startPt; + } + } + } + + maybeParseAttributes( aFile, aLineIdx ); +} + + +void SCH_IO_GEDA::parsePicture( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ) +{ + // G x y width height angle mirrored embedded + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'G' + + long x = 0, y = 0, w = 0, h = 0, angle = 0, mirror = 0, embedded = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &w ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &h ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &angle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &mirror ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &embedded ); + + wxString filename; + + if( aLineIdx < aFile.GetLineCount() ) + { + filename = aFile.GetLine( aLineIdx ).Trim().Trim( false ); + aLineIdx++; + } + + wxString base64Data; + + if( embedded ) + { + while( aLineIdx < aFile.GetLineCount() ) + { + wxString dataLine = aFile.GetLine( aLineIdx ); + aLineIdx++; + + if( dataLine.Trim() == wxT( "." ) ) + break; + + base64Data += dataLine.Trim(); + } + } + + auto bitmap = std::make_unique(); + REFERENCE_IMAGE& refImage = bitmap->GetReferenceImage(); + bool loaded = false; + + int savedLoadFlags = wxImage::GetDefaultLoadFlags(); + wxImage::SetDefaultLoadFlags( savedLoadFlags & ~wxImage::Load_Verbose ); + + if( embedded && !base64Data.IsEmpty() ) + { + wxMemoryBuffer buf = wxBase64Decode( base64Data ); + + if( buf.GetDataLen() > 0 ) + loaded = refImage.ReadImageFile( buf ); + } + else if( !filename.IsEmpty() ) + { + wxFileName imgFile( filename ); + + if( !imgFile.IsAbsolute() && m_filename.IsOk() ) + imgFile.MakeAbsolute( m_filename.GetPath() ); + + if( imgFile.FileExists() ) + loaded = refImage.ReadImageFile( imgFile.GetFullPath() ); + } + + wxImage::SetDefaultLoadFlags( savedLoadFlags ); + + if( !loaded ) + return; + + // gEDA specifies x,y as the lower-left corner of the picture bounding box. + // Compute center position from the lower-left corner + size. + int gCenterX = static_cast( x ) + static_cast( w ) / 2; + int gCenterY = static_cast( y ) + static_cast( h ) / 2; + VECTOR2I center = toKiCad( gCenterX, gCenterY ); + + int targetWidth = toKiCadDist( static_cast( w ) ); + VECTOR2I imgSize = refImage.GetSize(); + + if( imgSize.x > 0 ) + { + double scaleFactor = static_cast( targetWidth ) / imgSize.x; + refImage.SetImageScale( scaleFactor ); + } + + bitmap->SetPosition( center ); + + if( mirror ) + bitmap->MirrorHorizontally( center.x ); + + for( long a = angle; a > 0; a -= 90 ) + bitmap->Rotate( center, false ); + + m_maxY = std::max( m_maxY, static_cast( y + h ) ); + m_screen->Append( bitmap.release() ); +} + + +// ========================================================================== +// Symbol loading +// ========================================================================== + +void SCH_IO_GEDA::initSymbolLibrary() +{ + if( m_symLibraryInitialized ) + return; + + m_symLibraryInitialized = true; + + // Check GEDADATA environment variable first (highest priority for system symbols) + wxString gedaData; + + if( wxGetEnv( wxT( "GEDADATA" ), &gedaData ) && !gedaData.IsEmpty() ) + { + wxString envSymDir = gedaData + wxFileName::GetPathSeparator() + wxT( "sym" ); + + if( wxDir::Exists( envSymDir ) ) + scanSymbolDir( envSymDir ); + } + + // Scan standard gEDA and Lepton-EDA symbol directories + static const wxString defaultPaths[] = { + wxT( "/usr/share/gEDA/sym" ), + wxT( "/usr/share/geda-symbols" ), + wxT( "/usr/local/share/gEDA/sym" ), + wxT( "/usr/local/share/geda-symbols" ), + wxT( "/usr/share/lepton-eda/sym" ), + wxT( "/usr/local/share/lepton-eda/sym" ), + }; + + for( const wxString& dir : defaultPaths ) + { + if( wxDir::Exists( dir ) ) + scanSymbolDir( dir ); + } + + // Scan XDG data directories for Lepton-EDA symbols. + // $XDG_DATA_DIRS defaults to /usr/local/share:/usr/share per the spec. + wxString xdgDataDirs; + + if( wxGetEnv( wxT( "XDG_DATA_DIRS" ), &xdgDataDirs ) && !xdgDataDirs.IsEmpty() ) + { + wxStringTokenizer xdgTok( xdgDataDirs, wxT( ":" ) ); + + while( xdgTok.HasMoreTokens() ) + { + wxString dataDir = xdgTok.GetNextToken(); + + if( dataDir.IsEmpty() ) + continue; + + wxString leptonSymDir = dataDir + wxFileName::GetPathSeparator() + + wxT( "lepton-eda" ) + wxFileName::GetPathSeparator() + + wxT( "sym" ); + + if( wxDir::Exists( leptonSymDir ) ) + scanSymbolDir( leptonSymDir ); + + wxString gedaSymDir = dataDir + wxFileName::GetPathSeparator() + + wxT( "gEDA" ) + wxFileName::GetPathSeparator() + + wxT( "sym" ); + + if( wxDir::Exists( gedaSymDir ) ) + scanSymbolDir( gedaSymDir ); + } + } + + // Scan relative to the schematic file location. + // Properties-based paths are handled at the end regardless of whether + // a valid schematic path exists. + wxString schDir; + + if( m_filename.IsOk() ) + schDir = m_filename.GetPath(); + + // Scan user-level RC files for additional library paths + wxString homeDir = wxGetHomeDir(); + + if( !homeDir.IsEmpty() ) + { + wxString userGedaDir = homeDir + wxFileName::GetPathSeparator() + wxT( ".gEDA" ); + + parseRcFileForLibraries( userGedaDir + wxFileName::GetPathSeparator() + wxT( "gafrc" ), + userGedaDir ); + parseRcFileForLibraries( userGedaDir + wxFileName::GetPathSeparator() + wxT( "gschemrc" ), + userGedaDir ); + + wxString leptonDir; + wxString sep( wxFileName::GetPathSeparator() ); + + if( wxGetEnv( wxT( "XDG_CONFIG_HOME" ), &leptonDir ) && !leptonDir.IsEmpty() ) + leptonDir += sep + wxT( "lepton-eda" ); + else + leptonDir = homeDir + sep + wxT( ".config" ) + sep + wxT( "lepton-eda" ); + + parseRcFileForLibraries( leptonDir + wxFileName::GetPathSeparator() + wxT( "gafrc" ), + leptonDir ); + } + + // Parse project-level RC files and scan schematic-relative directories + if( !schDir.IsEmpty() ) + { + parseRcFileForLibraries( schDir + wxFileName::GetPathSeparator() + wxT( "gafrc" ), + schDir ); + parseRcFileForLibraries( schDir + wxFileName::GetPathSeparator() + wxT( "gschemrc" ), + schDir ); + + // Parse Lepton-EDA INI-style config files (lepton.conf or geda.conf) + // for [libs] section with component-library entries + static const wxString configNames[] = { + wxT( "lepton.conf" ), + wxT( "geda.conf" ), + }; + + for( const wxString& configName : configNames ) + { + wxString confPath = schDir + wxFileName::GetPathSeparator() + configName; + + if( !wxFileExists( confPath ) ) + continue; + + wxTextFile confFile; + + if( !confFile.Open( confPath ) ) + continue; + + bool inLibsSection = false; + + for( size_t i = 0; i < confFile.GetLineCount(); ++i ) + { + wxString line = confFile.GetLine( i ); + line.Trim( true ); + line.Trim( false ); + + if( line.IsEmpty() || line[0] == '#' || line[0] == ';' ) + continue; + + if( line[0] == '[' ) + { + inLibsSection = ( line.CmpNoCase( wxT( "[libs]" ) ) == 0 ); + continue; + } + + if( !inLibsSection ) + continue; + + if( line.StartsWith( wxT( "component-library" ) ) ) + { + int eqPos = line.Find( '=' ); + + if( eqPos == wxNOT_FOUND ) + continue; + + wxString libPath = line.Mid( eqPos + 1 ).Trim( false ).Trim( true ); + wxFileName libDir( libPath ); + + if( !libDir.IsAbsolute() ) + { + libDir.MakeAbsolute( schDir ); + libPath = libDir.GetFullPath(); + } + + if( wxDir::Exists( libPath ) ) + scanSymbolDir( libPath ); + } + } + + break; + } + + scanSymbolDir( schDir ); + + wxString symDir = schDir + wxFileName::GetPathSeparator() + wxT( "sym" ); + + if( wxDir::Exists( symDir ) ) + scanSymbolDir( symDir ); + + wxFileName parentDir( schDir ); + parentDir.RemoveLastDir(); + wxString parentSymDir = + parentDir.GetPath() + wxFileName::GetPathSeparator() + wxT( "sym" ); + + if( wxDir::Exists( parentSymDir ) ) + scanSymbolDir( parentSymDir ); + } + + if( m_properties ) + { + auto it = m_properties->find( "sym_search_paths" ); + + if( it != m_properties->end() ) + { + wxString paths = it->second; + wxStringTokenizer tok( paths, wxT( "\n;" ) ); + + while( tok.HasMoreTokens() ) + { + wxString dir = tok.GetNextToken().Trim().Trim( false ); + + if( !dir.IsEmpty() && wxDir::Exists( dir ) ) + scanSymbolDir( dir ); + } + } + } +} + + +void SCH_IO_GEDA::scanSymbolDir( const wxString& aDir ) +{ + wxDir dir( aDir ); + + if( !dir.IsOpened() ) + return; + + wxString filename; + bool cont = dir.GetFirst( &filename ); + + while( cont ) + { + wxString fullPath = aDir + wxFileName::GetPathSeparator() + filename; + + if( wxDir::Exists( fullPath ) ) + { + // Recurse into subdirectories + scanSymbolDir( fullPath ); + } + else if( filename.EndsWith( wxT( ".sym" ) ) ) + { + SYM_CACHE_ENTRY entry; + entry.path = fullPath; + m_symLibrary[filename] = std::move( entry ); + } + + cont = dir.GetNext( &filename ); + } +} + + +void SCH_IO_GEDA::parseRcFileForLibraries( const wxString& aPath, const wxString& aBaseDir ) +{ + if( !wxFileExists( aPath ) ) + return; + + wxTextFile rcFile; + + if( !rcFile.Open( aPath ) ) + return; + + for( size_t i = 0; i < rcFile.GetLineCount(); ++i ) + { + wxString line = rcFile.GetLine( i ); + line.Trim( true ); + line.Trim( false ); + + if( !line.StartsWith( wxT( "(component-library-search " ) ) + && !line.StartsWith( wxT( "(component-library " ) ) ) + { + continue; + } + + int firstQuote = line.Find( '"' ); + + if( firstQuote == wxNOT_FOUND ) + continue; + + // Find the closing quote of the first argument. The two-argument + // form (component-library "path" "name") has a second quoted + // string that we ignore. + int secondQuote = line.Mid( firstQuote + 1 ).Find( '"' ); + + if( secondQuote != wxNOT_FOUND ) + secondQuote += firstQuote + 1; + + if( secondQuote == wxNOT_FOUND || secondQuote <= firstQuote ) + continue; + + wxString libPath = line.Mid( firstQuote + 1, secondQuote - firstQuote - 1 ); + wxFileName libDir( libPath ); + + if( !libDir.IsAbsolute() ) + { + libDir.MakeAbsolute( aBaseDir ); + libPath = libDir.GetFullPath(); + } + + if( wxDir::Exists( libPath ) ) + scanSymbolDir( libPath ); + } +} + + +std::unique_ptr SCH_IO_GEDA::loadSymbolFile( const wxString& aPath, + wxString* aSymversion, + wxString* aNetAttr ) +{ + wxTextFile file; + + if( !file.Open( aPath ) ) + return nullptr; + + if( file.GetLineCount() == 0 ) + return nullptr; + + // Validate version line + wxString firstLine = file.GetFirstLine().Trim( false ); + + if( !firstLine.StartsWith( wxT( "v " ) ) ) + return nullptr; + + wxFileName fn( aPath ); + wxString symName = fn.GetName(); + auto libSym = std::make_unique( symName ); + libSym->SetShowPinNumbers( true ); + libSym->SetShowPinNames( true ); + + size_t lineIdx = 1; // Skip version line + + while( lineIdx < file.GetLineCount() ) + { + wxString line = file.GetLine( lineIdx ); + + if( line.IsEmpty() ) + { + lineIdx++; + continue; + } + + wxChar type = line[0]; + lineIdx++; + + switch( type ) + { + case 'P': + { + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'P' + long px1 = 0, py1 = 0, px2 = 0, py2 = 0, pc = 0, pt = 0, pw = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &px1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &py1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &px2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &py2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pc ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pt ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &pw ); + + std::vector pinAttrs = maybeParseAttributes( file, lineIdx ); + addSymbolPin( *libSym, static_cast( px1 ), static_cast( py1 ), + static_cast( px2 ), static_cast( py2 ), + static_cast( pw ), pinAttrs ); + break; + } + + case 'L': + case 'B': + case 'V': + case 'A': + case 'H': + addSymbolGraphic( *libSym, line, file, lineIdx, type ); + break; + + case 'T': + { + // T x y color size vis show_nv angle align num_lines + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'T' + long numLines = 1; + + for( int i = 0; i < 9 && tok.HasMoreTokens(); i++ ) + { + wxString fieldVal = tok.GetNextToken(); + + if( i == 8 ) + fieldVal.ToLong( &numLines ); + } + + for( long i = 0; i < numLines && lineIdx < file.GetLineCount(); i++ ) + { + wxString textLine = file.GetLine( lineIdx ); + + if( aSymversion && textLine.StartsWith( wxT( "symversion=" ) ) ) + *aSymversion = textLine.Mid( 11 ); + + if( aNetAttr && textLine.StartsWith( wxT( "net=" ) ) ) + *aNetAttr = textLine.Mid( 4 ); + + lineIdx++; + } + + maybeParseAttributes( file, lineIdx ); + break; + } + + case '{': + { + while( lineIdx < file.GetLineCount() ) + { + if( file.GetLine( lineIdx ).Trim() == wxT( "}" ) ) + { + lineIdx++; + break; + } + + lineIdx++; + } + + break; + } + + case 'v': + default: + break; + } + } + + return libSym; +} + + +void SCH_IO_GEDA::addSymbolPin( LIB_SYMBOL& aSymbol, int aX1, int aY1, int aX2, int aY2, + int aWhichEnd, const std::vector& aAttrs ) +{ + // whichend determines which endpoint is the connection point (active end) + // 0 = (x1,y1) is connection point, 1 = (x2,y2) is connection point + int connX = 0, connY = 0, otherX = 0, otherY = 0; + + if( aWhichEnd == 0 ) + { + connX = aX1; connY = aY1; + otherX = aX2; otherY = aY2; + } + else + { + connX = aX2; connY = aY2; + otherX = aX1; otherY = aY1; + } + + // Symbol coordinates use the same mil system but are relative to the symbol origin. + // The connection point goes at the tip, the other end is toward the symbol body. + VECTOR2I connPt( connX * MILS_TO_IU, -connY * MILS_TO_IU ); + VECTOR2I bodyPt( otherX * MILS_TO_IU, -otherY * MILS_TO_IU ); + + // PIN_ORIENTATION describes which direction the pin body extends FROM the + // connection point, so the delta must point from connection toward body. + int dx = otherX - connX; + int dy = otherY - connY; + int length = KiROUND( std::hypot( dx, dy ) ) * MILS_TO_IU; + + PIN_ORIENTATION orient = PIN_ORIENTATION::PIN_RIGHT; + + if( dx > 0 ) + orient = PIN_ORIENTATION::PIN_RIGHT; + else if( dx < 0 ) + orient = PIN_ORIENTATION::PIN_LEFT; + else if( dy > 0 ) + orient = PIN_ORIENTATION::PIN_UP; + else if( dy < 0 ) + orient = PIN_ORIENTATION::PIN_DOWN; + + wxString pinnumber = findAttr( aAttrs, wxT( "pinnumber" ) ); + wxString pinlabel = findAttr( aAttrs, wxT( "pinlabel" ) ); + wxString pintypeStr = findAttr( aAttrs, wxT( "pintype" ) ); + + if( pinnumber.IsEmpty() ) + pinnumber = wxT( "?" ); + + if( pinlabel.IsEmpty() ) + pinlabel = pinnumber; + + ELECTRICAL_PINTYPE elecType = ELECTRICAL_PINTYPE::PT_PASSIVE; + + if( pintypeStr == wxT( "in" ) ) + elecType = ELECTRICAL_PINTYPE::PT_INPUT; + else if( pintypeStr == wxT( "out" ) ) + elecType = ELECTRICAL_PINTYPE::PT_OUTPUT; + else if( pintypeStr == wxT( "io" ) ) + elecType = ELECTRICAL_PINTYPE::PT_BIDI; + else if( pintypeStr == wxT( "oc" ) ) + elecType = ELECTRICAL_PINTYPE::PT_OPENCOLLECTOR; + else if( pintypeStr == wxT( "oe" ) ) + elecType = ELECTRICAL_PINTYPE::PT_OPENEMITTER; + else if( pintypeStr == wxT( "pas" ) ) + elecType = ELECTRICAL_PINTYPE::PT_PASSIVE; + else if( pintypeStr == wxT( "tp" ) ) + elecType = ELECTRICAL_PINTYPE::PT_TRISTATE; + else if( pintypeStr == wxT( "tri" ) ) + elecType = ELECTRICAL_PINTYPE::PT_TRISTATE; + else if( pintypeStr == wxT( "clk" ) ) + elecType = ELECTRICAL_PINTYPE::PT_INPUT; + else if( pintypeStr == wxT( "pwr" ) ) + elecType = ELECTRICAL_PINTYPE::PT_POWER_IN; + + SCH_PIN* pin = new SCH_PIN( &aSymbol ); + pin->SetPosition( connPt ); + pin->SetLength( length ); + pin->SetOrientation( orient ); + pin->SetNumber( pinnumber ); + pin->SetName( pinlabel ); + pin->SetType( elecType ); + + aSymbol.AddDrawItem( pin ); +} + + +void SCH_IO_GEDA::addSymbolGraphic( LIB_SYMBOL& aSymbol, const wxString& aLine, + wxTextFile& aFile, size_t& aLineIdx, wxChar aType ) +{ + switch( aType ) + { + case 'L': + { + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'L' + long x1 = 0, y1 = 0, x2 = 0, y2 = 0, color = 0, width = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &width ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + + VECTOR2I start( static_cast( x1 ) * MILS_TO_IU, + -static_cast( y1 ) * MILS_TO_IU ); + VECTOR2I end( static_cast( x2 ) * MILS_TO_IU, + -static_cast( y2 ) * MILS_TO_IU ); + + SCH_SHAPE* shape = new SCH_SHAPE( SHAPE_T::POLY, LAYER_DEVICE ); + shape->AddPoint( start ); + shape->AddPoint( end ); + shape->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( width ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + aSymbol.AddDrawItem( shape ); + break; + } + + case 'B': + { + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'B' + long x = 0, y = 0, w = 0, h = 0, color = 0, linewidth = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + long filltype = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &x ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &y ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &w ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &h ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + + VECTOR2I topLeft( static_cast( x ) * MILS_TO_IU, + -static_cast( y + h ) * MILS_TO_IU ); + VECTOR2I botRight( static_cast( x + w ) * MILS_TO_IU, + -static_cast( y ) * MILS_TO_IU ); + + SCH_SHAPE* rect = new SCH_SHAPE( SHAPE_T::RECTANGLE, LAYER_DEVICE ); + rect->SetStart( topLeft ); + rect->SetEnd( botRight ); + rect->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + + FILL_T fill = toFillType( static_cast( filltype ) ); + + if( fill != FILL_T::NO_FILL ) + { + rect->SetFilled( true ); + rect->SetFillMode( fill ); + } + + aSymbol.AddDrawItem( rect ); + break; + } + + case 'V': + { + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'V' + long cx = 0, cy = 0, r = 0, color = 0, linewidth = 0; + long capstyle = 0, dashstyle = 0, dashlength = 0, dashspace = 0; + long filltype = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cx ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cy ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &r ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + + VECTOR2I center( static_cast( cx ) * MILS_TO_IU, + -static_cast( cy ) * MILS_TO_IU ); + + SCH_SHAPE* circle = new SCH_SHAPE( SHAPE_T::CIRCLE, LAYER_DEVICE ); + circle->SetCenter( center ); + circle->SetEnd( VECTOR2I( center.x + toKiCadDist( static_cast( r ) ), center.y ) ); + circle->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + toLineStyle( static_cast( dashstyle ) ) ) ); + + FILL_T fill = toFillType( static_cast( filltype ) ); + + if( fill != FILL_T::NO_FILL ) + { + circle->SetFilled( true ); + circle->SetFillMode( fill ); + } + + aSymbol.AddDrawItem( circle ); + break; + } + + case 'A': + { + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'A' + long cx = 0, cy = 0, r = 0, sa = 0, da = 0; + long color = 0, linewidth = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cx ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &cy ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &r ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &sa ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &da ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &linewidth ); + + VECTOR2I center( static_cast( cx ) * MILS_TO_IU, + -static_cast( cy ) * MILS_TO_IU ); + int radius = toKiCadDist( static_cast( r ) ); + + double startRad = DEG2RAD( static_cast( sa ) ); + double endRad = DEG2RAD( static_cast( sa + da ) ); + + VECTOR2I arcStart( center.x + KiROUND( radius * cos( startRad ) ), + center.y - KiROUND( radius * sin( startRad ) ) ); + VECTOR2I arcEnd( center.x + KiROUND( radius * cos( endRad ) ), + center.y - KiROUND( radius * sin( endRad ) ) ); + + SCH_SHAPE* arc = new SCH_SHAPE( SHAPE_T::ARC, LAYER_DEVICE ); + arc->SetCenter( center ); + + // Symbol coordinates use negative-Y, which reverses angular sweep + // direction. Swap start/end to preserve the correct arc extent. + arc->SetStart( arcEnd ); + arc->SetEnd( arcStart ); + arc->SetStroke( STROKE_PARAMS( toKiCadDist( static_cast( linewidth ) ), + LINE_STYLE::DEFAULT ) ); + aSymbol.AddDrawItem( arc ); + break; + } + + case 'H': + { + wxStringTokenizer tok( aLine ); + tok.GetNextToken(); // skip 'H' + + long color = 0, width = 0, capstyle = 0, dashstyle = 0; + long dashlength = 0, dashspace = 0, filltype = 0, fillwidth = 0; + long a1 = 0, p1 = 0, a2 = 0, p2 = 0, numlines = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &color ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &width ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &capstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashstyle ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashlength ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &dashspace ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &filltype ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &fillwidth ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p1 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &a2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &p2 ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &numlines ); + + wxString pathData; + + for( long i = 0; i < numlines && aLineIdx < aFile.GetLineCount(); i++ ) + { + if( i > 0 ) + pathData += wxT( " " ); + + pathData += aFile.GetLine( aLineIdx ).Trim(); + aLineIdx++; + } + + std::vector polyPts; + VECTOR2I startPt; + VECTOR2I currentPt; + STROKE_PARAMS symStroke( toKiCadDist( static_cast( width ) ), + toLineStyle( static_cast( dashstyle ) ) ); + FILL_T symFill = toFillType( static_cast( filltype ) ); + + auto flushPoly = [&]() + { + if( polyPts.size() < 2 ) + return; + + SCH_SHAPE* poly = new SCH_SHAPE( SHAPE_T::POLY, LAYER_DEVICE ); + + for( const VECTOR2I& pt : polyPts ) + poly->AddPoint( pt ); + + poly->SetStroke( symStroke ); + + if( symFill != FILL_T::NO_FILL ) + { + poly->SetFilled( true ); + poly->SetFillMode( symFill ); + } + + aSymbol.AddDrawItem( poly ); + polyPts.clear(); + }; + + wxStringTokenizer pathTok( pathData, wxT( " ,\t" ) ); + + while( pathTok.HasMoreTokens() ) + { + wxString pathToken = pathTok.GetNextToken(); + + // Symbol path coordinates are in mils (Y-up). Convert to IU (Y-down). + auto symAbsPt = []( long aX, long aY ) -> VECTOR2I + { + return VECTOR2I( static_cast( aX ) * MILS_TO_IU, + -static_cast( aY ) * MILS_TO_IU ); + }; + + auto symRelPt = [¤tPt]( long aDx, long aDy ) -> VECTOR2I + { + return currentPt + VECTOR2I( static_cast( aDx ) * MILS_TO_IU, + -static_cast( aDy ) * MILS_TO_IU ); + }; + + bool isRelative = ( pathToken.IsAscii() && islower( pathToken[0u] ) ); + + if( pathToken == wxT( "M" ) || pathToken == wxT( "m" ) ) + { + long px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + currentPt = isRelative ? symRelPt( px, py ) : symAbsPt( px, py ); + startPt = currentPt; + + if( polyPts.empty() ) + polyPts.push_back( currentPt ); + } + } + else if( pathToken == wxT( "L" ) || pathToken == wxT( "l" ) ) + { + long px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + currentPt = isRelative ? symRelPt( px, py ) : symAbsPt( px, py ); + polyPts.push_back( currentPt ); + } + } + else if( pathToken == wxT( "C" ) || pathToken == wxT( "c" ) ) + { + long cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, px = 0, py = 0; + + if( pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy1 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cx2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &cy2 ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &px ) + && pathTok.HasMoreTokens() && pathTok.GetNextToken().ToLong( &py ) ) + { + flushPoly(); + + VECTOR2I cp1 = isRelative ? symRelPt( cx1, cy1 ) : symAbsPt( cx1, cy1 ); + VECTOR2I cp2 = isRelative ? symRelPt( cx2, cy2 ) : symAbsPt( cx2, cy2 ); + VECTOR2I endPt = isRelative ? symRelPt( px, py ) : symAbsPt( px, py ); + + SCH_SHAPE* bezier = new SCH_SHAPE( SHAPE_T::BEZIER, LAYER_DEVICE ); + bezier->SetStart( currentPt ); + bezier->SetBezierC1( cp1 ); + bezier->SetBezierC2( cp2 ); + bezier->SetEnd( endPt ); + bezier->SetStroke( symStroke ); + bezier->RebuildBezierToSegmentsPointsList( + schIUScale.mmToIU( ARC_LOW_DEF_MM ) ); + + if( symFill != FILL_T::NO_FILL ) + { + bezier->SetFilled( true ); + bezier->SetFillMode( symFill ); + } + + aSymbol.AddDrawItem( bezier ); + currentPt = endPt; + polyPts.push_back( currentPt ); + } + } + else if( pathToken == wxT( "Z" ) || pathToken == wxT( "z" ) ) + { + if( currentPt != startPt ) + { + polyPts.push_back( startPt ); + currentPt = startPt; + } + } + } + + flushPoly(); + + break; + } + + default: + break; + } + + maybeParseAttributes( aFile, aLineIdx ); +} + + +/** + * Compute the Levenshtein edit distance between two strings. + */ +static int editDistance( const wxString& a, const wxString& b ) +{ + size_t m = a.length(); + size_t n = b.length(); + + std::vector prev( n + 1 ); + std::vector curr( n + 1 ); + + for( size_t j = 0; j <= n; ++j ) + prev[j] = static_cast( j ); + + for( size_t i = 1; i <= m; ++i ) + { + curr[0] = static_cast( i ); + + for( size_t j = 1; j <= n; ++j ) + { + int cost = ( a[i - 1] == b[j - 1] ) ? 0 : 1; + curr[j] = std::min( { prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost } ); + } + + std::swap( prev, curr ); + } + + return prev[n]; +} + + +std::unique_ptr SCH_IO_GEDA::loadBuiltinSymbol( const wxString& aBasename ) +{ + const auto& builtins = getBuiltinSymbols(); + auto it = builtins.find( aBasename ); + + if( it == builtins.end() ) + return nullptr; + + wxString tempPath = wxFileName::CreateTempFileName( wxT( "geda_sym_" ) ); + + if( tempPath.IsEmpty() ) + return nullptr; + + { + wxFile temp( tempPath, wxFile::write ); + + if( !temp.IsOpened() || !temp.Write( it->second ) ) + { + wxRemoveFile( tempPath ); + return nullptr; + } + } + + wxString netAttr; + auto result = loadSymbolFile( tempPath, nullptr, &netAttr ); + wxRemoveFile( tempPath ); + + if( result ) + { + wxString symName = aBasename; + + if( symName.EndsWith( wxT( ".sym" ) ) ) + symName = symName.Left( symName.length() - 4 ); + + result->SetName( symName ); + + if( !netAttr.IsEmpty() ) + { + SYM_CACHE_ENTRY& entry = m_symLibrary[aBasename]; + entry.netAttr = netAttr; + } + } + + return result; +} + + +LIB_SYMBOL* SCH_IO_GEDA::getOrLoadSymbol( const wxString& aBasename ) +{ + // Check if already loaded + auto it = m_libSymbols.find( aBasename ); + + if( it != m_libSymbols.end() ) + return it->second.get(); + + // Try the library cache + initSymbolLibrary(); + + auto cacheIt = m_symLibrary.find( aBasename ); + + if( cacheIt != m_symLibrary.end() ) + { + if( !cacheIt->second.symbol ) + { + cacheIt->second.symbol = loadSymbolFile( cacheIt->second.path, + &cacheIt->second.symversion, + &cacheIt->second.netAttr ); + + // When a project-local symbol overrides a builtin power symbol but lacks a + // net= attribute, inherit the builtin's net= so power detection still works. + // This handles projects that provide custom graphics for standard power symbols. + if( cacheIt->second.symbol && cacheIt->second.netAttr.IsEmpty() ) + { + const auto& builtins = getBuiltinSymbols(); + auto builtinIt = builtins.find( aBasename ); + + if( builtinIt != builtins.end() ) + { + // Scan the builtin symbol text for a net= attribute line. + // In gEDA .sym format, net= always starts a line. + const wxString& src = builtinIt->second; + int pos = src.Find( wxT( "\nnet=" ) ); + + if( pos != wxNOT_FOUND ) + { + wxString rest = src.Mid( pos + 5 ); + int eol = rest.Find( '\n' ); + + cacheIt->second.netAttr = ( eol != wxNOT_FOUND ) + ? rest.Left( eol ).Trim() + : rest.Trim(); + } + } + } + } + + if( cacheIt->second.symbol ) + { + m_libSymbols[aBasename] = std::make_unique( *cacheIt->second.symbol ); + return m_libSymbols[aBasename].get(); + } + } + + // Try built-in standard symbols before falling back to a placeholder + auto builtin = loadBuiltinSymbol( aBasename ); + + if( builtin ) + { + m_libSymbols[aBasename] = std::move( builtin ); + return m_libSymbols[aBasename].get(); + } + + // Not found anywhere - create a fallback placeholder + m_libSymbols[aBasename] = createFallbackSymbol( aBasename ); + + if( m_reporter ) + { + wxString suggestion; + int bestDist = INT_MAX; + + for( const auto& [name, entry] : m_symLibrary ) + { + int dist = editDistance( aBasename, name ); + + if( dist < bestDist && dist <= 3 ) + { + bestDist = dist; + suggestion = name; + } + } + + // Also check builtins, which may have a closer match than the library cache + for( const auto& [name, content] : getBuiltinSymbols() ) + { + int dist = editDistance( aBasename, name ); + + if( dist < bestDist && dist <= 3 ) + { + bestDist = dist; + suggestion = name; + } + } + + wxString msg = wxString::Format( _( "Symbol '%s' not found in gEDA libraries." ), + aBasename ); + + if( !suggestion.IsEmpty() ) + msg += wxString::Format( _( " Did you mean '%s'?" ), suggestion ); + + m_reporter->Report( msg ); + } + + return m_libSymbols[aBasename].get(); +} + + +std::unique_ptr SCH_IO_GEDA::createFallbackSymbol( const wxString& aBasename ) +{ + wxString symName = aBasename; + + if( symName.EndsWith( wxT( ".sym" ) ) ) + symName = symName.Left( symName.length() - 4 ); + + auto libSymbol = std::make_unique( symName ); + libSymbol->SetShowPinNumbers( true ); + libSymbol->SetShowPinNames( true ); + + int halfSize = DEFAULT_SYMBOL_SIZE_MILS * MILS_TO_IU / 2; + + SCH_SHAPE* rect = new SCH_SHAPE( SHAPE_T::RECTANGLE, LAYER_DEVICE ); + rect->SetStart( VECTOR2I( -halfSize, -halfSize ) ); + rect->SetEnd( VECTOR2I( halfSize, halfSize ) ); + rect->SetStroke( STROKE_PARAMS( 0, LINE_STYLE::DEFAULT ) ); + libSymbol->AddDrawItem( rect ); + + return libSymbol; +} + + +void SCH_IO_GEDA::flushPendingComponent() +{ + if( !m_pendingComp ) + return; + + // Skip title block symbols + if( m_pendingComp->basename.StartsWith( wxT( "title-" ) ) ) + { + m_pendingComp.reset(); + return; + } + + // Detect no-connect symbols (nc-right-1.sym, nc-left-1.sym, etc.) and emit + // SCH_NO_CONNECT at the pin connection point rather than the component origin. + wxString ncValue = findAttr( m_pendingComp->attrs, wxT( "value" ) ); + bool isNoConnect = m_pendingComp->basename.StartsWith( wxT( "nc-" ) ) + && ncValue == wxT( "NoConnection" ); + + if( isNoConnect ) + { + LIB_SYMBOL* ncSym = getOrLoadSymbol( m_pendingComp->basename ); + int pinLocalX = 0; + int pinLocalY = 0; + + if( ncSym ) + { + const std::vector& pins = ncSym->GetPins(); + + if( !pins.empty() ) + { + VECTOR2I pinPos = pins[0]->GetPosition(); + pinLocalX = pinPos.x / MILS_TO_IU; + pinLocalY = -pinPos.y / MILS_TO_IU; + } + } + + // Apply gEDA component rotation/mirror to the pin offset + int rx = pinLocalX; + int ry = pinLocalY; + + switch( m_pendingComp->angle ) + { + case 90: rx = -pinLocalY; ry = pinLocalX; break; + case 180: rx = -pinLocalX; ry = -pinLocalY; break; + case 270: rx = pinLocalY; ry = -pinLocalX; break; + default: break; + } + + if( m_pendingComp->mirror ) + rx = -rx; + + int gedaX = m_pendingComp->x + rx; + int gedaY = m_pendingComp->y + ry; + + m_screen->Append( new SCH_NO_CONNECT( toKiCad( gedaX, gedaY ) ) ); + m_pendingComp.reset(); + return; + } + + // Check for hierarchical sheet reference. In gEDA, a source= attribute + // pointing to a .sch file indicates a hierarchical sub-schematic. + wxString sourceAttr = findAttr( m_pendingComp->attrs, wxT( "source" ) ); + + if( !sourceAttr.IsEmpty() && sourceAttr.EndsWith( wxT( ".sch" ) ) ) + { + importHierarchicalSheet( sourceAttr ); + m_pendingComp.reset(); + return; + } + + LIB_SYMBOL* libSym = nullptr; + + if( m_pendingComp->embedded && m_pendingComp->embeddedSym ) + { + wxString basename = m_pendingComp->basename; + m_libSymbols[basename] = std::move( m_pendingComp->embeddedSym ); + libSym = m_libSymbols[basename].get(); + } + else + { + libSym = getOrLoadSymbol( m_pendingComp->basename ); + } + + if( !libSym ) + { + m_pendingComp.reset(); + return; + } + + // Compare component symversion against the loaded symbol's symversion. + // A mismatch in the major version number indicates the symbol has changed + // in an incompatible way since the schematic was saved. + wxString compSymver = findAttr( m_pendingComp->attrs, wxT( "symversion" ) ); + + if( !compSymver.IsEmpty() && m_reporter ) + { + wxString symSymver; + auto cacheIt = m_symLibrary.find( m_pendingComp->basename ); + + if( cacheIt != m_symLibrary.end() ) + symSymver = cacheIt->second.symversion; + + if( !symSymver.IsEmpty() ) + { + long compMajor = 0; + long symMajor = 0; + compSymver.BeforeFirst( '.' ).ToLong( &compMajor ); + symSymver.BeforeFirst( '.' ).ToLong( &symMajor ); + + if( compMajor != symMajor ) + { + wxString refdes = findAttr( m_pendingComp->attrs, wxT( "refdes" ) ); + wxString label = refdes.IsEmpty() ? m_pendingComp->basename : refdes; + + m_reporter->Report( + wxString::Format( _( "Symbol version mismatch for '%s' (%s): " + "schematic has symversion %s, " + "library symbol has symversion %s." ), + label, m_pendingComp->basename, + compSymver, symSymver ), + RPT_SEVERITY_WARNING ); + } + } + } + + // Detect power symbols via the net= attribute in the .sym definition. + // gEDA power symbols (gnd-1.sym, vcc-1.sym, etc.) carry a net=NETNAME:PIN + // attribute that identifies them as implicit power connections. + wxString symNetAttr; + auto cacheEntry = m_symLibrary.find( m_pendingComp->basename ); + + if( cacheEntry != m_symLibrary.end() ) + symNetAttr = cacheEntry->second.netAttr; + + bool isPowerSym = !symNetAttr.IsEmpty(); + wxString powerNetName; + std::unique_ptr powerCopy; + + if( isPowerSym ) + { + // Schematic-level net= overrides the .sym-level default (e.g. generic-power.sym + // has net=Vcc:1 but instances use net=5V:1 or net=9V:1). + wxString schematicNet = findAttr( m_pendingComp->attrs, wxT( "net" ) ); + wxString effectiveNet = schematicNet.IsEmpty() ? symNetAttr : schematicNet; + + int colonPos = effectiveNet.Find( ':' ); + + if( colonPos != wxNOT_FOUND ) + powerNetName = effectiveNet.Left( colonPos ); + else + powerNetName = effectiveNet; + + // Work on a copy so the shared cached symbol is not modified. + // Each power instance may have a different net name. + powerCopy = std::make_unique( *libSym ); + libSym = powerCopy.get(); + + libSym->SetGlobalPower(); + libSym->SetShowPinNames( false ); + libSym->SetShowPinNumbers( false ); + libSym->GetReferenceField().SetText( wxT( "#PWR" ) ); + libSym->GetReferenceField().SetVisible( false ); + libSym->GetValueField().SetText( powerNetName ); + libSym->GetValueField().SetVisible( true ); + + for( SCH_PIN* pin : libSym->GetPins() ) + { + pin->SetName( powerNetName ); + pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN ); + } + } + + LIB_ID libId( getLibName(), libSym->GetName() ); + VECTOR2I pos = toKiCad( m_pendingComp->x, m_pendingComp->y ); + + auto symbol = std::make_unique( *libSym, libId, &m_schematic->CurrentSheet(), + 1, 0, pos ); + + int orient = toKiCadOrientation( m_pendingComp->angle, m_pendingComp->mirror ); + symbol->SetOrientation( orient ); + + if( isPowerSym ) + { + wxString pwrRef = wxString::Format( wxT( "#PWR%04d" ), ++m_powerCounter ); + symbol->SetRef( &m_schematic->CurrentSheet(), pwrRef ); + symbol->GetField( FIELD_T::REFERENCE )->SetText( pwrRef ); + symbol->GetField( FIELD_T::REFERENCE )->SetVisible( false ); + symbol->GetField( FIELD_T::VALUE )->SetText( powerNetName ); + symbol->GetField( FIELD_T::VALUE )->SetVisible( true ); + } + + // Mark graphical-only symbols as excluded from BOM, board, and simulation + wxString graphicalAttr = findAttr( m_pendingComp->attrs, wxT( "graphical" ) ); + + if( graphicalAttr == wxT( "1" ) ) + { + symbol->SetExcludedFromBOM( true ); + symbol->SetExcludedFromBoard( true ); + symbol->SetExcludedFromSim( true ); + } + + wxString refdes = findAttr( m_pendingComp->attrs, wxT( "refdes" ) ); + wxString value = findAttr( m_pendingComp->attrs, wxT( "value" ) ); + wxString footprint = findAttr( m_pendingComp->attrs, wxT( "footprint" ) ); + + if( !isPowerSym && !refdes.IsEmpty() ) + { + symbol->SetRef( &m_schematic->CurrentSheet(), refdes ); + + SCH_FIELD* refField = symbol->GetField( FIELD_T::REFERENCE ); + const GEDA_ATTR* refAttr = findAttrStruct( m_pendingComp->attrs, wxT( "refdes" ) ); + refField->SetText( refdes ); + + if( refAttr ) + { + refField->SetPosition( toKiCad( refAttr->x, refAttr->y ) ); + int textSize = toKiCadDist( refAttr->size * 10 ); + refField->SetTextSize( VECTOR2I( textSize, textSize ) ); + refField->SetVisible( refAttr->visible ); + } + } + + if( !isPowerSym && !value.IsEmpty() ) + { + SCH_FIELD* valField = symbol->GetField( FIELD_T::VALUE ); + const GEDA_ATTR* valAttr = findAttrStruct( m_pendingComp->attrs, wxT( "value" ) ); + valField->SetText( value ); + + if( valAttr ) + { + valField->SetPosition( toKiCad( valAttr->x, valAttr->y ) ); + int textSize = toKiCadDist( valAttr->size * 10 ); + valField->SetTextSize( VECTOR2I( textSize, textSize ) ); + valField->SetVisible( valAttr->visible ); + } + } + + if( !footprint.IsEmpty() ) + symbol->SetFootprintFieldText( footprint ); + + // Map documentation attribute to KiCad's native DATASHEET field + wxString documentation = findAttr( m_pendingComp->attrs, wxT( "documentation" ) ); + + if( !documentation.IsEmpty() ) + { + SCH_FIELD* dsField = symbol->GetField( FIELD_T::DATASHEET ); + dsField->SetText( documentation ); + } + + // Map description attribute to KiCad's native DESCRIPTION field + const GEDA_ATTR* descAttr = findAttrStruct( m_pendingComp->attrs, wxT( "description" ) ); + + if( descAttr && !descAttr->value.IsEmpty() ) + { + SCH_FIELD* descField = symbol->GetField( FIELD_T::DESCRIPTION ); + descField->SetText( descAttr->value ); + descField->SetVisible( descAttr->visible ); + + if( descAttr->visible ) + { + descField->SetPosition( toKiCad( descAttr->x, descAttr->y ) ); + int textSize = toKiCadDist( descAttr->size * 10 ); + descField->SetTextSize( VECTOR2I( textSize, textSize ) ); + } + } + + // Collect net= attributes for post-processing. Power symbols already establish + // their net connection through the pin name, so skip global label generation. + if( !isPowerSym ) + { + for( const GEDA_ATTR& attr : m_pendingComp->attrs ) + { + if( attr.name == wxT( "net" ) ) + { + int colonPos = attr.value.Find( ':' ); + + if( colonPos != wxNOT_FOUND ) + { + NET_ATTR_RECORD rec; + rec.netname = attr.value.Left( colonPos ); + rec.pinnumber = attr.value.Mid( colonPos + 1 ); + rec.symbol = symbol.get(); + m_netAttrRecords.push_back( rec ); + } + } + } + } + + // Store additional attributes as custom fields (skip those already handled) + for( const GEDA_ATTR& attr : m_pendingComp->attrs ) + { + if( attr.name == wxT( "refdes" ) || attr.name == wxT( "value" ) + || attr.name == wxT( "footprint" ) || attr.name == wxT( "net" ) + || attr.name == wxT( "device" ) || attr.name == wxT( "symversion" ) + || attr.name == wxT( "documentation" ) || attr.name == wxT( "description" ) + || attr.name == wxT( "graphical" ) + || attr.name == wxT( "slot" ) || attr.name == wxT( "numslots" ) + || attr.name == wxT( "slotdef" ) ) + { + continue; + } + + SCH_FIELD* field = symbol->AddField( + SCH_FIELD( symbol.get(), FIELD_T::USER, attr.name ) ); + field->SetText( attr.value ); + field->SetVisible( attr.visible ); + field->SetPosition( pos ); + } + + // Track pin connection points for junction detection. Reverse-map the + // KiCad IU positions back to gEDA coordinates to match the wire endpoints. + for( SCH_PIN* pin : libSym->GetPins() ) + { + VECTOR2I pinPos = symbol->GetPinPhysicalPosition( pin ); + int gedaX = pinPos.x / MILS_TO_IU; + int gedaY = m_maxY - pinPos.y / MILS_TO_IU; + trackEndpoint( gedaX, gedaY ); + } + + symbol->SetLibSymbol( new LIB_SYMBOL( *libSym ) ); + + // Apply multi-slot pin remapping on the symbol's PRIVATE copy of the lib symbol. + // gEDA slotdef format is "N:pin1,pin2,pin3" where N is the slot number + // and each pin corresponds to a pinseq-ordered pin in the symbol. + // Operating on the private copy prevents corrupting the shared cached symbol. + wxString slotStr = findAttr( m_pendingComp->attrs, wxT( "slot" ) ); + long slotNum = 0; + + if( !slotStr.IsEmpty() && slotStr.ToLong( &slotNum ) && slotNum > 0 ) + { + wxString targetSlotDef; + + for( const GEDA_ATTR& attr : m_pendingComp->attrs ) + { + if( attr.name != wxT( "slotdef" ) ) + continue; + + int colonPos = attr.value.Find( ':' ); + + if( colonPos == wxNOT_FOUND ) + continue; + + long defSlot = 0; + + if( attr.value.Left( colonPos ).ToLong( &defSlot ) && defSlot == slotNum ) + { + targetSlotDef = attr.value.Mid( colonPos + 1 ); + break; + } + } + + if( !targetSlotDef.IsEmpty() ) + { + wxArrayString slotPins; + wxStringTokenizer slotTok( targetSlotDef, wxT( "," ) ); + + while( slotTok.HasMoreTokens() ) + slotPins.Add( slotTok.GetNextToken() ); + + LIB_SYMBOL* privateSym = symbol->GetLibSymbolRef().get(); + + // Build pinseq-ordered list from the private copy's pins. + // Pins are added in file order which matches pinseq order. + std::map pinsBySeq; + int autoSeq = 1; + + for( SCH_PIN* pin : privateSym->GetPins() ) + { + pinsBySeq[autoSeq] = pin; + autoSeq++; + } + + for( size_t i = 0; i < slotPins.size() && i < pinsBySeq.size(); i++ ) + { + auto seqIt = pinsBySeq.find( static_cast( i + 1 ) ); + + if( seqIt != pinsBySeq.end() ) + seqIt->second->SetNumber( slotPins[i].Trim() ); + } + } + } + + m_screen->Append( symbol.release() ); + m_pendingComp.reset(); +} + + +// ========================================================================== +// Hierarchical sheet import +// ========================================================================== + +void SCH_IO_GEDA::importHierarchicalSheet( const wxString& aSourceFile ) +{ + wxFileName sourceFileName( aSourceFile ); + + // Resolve relative paths against the directory of the current schematic + if( !sourceFileName.IsAbsolute() ) + sourceFileName.SetPath( m_filename.GetPath() ); + + wxString fullPath = sourceFileName.GetFullPath(); + + if( !wxFileExists( fullPath ) ) + { + if( m_reporter ) + { + m_reporter->Report( + wxString::Format( _( "Hierarchical source '%s' not found, " + "creating empty sheet." ), + aSourceFile ), + RPT_SEVERITY_WARNING ); + } + } + + if( m_importStack.count( fullPath ) ) + { + if( m_reporter ) + { + m_reporter->Report( + wxString::Format( _( "Circular hierarchy detected for '%s', skipping." ), + aSourceFile ), + RPT_SEVERITY_WARNING ); + } + + return; + } + + VECTOR2I pos = toKiCad( m_pendingComp->x, m_pendingComp->y ); + + // Use a default sheet size. We'll resize after loading the sub-schematic content. + VECTOR2I sheetSize( schIUScale.MilsToIU( 2000 ), schIUScale.MilsToIU( 1500 ) ); + + auto sheet = std::make_unique( m_rootSheet, pos, sheetSize ); + + wxString refdes = findAttr( m_pendingComp->attrs, wxT( "refdes" ) ); + + if( !refdes.IsEmpty() ) + { + sheet->GetField( FIELD_T::SHEET_NAME )->SetText( refdes ); + } + else + { + sheet->GetField( FIELD_T::SHEET_NAME )->SetText( + sourceFileName.GetName() ); + } + + sheet->GetField( FIELD_T::SHEET_FILENAME )->SetText( aSourceFile ); + sheet->SetFileName( aSourceFile ); + + SCH_SHEET* sheetPtr = sheet.get(); + m_screen->Append( sheet.release() ); + + if( wxFileExists( fullPath ) ) + { + m_deferredSheets.push_back( { sheetPtr, fullPath } ); + } +} + + +// ========================================================================== +// Endpoint tracking +// ========================================================================== + +void SCH_IO_GEDA::trackEndpoint( int aGedaX, int aGedaY ) +{ + m_netEndpoints[std::make_pair( aGedaX, aGedaY )]++; +} + + +// ========================================================================== +// Post-processing +// ========================================================================== + +void SCH_IO_GEDA::postProcess() +{ + flushPendingComponent(); + processNetAttributes(); + addBusEntries(); + addJunctions(); + loadDeferredSheets(); +} + + +void SCH_IO_GEDA::processNetAttributes() +{ + for( const NET_ATTR_RECORD& rec : m_netAttrRecords ) + { + if( !rec.symbol ) + continue; + + const LIB_SYMBOL* libSym = rec.symbol->GetLibSymbolRef().get(); + + if( !libSym ) + continue; + + // Find the pin with matching number + for( SCH_PIN* pin : libSym->GetPins() ) + { + if( pin->GetNumber() == rec.pinnumber ) + { + VECTOR2I pinPos = rec.symbol->GetPinPhysicalPosition( pin ); + + auto label = std::make_unique( pinPos, rec.netname ); + int textSize = toKiCadDist( GEDA_DEFAULT_TEXT_SIZE_MILS / 2 ); + label->SetTextSize( VECTOR2I( textSize, textSize ) ); + + // Build a unit direction vector for the pin in library space, + // then transform it through the symbol's rotation/mirror matrix + // to get the world-space pin direction. + VECTOR2I pinDir( 0, 0 ); + + switch( pin->GetOrientation() ) + { + case PIN_ORIENTATION::PIN_RIGHT: pinDir = VECTOR2I( 1, 0 ); break; + case PIN_ORIENTATION::PIN_LEFT: pinDir = VECTOR2I( -1, 0 ); break; + case PIN_ORIENTATION::PIN_UP: pinDir = VECTOR2I( 0, -1 ); break; + case PIN_ORIENTATION::PIN_DOWN: pinDir = VECTOR2I( 0, 1 ); break; + default: pinDir = VECTOR2I( 1, 0 ); break; + } + + VECTOR2I worldDir = rec.symbol->GetTransform().TransformCoordinate( pinDir ); + + // Orient the label away from the transformed pin direction + if( std::abs( worldDir.x ) >= std::abs( worldDir.y ) ) + { + label->SetSpinStyle( worldDir.x > 0 ? SPIN_STYLE::LEFT + : SPIN_STYLE::RIGHT ); + } + else + { + label->SetSpinStyle( worldDir.y > 0 ? SPIN_STYLE::UP + : SPIN_STYLE::BOTTOM ); + } + + m_screen->Append( label.release() ); + break; + } + } + } +} + + +void SCH_IO_GEDA::addJunctions() +{ + // Collect all wire segments and pin positions from the screen. + std::vector> wireSegs; + std::set> junctionPts; + + for( SCH_ITEM* item : m_screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* wire = static_cast( item ); + + if( wire->GetLayer() != LAYER_WIRE ) + continue; + + wireSegs.emplace_back( wire->GetStartPoint(), wire->GetEndPoint() ); + } + + // Place junctions where 3+ endpoints coincide at the same point. + for( const auto& [pos, count] : m_netEndpoints ) + { + if( count >= 3 ) + junctionPts.insert( { pos.first, pos.second } ); + } + + // Detect T-junctions: a wire endpoint that lands on the interior of + // another wire segment. Work in gEDA coordinates for exact integer match, + // then convert when placing the junction. + for( const auto& [pos, count] : m_netEndpoints ) + { + if( junctionPts.count( pos ) ) + continue; + + VECTOR2I pt = toKiCad( pos.first, pos.second ); + + for( const auto& [segStart, segEnd] : wireSegs ) + { + if( pt == segStart || pt == segEnd ) + continue; + + bool isHorizontal = ( segStart.y == segEnd.y ); + bool isVertical = ( segStart.x == segEnd.x ); + + if( !isHorizontal && !isVertical ) + continue; + + bool onSeg = false; + + if( isHorizontal && pt.y == segStart.y ) + { + int minX = std::min( segStart.x, segEnd.x ); + int maxX = std::max( segStart.x, segEnd.x ); + onSeg = ( pt.x > minX && pt.x < maxX ); + } + else if( isVertical && pt.x == segStart.x ) + { + int minY = std::min( segStart.y, segEnd.y ); + int maxY = std::max( segStart.y, segEnd.y ); + onSeg = ( pt.y > minY && pt.y < maxY ); + } + + if( onSeg ) + { + junctionPts.insert( pos ); + break; + } + } + } + + for( const auto& [gX, gY] : junctionPts ) + { + VECTOR2I kicadPos = toKiCad( gX, gY ); + m_screen->Append( std::make_unique( kicadPos ).release() ); + } +} + + +void SCH_IO_GEDA::addBusEntries() +{ + if( m_busSegments.empty() ) + return; + + // Collect all net (wire) endpoints from the screen + std::vector> wireEndpoints; + + for( SCH_ITEM* item : m_screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* wire = static_cast( item ); + + if( wire->GetLayer() != LAYER_WIRE ) + continue; + + wireEndpoints.emplace_back( wire->GetStartPoint(), wire ); + wireEndpoints.emplace_back( wire->GetEndPoint(), wire ); + } + + int entrySize = schIUScale.MilsToIU( DEFAULT_SCH_ENTRY_SIZE ); + + for( const BUS_SEGMENT& bus : m_busSegments ) + { + bool busIsHorizontal = ( bus.start.y == bus.end.y ); + bool busIsVertical = ( bus.start.x == bus.end.x ); + + if( !busIsHorizontal && !busIsVertical ) + continue; + + for( const auto& [pt, wire] : wireEndpoints ) + { + bool onBus = false; + + if( busIsHorizontal ) + { + int minX = std::min( bus.start.x, bus.end.x ); + int maxX = std::max( bus.start.x, bus.end.x ); + onBus = ( pt.y == bus.start.y && pt.x >= minX && pt.x <= maxX ); + } + else + { + int minY = std::min( bus.start.y, bus.end.y ); + int maxY = std::max( bus.start.y, bus.end.y ); + onBus = ( pt.x == bus.start.x && pt.y >= minY && pt.y <= maxY ); + } + + if( !onBus ) + continue; + + // Determine which direction the wire goes away from the bus + VECTOR2I otherEnd = ( wire->GetStartPoint() == pt ) ? wire->GetEndPoint() + : wire->GetStartPoint(); + int dx = 0; + int dy = 0; + + if( busIsHorizontal ) + { + dy = ( otherEnd.y < pt.y ) ? -entrySize : entrySize; + int sign = bus.ripperDir; + + if( sign == 0 ) + { + // Auto-detect from wire position relative to bus center + int busMidX = ( bus.start.x + bus.end.x ) / 2; + sign = ( pt.x <= busMidX ) ? 1 : -1; + } + + dx = sign * entrySize; + } + else + { + dx = ( otherEnd.x < pt.x ) ? -entrySize : entrySize; + int sign = bus.ripperDir; + + if( sign == 0 ) + { + int busMidY = ( bus.start.y + bus.end.y ) / 2; + sign = ( pt.y <= busMidY ) ? 1 : -1; + } + + dy = sign * entrySize; + } + + // Bus entry position is on the bus; its end (pos + size) is on the wire side + auto entry = std::make_unique( pt ); + entry->SetSize( VECTOR2I( dx, dy ) ); + + // Shorten the wire so it starts at the bus entry tip instead of the bus + VECTOR2I entryTip = pt + VECTOR2I( dx, dy ); + + if( wire->GetStartPoint() == pt ) + wire->SetStartPoint( entryTip ); + else + wire->SetEndPoint( entryTip ); + + m_screen->Append( entry.release() ); + } + } +} + + +void SCH_IO_GEDA::loadDeferredSheets() +{ + for( const DEFERRED_SHEET& deferred : m_deferredSheets ) + { + SCH_SHEET* sheet = deferred.sheet; + + SCH_SCREEN* subScreen = new SCH_SCREEN( m_schematic ); + subScreen->SetFileName( deferred.sourceFile ); + sheet->SetScreen( subScreen ); + + // Use a fresh importer instance for each sub-schematic to avoid + // clobbering parse state. Share the import stack for recursion detection + // and the symbol library cache to avoid redundant filesystem scanning. + SCH_IO_GEDA subImporter; + subImporter.m_importStack = m_importStack; + subImporter.m_importStack.insert( m_filename.GetFullPath() ); + for( const auto& [name, entry] : m_symLibrary ) + { + SYM_CACHE_ENTRY subEntry; + subEntry.path = entry.path; + subImporter.m_symLibrary[name] = std::move( subEntry ); + } + + subImporter.m_symLibraryInitialized = m_symLibraryInitialized; + + try + { + subImporter.LoadSchematicFile( deferred.sourceFile, m_schematic, + sheet, m_properties ); + + // Merge any newly-discovered symbols back into the parent cache + // so subsequent sub-schematics benefit from them. + for( auto& [name, entry] : subImporter.m_symLibrary ) + { + if( m_symLibrary.find( name ) == m_symLibrary.end() ) + m_symLibrary[name] = std::move( entry ); + } + } + catch( const IO_ERROR& e ) + { + if( m_reporter ) + { + m_reporter->Report( + wxString::Format( _( "Failed to load sub-schematic '%s': %s" ), + deferred.sourceFile, e.What() ), + RPT_SEVERITY_WARNING ); + } + } + } +} + + +void SCH_IO_GEDA::fitPageToContent() +{ + BOX2I bbox; + + for( SCH_ITEM* item : m_screen->Items() ) + bbox.Merge( item->GetBoundingBox() ); + + if( bbox.GetWidth() == 0 || bbox.GetHeight() == 0 ) + return; + + VECTOR2I targetSize = bbox.GetSize(); + targetSize += VECTOR2I( schIUScale.MilsToIU( 1500 ), schIUScale.MilsToIU( 1500 ) ); + + PAGE_INFO pageInfo = m_screen->GetPageSettings(); + VECTOR2I pageSizeIU = pageInfo.GetSizeIU( schIUScale.IU_PER_MILS ); + + if( pageSizeIU.x < targetSize.x ) + pageInfo.SetWidthMils( schIUScale.IUToMils( targetSize.x ) ); + + if( pageSizeIU.y < targetSize.y ) + pageInfo.SetHeightMils( schIUScale.IUToMils( targetSize.y ) ); + + m_screen->SetPageSettings( pageInfo ); + + pageSizeIU = m_screen->GetPageSettings().GetSizeIU( schIUScale.IU_PER_MILS ); + VECTOR2I sheetCentre( pageSizeIU.x / 2, pageSizeIU.y / 2 ); + VECTOR2I itemsCentre = bbox.Centre(); + + VECTOR2I translation = sheetCentre - itemsCentre; + translation.x = translation.x - translation.x % schIUScale.MilsToIU( 100 ); + translation.y = translation.y - translation.y % schIUScale.MilsToIU( 100 ); + + std::vector allItems; + std::copy( m_screen->Items().begin(), m_screen->Items().end(), + std::back_inserter( allItems ) ); + + for( SCH_ITEM* item : allItems ) + { + item->SetPosition( item->GetPosition() + translation ); + item->ClearFlags(); + m_screen->Update( item ); + } +} + + +// ========================================================================== +// Main entry point +// ========================================================================== + +SCH_SHEET* SCH_IO_GEDA::LoadSchematicFile( const wxString& aFileName, SCHEMATIC* aSchematic, + SCH_SHEET* aAppendToMe, + const std::map* aProperties ) +{ + wxASSERT( !aFileName.IsEmpty() && aSchematic ); + + m_properties = aProperties; + m_schematic = aSchematic; + m_filename = wxFileName( aFileName ); + m_libSymbols.clear(); + m_netEndpoints.clear(); + m_netAttrRecords.clear(); + m_busSegments.clear(); + m_deferredSheets.clear(); + m_pendingComp.reset(); + if( !m_symLibraryInitialized ) + m_symLibrary.clear(); + + m_maxY = 0; + m_releaseVersion = 0; + m_fileFormatVersion = 0; + m_powerCounter = 0; + + if( aAppendToMe ) + { + wxCHECK_MSG( aSchematic->IsValid(), nullptr, + "Can't append to a schematic with no root!" ); + m_rootSheet = aAppendToMe; + } + else + { + m_rootSheet = new SCH_SHEET( aSchematic ); + m_rootSheet->SetFileName( aFileName ); + aSchematic->SetTopLevelSheets( { m_rootSheet } ); + } + + if( !m_rootSheet->GetScreen() ) + { + SCH_SCREEN* screen = new SCH_SCREEN( aSchematic ); + screen->SetFileName( aFileName ); + m_rootSheet->SetScreen( screen ); + const_cast( m_rootSheet->m_Uuid ) = screen->GetUuid(); + } + + m_screen = m_rootSheet->GetScreen(); + + wxTextFile file; + + if( !file.Open( aFileName ) ) + THROW_IO_ERROR( wxString::Format( _( "Cannot open file '%s'." ), aFileName ) ); + + if( file.GetLineCount() == 0 ) + THROW_IO_ERROR( wxString::Format( _( "File '%s' is empty." ), aFileName ) ); + + // First pass: scan for max Y coordinate to set up the Y-flip transform. + // We need this before creating objects because coordinates are transformed during creation. + for( size_t i = 0; i < file.GetLineCount(); i++ ) + { + wxString line = file.GetLine( i ); + wxChar type = line.IsEmpty() ? '\0' : line[0]; + + // Skip embedded component blocks entirely. Their coordinates are + // symbol-local and must not affect the schematic-level Y extent. + if( type == '[' ) + { + while( ++i < file.GetLineCount() ) + { + if( file.GetLine( i ).Trim() == wxT( "]" ) ) + break; + } + + continue; + } + + if( type == 'C' || type == 'N' || type == 'U' || type == 'T' || type == 'L' + || type == 'B' || type == 'V' || type == 'A' || type == 'P' || type == 'G' ) + { + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip type + + long val = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken(); // x or x1 + + if( tok.HasMoreTokens() ) + { + tok.GetNextToken().ToLong( &val ); + + if( val > m_maxY ) + m_maxY = static_cast( val ); + } + + if( type == 'N' || type == 'U' || type == 'L' || type == 'P' ) + { + if( tok.HasMoreTokens() ) tok.GetNextToken(); // x2 + + if( tok.HasMoreTokens() ) + { + tok.GetNextToken().ToLong( &val ); + + if( val > m_maxY ) + m_maxY = static_cast( val ); + } + } + + if( type == 'B' ) + { + long bw = 0, bh = 0; + + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &bw ); + if( tok.HasMoreTokens() ) tok.GetNextToken().ToLong( &bh ); + + long top = val + bh; + + if( top > m_maxY ) + m_maxY = static_cast( top ); + } + + if( type == 'V' || type == 'A' ) + { + // V: cx cy radius ... A: cx cy radius ... + // After reading cy into val, the next token is radius + long radius = 0; + + if( tok.HasMoreTokens() ) + tok.GetNextToken().ToLong( &radius ); + + long extent = val + radius; + + if( extent > m_maxY ) + m_maxY = static_cast( extent ); + } + + // T lines have content lines that follow the header. Skip them + // to avoid misinterpreting text as object lines. + // Format: T x y color size vis show_nv angle align num_lines + // tok has consumed: type, x (skipped), y (read). Skip remaining 6 + // fields to reach num_lines. + if( type == 'T' ) + { + long numTextLines = 1; + + for( int j = 0; j < 6 && tok.HasMoreTokens(); j++ ) + tok.GetNextToken(); + + if( tok.HasMoreTokens() ) + tok.GetNextToken().ToLong( &numTextLines ); + + i += static_cast( numTextLines ); + } + } + else if( type == 'H' ) + { + // Scan H path lines for Y coordinates in subsequent lines + wxStringTokenizer tok( line ); + tok.GetNextToken(); // skip 'H' + long numlines = 0; + + for( int j = 0; j < 12 && tok.HasMoreTokens(); j++ ) + tok.GetNextToken(); + + if( tok.HasMoreTokens() ) + tok.GetNextToken().ToLong( &numlines ); + + for( long j = 0; j < numlines && ( i + 1 ) < file.GetLineCount(); j++ ) + { + i++; + wxString pathLine = file.GetLine( i ); + wxStringTokenizer ptok( pathLine, wxT( " ,\t" ) ); + + // Path data uses SVG-like commands: M x,y L x,y C x1,y1 x2,y2 x3,y3 z + // Coordinate pairs alternate X then Y. Command letters reset to X. + bool nextIsY = false; + + while( ptok.HasMoreTokens() ) + { + wxString token = ptok.GetNextToken(); + + if( token.length() == 1 && wxIsalpha( token[0] ) ) + { + nextIsY = false; + continue; + } + + long pval = 0; + + if( token.ToLong( &pval ) ) + { + if( nextIsY && pval > m_maxY ) + m_maxY = static_cast( pval ); + + nextIsY = !nextIsY; + } + } + } + } + } + + m_maxY += 1000; + + // Parse version line + size_t lineIdx = 0; + wxString firstLine = file.GetLine( lineIdx ); + lineIdx++; + + if( !parseVersionLine( firstLine ) ) + { + THROW_IO_ERROR( wxString::Format( _( "File '%s' is not a valid gEDA schematic." ), + aFileName ) ); + } + + // Main parse loop + while( lineIdx < file.GetLineCount() ) + { + wxString line = file.GetLine( lineIdx ); + lineIdx++; + + if( line.IsEmpty() ) + continue; + + wxChar type = line[0]; + + switch( type ) + { + case 'C': + parseComponent( line, file, lineIdx ); + break; + + case 'N': + parseNet( line, file, lineIdx ); + break; + + case 'U': + parseBus( line, file, lineIdx ); + break; + + case 'T': + parseText( line, file, lineIdx ); + break; + + case 'L': + parseLine( line, file, lineIdx ); + break; + + case 'B': + parseBox( line, file, lineIdx ); + break; + + case 'V': + parseCircle( line, file, lineIdx ); + break; + + case 'A': + parseArc( line, file, lineIdx ); + break; + + case 'H': + parsePath( line, file, lineIdx ); + break; + + case 'G': + parsePicture( line, file, lineIdx ); + break; + + case 'P': + parsePin( line, file, lineIdx ); + break; + + case '[': + parseEmbeddedComponent( file, lineIdx ); + break; + + case '{': + { + while( lineIdx < file.GetLineCount() ) + { + if( file.GetLine( lineIdx ).Trim() == wxT( "}" ) ) + { + lineIdx++; + break; + } + + lineIdx++; + } + + break; + } + + case '#': + case 'v': + default: + break; + } + } + + postProcess(); + + // Size the page to fit the imported content and center it, following + // the same approach as the Eagle importer. + fitPageToContent(); + + // Multi-page support: when the project handler passes additional schematic + // files, create sub-sheets for each and load them into the hierarchy. + if( aProperties ) + { + auto it = aProperties->find( "additional_schematics" ); + + if( it != aProperties->end() ) + { + wxString additionalFiles = wxString::FromUTF8( it->second.c_str() ); + wxStringTokenizer tok( additionalFiles, wxT( ";" ) ); + int sheetY = schIUScale.MilsToIU( 500 ); + int sheetSpacing = schIUScale.MilsToIU( 2000 ); + int pageNum = 2; + + while( tok.HasMoreTokens() ) + { + wxString filePath = tok.GetNextToken(); + wxFileName fn( filePath ); + + VECTOR2I pos( schIUScale.MilsToIU( 500 ), sheetY ); + VECTOR2I size( schIUScale.MilsToIU( 2000 ), schIUScale.MilsToIU( 1500 ) ); + + auto subSheet = std::make_unique( m_rootSheet, pos, size ); + + subSheet->GetField( FIELD_T::SHEET_NAME )->SetText( + wxString::Format( wxT( "Page %d" ), pageNum ) ); + subSheet->GetField( FIELD_T::SHEET_FILENAME )->SetText( fn.GetFullName() ); + subSheet->SetFileName( fn.GetFullName() ); + + SCH_SHEET* subSheetPtr = subSheet.get(); + m_screen->Append( subSheet.release() ); + + if( fn.FileExists() ) + { + SCH_SCREEN* subScreen = new SCH_SCREEN( m_schematic ); + subScreen->SetFileName( fn.GetFullPath() ); + subSheetPtr->SetScreen( subScreen ); + + SCH_IO_GEDA subImporter; + + for( const auto& [name, entry] : m_symLibrary ) + { + SYM_CACHE_ENTRY copy; + copy.path = entry.path; + copy.symversion = entry.symversion; + copy.netAttr = entry.netAttr; + subImporter.m_symLibrary[name] = std::move( copy ); + } + + subImporter.m_symLibraryInitialized = m_symLibraryInitialized; + + try + { + subImporter.LoadSchematicFile( fn.GetFullPath(), m_schematic, + subSheetPtr, nullptr ); + } + catch( const IO_ERROR& e ) + { + if( m_reporter ) + { + m_reporter->Report( + wxString::Format( _( "Failed to load page '%s': %s" ), + fn.GetFullName(), e.What() ), + RPT_SEVERITY_WARNING ); + } + } + } + + sheetY += sheetSpacing; + pageNum++; + } + } + } + + return m_rootSheet; +} diff --git a/eeschema/sch_io/geda/sch_io_geda.h b/eeschema/sch_io/geda/sch_io_geda.h new file mode 100644 index 0000000000..ef1dc86627 --- /dev/null +++ b/eeschema/sch_io/geda/sch_io_geda.h @@ -0,0 +1,365 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright The 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 3 + * 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, see . + * + * This file contains file format knowledge derived from the gEDA and + * Lepton EDA projects: + * + * gEDA/gaf - Copyright (C) 1998-2010 Ales Hvezda + * Copyright (C) 1998-2016 gEDA Contributors + * Lepton EDA - Copyright (C) 2017-2024 Lepton EDA Contributors + * + * Both projects are licensed under the GNU General Public License v2 or later. + * See https://github.com/lepton-eda/lepton-eda and + * https://github.com/rlutz/geda-gaf + */ + +#ifndef SCH_IO_GEDA_H_ +#define SCH_IO_GEDA_H_ + +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +class LIB_SYMBOL; +class SCH_SHEET; +class SCH_SCREEN; +class SCH_SYMBOL; +class SCH_LINE; +class SCH_TEXT; +class SCH_SHAPE; +class SCH_JUNCTION; +class SCH_NO_CONNECT; +class SCH_PIN; +class SCHEMATIC; + + +/** + * A #SCH_IO derivation for loading gEDA/gschem schematic files (.sch). + * + * gEDA schematics are ASCII text files with a simple line-oriented format. + * Each object type is identified by the first character of its definition line: + * C=component, N=net, U=bus, P=pin, T=text, L=line, B=box, V=circle, + * A=arc, H=path, G=picture, {=attributes, [=embedded component. + * + * Symbol loading follows the sch-rnd model: .sym files are discovered by + * scanning standard gEDA library directories and loaded on first reference. + * Embedded symbols (defined inline via [] blocks) are also supported. + */ +class SCH_IO_GEDA : public SCH_IO +{ +public: + SCH_IO_GEDA(); + ~SCH_IO_GEDA() override; + + const IO_BASE::IO_FILE_DESC GetSchematicFileDesc() const override + { + return IO_BASE::IO_FILE_DESC( _HKI( "gEDA / Lepton EDA schematic files" ), { "sch" } ); + } + + const IO_BASE::IO_FILE_DESC GetLibraryDesc() const override + { + return IO_BASE::IO_FILE_DESC( wxEmptyString, {} ); + } + + bool CanReadSchematicFile( const wxString& aFileName ) const override; + + int GetModifyHash() const override { return 0; } + + SCH_SHEET* LoadSchematicFile( const wxString& aFileName, SCHEMATIC* aSchematic, + SCH_SHEET* aAppendToMe = nullptr, + const std::map* aProperties = nullptr ) override; + + bool IsLibraryWritable( const wxString& aLibraryPath ) override { return false; } + + /// Return the map of built-in gEDA symbol definitions (symbol name -> .sym content). + static const std::map& getBuiltinSymbols(); + +private: + // ----------------------------------------------------------------------- + // Data types + // ----------------------------------------------------------------------- + + /// Parsed attribute from a gEDA T line inside a { } block. + struct GEDA_ATTR + { + wxString name; + wxString value; + int x = 0; + int y = 0; + int size = 10; + int angle = 0; + int align = 0; + bool visible = false; + int showNV = 0; ///< 0=name+value, 1=value, 2=name + }; + + /// Pending component waiting for symbol resolution. + /// A gEDA C line defers actual symbol loading until we know whether + /// the definition is embedded ([] block) or from the library. + struct PENDING_COMPONENT + { + wxString basename; + int x = 0; + int y = 0; + int angle = 0; + int mirror = 0; + int selectable = 1; + std::vector attrs; + bool embedded = false; + std::unique_ptr embeddedSym; + }; + + /// Entry in the symbol library search cache. + struct SYM_CACHE_ENTRY + { + wxString path; ///< Full path to .sym file + std::unique_ptr symbol; ///< Loaded symbol (null if not yet loaded) + wxString symversion; ///< symversion from the .sym file (if any) + wxString netAttr; ///< net= attribute (e.g. "GND:1") identifying power symbols + }; + + // ----------------------------------------------------------------------- + // Coordinate transformation + // ----------------------------------------------------------------------- + + /// gEDA coordinates are mils with Y-up. KiCad uses 100nm IU with Y-down. + /// During parsing we store raw gEDA coordinates, then post-process to flip Y. + static constexpr int MILS_TO_IU = 254; + + /// Convert a gEDA distance in mils to KiCad IU. + int toKiCadDist( int aMils ) const; + + /// Apply the Y-flip and scale to transform gEDA coords to KiCad. + /// Call only after m_maxY has been computed in the post-processing pass. + VECTOR2I toKiCad( int aGedaX, int aGedaY ) const; + + // ----------------------------------------------------------------------- + // File parsing + // ----------------------------------------------------------------------- + + /// Parse the "v YYYYMMDD N" version line and validate. + bool parseVersionLine( const wxString& aLine ); + + /// Read a { } attribute block starting after the '{' line. + std::vector parseAttributes( wxTextFile& aFile, size_t& aLineIdx ); + + /// Find an attribute by name, returns empty string if not found. + wxString findAttr( const std::vector& aAttrs, const wxString& aName ) const; + + /// Find a GEDA_ATTR struct by name, returns nullptr if not found. + const GEDA_ATTR* findAttrStruct( const std::vector& aAttrs, + const wxString& aName ) const; + + /// Check for and consume a { } attribute block at the current line position. + std::vector maybeParseAttributes( wxTextFile& aFile, size_t& aLineIdx ); + + // ----------------------------------------------------------------------- + // Object parsers - schematics + // ----------------------------------------------------------------------- + + void parseComponent( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseNet( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseBus( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseText( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseLine( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseBox( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseCircle( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseArc( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parsePath( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parsePicture( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parsePin( const wxString& aLine, wxTextFile& aFile, size_t& aLineIdx ); + void parseEmbeddedComponent( wxTextFile& aFile, size_t& aLineIdx ); + + // ----------------------------------------------------------------------- + // Symbol loading + // ----------------------------------------------------------------------- + + /// Ensure the symbol library hash is built by scanning gEDA library dirs. + void initSymbolLibrary(); + + /// Recursively scan a directory for .sym files and populate m_symLibrary. + void scanSymbolDir( const wxString& aDir ); + + /// Parse an RC file (gafrc or gschemrc) for component-library directives. + void parseRcFileForLibraries( const wxString& aPath, const wxString& aBaseDir ); + + /// Load a .sym file and return a LIB_SYMBOL. Parses the symbol format + /// which is the same as schematic format but contains P/L/A/V/B/T/H + /// objects within a symbol context. + /// If aSymversion is non-null, the symbol's symversion attribute (if present) is written to it. + /// If aNetAttr is non-null, the symbol's net= attribute (if present) is written to it. + std::unique_ptr loadSymbolFile( const wxString& aPath, + wxString* aSymversion = nullptr, + wxString* aNetAttr = nullptr ); + + /// Parse objects from a .sym file or [] block into a LIB_SYMBOL. + void parseSymbolObjects( wxTextFile& aFile, size_t& aLineIdx, LIB_SYMBOL& aSymbol, + size_t aEndLine ); + + /// Create a pin on a LIB_SYMBOL from gEDA P line data and its attributes. + void addSymbolPin( LIB_SYMBOL& aSymbol, int aX1, int aY1, int aX2, int aY2, + int aWhichEnd, const std::vector& aAttrs ); + + /// Add a graphical item (line/box/circle/arc/path) to a LIB_SYMBOL. + void addSymbolGraphic( LIB_SYMBOL& aSymbol, const wxString& aLine, wxTextFile& aFile, + size_t& aLineIdx, wxChar aType ); + + /// Instantiate the pending component: look up or load the symbol, + /// create SCH_SYMBOL, apply transforms and attributes, and emit to screen. + void flushPendingComponent(); + + /// Import a gEDA hierarchical sub-schematic as a KiCad SCH_SHEET. + /// Called when a component has a source= attribute. + void importHierarchicalSheet( const wxString& aSourceFile ); + + /// Get or load a cached symbol by gEDA basename. + LIB_SYMBOL* getOrLoadSymbol( const wxString& aBasename ); + + /// Try loading a symbol from the built-in standard library embedded in the importer. + std::unique_ptr loadBuiltinSymbol( const wxString& aBasename ); + + /// Create a fallback rectangular symbol when the .sym file is not found. + std::unique_ptr createFallbackSymbol( const wxString& aBasename ); + + /// Map gEDA angle (0/90/180/270) + mirror to KiCad symbol orientation. + int toKiCadOrientation( int aAngle, int aMirror ) const; + + /// Derive the KiCad import library name from the schematic file. + wxString getLibName() const; + + // ----------------------------------------------------------------------- + // Style mapping + // ----------------------------------------------------------------------- + + /// Map gEDA dashstyle (0-4) to KiCad LINE_STYLE. + static LINE_STYLE toLineStyle( int aDashStyle ); + + /// Map gEDA filltype (0-4) to KiCad FILL_T. + static FILL_T toFillType( int aFillType ); + + // ----------------------------------------------------------------------- + // Post-processing + // ----------------------------------------------------------------------- + + /// Track a point as a net or pin endpoint for junction detection. + void trackEndpoint( int aGedaX, int aGedaY ); + + /// Run the full post-processing pipeline after parsing is complete: + /// 1. Flush any pending component + /// 2. Compute bounding box and Y-flip all coordinates + /// 3. Process net= attributes for implicit connections + /// 4. Place junctions where 3+ endpoints meet + void postProcess(); + + /// For each component with net= attributes, create global labels at pin positions. + void processNetAttributes(); + + /// Place junctions where 3+ net/pin endpoints coincide. + void addJunctions(); + + /// Create SCH_BUS_WIRE_ENTRY objects where net endpoints touch bus segments. + void addBusEntries(); + + /// Load sub-schematics for any SCH_SHEET objects created during parsing. + void loadDeferredSheets(); + + /// Enlarge the page if needed and center all content on the sheet. + void fitPageToContent(); + + // ----------------------------------------------------------------------- + // State + // ----------------------------------------------------------------------- + + SCH_SCREEN* m_screen; + SCH_SHEET* m_rootSheet; + SCHEMATIC* m_schematic; + wxFileName m_filename; + + /// The maximum Y coordinate seen during parsing (gEDA coords, before flip). + int m_maxY; + + /// gEDA file version fields from the "v YYYYMMDD N" header line. + /// Used for version-aware parsing of old format files. + long m_releaseVersion; + long m_fileFormatVersion; + + /// Pending component awaiting symbol resolution. + std::unique_ptr m_pendingComp; + + /// Symbol library cache: gEDA basename -> cache entry. + std::map m_symLibrary; + bool m_symLibraryInitialized; + + /// Loaded symbols for this import session, keyed by basename. + std::map> m_libSymbols; + + /// Sequential counter for auto-generated #PWR references. + int m_powerCounter; + + /// Net endpoint positions in raw gEDA coordinates for junction detection. + std::map, int> m_netEndpoints; + + /// Components with net= attributes that need post-processing. + struct NET_ATTR_RECORD + { + wxString netname; + wxString pinnumber; + SCH_SYMBOL* symbol; + }; + + std::vector m_netAttrRecords; + + /// Parsed bus segment in KiCad coordinates with gEDA ripper direction. + struct BUS_SEGMENT + { + VECTOR2I start; + VECTOR2I end; + int ripperDir; ///< -1, 0, or 1 from gEDA U line + }; + + std::vector m_busSegments; + + /// Deferred hierarchical sheet loads. Populated during parsing when components + /// with source= attributes are found, processed after the main parse completes. + struct DEFERRED_SHEET + { + SCH_SHEET* sheet; + wxString sourceFile; ///< Resolved full path to the sub-schematic + }; + + std::vector m_deferredSheets; + + /// Set of fully-resolved file paths currently in the import call stack, + /// used to detect and prevent circular hierarchy references. + std::set m_importStack; + + /// Properties passed from the import framework (search paths, etc.) + const std::map* m_properties; +}; + +#endif // SCH_IO_GEDA_H_ diff --git a/eeschema/sch_io/sch_io_mgr.cpp b/eeschema/sch_io/sch_io_mgr.cpp index aef25e821b..600990e610 100644 --- a/eeschema/sch_io/sch_io_mgr.cpp +++ b/eeschema/sch_io/sch_io_mgr.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -75,6 +76,7 @@ SCH_IO* SCH_IO_MGR::FindPlugin( SCH_FILE_T aFileType ) case SCH_EAGLE: return new SCH_IO_EAGLE(); case SCH_EASYEDA: return new SCH_IO_EASYEDA(); case SCH_EASYEDAPRO: return new SCH_IO_EASYEDAPRO(); + case SCH_GEDA: return new SCH_IO_GEDA(); case SCH_LTSPICE: return new SCH_IO_LTSPICE(); case SCH_HTTP: return new SCH_IO_HTTP_LIB(); case SCH_PADS: return new SCH_IO_PADS(); @@ -99,6 +101,7 @@ const wxString SCH_IO_MGR::ShowType( SCH_FILE_T aType ) case SCH_EAGLE: return wxString( wxT( "EAGLE" ) ); case SCH_EASYEDA: return wxString( wxT( "EasyEDA (JLCEDA) Std" ) ); case SCH_EASYEDAPRO: return wxString( wxT( "EasyEDA (JLCEDA) Pro" ) ); + case SCH_GEDA: return wxString( wxT( "gEDA / Lepton EDA" ) ); case SCH_LTSPICE: return wxString( wxT( "LTspice" ) ); case SCH_HTTP: return wxString( wxT( "HTTP" ) ); case SCH_PADS: return wxString( wxT( "PADS Logic" ) ); @@ -130,6 +133,8 @@ SCH_IO_MGR::SCH_FILE_T SCH_IO_MGR::EnumFromStr( const wxString& aType ) return SCH_EASYEDA; else if( aType == wxT( "EasyEDA (JLCEDA) Pro" ) ) return SCH_EASYEDAPRO; + else if( aType == wxT( "gEDA / Lepton EDA" ) ) + return SCH_GEDA; else if( aType == wxT( "LTspice" ) ) return SCH_LTSPICE; else if( aType == wxT( "HTTP" ) ) diff --git a/eeschema/sch_io/sch_io_mgr.h b/eeschema/sch_io/sch_io_mgr.h index 67df80aa93..8357332667 100644 --- a/eeschema/sch_io/sch_io_mgr.h +++ b/eeschema/sch_io/sch_io_mgr.h @@ -65,6 +65,7 @@ public: SCH_EAGLE, ///< Autodesk Eagle file format SCH_EASYEDA, ///< EasyEDA Std schematic file SCH_EASYEDAPRO, ///< EasyEDA Pro archive + SCH_GEDA, ///< gEDA/gschem schematic format SCH_LTSPICE, ///< LtSpice Schematic format SCH_HTTP, ///< KiCad HTTP library SCH_PADS, ///< PADS Logic schematic format diff --git a/include/wildcards_and_files_ext.h b/include/wildcards_and_files_ext.h index cc2d18cfa7..b664e9b634 100644 --- a/include/wildcards_and_files_ext.h +++ b/include/wildcards_and_files_ext.h @@ -253,6 +253,7 @@ public: static wxString AltiumProjectFilesWildcard(); static wxString EagleFilesWildcard(); static wxString PADSProjectFilesWildcard(); + static wxString GedaProjectFilesWildcard(); static wxString EasyEdaArchiveWildcard(); static wxString EasyEdaProFileWildcard(); static wxString PdfFileWildcard(); diff --git a/kicad/import_proj.cpp b/kicad/import_proj.cpp index 2260bde8c2..8028c78d4e 100644 --- a/kicad/import_proj.cpp +++ b/kicad/import_proj.cpp @@ -25,7 +25,11 @@ #include #include +#include #include +#include +#include +#include #include #include @@ -330,6 +334,252 @@ void IMPORT_PROJ_HELPER::ImportPadsFiles() } +void IMPORT_PROJ_HELPER::GedaProjectHandler() +{ + wxFileName prjFile = m_InputFile; + + if( prjFile.GetExt().CmpNoCase( "prj" ) != 0 ) + return; + + wxTextFile file; + + if( !file.Open( prjFile.GetFullPath() ) ) + { + wxLogWarning( _( "Could not open gEDA / Lepton EDA project file '%s'." ), prjFile.GetFullPath() ); + return; + } + + std::vector schFiles; + wxString outputName; + wxString elementsDir; + + for( size_t i = 0; i < file.GetLineCount(); ++i ) + { + wxString line = file.GetLine( i ); + + line.Trim( true ); + line.Trim( false ); + + if( line.IsEmpty() ) + continue; + + if( line.StartsWith( wxT( "#" ) ) || line.StartsWith( wxT( ";" ) ) ) + continue; + + int commentPos = line.Find( wxT( "#" ) ); + + if( commentPos != wxNOT_FOUND ) + { + line = line.Left( commentPos ); + line.Trim( true ); + line.Trim( false ); + } + + if( line.IsEmpty() ) + continue; + + wxStringTokenizer tok( line ); + + if( !tok.HasMoreTokens() ) + continue; + + wxString keyword = tok.GetNextToken(); + + if( keyword.CmpNoCase( "schematics" ) == 0 ) + { + while( tok.HasMoreTokens() ) + { + wxString schToken = tok.GetNextToken(); + wxFileName schFile( schToken ); + + if( !schFile.IsAbsolute() ) + schFile.MakeAbsolute( prjFile.GetPath() ); + + schFiles.push_back( schFile ); + } + } + else if( keyword.CmpNoCase( "output-name" ) == 0 ) + { + wxString rest = line.Mid( keyword.length() ); + rest.Trim( true ); + rest.Trim( false ); + outputName = rest; + } + else if( keyword.CmpNoCase( "elements-dir" ) == 0 ) + { + wxString rest = line.Mid( keyword.length() ); + rest.Trim( true ); + rest.Trim( false ); + elementsDir = rest; + } + } + + if( !elementsDir.IsEmpty() ) + { + wxFileName elementsPath( elementsDir ); + + if( !elementsPath.IsAbsolute() ) + elementsPath.MakeAbsolute( prjFile.GetPath() ); + + m_properties["elements_dir"] = elementsPath.GetFullPath().ToStdString(); + } + + if( schFiles.empty() ) + { + wxFileName candidate = prjFile; + candidate.SetExt( wxS( "sch" ) ); + + if( candidate.FileExists() ) + schFiles.push_back( candidate ); + } + + auto promptForMissingFile = + [&]( const wxString& aTitle, const wxString& aWildcard, wxFileName& aFile ) -> bool + { + wxString defaultDir = aFile.GetPath(); + + if( defaultDir.IsEmpty() ) + defaultDir = prjFile.GetPath(); + + wxFileDialog dlg( m_frame, aTitle, defaultDir, wxEmptyString, aWildcard, + wxFD_OPEN | wxFD_FILE_MUST_EXIST ); + + if( dlg.ShowModal() == wxID_OK ) + { + aFile.Assign( dlg.GetPath() ); + return true; + } + + aFile.Clear(); + return false; + }; + + std::vector resolvedSchFiles; + const wxString schWildcard = _( "gEDA / Lepton EDA schematic files" ) + wxS( " (*.sch)|*.sch" ); + + for( wxFileName schFile : schFiles ) + { + if( !schFile.FileExists() ) + { + if( !promptForMissingFile( _( "Locate gEDA / Lepton EDA Schematic" ), schWildcard, schFile ) ) + continue; + } + + resolvedSchFiles.push_back( schFile ); + } + + if( schFiles.empty() && resolvedSchFiles.empty() ) + { + wxFileName schFile; + + if( promptForMissingFile( _( "Locate gEDA / Lepton EDA Schematic" ), schWildcard, schFile ) ) + resolvedSchFiles.push_back( schFile ); + } + + if( resolvedSchFiles.size() > 1 ) + { + // Pass additional schematic files as a semicolon-delimited property so the + // importer can create sub-sheets for each additional page within a single + // KiCad project hierarchy. + wxString additionalFiles; + + for( size_t i = 1; i < resolvedSchFiles.size(); i++ ) + { + if( !additionalFiles.IsEmpty() ) + additionalFiles += wxT( ";" ); + + additionalFiles += resolvedSchFiles[i].GetFullPath(); + } + + m_properties["additional_schematics"] = additionalFiles.ToStdString(); + } + + // Auto-discover subdirectories containing .sym files and pass them as + // additional search paths for the importer's symbol resolution. + auto discoverSymDirs = [&]( const wxString& aBaseDir, wxString& aSymPaths ) + { + wxDir dir( aBaseDir ); + + if( !dir.IsOpened() ) + return; + + wxString subdir; + bool cont = dir.GetFirst( &subdir, wxEmptyString, wxDIR_DIRS ); + + while( cont ) + { + wxString subdirPath = aBaseDir + wxFileName::GetPathSeparator() + subdir; + wxDir childDir( subdirPath ); + + if( childDir.IsOpened() && childDir.HasFiles( wxT( "*.sym" ) ) ) + { + if( !aSymPaths.IsEmpty() ) + aSymPaths += wxT( "\n" ); + + aSymPaths += subdirPath; + } + + cont = dir.GetNext( &subdir ); + } + }; + + wxString symPaths; + discoverSymDirs( prjFile.GetPath(), symPaths ); + + if( !resolvedSchFiles.empty() ) + { + wxString schDir = resolvedSchFiles[0].GetPath(); + + if( schDir != prjFile.GetPath() ) + discoverSymDirs( schDir, symPaths ); + } + + if( !symPaths.IsEmpty() ) + m_properties["sym_search_paths"] = symPaths.ToStdString(); + + if( !resolvedSchFiles.empty() ) + doImport( resolvedSchFiles[0].GetFullPath(), FRAME_SCH, SCH_IO_MGR::SCH_GEDA ); + + wxFileName layoutDir( prjFile.GetPath(), wxEmptyString ); + layoutDir.RemoveLastDir(); + layoutDir.AppendDir( wxS( "layout" ) ); + + wxFileName pcbFile; + + if( !outputName.IsEmpty() ) + { + wxFileName candidate( layoutDir.GetPath(), outputName, wxS( "pcb" ) ); + + if( candidate.FileExists() ) + pcbFile = candidate; + } + + if( !pcbFile.FileExists() ) + { + wxFileName candidate( prjFile.GetPath(), prjFile.GetName(), wxS( "pcb" ) ); + + if( candidate.FileExists() ) + pcbFile = candidate; + } + + if( !pcbFile.FileExists() ) + { + wxFileName candidate( layoutDir.GetPath(), prjFile.GetName(), wxS( "pcb" ) ); + + if( candidate.FileExists() ) + pcbFile = candidate; + } + + const wxString pcbWildcard = _( "gEDA / Lepton EDA PCB files" ) + wxS( " (*.pcb)|*.pcb" ); + + if( !pcbFile.FileExists() ) + promptForMissingFile( _( "Locate gEDA / Lepton EDA PCB" ), pcbWildcard, pcbFile ); + + if( pcbFile.FileExists() ) + doImport( pcbFile.GetFullPath(), FRAME_PCB_EDITOR, PCB_IO_MGR::GEDA_PCB ); +} + + void IMPORT_PROJ_HELPER::ImportFiles( int aImportedSchFileType, int aImportedPcbFileType ) { m_properties.clear(); @@ -345,6 +595,57 @@ void IMPORT_PROJ_HELPER::ImportFiles( int aImportedSchFileType, int aImportedPcb AltiumProjectHandler(); return; } + else if( aImportedSchFileType == SCH_IO_MGR::SCH_GEDA ) + { + if( m_InputFile.GetExt().CmpNoCase( "prj" ) == 0 ) + { + GedaProjectHandler(); + } + else if( m_InputFile.GetExt().CmpNoCase( "pcb" ) == 0 ) + { + ImportIndividualFile( PCB_T, aImportedPcbFileType ); + } + else + { + // When importing a bare .sch file, pass the original source directory + // so the importer can find symbols in subdirectories relative to the + // gEDA / Lepton EDA schematic, even though the file may be copied to a new location + // for the KiCad project. + wxString sourceDir = m_InputFile.GetPath(); + wxString symPaths = sourceDir; + + auto discoverSymDirs = [&]( const wxString& aBaseDir ) + { + wxDir dir( aBaseDir ); + + if( !dir.IsOpened() ) + return; + + wxString subdir; + bool cont = dir.GetFirst( &subdir, wxEmptyString, wxDIR_DIRS ); + + while( cont ) + { + wxString subdirPath = + aBaseDir + wxFileName::GetPathSeparator() + subdir; + wxDir childDir( subdirPath ); + + if( childDir.IsOpened() && childDir.HasFiles( wxT( "*.sym" ) ) ) + symPaths += wxT( "\n" ) + subdirPath; + + cont = dir.GetNext( &subdir ); + } + }; + + discoverSymDirs( sourceDir ); + m_properties["sym_search_paths"] = symPaths.ToStdString(); + + doImport( m_InputFile.GetFullPath(), FRAME_SCH, SCH_IO_MGR::SCH_GEDA ); + ImportIndividualFile( PCB_T, aImportedPcbFileType ); + } + + return; + } ImportIndividualFile( SCHEMATIC_T, aImportedSchFileType ); ImportIndividualFile( PCB_T, aImportedPcbFileType ); diff --git a/kicad/import_proj.h b/kicad/import_proj.h index e160761fb9..040de3f296 100644 --- a/kicad/import_proj.h +++ b/kicad/import_proj.h @@ -82,6 +82,8 @@ private: void EasyEDAProProjectHandler(); void AltiumProjectHandler(); + + void GedaProjectHandler(); }; #endif diff --git a/kicad/import_project.cpp b/kicad/import_project.cpp index faef7949c0..f5748f0eca 100644 --- a/kicad/import_project.cpp +++ b/kicad/import_project.cpp @@ -203,3 +203,11 @@ void KICAD_MANAGER_FRAME::OnImportPadsProjectFiles( wxCommandEvent& event ) { "asc", "txt" }, { "asc", "txt" }, SCH_IO_MGR::SCH_PADS, PCB_IO_MGR::PADS ); } + + +void KICAD_MANAGER_FRAME::OnImportGedaFiles( wxCommandEvent& event ) +{ + ImportNonKiCadProject( _( "Import gEDA / Lepton EDA Project Files" ), + FILEEXT::GedaProjectFilesWildcard(), { "prj", "sch" }, { "pcb" }, + SCH_IO_MGR::SCH_GEDA, PCB_IO_MGR::GEDA_PCB ); +} diff --git a/kicad/kicad_id.h b/kicad/kicad_id.h index 9db700508a..cb1518336c 100644 --- a/kicad/kicad_id.h +++ b/kicad/kicad_id.h @@ -41,7 +41,8 @@ enum id_kicad_frm { ID_IMPORT_EASYEDA_PROJECT, ID_IMPORT_EASYEDAPRO_PROJECT, ID_IMPORT_ALTIUM_PROJECT, - ID_IMPORT_PADS_PROJECT + ID_IMPORT_PADS_PROJECT, + ID_IMPORT_GEDA_PROJECT }; #endif diff --git a/kicad/kicad_manager_frame.cpp b/kicad/kicad_manager_frame.cpp index 855d60487a..dbfbaf1df6 100644 --- a/kicad/kicad_manager_frame.cpp +++ b/kicad/kicad_manager_frame.cpp @@ -119,6 +119,7 @@ BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME ) EVT_MENU( ID_IMPORT_EASYEDAPRO_PROJECT, KICAD_MANAGER_FRAME::OnImportEasyEdaProFiles ) EVT_MENU( ID_IMPORT_ALTIUM_PROJECT, KICAD_MANAGER_FRAME::OnImportAltiumProjectFiles ) EVT_MENU( ID_IMPORT_PADS_PROJECT, KICAD_MANAGER_FRAME::OnImportPadsProjectFiles ) + EVT_MENU( ID_IMPORT_GEDA_PROJECT, KICAD_MANAGER_FRAME::OnImportGedaFiles ) // Range menu events EVT_MENU_RANGE( ID_FILE1, ID_FILEMAX, KICAD_MANAGER_FRAME::OnFileHistory ) diff --git a/kicad/kicad_manager_frame.h b/kicad/kicad_manager_frame.h index 8e2275ecae..7db29207ab 100644 --- a/kicad/kicad_manager_frame.h +++ b/kicad/kicad_manager_frame.h @@ -130,6 +130,11 @@ public: */ void OnImportPadsProjectFiles( wxCommandEvent& event ); + /** + * Open dialog to import gEDA/gaf schematic and PCB files. + */ + void OnImportGedaFiles( wxCommandEvent& event ); + /** * Prints the current working directory name and the project name on the text panel. */ diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp index 9a2873444e..8a4a96d131 100644 --- a/kicad/menubar.cpp +++ b/kicad/menubar.cpp @@ -149,6 +149,11 @@ void KICAD_MANAGER_FRAME::doReCreateMenuBar() _( "Import PADS Logic schematic and PADS ASCII PCB (*.asc, *.txt)" ), ID_IMPORT_PADS_PROJECT, BITMAPS::import_project ); + importMenu->Add( _( "gEDA / Lepton EDA Project..." ), + _( "Import gEDA or Lepton EDA schematic and PCB layout" ), + ID_IMPORT_GEDA_PROJECT, + BITMAPS::import_project ); + fileMenu->Add( importMenu ); fileMenu->AppendSeparator(); diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index 4fc7a0f14a..7a0d44bcff 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -1187,6 +1187,7 @@ bool PCB_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType, case PCB_IO_MGR::EAGLE: case PCB_IO_MGR::EASYEDA: case PCB_IO_MGR::EASYEDAPRO: + case PCB_IO_MGR::GEDA_PCB: return OpenProjectFiles( std::vector( 1, aFileName ), KICTL_NONKICAD_ONLY | KICTL_IMPORT_LIB ); case PCB_IO_MGR::ALTIUM_DESIGNER: diff --git a/pcbnew/pcb_io/geda/pcb_io_geda.cpp b/pcbnew/pcb_io/geda/pcb_io_geda.cpp index ae3ff2c5dd..5cbedac8b3 100644 --- a/pcbnew/pcb_io/geda/pcb_io_geda.cpp +++ b/pcbnew/pcb_io/geda/pcb_io_geda.cpp @@ -20,6 +20,16 @@ * 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 + * + * This file contains file format knowledge derived from the gEDA/pcb project: + * + * gEDA/gaf - Copyright (C) 1998-2010 Ales Hvezda + * Copyright (C) 1998-2016 gEDA Contributors + * Lepton EDA - Copyright (C) 2017-2024 Lepton EDA Contributors + * + * Both projects are licensed under the GNU General Public License v2 or later. + * See https://github.com/lepton-eda/lepton-eda and + * https://github.com/rlutz/geda-gaf */ /** @@ -35,18 +45,23 @@ #include // for KiROUND #include +#include #include #include +#include #include #include #include +#include #include #include +#include #include #include #include #include +#include #include #include #include @@ -100,6 +115,11 @@ static inline long parseInt( const wxString& aValue, double aScalar ) } +#define TEXT_DEFAULT_SIZE ( 40 * pcbIUScale.IU_PER_MILS ) +#define OLD_GPCB_UNIT_CONV pcbIUScale.IU_PER_MILS +#define NEW_GPCB_UNIT_CONV ( 0.01 * pcbIUScale.IU_PER_MILS ) + + /** * helper class for creating a footprint library cache. * @@ -307,12 +327,6 @@ long long GPCB_FPL_CACHE::GetTimestamp( const wxString& aLibPath ) FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) { - #define TEXT_DEFAULT_SIZE ( 40*pcbIUScale.IU_PER_MILS ) - #define OLD_GPCB_UNIT_CONV pcbIUScale.IU_PER_MILS - - // Old version unit = 1 mil, so conv_unit is 10 or 0.1 - #define NEW_GPCB_UNIT_CONV ( 0.01*pcbIUScale.IU_PER_MILS ) - int paramCnt; // GPCB unit = 0.01 mils and Pcbnew 0.1. @@ -417,11 +431,11 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) PCB_SHAPE* shape = new PCB_SHAPE( footprint.get(), SHAPE_T::SEGMENT ); shape->SetLayer( F_SilkS ); - shape->SetStart( VECTOR2I( parseInt( parameters[2], conv_unit ), - parseInt( parameters[3], conv_unit ) ) ); - shape->SetEnd( VECTOR2I( parseInt( parameters[4], conv_unit ), - parseInt( parameters[5], conv_unit ) ) ); - shape->SetStroke( STROKE_PARAMS( parseInt( parameters[6], conv_unit ), + shape->SetStart( VECTOR2I( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ) ); + shape->SetEnd( VECTOR2I( static_cast( parseInt( parameters[4], conv_unit ) ), + static_cast( parseInt( parameters[5], conv_unit ) ) ) ); + shape->SetStroke( STROKE_PARAMS( static_cast( parseInt( parameters[6], conv_unit ) ), LINE_STYLE::SOLID ) ); shape->Rotate( { 0, 0 }, footprint->GetOrientation() ); @@ -447,18 +461,20 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) footprint->Add( shape ); // for and arc: ibuf[3] = ibuf[4]. Pcbnew does not know ellipses - int radius = ( parseInt( parameters[4], conv_unit ) + - parseInt( parameters[5], conv_unit ) ) / 2; + int radius = static_cast( ( parseInt( parameters[4], conv_unit ) + + parseInt( parameters[5], conv_unit ) ) / 2 ); - VECTOR2I centre( parseInt( parameters[2], conv_unit ), - parseInt( parameters[3], conv_unit ) ); + VECTOR2I centre( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ); // Pcbnew start angles are inverted and 180 degrees from Geda PCB angles. - EDA_ANGLE start_angle( (int) parseInt( parameters[6], -10.0 ), TENTHS_OF_A_DEGREE_T ); + EDA_ANGLE start_angle( static_cast( parseInt( parameters[6], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); start_angle += ANGLE_180; // Pcbnew delta angle direction is the opposite of Geda PCB delta angles. - EDA_ANGLE sweep_angle( (int) parseInt( parameters[7], -10.0 ), TENTHS_OF_A_DEGREE_T ); + EDA_ANGLE sweep_angle( static_cast( parseInt( parameters[7], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); // Geda PCB does not support circles. if( sweep_angle == -ANGLE_360 ) @@ -479,7 +495,7 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) shape->SetArcAngleAndEnd( sweep_angle, true ); } - shape->SetStroke( STROKE_PARAMS( parseInt( parameters[8], conv_unit ), + shape->SetStroke( STROKE_PARAMS( static_cast( parseInt( parameters[8], conv_unit ) ), LINE_STYLE::SOLID ) ); shape->Rotate( { 0, 0 }, footprint->GetOrientation() ); @@ -523,18 +539,18 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) // can be a bit confusing. pad->SetNumber( parameters[paramCnt-3] ); - int x1 = parseInt( parameters[2], conv_unit ); - int x2 = parseInt( parameters[4], conv_unit ); - int y1 = parseInt( parameters[3], conv_unit ); - int y2 = parseInt( parameters[5], conv_unit ); - int width = parseInt( parameters[6], conv_unit ); + int x1 = static_cast( parseInt( parameters[2], conv_unit ) ); + int x2 = static_cast( parseInt( parameters[4], conv_unit ) ); + int y1 = static_cast( parseInt( parameters[3], conv_unit ) ); + int y2 = static_cast( parseInt( parameters[5], conv_unit ) ); + int width = static_cast( parseInt( parameters[6], conv_unit ) ); VECTOR2I delta( x2 - x1, y2 - y1 ); double angle = atan2( (double)delta.y, (double)delta.x ); // Get the pad clearance and the solder mask clearance. if( paramCnt == 13 ) { - int clearance = parseInt( parameters[7], conv_unit ); + int clearance = static_cast( parseInt( parameters[7], conv_unit ) ); // One of gEDA's oddities is that clearance between pad and polygon // is given as the gap on both sides of the pad together, so for // KiCad it has to halfed. @@ -543,7 +559,7 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) // In GEDA, the mask value is the size of the hole in this // solder mask. In Pcbnew, it is a margin, therefore the distance // between the copper and the mask - int maskMargin = parseInt( parameters[8], conv_unit ); + int maskMargin = static_cast( parseInt( parameters[8], conv_unit ) ); maskMargin = ( maskMargin - width ) / 2; pad->SetLocalSolderMaskMargin( maskMargin ); } @@ -612,10 +628,10 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) // which is used for the same purpose. pad->SetNumber( parameters[paramCnt-3] ); - VECTOR2I padPos( parseInt( parameters[2], conv_unit ), - parseInt( parameters[3], conv_unit ) ); + VECTOR2I padPos( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ); - int padSize = parseInt( parameters[4], conv_unit ); + int padSize = static_cast( parseInt( parameters[4], conv_unit ) ); pad->SetSize( PADSTACK::ALL_LAYERS, VECTOR2I( padSize, padSize ) ); @@ -624,7 +640,7 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) // Get the pad clearance, solder mask clearance, and drill size. if( paramCnt == 12 ) { - int clearance = parseInt( parameters[5], conv_unit ); + int clearance = static_cast( parseInt( parameters[5], conv_unit ) ); // One of gEDA's oddities is that clearance between pad and polygon // is given as the gap on both sides of the pad together, so for // KiCad it has to halfed. @@ -633,15 +649,15 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) // In GEDA, the mask value is the size of the hole in this // solder mask. In Pcbnew, it is a margin, therefore the distance // between the copper and the mask - int maskMargin = parseInt( parameters[6], conv_unit ); + int maskMargin = static_cast( parseInt( parameters[6], conv_unit ) ); maskMargin = ( maskMargin - padSize ) / 2; pad->SetLocalSolderMaskMargin( maskMargin ); - drillSize = parseInt( parameters[7], conv_unit ); + drillSize = static_cast( parseInt( parameters[7], conv_unit ) ); } else { - drillSize = parseInt( parameters[5], conv_unit ); + drillSize = static_cast( parseInt( parameters[5], conv_unit ) ); } pad->SetDrillSize( VECTOR2I( drillSize, drillSize ) ); @@ -762,6 +778,10 @@ void GPCB_FPL_CACHE::parseParameters( wxArrayString& aParameterList, LINE_READER case '#': line = aLineReader->ReadLine(); + + if( !line ) + return; + break; default: @@ -794,7 +814,8 @@ bool GPCB_FPL_CACHE::testFlags( const wxString& aFlag, long aMask, const wxChar* PCB_IO_GEDA::PCB_IO_GEDA() : PCB_IO( wxS( "gEDA PCB" ) ), m_cache( nullptr ), - m_ctl( 0 ) + m_ctl( 0 ), + m_numCopperLayers( 2 ) { m_reader = nullptr; init( nullptr ); @@ -803,7 +824,8 @@ PCB_IO_GEDA::PCB_IO_GEDA() : PCB_IO( wxS( "gEDA PCB" ) ), PCB_IO_GEDA::PCB_IO_GEDA( int aControlFlags ) : PCB_IO( wxS( "gEDA PCB" ) ), m_cache( nullptr ), - m_ctl( aControlFlags ) + m_ctl( aControlFlags ), + m_numCopperLayers( 2 ) { m_reader = nullptr; init( nullptr ); @@ -812,6 +834,9 @@ PCB_IO_GEDA::PCB_IO_GEDA( int aControlFlags ) : PCB_IO( wxS( "gEDA PCB" ) ), PCB_IO_GEDA::~PCB_IO_GEDA() { + for( FOOTPRINT* fp : m_cachedFootprints ) + delete fp; + delete m_cache; } @@ -1042,3 +1067,1054 @@ bool PCB_IO_GEDA::IsLibraryWritable( const wxString& aLibraryPath ) return m_cache->IsWritable(); } + + +// ===================================================================== +// Board-level import +// ===================================================================== + + +void PCB_IO_GEDA::parseParameters( wxArrayString& aParameterList, LINE_READER* aLineReader ) +{ + char key; + wxString tmp; + char* line = aLineReader->Line(); + + while( *line != 0 ) + { + key = *line; + line++; + + switch( key ) + { + case '[': + case '(': + if( !tmp.IsEmpty() ) + { + aParameterList.Add( tmp ); + tmp.Clear(); + } + + tmp.Append( key ); + aParameterList.Add( tmp ); + tmp.Clear(); + + if( aParameterList.GetCount() == 1 ) + { + wxLogTrace( traceGedaPcbPlugin, dump( aParameterList ) ); + return; + } + + break; + + case ']': + case ')': + if( !tmp.IsEmpty() ) + { + aParameterList.Add( tmp ); + tmp.Clear(); + } + + tmp.Append( key ); + aParameterList.Add( tmp ); + wxLogTrace( traceGedaPcbPlugin, dump( aParameterList ) ); + return; + + case '\n': + case '\r': + line = aLineReader->ReadLine(); + + if( !line ) + return; + + KI_FALLTHROUGH; + + case '\t': + case ' ': + if( !tmp.IsEmpty() ) + { + aParameterList.Add( tmp ); + tmp.Clear(); + } + + break; + + case '"': + if( *line == '"' ) + { + line++; + tmp.Clear(); + aParameterList.Add( wxEmptyString ); + break; + } + + while( *line != 0 ) + { + key = *line; + line++; + + if( key == '"' ) + { + aParameterList.Add( tmp ); + tmp.Clear(); + break; + } + else + { + tmp.Append( key ); + } + } + + break; + + case '#': + line = aLineReader->ReadLine(); + + if( !line ) + return; + + break; + + default: + tmp.Append( key ); + break; + } + } +} + + +bool PCB_IO_GEDA::testFlags( const wxString& aFlag, long aMask, const wxChar* aName ) +{ + wxString number; + + if( aFlag.StartsWith( wxT( "0x" ), &number ) || aFlag.StartsWith( wxT( "0X" ), &number ) ) + { + long lflags; + + if( number.ToLong( &lflags, 16 ) && ( lflags & aMask ) ) + return true; + } + else if( aFlag.Contains( aName ) ) + { + return true; + } + + return false; +} + + +bool PCB_IO_GEDA::CanReadBoard( const wxString& aFileName ) const +{ + if( !PCB_IO::CanReadBoard( aFileName ) ) + return false; + + wxFileInputStream input( aFileName ); + + if( !input.IsOk() ) + return false; + + wxTextInputStream text( input ); + + for( int i = 0; i < 20; i++ ) + { + if( input.Eof() ) + return false; + + wxString line = text.ReadLine(); + + if( line.Contains( wxS( "PCB[" ) ) || line.Contains( wxS( "PCB(" ) ) ) + return true; + } + + return false; +} + + +PCB_LAYER_ID PCB_IO_GEDA::mapLayer( int aGedaLayer, const wxString& aLayerName ) const +{ + wxString name = aLayerName.Lower(); + + if( name.Contains( wxT( "outline" ) ) || name.Contains( wxT( "route" ) ) ) + return Edge_Cuts; + + if( name.Contains( wxT( "silk" ) ) ) + { + if( name.Contains( wxT( "solder" ) ) || name.Contains( wxT( "bottom" ) ) ) + return B_SilkS; + + return F_SilkS; + } + + if( name.Contains( wxT( "mask" ) ) ) + { + if( name.Contains( wxT( "solder" ) ) || name.Contains( wxT( "bottom" ) ) ) + return B_Mask; + + return F_Mask; + } + + if( name.Contains( wxT( "paste" ) ) ) + { + if( name.Contains( wxT( "solder" ) ) || name.Contains( wxT( "bottom" ) ) ) + return B_Paste; + + return F_Paste; + } + + if( name.Contains( wxT( "fab" ) ) ) + return F_Fab; + + // Copper layers: gEDA uses 1-based numbering. 1 = component/top, 2 = solder/bottom. + if( name.Contains( wxT( "component" ) ) || name.Contains( wxT( "top" ) ) + || ( aGedaLayer == 1 && !name.Contains( wxT( "solder" ) ) ) ) + { + return F_Cu; + } + + if( name.Contains( wxT( "solder" ) ) || name.Contains( wxT( "bottom" ) ) + || aGedaLayer == 2 ) + { + return B_Cu; + } + + // Inner copper layers (gEDA layer numbers 3+) + if( aGedaLayer >= 3 && aGedaLayer <= 16 ) + { + int innerIdx = aGedaLayer - 3; + PCB_LAYER_ID innerLayers[] = { In1_Cu, In2_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, + In7_Cu, In8_Cu, In9_Cu, In10_Cu, In11_Cu, In12_Cu, + In13_Cu, In14_Cu }; + + if( innerIdx < 14 ) + return innerLayers[innerIdx]; + } + + return F_Cu; +} + + +void PCB_IO_GEDA::parseVia( wxArrayString& aParameters, double aConvUnit ) +{ + // Via[X Y Thickness Clearance Mask Drill "Name" SFlags] + int paramCnt = aParameters.GetCount(); + + if( paramCnt < 10 ) + { + THROW_IO_ERROR( wxString::Format( + _( "Via token contains %d parameters, expected at least 10." ), paramCnt ) ); + } + + PCB_VIA* via = new PCB_VIA( m_board ); + + int x = static_cast( parseInt( aParameters[2], aConvUnit ) ); + int y = static_cast( parseInt( aParameters[3], aConvUnit ) ); + int thickness = static_cast( parseInt( aParameters[4], aConvUnit ) ); + int drill = static_cast( parseInt( aParameters[7], aConvUnit ) ); + + via->SetPosition( VECTOR2I( x, y ) ); + via->SetWidth( PADSTACK::ALL_LAYERS, thickness ); + via->SetDrill( drill ); + via->SetViaType( VIATYPE::THROUGH ); + via->SetLayerPair( F_Cu, B_Cu ); + via->SetNet( NETINFO_LIST::OrphanedItem() ); + + m_board->Add( via, ADD_MODE::APPEND ); +} + + +FOOTPRINT* PCB_IO_GEDA::parseElement( wxArrayString& aParameters, LINE_READER* aLineReader, + double aConvUnit ) +{ + int paramCnt = aParameters.GetCount(); + double conv_unit = aConvUnit; + wxString msg; + + std::unique_ptr footprint = std::make_unique( m_board ); + + if( paramCnt < 10 || paramCnt > 14 ) + { + msg.Printf( _( "Element token contains %d parameters." ), paramCnt ); + THROW_IO_ERROR( msg ); + } + + // The long form has SFlags, Desc, Name, Value, MX, MY, TX, TY, TDir, TScale, TSFlags + // paramCnt == 14: Element [ SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags ] + // paramCnt == 12: Element ( NFlags "Desc" "Name" "Value" TX TY TDir TScale TNFlags ) + int descIdx, nameIdx, valueIdx, mxIdx; + + if( paramCnt > 10 ) + { + descIdx = 3; + nameIdx = 4; + valueIdx = 5; + mxIdx = 6; + } + else + { + descIdx = 2; + nameIdx = 3; + valueIdx = -1; + mxIdx = -1; + } + + footprint->SetLibDescription( aParameters[descIdx] ); + footprint->SetReference( aParameters[nameIdx] ); + + if( valueIdx > 0 ) + footprint->SetValue( aParameters[valueIdx] ); + + if( footprint->Value().GetText().IsEmpty() ) + footprint->Value().SetText( wxT( "VAL**" ) ); + + if( footprint->Reference().GetText().IsEmpty() ) + footprint->Reference().SetText( wxT( "REF**" ) ); + + // Set footprint position from MX, MY (absolute board coordinates) + if( mxIdx > 0 && paramCnt > 12 ) + { + int mx = static_cast( parseInt( aParameters[mxIdx], conv_unit ) ); + int my = static_cast( parseInt( aParameters[mxIdx + 1], conv_unit ) ); + footprint->SetPosition( VECTOR2I( mx, my ) ); + } + + wxArrayString parameters; + + while( aLineReader->ReadLine() ) + { + parameters.Clear(); + parseParameters( parameters, aLineReader ); + + if( parameters.IsEmpty() || parameters[0] == wxT( "(" ) ) + continue; + + if( parameters[0] == wxT( ")" ) ) + break; + + paramCnt = parameters.GetCount(); + + if( paramCnt > 3 ) + { + if( parameters[1] == wxT( "(" ) ) + conv_unit = OLD_GPCB_UNIT_CONV; + else + conv_unit = NEW_GPCB_UNIT_CONV; + } + + // ElementLine [X1 Y1 X2 Y2 Thickness] + if( parameters[0].CmpNoCase( wxT( "ElementLine" ) ) == 0 ) + { + if( paramCnt != 8 ) + continue; + + PCB_SHAPE* shape = new PCB_SHAPE( footprint.get(), SHAPE_T::SEGMENT ); + shape->SetLayer( F_SilkS ); + shape->SetStart( VECTOR2I( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ) ); + shape->SetEnd( VECTOR2I( static_cast( parseInt( parameters[4], conv_unit ) ), + static_cast( parseInt( parameters[5], conv_unit ) ) ) ); + shape->SetStroke( STROKE_PARAMS( static_cast( parseInt( parameters[6], conv_unit ) ), + LINE_STYLE::SOLID ) ); + + shape->Rotate( { 0, 0 }, footprint->GetOrientation() ); + shape->Move( footprint->GetPosition() ); + + footprint->Add( shape ); + continue; + } + + // ElementArc [X Y Width Height StartAngle DeltaAngle Thickness] + if( parameters[0].CmpNoCase( wxT( "ElementArc" ) ) == 0 ) + { + if( paramCnt != 10 ) + continue; + + PCB_SHAPE* shape = new PCB_SHAPE( footprint.get(), SHAPE_T::ARC ); + shape->SetLayer( F_SilkS ); + footprint->Add( shape ); + + int radius = static_cast( ( parseInt( parameters[4], conv_unit ) + + parseInt( parameters[5], conv_unit ) ) / 2 ); + + VECTOR2I centre( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ); + + EDA_ANGLE start_angle( static_cast( parseInt( parameters[6], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); + start_angle += ANGLE_180; + + EDA_ANGLE sweep_angle( static_cast( parseInt( parameters[7], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); + + if( sweep_angle == -ANGLE_360 ) + { + shape->SetShape( SHAPE_T::CIRCLE ); + shape->SetCenter( centre ); + shape->SetEnd( centre + VECTOR2I( radius, 0 ) ); + } + else + { + VECTOR2I arcStart( radius, 0 ); + RotatePoint( arcStart, -start_angle ); + shape->SetCenter( centre ); + shape->SetStart( arcStart + centre ); + shape->SetArcAngleAndEnd( sweep_angle, true ); + } + + shape->SetStroke( STROKE_PARAMS( static_cast( parseInt( parameters[8], conv_unit ) ), + LINE_STYLE::SOLID ) ); + + shape->Rotate( { 0, 0 }, footprint->GetOrientation() ); + shape->Move( footprint->GetPosition() ); + continue; + } + + // Pad [rX1 rY1 rX2 rY2 Thickness Clearance Mask "Name" "Number" SFlags] + if( parameters[0].CmpNoCase( wxT( "Pad" ) ) == 0 ) + { + if( paramCnt < 10 || paramCnt > 13 ) + continue; + + std::unique_ptr pad = std::make_unique( footprint.get() ); + + static const LSET pad_front( { F_Cu, F_Mask, F_Paste } ); + static const LSET pad_back( { B_Cu, B_Mask, B_Paste } ); + + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::RECTANGLE ); + pad->SetAttribute( PAD_ATTRIB::SMD ); + pad->SetLayerSet( pad_front ); + + if( testFlags( parameters[paramCnt - 2], 0x0080, wxT( "onsolder" ) ) ) + pad->SetLayerSet( pad_back ); + + pad->SetNumber( parameters[paramCnt - 3] ); + + int x1 = static_cast( parseInt( parameters[2], conv_unit ) ); + int x2 = static_cast( parseInt( parameters[4], conv_unit ) ); + int y1 = static_cast( parseInt( parameters[3], conv_unit ) ); + int y2 = static_cast( parseInt( parameters[5], conv_unit ) ); + int width = static_cast( parseInt( parameters[6], conv_unit ) ); + VECTOR2I delta( x2 - x1, y2 - y1 ); + double angle = atan2( (double) delta.y, (double) delta.x ); + + if( paramCnt == 13 ) + { + int clearance = static_cast( parseInt( parameters[7], conv_unit ) ); + pad->SetLocalClearance( clearance / 2 ); + + int maskMargin = static_cast( parseInt( parameters[8], conv_unit ) ); + maskMargin = ( maskMargin - width ) / 2; + pad->SetLocalSolderMaskMargin( maskMargin ); + } + + EDA_ANGLE orient( -angle, RADIANS_T ); + pad->SetOrientation( orient ); + + VECTOR2I padPos( ( x1 + x2 ) / 2, ( y1 + y2 ) / 2 ); + + pad->SetSize( PADSTACK::ALL_LAYERS, + VECTOR2I( delta.EuclideanNorm() + width, width ) ); + + padPos += footprint->GetPosition(); + pad->SetPosition( padPos ); + + if( !testFlags( parameters[paramCnt - 2], 0x0100, wxT( "square" ) ) ) + { + if( pad->GetSize( PADSTACK::ALL_LAYERS ).x + == pad->GetSize( PADSTACK::ALL_LAYERS ).y ) + { + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::CIRCLE ); + } + else + { + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::OVAL ); + } + } + + if( pad->GetSizeX() > 0 && pad->GetSizeY() > 0 ) + footprint->Add( pad.release() ); + + continue; + } + + // Pin [rX rY Thickness Clearance Mask Drill "Name" "Number" SFlags] + if( parameters[0].CmpNoCase( wxT( "Pin" ) ) == 0 ) + { + if( paramCnt < 8 || paramCnt > 12 ) + continue; + + PAD* pad = new PAD( footprint.get() ); + + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::CIRCLE ); + + static const LSET pad_set = LSET::AllCuMask() + | LSET( { F_SilkS, F_Mask, B_Mask } ); + + pad->SetLayerSet( pad_set ); + + if( testFlags( parameters[paramCnt - 2], 0x0100, wxT( "square" ) ) ) + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::RECTANGLE ); + + pad->SetNumber( parameters[paramCnt - 3] ); + + VECTOR2I padPos( static_cast( parseInt( parameters[2], conv_unit ) ), + static_cast( parseInt( parameters[3], conv_unit ) ) ); + + int padSize = static_cast( parseInt( parameters[4], conv_unit ) ); + pad->SetSize( PADSTACK::ALL_LAYERS, VECTOR2I( padSize, padSize ) ); + + int drillSize = 0; + + if( paramCnt == 12 ) + { + int clearance = static_cast( parseInt( parameters[5], conv_unit ) ); + pad->SetLocalClearance( clearance / 2 ); + + int maskMargin = static_cast( parseInt( parameters[6], conv_unit ) ); + maskMargin = ( maskMargin - padSize ) / 2; + pad->SetLocalSolderMaskMargin( maskMargin ); + + drillSize = static_cast( parseInt( parameters[7], conv_unit ) ); + } + else + { + drillSize = static_cast( parseInt( parameters[5], conv_unit ) ); + } + + pad->SetDrillSize( VECTOR2I( drillSize, drillSize ) ); + + padPos += footprint->GetPosition(); + pad->SetPosition( padPos ); + + if( pad->GetShape( PADSTACK::ALL_LAYERS ) == PAD_SHAPE::CIRCLE + && pad->GetSize( PADSTACK::ALL_LAYERS ).x + != pad->GetSize( PADSTACK::ALL_LAYERS ).y ) + { + pad->SetShape( PADSTACK::ALL_LAYERS, PAD_SHAPE::OVAL ); + } + + footprint->Add( pad ); + continue; + } + } + + // Handle the onsolder element flag to flip bottom-side components. + // In the long form, SFlags is at index 2; in the short form, NFlags is at index 2. + wxString elementFlags = aParameters[2]; + + if( elementFlags.Contains( wxT( "onsolder" ) ) ) + footprint->Flip( footprint->GetPosition(), FLIP_DIRECTION::TOP_BOTTOM ); + + footprint->AutoPositionFields(); + + return footprint.release(); +} + + +void PCB_IO_GEDA::parseLayer( wxArrayString& aParameters, LINE_READER* aLineReader, + double aConvUnit ) +{ + // Layer(N "name") ( ... objects ... ) + // In new format: Layer[N "name"] + int paramCnt = aParameters.GetCount(); + + if( paramCnt < 4 ) + return; + + long layerNum = 0; + aParameters[2].ToLong( &layerNum ); + + wxString layerName; + + if( paramCnt > 4 ) + layerName = aParameters[3]; + + PCB_LAYER_ID kicadLayer = mapLayer( (int) layerNum, layerName ); + + bool isCopperLayer = IsCopperLayer( kicadLayer ); + + if( isCopperLayer ) + { + // gEDA layer numbers are 1-based (1=component, 2=solder, 3+=inner) + int layerCount = static_cast( layerNum ); + + if( layerCount > m_numCopperLayers ) + m_numCopperLayers = layerCount; + } + + wxArrayString parameters; + double conv_unit = aConvUnit; + + while( aLineReader->ReadLine() ) + { + parameters.Clear(); + parseParameters( parameters, aLineReader ); + + if( parameters.IsEmpty() || parameters[0] == wxT( "(" ) ) + continue; + + if( parameters[0] == wxT( ")" ) ) + break; + + paramCnt = parameters.GetCount(); + + if( paramCnt > 3 ) + { + if( parameters[1] == wxT( "(" ) ) + conv_unit = OLD_GPCB_UNIT_CONV; + else + conv_unit = NEW_GPCB_UNIT_CONV; + } + + // Line[X1 Y1 X2 Y2 Thickness Clearance SFlags] + if( parameters[0].CmpNoCase( wxT( "Line" ) ) == 0 ) + { + if( paramCnt < 9 ) + continue; + + int x1 = static_cast( parseInt( parameters[2], conv_unit ) ); + int y1 = static_cast( parseInt( parameters[3], conv_unit ) ); + int x2 = static_cast( parseInt( parameters[4], conv_unit ) ); + int y2 = static_cast( parseInt( parameters[5], conv_unit ) ); + int thickness = static_cast( parseInt( parameters[6], conv_unit ) ); + + if( isCopperLayer ) + { + PCB_TRACK* track = new PCB_TRACK( m_board ); + track->SetStart( VECTOR2I( x1, y1 ) ); + track->SetEnd( VECTOR2I( x2, y2 ) ); + track->SetWidth( thickness ); + track->SetLayer( kicadLayer ); + track->SetNet( NETINFO_LIST::OrphanedItem() ); + m_board->Add( track, ADD_MODE::APPEND ); + } + else + { + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::SEGMENT ); + shape->SetStart( VECTOR2I( x1, y1 ) ); + shape->SetEnd( VECTOR2I( x2, y2 ) ); + shape->SetStroke( STROKE_PARAMS( thickness, LINE_STYLE::SOLID ) ); + shape->SetLayer( kicadLayer ); + m_board->Add( shape, ADD_MODE::APPEND ); + } + + continue; + } + + // Arc[X Y Width Height Thickness Clearance StartAngle DeltaAngle SFlags] + if( parameters[0].CmpNoCase( wxT( "Arc" ) ) == 0 ) + { + if( paramCnt < 11 ) + continue; + + int cx = static_cast( parseInt( parameters[2], conv_unit ) ); + int cy = static_cast( parseInt( parameters[3], conv_unit ) ); + int arcWidth = static_cast( parseInt( parameters[4], conv_unit ) ); + int arcHeight = static_cast( parseInt( parameters[5], conv_unit ) ); + int thickness = static_cast( parseInt( parameters[6], conv_unit ) ); + int radius = ( arcWidth + arcHeight ) / 2; + + VECTOR2I centre( cx, cy ); + + EDA_ANGLE start_angle( static_cast( parseInt( parameters[8], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); + start_angle += ANGLE_180; + + EDA_ANGLE sweep_angle( static_cast( parseInt( parameters[9], -10.0 ) ), + TENTHS_OF_A_DEGREE_T ); + + if( isCopperLayer ) + { + PCB_ARC* arc = new PCB_ARC( m_board ); + arc->SetLayer( kicadLayer ); + arc->SetWidth( thickness ); + arc->SetNet( NETINFO_LIST::OrphanedItem() ); + + VECTOR2I arcStart( radius, 0 ); + RotatePoint( arcStart, -start_angle ); + arc->SetStart( arcStart + centre ); + + VECTOR2I arcMid( radius, 0 ); + RotatePoint( arcMid, -start_angle - sweep_angle / 2 ); + arc->SetMid( arcMid + centre ); + + VECTOR2I arcEnd( radius, 0 ); + RotatePoint( arcEnd, -start_angle - sweep_angle ); + arc->SetEnd( arcEnd + centre ); + + m_board->Add( arc, ADD_MODE::APPEND ); + } + else + { + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::ARC ); + shape->SetLayer( kicadLayer ); + + if( sweep_angle == -ANGLE_360 ) + { + shape->SetShape( SHAPE_T::CIRCLE ); + shape->SetCenter( centre ); + shape->SetEnd( centre + VECTOR2I( radius, 0 ) ); + } + else + { + VECTOR2I arcStart( radius, 0 ); + RotatePoint( arcStart, -start_angle ); + shape->SetCenter( centre ); + shape->SetStart( arcStart + centre ); + shape->SetArcAngleAndEnd( sweep_angle, true ); + } + + shape->SetStroke( STROKE_PARAMS( thickness, LINE_STYLE::SOLID ) ); + m_board->Add( shape, ADD_MODE::APPEND ); + } + + continue; + } + + // Polygon(SFlags) ( [X Y] [X Y] ... ) + if( parameters[0].CmpNoCase( wxT( "Polygon" ) ) == 0 ) + { + ZONE* zone = new ZONE( m_board ); + zone->SetLayer( kicadLayer ); + zone->SetNetCode( NETINFO_LIST::UNCONNECTED ); + zone->SetLocalClearance( 0 ); + zone->SetAssignedPriority( 0 ); + + const int outlineIdx = -1; + bool parsingPoints = false; + + while( aLineReader->ReadLine() ) + { + wxArrayString polyParams; + parseParameters( polyParams, aLineReader ); + + if( polyParams.IsEmpty() ) + continue; + + if( polyParams[0] == wxT( ")" ) ) + break; + + if( polyParams[0] == wxT( "(" ) ) + { + parsingPoints = true; + continue; + } + + if( !parsingPoints ) + continue; + + // Parse coordinate pairs [X Y] + for( size_t i = 0; i < polyParams.GetCount(); i++ ) + { + if( polyParams[i] == wxT( "[" ) && i + 2 < polyParams.GetCount() ) + { + int px = static_cast( parseInt( polyParams[i + 1], conv_unit ) ); + int py = static_cast( parseInt( polyParams[i + 2], conv_unit ) ); + zone->AppendCorner( VECTOR2I( px, py ), outlineIdx ); + i += 3; // skip past X, Y, ] + } + } + } + + if( zone->GetNumCorners() >= 3 ) + { + zone->SetIsFilled( false ); + m_board->Add( zone, ADD_MODE::APPEND ); + } + else + { + delete zone; + } + + continue; + } + + // Text[X Y Direction Scale "String" SFlags] + if( parameters[0].CmpNoCase( wxT( "Text" ) ) == 0 ) + { + if( paramCnt < 8 ) + continue; + + PCB_TEXT* text = new PCB_TEXT( m_board ); + text->SetLayer( kicadLayer ); + + int tx = static_cast( parseInt( parameters[2], conv_unit ) ); + int ty = static_cast( parseInt( parameters[3], conv_unit ) ); + text->SetPosition( VECTOR2I( tx, ty ) ); + + long direction = 0; + parameters[4].ToLong( &direction ); + + EDA_ANGLE textAngle( static_cast( direction ) * 90.0, DEGREES_T ); + text->SetTextAngle( textAngle ); + + long scale = 100; + parameters[5].ToLong( &scale ); + + int textSize = KiROUND( TEXT_DEFAULT_SIZE * static_cast( scale ) / 100.0 ); + text->SetTextSize( VECTOR2I( textSize, textSize ) ); + + text->SetText( parameters[6] ); + m_board->Add( text, ADD_MODE::APPEND ); + continue; + } + } +} + + +void PCB_IO_GEDA::parseNetList( LINE_READER* aLineReader ) +{ + // NetList() ( + // Net("netname" "style") ( + // Connect("refdes-pinnumber") + // ) + // ) + + // Build a lookup map for fast refdes -> footprint resolution + std::map fpByRef; + + for( FOOTPRINT* fp : m_board->Footprints() ) + fpByRef[fp->GetReference()] = fp; + + wxArrayString parameters; + + while( aLineReader->ReadLine() ) + { + parameters.Clear(); + parseParameters( parameters, aLineReader ); + + if( parameters.IsEmpty() ) + continue; + + if( parameters[0] == wxT( ")" ) ) + break; + + if( parameters[0] == wxT( "(" ) ) + continue; + + // Net("netname" "style") ( + if( parameters[0].CmpNoCase( wxT( "Net" ) ) == 0 ) + { + wxString netName; + + if( parameters.GetCount() > 3 ) + netName = parameters[2]; + + // Create or find the net + NETINFO_ITEM* netInfo = nullptr; + auto it = m_netMap.find( netName ); + + if( it != m_netMap.end() ) + { + netInfo = it->second; + } + else + { + netInfo = new NETINFO_ITEM( m_board, netName ); + m_board->Add( netInfo ); + m_netMap[netName] = netInfo; + } + + // Parse Connect entries within this Net + while( aLineReader->ReadLine() ) + { + wxArrayString netParams; + parseParameters( netParams, aLineReader ); + + if( netParams.IsEmpty() ) + continue; + + if( netParams[0] == wxT( ")" ) ) + break; + + if( netParams[0] == wxT( "(" ) ) + continue; + + // Connect("refdes-pinnumber") + if( netParams[0].CmpNoCase( wxT( "Connect" ) ) == 0 && netParams.GetCount() > 3 ) + { + wxString connectStr = netParams[2]; + + // Find the last hyphen to split refdes from pinnumber + int lastDash = connectStr.Find( '-', true ); + + if( lastDash == wxNOT_FOUND ) + continue; + + wxString refdes = connectStr.Left( lastDash ); + wxString pinNumber = connectStr.Mid( lastDash + 1 ); + + auto fpIt = fpByRef.find( refdes ); + + if( fpIt == fpByRef.end() ) + continue; + + for( PAD* pad : fpIt->second->Pads() ) + { + if( pad->GetNumber() == pinNumber ) + { + pad->SetNet( netInfo ); + break; + } + } + } + } + } + } +} + + +BOARD* PCB_IO_GEDA::LoadBoard( const wxString& aFileName, BOARD* aAppendToMe, + const std::map* aProperties, + PROJECT* aProject ) +{ + FONTCONFIG_REPORTER_SCOPE fontconfigScope( &LOAD_INFO_REPORTER::GetInstance() ); + + init( aProperties ); + + m_board = aAppendToMe ? aAppendToMe : new BOARD(); + + if( !aAppendToMe ) + m_board->SetFileName( aFileName ); + + std::unique_ptr deleter( aAppendToMe ? nullptr : m_board ); + + for( FOOTPRINT* fp : m_cachedFootprints ) + delete fp; + + m_cachedFootprints.clear(); + m_netMap.clear(); + m_numCopperLayers = 2; + + FILE_LINE_READER reader( aFileName ); + + double conv_unit = NEW_GPCB_UNIT_CONV; + + while( reader.ReadLine() ) + { + wxArrayString parameters; + parseParameters( parameters, &reader ); + + if( parameters.IsEmpty() ) + continue; + + int paramCnt = parameters.GetCount(); + + if( paramCnt > 3 ) + { + if( parameters[1] == wxT( "(" ) ) + conv_unit = OLD_GPCB_UNIT_CONV; + else + conv_unit = NEW_GPCB_UNIT_CONV; + } + + // PCB["name" width height] + if( parameters[0].CmpNoCase( wxT( "PCB" ) ) == 0 ) + { + if( paramCnt > 4 ) + { + int boardWidth = static_cast( parseInt( parameters[3], conv_unit ) ); + int boardHeight = static_cast( parseInt( parameters[4], conv_unit ) ); + + // Set page size from board dimensions + VECTOR2I pageSize( boardWidth, boardHeight ); + PAGE_INFO page; + page.SetWidthMils( boardWidth / pcbIUScale.IU_PER_MILS ); + page.SetHeightMils( boardHeight / pcbIUScale.IU_PER_MILS ); + m_board->SetPageSettings( page ); + } + + continue; + } + + // FileVersion[YYYYMMDD] + if( parameters[0].CmpNoCase( wxT( "FileVersion" ) ) == 0 ) + continue; + + // Grid, Cursor, Thermal, DRC, Flags, Groups, Styles -- skip + if( parameters[0].CmpNoCase( wxT( "Grid" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Cursor" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Thermal" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "DRC" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Flags" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Groups" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Styles" ) ) == 0 + || parameters[0].CmpNoCase( wxT( "Attribute" ) ) == 0 ) + { + continue; + } + + // Via[X Y Thickness Clearance Mask Drill "Name" SFlags] + if( parameters[0].CmpNoCase( wxT( "Via" ) ) == 0 ) + { + parseVia( parameters, conv_unit ); + continue; + } + + // Element[SFlags "Desc" "Name" "Value" MX MY TX TY TDir TScale TSFlags] (...) + if( parameters[0].CmpNoCase( wxT( "Element" ) ) == 0 ) + { + FOOTPRINT* fp = parseElement( parameters, &reader, conv_unit ); + + if( fp ) + { + m_board->Add( fp, ADD_MODE::APPEND ); + + // Cache a copy for GetImportedCachedLibraryFootprints + FOOTPRINT* fpCopy = static_cast( fp->Clone() ); + fpCopy->SetParent( nullptr ); + m_cachedFootprints.push_back( fpCopy ); + } + + continue; + } + + // Layer(N "name") ( ... ) + if( parameters[0].CmpNoCase( wxT( "Layer" ) ) == 0 ) + { + parseLayer( parameters, &reader, conv_unit ); + continue; + } + + // Rat[X1 Y1 Group1 X2 Y2 Group2 SFlags] -- skip rats nest + if( parameters[0].CmpNoCase( wxT( "Rat" ) ) == 0 ) + continue; + + // NetList() ( ... ) + if( parameters[0].CmpNoCase( wxT( "NetList" ) ) == 0 ) + { + parseNetList( &reader ); + continue; + } + } + + // Set copper layer count + BOARD_DESIGN_SETTINGS& bds = m_board->GetDesignSettings(); + m_board->SetCopperLayerCount( std::max( 2, m_numCopperLayers ) ); + + LSET enabledLayers = bds.GetEnabledLayers(); + enabledLayers.set( F_Cu ); + enabledLayers.set( B_Cu ); + enabledLayers.set( F_SilkS ); + enabledLayers.set( B_SilkS ); + enabledLayers.set( F_Mask ); + enabledLayers.set( B_Mask ); + enabledLayers.set( Edge_Cuts ); + bds.SetEnabledLayers( enabledLayers ); + + m_board->m_LegacyDesignSettingsLoaded = true; + m_board->m_LegacyNetclassesLoaded = true; + + deleter.release(); + return m_board; +} + + +std::vector PCB_IO_GEDA::GetImportedCachedLibraryFootprints() +{ + std::vector retval; + + for( FOOTPRINT* fp : m_cachedFootprints ) + retval.push_back( static_cast( fp->Clone() ) ); + + return retval; +} diff --git a/pcbnew/pcb_io/geda/pcb_io_geda.h b/pcbnew/pcb_io/geda/pcb_io_geda.h index 9783f0f105..dd88bda7d9 100644 --- a/pcbnew/pcb_io/geda/pcb_io_geda.h +++ b/pcbnew/pcb_io/geda/pcb_io_geda.h @@ -20,41 +20,71 @@ * 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 + * + * This file contains file format knowledge derived from the gEDA/pcb project: + * + * gEDA/gaf - Copyright (C) 1998-2010 Ales Hvezda + * Copyright (C) 1998-2016 gEDA Contributors + * Lepton EDA - Copyright (C) 2017-2024 Lepton EDA Contributors + * + * Both projects are licensed under the GNU General Public License v2 or later. + * See https://github.com/lepton-eda/lepton-eda and + * https://github.com/rlutz/geda-gaf */ /** - * @file pcb_io_geda.cpp + * @file pcb_io_geda.h * @brief Geda PCB file plugin definition file. */ #ifndef PCB_IO_GEDA_H_ #define PCB_IO_GEDA_H_ +#include #include +#include +#include #include #include +class BOARD; +class FOOTPRINT; class GPCB_FPL_CACHE; class LINE_READER; +class NETINFO_ITEM; /** * A #PLUGIN derivation for saving and loading Geda PCB files. * * @note This class is not thread safe, but it is re-entrant multiple times in sequence. - * @note Currently only reading GPCB footprint files is implemented. */ class PCB_IO_GEDA : public PCB_IO { public: + // Board-level file support + const IO_BASE::IO_FILE_DESC GetBoardFileDesc() const override + { + return IO_BASE::IO_FILE_DESC( _HKI( "gEDA / Lepton EDA PCB board file" ), { "pcb" } ); + } + + bool CanReadBoard( const wxString& aFileName ) const override; + + BOARD* LoadBoard( const wxString& aFileName, BOARD* aAppendToMe, + const std::map* aProperties = nullptr, + PROJECT* aProject = nullptr ) override; + + std::vector GetImportedCachedLibraryFootprints() override; + + // Footprint library support const IO_BASE::IO_FILE_DESC GetLibraryFileDesc() const override { - return IO_BASE::IO_FILE_DESC( _HKI( "gEDA PCB footprint file" ), { "fp" } ); + return IO_BASE::IO_FILE_DESC( _HKI( "gEDA / Lepton EDA PCB footprint file" ), { "fp" } ); } const IO_BASE::IO_FILE_DESC GetLibraryDesc() const override { - return IO_BASE::IO_FILE_DESC( _HKI( "gEDA PCB footprint library directory" ), {}, { "fp" }, + return IO_BASE::IO_FILE_DESC( _HKI( "gEDA / Lepton EDA PCB footprint library directory" ), {}, { "fp" }, false ); } @@ -85,7 +115,7 @@ public: PCB_IO_GEDA( int aControlFlags ); - ~PCB_IO_GEDA(); + ~PCB_IO_GEDA() override; private: void validateCache( const wxString& aLibraryPath, bool checkModified = true ); @@ -97,12 +127,28 @@ private: friend class GPCB_FPL_CACHE; + // Board parsing helpers + PCB_LAYER_ID mapLayer( int aGedaLayer, const wxString& aLayerName ) const; + + void parseVia( wxArrayString& aParameters, double aConvUnit ); + FOOTPRINT* parseElement( wxArrayString& aParameters, LINE_READER* aLineReader, + double aConvUnit ); + void parseLayer( wxArrayString& aParameters, LINE_READER* aLineReader, double aConvUnit ); + void parseNetList( LINE_READER* aLineReader ); + void parseParameters( wxArrayString& aParameterList, LINE_READER* aLineReader ); + bool testFlags( const wxString& aFlag, long aMask, const wxChar* aName ); + protected: wxString m_error; ///< for throwing exceptions GPCB_FPL_CACHE* m_cache; ///< Footprint library cache. int m_ctl; LINE_READER* m_reader; ///< no ownership here. wxString m_filename; ///< for saves only, name is in m_reader for loads + + // Board import state + std::vector m_cachedFootprints; + std::map m_netMap; + int m_numCopperLayers; }; #endif // PCB_IO_GEDA_H_ diff --git a/pcbnew/pcb_io/pcb_io_mgr.cpp b/pcbnew/pcb_io/pcb_io_mgr.cpp index c46143074e..4296a428a8 100644 --- a/pcbnew/pcb_io/pcb_io_mgr.cpp +++ b/pcbnew/pcb_io/pcb_io_mgr.cpp @@ -329,7 +329,7 @@ static PCB_IO_MGR::REGISTER_PLUGIN registerFabmasterPlugin( static PCB_IO_MGR::REGISTER_PLUGIN registerGPCBPlugin( PCB_IO_MGR::GEDA_PCB, - wxT( "GEDA/Pcb" ), + wxT( "gEDA / Lepton EDA" ), []() -> PCB_IO* { return new PCB_IO_GEDA; } ); static PCB_IO_MGR::REGISTER_PLUGIN registerPcadPlugin( diff --git a/qa/data/eeschema/io/geda/7400-1.sym b/qa/data/eeschema/io/geda/7400-1.sym new file mode 100644 index 0000000000..1f61db8cd2 --- /dev/null +++ b/qa/data/eeschema/io/geda/7400-1.sym @@ -0,0 +1,37 @@ +v 20130925 2 +T 300 300 8 10 0 0 0 0 1 +device=7400 +P 0 200 200 200 1 0 0 +{ +T 50 250 5 8 0 1 0 0 1 +pinnumber=1 +T 50 250 5 8 0 0 0 0 1 +pinseq=1 +T 50 250 5 8 0 1 0 0 1 +pinlabel=A +T 50 250 5 8 0 1 0 0 1 +pintype=in +} +P 0 0 200 0 1 0 0 +{ +T 50 50 5 8 0 1 0 0 1 +pinnumber=2 +T 50 50 5 8 0 0 0 0 1 +pinseq=2 +T 50 50 5 8 0 1 0 0 1 +pinlabel=B +T 50 50 5 8 0 1 0 0 1 +pintype=in +} +P 500 100 300 100 1 0 0 +{ +T 350 150 5 8 0 1 0 0 1 +pinnumber=3 +T 350 150 5 8 0 0 0 0 1 +pinseq=3 +T 350 150 5 8 0 1 0 0 1 +pinlabel=Y +T 350 150 5 8 0 1 0 0 1 +pintype=out +} +B 200 -100 100 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/ayab_rs.sch b/qa/data/eeschema/io/geda/ayab/ayab_rs.sch new file mode 100644 index 0000000000..471c3d25ea --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/ayab_rs.sch @@ -0,0 +1,1433 @@ +v 20130925 2 +C 59900 40300 0 0 0 title-D.sym +N 64500 45800 64500 46600 4 +N 63800 47900 67200 47900 4 +N 64500 47500 64500 47900 4 +N 62000 47900 62900 47900 4 +N 64500 46200 65900 46200 4 +N 66900 46800 66900 46700 4 +C 67000 45500 1 0 1 gnd-1.sym +N 66900 45800 66900 46000 4 +C 66800 46800 1 270 0 led-small.sym +{ +T 66800 46800 5 10 0 1 90 2 1 +footprint=LED_0805_RA_LT220 +T 67300 46300 5 10 1 1 180 8 1 +refdes=D3 +T 67300 46100 5 10 1 1 180 8 1 +device=LED 0805 Side View Blue +T 67300 45900 5 10 1 1 0 0 1 +description="9V Power" +} +C 63800 48100 1 180 0 diode-3a.sym +{ +T 63800 48100 5 10 0 0 90 0 1 +footprint=DO214AA_HSMB +T 63150 48250 5 10 1 1 0 0 1 +device=SK24-TP +T 63150 48450 5 10 1 1 0 0 1 +refdes=D1 +T 62750 48700 5 10 1 1 0 0 1 +description=Reverse protection +} +N 65900 47500 65900 47900 4 +N 65900 46600 65900 46200 4 +N 62000 47600 62800 47600 4 +N 62800 46500 62800 47600 4 +N 62000 47300 62800 47300 4 +C 62900 46200 1 0 1 gnd-1.sym +C 69100 56800 1 0 0 MetroMini.sym +{ +T 69095 56800 5 10 0 1 0 0 1 +device=METROMINI +T 69095 56800 5 10 0 1 0 0 1 +footprint=MetroMini +T 69395 61300 5 10 1 1 0 0 1 +value=METROMINI +T 70795 61300 5 10 1 1 0 6 1 +refdes=U1 +} +C 63400 57400 1 0 0 beeper.sym +{ +T 63400 57400 5 10 0 0 0 0 1 +footprint=buzzer.fp +T 61600 57900 5 8 1 1 0 0 1 +device=MAGNETIC BUZZER +T 63100 58100 5 10 1 1 0 0 1 +refdes=L1 +T 61300 57600 5 10 1 1 0 0 1 +value=AT-1224-TWT-5V-2-R +} +N 63700 58500 63700 58400 4 +C 62900 56800 1 0 1 resistor-1.sym +{ +T 62900 56800 5 10 0 1 180 2 1 +footprint=0805_reflow_solder_2 +T 62400 57100 5 10 1 1 0 6 1 +refdes=R1 +T 62800 57100 5 10 1 1 0 6 1 +value=5k +} +N 62900 56900 63200 56900 4 +N 63700 59400 63700 59500 4 +C 66100 46600 1 90 0 capacitor-1.sym +{ +T 65400 46800 5 10 0 0 90 0 1 +device=CAPACITOR +T 65200 46800 5 10 0 0 90 0 1 +symversion=0.1 +T 66100 46600 5 10 0 0 0 0 1 +footprint=1206_reflow_solder_2 +T 66500 47200 5 10 1 1 180 0 1 +refdes=C4 +T 66100 46700 5 10 1 1 0 0 1 +value=1 uF +} +C 64300 47500 1 270 0 capacitor-2.sym +{ +T 64800 46900 5 10 0 1 0 0 1 +device=Capacitor +T 65200 47300 5 10 0 0 270 0 1 +symversion=0.1 +T 64300 47500 5 10 0 0 0 0 1 +footprint=pcblib-newlib_geda_EIA7343 +T 64300 47500 5 10 0 0 0 0 1 +model-name=EEE-1CA220SR +T 64800 46800 5 10 1 1 0 0 1 +refdes=C3 +T 64800 46600 5 10 1 1 0 0 1 +value=22 uF 16V +} +C 61900 60300 1 0 1 gnd-1.sym +N 61800 60600 61800 60700 4 +N 61800 60700 62200 60700 4 +C 62200 60700 1 0 0 switch-tact_sq.sym +{ +T 62700 61300 5 10 0 0 0 0 1 +device=FSM4JSMA +T 62200 60700 5 10 0 0 0 0 1 +footprint=TYCO_FSMJSM +T 62700 61400 5 10 1 1 0 0 1 +refdes=S1 +} +C 62000 61100 1 180 0 nc-right-1.sym +{ +T 61900 60600 5 10 0 0 180 0 1 +value=NoConnection +T 61900 60400 5 10 0 0 180 0 1 +device=DRC_Directive +} +N 63400 61000 63700 61000 4 +C 65800 56100 1 0 0 connector14-1.sym +{ +T 67700 61000 5 10 0 0 0 0 1 +device=U1 Breakout +T 65800 56100 5 10 0 0 0 0 1 +footprint=JUMPER14 +T 65900 61200 5 10 1 1 0 0 1 +refdes=U1A +} +C 74400 61800 1 180 0 connector14-1.sym +{ +T 72500 56900 5 10 0 0 180 0 1 +device=U1 Breakout +T 74400 61800 5 10 0 0 180 0 1 +footprint=JUMPER14B +T 74300 61400 5 10 1 1 180 0 1 +refdes=U1B +} +N 67100 60900 69100 60900 4 +N 67100 60300 69100 60300 4 +N 67100 59100 69100 59100 4 +N 67100 57600 69100 57600 4 +N 67100 57900 69100 57900 4 +N 73100 57300 71100 57300 4 +N 73100 59100 71100 59100 4 +N 73100 57000 71100 57000 4 +N 73100 60300 71100 60300 4 +N 73100 60900 71100 60900 4 +N 73100 59400 71100 59400 4 +N 73100 60000 71100 60000 4 +N 73100 60600 71100 60600 4 +C 71300 59900 1 180 1 output-1.sym +{ +T 71400 59600 5 10 0 0 180 6 1 +device=OUTPUT +T 72200 59900 5 10 1 1 180 6 1 +net=BUZZ:1 +} +N 71300 59650 71300 59800 4 +N 71100 59700 71300 59700 4 +N 73100 59700 72900 59700 4 +N 72900 59650 71300 59650 4 +N 72900 59650 72900 59700 4 +C 71300 59000 1 180 1 output-1.sym +{ +T 71400 58700 5 10 0 0 180 6 1 +device=OUTPUT +T 72200 59000 5 10 1 1 180 6 1 +net=D6:1 +} +N 71300 58750 71300 58900 4 +N 71100 58800 71300 58800 4 +N 73100 58800 72900 58800 4 +N 72900 58750 71300 58750 4 +N 72900 58750 72900 58800 4 +C 71300 58700 1 180 1 output-1.sym +{ +T 71400 58400 5 10 0 0 180 6 1 +device=OUTPUT +T 72200 58700 5 10 1 1 180 6 1 +net=D5:1 +} +N 71300 58450 71300 58600 4 +N 71100 58500 71300 58500 4 +N 73100 58500 72900 58500 4 +N 72900 58450 71300 58450 4 +N 72900 58450 72900 58500 4 +N 71100 58200 71300 58200 4 +N 71300 58150 71300 58300 4 +N 72900 58150 71300 58150 4 +N 73100 58200 72900 58200 4 +N 72900 58150 72900 58200 4 +N 71100 57900 71300 57900 4 +N 71300 57850 71300 58000 4 +N 72900 57850 71300 57850 4 +N 73100 57900 72900 57900 4 +N 72900 57850 72900 57900 4 +N 71100 57600 71300 57600 4 +N 71300 57550 71300 57700 4 +N 72900 57550 71300 57550 4 +N 73100 57600 72900 57600 4 +N 72900 57550 72900 57600 4 +N 69100 58800 68900 58800 4 +N 68900 58750 68900 58900 4 +N 67300 58750 68900 58750 4 +N 67100 58800 67300 58800 4 +N 67300 58800 67300 58750 4 +N 69100 60600 68900 60600 4 +C 68900 60800 1 180 0 output-1.sym +{ +T 68800 60500 5 10 0 0 180 0 1 +device=OUTPUT +T 68000 60800 5 10 1 1 180 0 1 +net=RST:1 +} +N 68900 60550 68900 60700 4 +N 67300 60550 68900 60550 4 +N 67100 60600 67300 60600 4 +N 67300 60550 67300 60600 4 +N 69100 60000 68900 60000 4 +C 68900 60200 1 180 0 output-1.sym +{ +T 68800 59900 5 10 0 0 180 0 1 +device=OUTPUT +T 68000 60200 5 10 1 1 180 0 1 +net=5V:1 +} +N 68900 59950 68900 60100 4 +N 67300 59950 68900 59950 4 +N 67100 60000 67300 60000 4 +N 67300 59950 67300 60000 4 +N 67100 59700 69100 59700 4 +N 69100 59400 68900 59400 4 +C 68900 59600 1 180 0 output-1.sym +{ +T 68800 59300 5 10 0 0 180 0 1 +device=OUTPUT +T 68000 59600 5 10 1 1 180 0 1 +net=GND:1 +} +N 68900 59350 68900 59500 4 +N 67300 59350 68900 59350 4 +N 67100 59400 67300 59400 4 +N 69100 58500 68900 58500 4 +N 68900 58450 68900 58600 4 +N 67300 58450 68900 58450 4 +N 67100 58500 67300 58500 4 +N 67300 58500 67300 58450 4 +N 69100 58200 68900 58200 4 +N 68900 58150 68900 58300 4 +N 67300 58150 68900 58150 4 +N 67100 58200 67300 58200 4 +N 67300 58200 67300 58150 4 +N 69100 57300 68900 57300 4 +C 68900 57500 1 180 0 output-1.sym +{ +T 68800 57200 5 10 0 0 180 0 1 +device=OUTPUT +T 68000 57500 5 10 1 1 180 0 1 +net=SDA:1 +} +N 68900 57250 68900 57400 4 +N 67300 57250 68900 57250 4 +N 67100 57300 67300 57300 4 +N 67300 57300 67300 57250 4 +N 69100 57000 68900 57000 4 +C 68900 57200 1 180 0 output-1.sym +{ +T 68800 56900 5 10 0 0 180 0 1 +device=OUTPUT +T 68000 57200 5 10 1 1 180 0 1 +net=SCL:1 +} +N 68900 56950 68900 57100 4 +N 67300 56950 68900 56950 4 +N 67100 57000 67300 57000 4 +N 67300 57000 67300 56950 4 +C 65000 48100 1 0 0 generic-power.sym +{ +T 65200 48350 5 10 1 1 0 3 1 +net=9V:1 +} +N 65200 48100 65200 47900 4 +C 64500 61100 1 180 0 input-1.sym +{ +T 64900 60800 5 10 0 0 180 0 1 +device=INPUT +T 65100 61100 5 10 1 1 180 0 1 +net=RST:1 +} +C 61100 56800 1 0 0 input-1.sym +{ +T 60700 57100 5 10 0 0 0 0 1 +device=INPUT +T 60400 56800 5 10 1 1 0 0 1 +net=BUZZ:1 +} +N 61900 56900 62000 56900 4 +C 63500 59500 1 0 0 generic-power.sym +{ +T 63700 59750 5 10 1 1 0 3 1 +net=5V:1 +} +C 63600 59400 1 270 0 resistor-1.sym +{ +T 63600 59400 5 10 0 1 270 0 1 +footprint=0805_reflow_solder_2 +T 64200 59200 5 10 1 1 180 0 1 +refdes=R4 +T 64100 58900 5 10 1 1 180 0 1 +value=62 +} +C 61000 51900 1 0 0 generic-power.sym +{ +T 61200 52150 5 10 1 1 0 3 1 +net=5V:1 +} +N 61200 51700 61200 51900 4 +N 61450 51700 61200 51700 4 +C 64100 51600 1 0 1 input-1.sym +{ +T 64500 51900 5 10 0 0 0 6 1 +device=INPUT +T 64700 51600 5 10 1 1 0 6 1 +net=D6:1 +} +N 63300 51700 63200 51700 4 +C 61000 54000 1 0 0 generic-power.sym +{ +T 61200 54250 5 10 1 1 0 3 1 +net=5V:1 +} +N 61200 53800 61200 54000 4 +N 61450 53800 61200 53800 4 +C 64100 53700 1 0 1 input-1.sym +{ +T 64500 54000 5 10 0 0 0 6 1 +device=INPUT +T 64700 53700 5 10 1 1 0 6 1 +net=D5:1 +} +N 63300 53800 63200 53800 4 +C 74400 47700 1 180 0 connector3-1B.sym +{ +T 74400 47700 5 10 0 0 180 6 1 +footprint=Molex5267_3 +T 76000 46900 5 10 1 1 180 2 1 +device=Molex 99-99-0987 +T 74900 47500 5 10 1 1 180 2 1 +refdes=J6B +T 74600 47300 5 10 1 1 180 8 1 +description=EOL-R +T 74600 47100 5 10 1 1 180 8 1 +description=KH-930 +} +C 86400 54500 1 0 0 ULN2803A.sym +{ +T 86700 58200 5 10 0 0 0 0 1 +device=ULN2803A +T 86400 54500 5 8 0 0 0 0 1 +footprint=SO18W +T 86700 57800 5 10 1 1 0 0 1 +refdes=U4 +} +C 80600 54400 1 0 0 PCF8574T-2.sym +{ +T 80900 59250 5 10 0 0 0 0 1 +footprint=SO16W +T 81150 57550 5 10 1 1 0 6 1 +refdes=U2 +T 81600 57550 5 10 1 1 0 0 1 +device=PCF8574T +} +N 82400 57200 86400 57200 4 +N 82400 56600 86400 56600 4 +N 82400 56300 86400 56300 4 +N 82400 56000 86400 56000 4 +N 82400 55700 86400 55700 4 +N 82400 55400 86400 55400 4 +N 82400 56900 86400 56900 4 +C 87500 57900 1 0 0 generic-power.sym +{ +T 87700 58250 5 10 1 1 0 3 1 +net=9V:1 +} +N 87700 57900 87700 57800 4 +C 87600 54100 1 0 1 gnd-1.sym +N 87500 54400 87500 54500 4 +C 80500 54000 1 0 1 gnd-1.sym +N 80400 54300 80400 56600 4 +N 80600 54600 80400 54600 4 +N 80400 56600 80600 56600 4 +N 80600 56300 80400 56300 4 +N 80400 56000 80600 56000 4 +C 78500 57300 1 0 0 generic-power.sym +{ +T 78700 57550 5 10 1 1 0 3 1 +net=5V:1 +} +N 78700 56800 78700 57300 4 +N 78700 57200 80600 57200 4 +C 77700 55200 1 0 0 input-1.sym +{ +T 77300 55500 5 10 0 0 0 0 1 +device=INPUT +T 77100 55200 5 10 1 1 0 0 1 +net=SCL:1 +} +C 77700 54900 1 0 0 input-1.sym +{ +T 77300 55200 5 10 0 0 0 0 1 +device=INPUT +T 77100 54900 5 10 1 1 0 0 1 +net=SDA:1 +} +N 78500 55000 80600 55000 4 +N 78500 55300 80600 55300 4 +N 90900 56900 88600 56900 4 +N 90900 56300 88600 56300 4 +N 90900 55700 88600 55700 4 +N 90900 57200 88600 57200 4 +N 90900 56600 88600 56600 4 +N 90900 56000 88600 56000 4 +N 90900 55100 88600 55100 4 +N 90900 55400 88600 55400 4 +N 90700 54200 90700 61200 4 +N 90700 57500 90900 57500 4 +N 90900 57800 90700 57800 4 +C 82500 54500 1 0 0 nc-x.sym +{ +T 82600 55000 5 10 0 0 0 0 1 +value=NoConnection +T 82600 55200 5 10 0 0 0 0 1 +device=DRC_Directive +} +N 82500 54600 82400 54600 4 +C 90500 61200 1 0 0 generic-power.sym +{ +T 90700 61450 5 10 1 1 0 3 1 +net=9V:1 +} +N 90700 60800 90900 60800 4 +N 90900 61100 90700 61100 4 +N 90900 58400 90400 58400 4 +N 90400 58400 90400 55100 4 +N 90200 55400 90200 58700 4 +N 90200 58700 90900 58700 4 +N 90900 59000 90000 59000 4 +N 90000 59000 90000 55700 4 +N 89800 56000 89800 59300 4 +N 89800 59300 90900 59300 4 +N 90900 59600 89600 59600 4 +N 89600 59600 89600 56300 4 +N 89400 56600 89400 59900 4 +N 89400 59900 90900 59900 4 +N 89200 56900 89200 60200 4 +N 89200 60200 90900 60200 4 +N 90900 60500 89000 60500 4 +N 89000 60500 89000 57200 4 +C 64600 45500 1 0 1 gnd-1.sym +C 61200 43700 1 180 1 terminal-1.sym +{ +T 61510 42950 5 10 0 0 180 6 1 +device=terminal +T 61200 43700 5 10 0 1 0 0 1 +footprint=JUMPER1 +T 61450 43650 5 10 1 1 180 0 1 +refdes=5V +} +C 61200 42500 1 180 1 terminal-1.sym +{ +T 61510 41750 5 10 0 0 180 6 1 +device=terminal +T 61200 42500 5 10 0 1 0 0 1 +footprint=JUMPER1 +T 61450 42450 5 10 1 1 180 0 1 +refdes=GND +} +N 62100 43600 64400 43600 4 +N 64100 43400 64100 43600 4 +C 64200 41900 1 0 1 gnd-1.sym +N 64100 42200 64100 42500 4 +N 62100 42400 64100 42400 4 +C 63900 43400 1 270 0 capacitor-1.sym +{ +T 64600 43200 5 10 0 0 270 0 1 +device=CAPACITOR +T 64800 43200 5 10 0 0 270 0 1 +symversion=0.1 +T 63900 43400 5 10 0 0 270 0 1 +footprint=0603_reflow_solder +T 63700 42700 5 10 1 1 0 0 1 +refdes=C2 +T 64000 43200 5 10 1 1 180 0 1 +value=0.1 uF +} +C 63300 44400 1 0 0 generic-power.sym +{ +T 63500 44650 5 10 1 1 0 3 1 +net=5V:1 +} +C 62800 42500 1 90 0 capacitor-1.sym +{ +T 62100 42700 5 10 0 0 90 0 1 +device=CAPACITOR +T 61900 42700 5 10 0 0 90 0 1 +symversion=0.1 +T 62800 42500 5 10 0 0 0 0 1 +footprint=1206_reflow_solder_2 +T 63200 43100 5 10 1 1 180 0 1 +refdes=C1 +T 62800 42600 5 10 1 1 0 0 1 +value=1 uF +} +N 62600 43400 62600 43600 4 +N 62600 42400 62600 42500 4 +N 65600 43600 65600 43300 4 +C 65700 41900 1 0 1 gnd-1.sym +N 65600 42200 65600 42600 4 +N 65300 43600 65600 43600 4 +C 65300 43700 1 180 0 resistor-1.sym +{ +T 65300 43700 5 10 0 1 180 0 1 +footprint=0805_reflow_solder_2 +T 64500 43800 5 10 1 1 0 0 1 +refdes=R2 +T 64900 43800 5 10 1 1 0 0 1 +value=62 +} +N 63500 44400 63500 43600 4 +C 65500 43400 1 270 0 led-small.sym +{ +T 65500 43400 5 10 0 1 90 2 1 +footprint=LED_0805_RA_LT220 +T 66000 42900 5 10 1 1 180 8 1 +refdes=D2 +T 66000 42700 5 10 1 1 180 8 1 +device=LED 0805 Side View Blue +T 66000 42500 5 10 1 1 0 0 1 +description="5V Power" +} +N 82250 46200 86400 46200 4 +N 82250 45900 86400 45900 4 +N 82250 45600 86400 45600 4 +C 87600 44300 1 0 1 gnd-1.sym +N 87500 44600 87500 44700 4 +C 80450 44200 1 0 1 gnd-1.sym +N 80450 44800 80350 44800 4 +N 80350 46200 80450 46200 4 +C 79150 45400 1 0 0 input-1.sym +{ +T 78750 45700 5 10 0 0 0 0 1 +device=INPUT +T 78550 45400 5 10 1 1 0 0 1 +net=SCL:1 +} +C 79150 45100 1 0 0 input-1.sym +{ +T 78750 45400 5 10 0 0 0 0 1 +device=INPUT +T 78550 45100 5 10 1 1 0 0 1 +net=SDA:1 +} +N 79950 45200 80450 45200 4 +N 79950 45500 80450 45500 4 +N 90900 45900 88600 45900 4 +N 90900 46200 88600 46200 4 +N 90900 45300 88600 45300 4 +N 90900 45600 88600 45600 4 +C 82550 44700 1 0 0 nc-x.sym +{ +T 82650 45200 5 10 0 0 0 0 1 +value=NoConnection +T 82650 45400 5 10 0 0 0 0 1 +device=DRC_Directive +} +N 82550 44800 82250 44800 4 +C 86400 44700 1 0 0 ULN2803A.sym +{ +T 86700 48400 5 10 0 0 0 0 1 +device=ULN2803A +T 86400 44700 5 8 0 0 0 0 1 +footprint=SO18W +T 86700 48000 5 10 1 1 0 0 1 +refdes=U5 +} +C 80450 44600 1 0 0 PCF8574T-2.sym +{ +T 80750 49450 5 10 0 0 0 0 1 +footprint=SO16W +T 81000 47750 5 10 1 1 0 6 1 +refdes=U3 +T 81450 47750 5 10 1 1 0 0 1 +device=PCF8574T +} +N 82250 47400 86400 47400 4 +N 82250 46800 86400 46800 4 +N 82250 46500 86400 46500 4 +N 82250 47100 86400 47100 4 +C 87500 48100 1 0 0 generic-power.sym +{ +T 87700 48450 5 10 1 1 0 3 1 +net=9V:1 +} +N 87700 48100 87700 48000 4 +N 80350 44500 80350 46500 4 +N 80350 46800 80450 46800 4 +N 80450 46500 80350 46500 4 +C 80150 50250 1 0 0 generic-power.sym +{ +T 80350 50500 5 10 1 1 0 3 1 +net=5V:1 +} +N 80350 46800 80350 50250 4 +N 80450 47400 80350 47400 4 +N 90900 47100 88600 47100 4 +N 90900 46500 88600 46500 4 +N 90900 47400 88600 47400 4 +N 90900 46800 88600 46800 4 +N 90900 48300 90400 48300 4 +N 90400 48300 90400 45300 4 +N 90200 45600 90200 48600 4 +N 90200 48600 90900 48600 4 +N 90900 48900 90000 48900 4 +N 90000 48900 90000 45900 4 +N 89800 46200 89800 49200 4 +N 89800 49200 90900 49200 4 +N 90900 49500 89600 49500 4 +N 89600 49500 89600 46500 4 +N 89400 46800 89400 49800 4 +N 89400 49800 90900 49800 4 +N 89200 47100 89200 50100 4 +N 89200 50100 90900 50100 4 +N 90900 50400 89000 50400 4 +N 89000 50400 89000 47400 4 +N 79300 56800 79300 57200 4 +C 79200 56800 1 270 0 resistor-1.sym +{ +T 79200 56800 5 10 0 1 270 0 1 +footprint=0805_reflow_solder_2 +T 79100 56600 5 10 1 1 180 0 1 +refdes=R7 +T 79100 56300 5 10 1 1 180 0 1 +value=5k +} +C 78600 56800 1 270 0 resistor-1.sym +{ +T 78600 56800 5 10 0 1 270 0 1 +footprint=0805_reflow_solder_2 +T 78500 56600 5 10 1 1 180 0 1 +refdes=R8 +T 78500 56300 5 10 1 1 180 0 1 +value=5k +} +C 68400 52700 1 0 1 connector4-1B.sym +{ +T 66600 53600 5 10 0 0 0 6 1 +device=CONNECTOR_4 +T 68400 52700 5 10 0 0 0 0 1 +footprint=header_4_SIL_V_Wiggle_25mm.fp +T 68400 54100 5 10 1 1 0 6 1 +refdes=J8 +} +N 78700 55900 78700 55300 4 +N 79300 55900 79300 55000 4 +C 67200 52400 1 0 1 gnd-1.sym +N 67100 52700 67100 52900 4 +N 67300 52900 67100 52900 4 +C 68400 50600 1 0 1 connector4-1B.sym +{ +T 66600 51500 5 10 0 0 0 6 1 +device=CONNECTOR_4 +T 68400 50600 5 10 0 0 0 0 1 +footprint=header_4_SIL_V_Wiggle_25mm.fp +T 68400 52000 5 10 1 1 0 6 1 +refdes=J9 +} +C 67200 50300 1 0 1 gnd-1.sym +N 67100 50600 67100 50800 4 +N 67300 50800 67100 50800 4 +C 68100 58500 1 0 0 input-1.sym +{ +T 67700 58800 5 10 0 0 0 0 1 +device=INPUT +T 67400 58500 5 10 1 1 0 0 1 +net=EOLR:1 +} +C 68100 58200 1 0 0 input-1.sym +{ +T 67700 58500 5 10 0 0 0 0 1 +device=INPUT +T 67400 58200 5 10 1 1 0 0 1 +net=EOLL:1 +} +C 74500 42500 1 0 1 connector10-1B.sym +{ +T 72600 45500 5 10 0 0 0 6 1 +device=CONNECTOR_10 +T 74500 42500 5 10 0 0 0 0 1 +footprint=header_10_SIL_V_Wiggle_25mm.fp +T 75000 45400 5 10 1 1 0 6 1 +refdes=J5A +T 74700 45100 5 10 1 1 0 0 1 +description=Encoder + EOL-R +T 74700 44800 5 10 1 1 0 0 1 +description=KH-910 +} +C 72800 46200 1 0 0 gnd-1.sym +C 72100 47400 1 0 1 output-1.sym +{ +T 72000 47700 5 10 0 0 0 6 1 +device=OUTPUT +T 71200 47400 5 10 1 1 0 6 1 +net=EOLR:1 +} +N 72100 47500 73300 47500 4 +N 73300 47200 72900 47200 4 +N 72900 46500 72900 48400 4 +C 71300 46800 1 0 0 input-1.sym +{ +T 70900 47100 5 10 0 0 0 0 1 +device=INPUT +T 70800 46800 5 10 1 1 0 0 1 +net=5V:1 +} +N 72100 46900 73300 46900 4 +C 72600 43200 1 0 1 output-1.sym +{ +T 72500 43500 5 10 0 0 0 6 1 +device=OUTPUT +T 71700 43200 5 10 1 1 0 6 1 +net=EOLR:1 +} +N 72600 43300 73400 43300 4 +C 72800 41700 1 0 0 gnd-1.sym +N 72900 42000 72900 45100 4 +N 73400 42700 72900 42700 4 +N 73400 43000 72900 43000 4 +N 73400 43600 72900 43600 4 +C 71900 45300 1 0 0 input-1.sym +{ +T 71500 45600 5 10 0 0 0 0 1 +device=INPUT +T 71400 45300 5 10 1 1 0 0 1 +net=5V:1 +} +N 72700 45400 73400 45400 4 +N 72900 45100 73400 45100 4 +C 73300 44700 1 0 1 nc-x.sym +{ +T 73200 45200 5 10 0 0 0 6 1 +value=NoConnection +T 73200 45400 5 10 0 0 0 6 1 +device=DRC_Directive +} +N 73300 44800 73400 44800 4 +C 63200 56400 1 0 0 trans_BEC_NPN.sym +{ +T 63800 56900 5 10 0 0 0 0 1 +device=NPN_TRANSISTOR +T 63200 56400 5 10 0 1 0 0 1 +footprint=SOT23_3 +T 63800 56900 5 10 1 1 0 0 1 +refdes=Q1 +T 63800 56700 5 10 1 1 0 0 1 +device=MMBT3904 +} +C 63600 56000 1 0 0 gnd-1.sym +N 63700 56400 63700 56300 4 +N 67300 59400 67300 59350 4 +N 67200 59400 67200 59700 4 +C 72500 50000 1 180 0 output-1.sym +{ +T 72400 49700 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 50000 5 10 1 1 180 0 1 +net=ENCC:1 +} +C 72100 57900 1 0 1 input-1.sym +{ +T 72500 58200 5 10 0 0 0 6 1 +device=INPUT +T 72800 57900 5 10 1 1 0 6 1 +net=ENCB:1 +} +C 72100 57600 1 0 1 input-1.sym +{ +T 72500 57900 5 10 0 0 0 6 1 +device=INPUT +T 72800 57600 5 10 1 1 0 6 1 +net=ENCA:1 +} +C 72100 58200 1 0 1 input-1.sym +{ +T 72500 58500 5 10 0 0 0 6 1 +device=INPUT +T 72800 58200 5 10 1 1 0 6 1 +net=ENCC:1 +} +C 72600 44600 1 180 0 output-1.sym +{ +T 72500 44300 5 10 0 0 180 0 1 +device=OUTPUT +T 71700 44600 5 10 1 1 180 0 1 +net=ENCA:1 +} +C 72600 44300 1 180 0 output-1.sym +{ +T 72500 44000 5 10 0 0 180 0 1 +device=OUTPUT +T 71700 44300 5 10 1 1 180 0 1 +net=ENCB:1 +} +C 72600 44000 1 180 0 output-1.sym +{ +T 72500 43700 5 10 0 0 180 0 1 +device=OUTPUT +T 71700 44000 5 10 1 1 180 0 1 +net=ENCC:1 +} +N 72600 44500 73400 44500 4 +N 72600 44200 73400 44200 4 +N 72600 43900 73400 43900 4 +C 71700 51000 1 0 0 input-1.sym +{ +T 71300 51300 5 10 0 0 0 0 1 +device=INPUT +T 71200 51000 5 10 1 1 0 0 1 +net=5V:1 +} +N 72500 51100 73300 51100 4 +N 72500 49900 73300 49900 4 +C 72800 49300 1 0 0 gnd-1.sym +N 73300 50800 72900 50800 4 +N 72900 49600 72900 52600 4 +C 63850 44300 1 180 1 output-1.sym +{ +T 63950 44000 5 10 0 0 180 6 1 +device=OUTPUT +T 64750 44300 5 10 1 1 180 6 1 +net=AREF:1 +} +C 68100 58800 1 0 0 input-1.sym +{ +T 67700 59100 5 10 0 0 0 0 1 +device=INPUT +T 67400 58800 5 10 1 1 0 0 1 +net=AREF:1 +} +C 60900 47100 1 0 0 connector3-1B.sym +{ +T 60700 47600 5 10 0 1 0 6 1 +description=12V IN +T 60900 47100 5 10 0 0 0 6 1 +footprint=2.5mmjack +T 59650 47300 5 10 0 1 0 0 1 +description=2.1 mm jack +T 60600 47900 5 10 1 1 0 0 1 +refdes=J1 +} +C 63700 60600 1 0 0 nc-right-1.sym +{ +T 63800 61100 5 10 0 0 0 0 1 +value=NoConnection +T 63800 61300 5 10 0 0 0 0 1 +device=DRC_Directive +} +N 63700 60700 63400 60700 4 +N 62000 61000 62200 61000 4 +N 63850 44200 63500 44200 4 +C 61350 51600 1 0 0 led-small.sym +{ +T 62950 51500 5 10 0 1 0 8 1 +device=LED 0805 Side View +T 61350 51600 5 10 0 1 180 2 1 +footprint=LED_0805_RA_LT220 +T 61750 51500 5 10 1 1 0 8 1 +refdes=D6 +T 62450 51300 5 10 1 1 180 0 1 +description="D6_Debug" +T 61550 50900 5 10 1 1 0 0 1 +device=LED 0805 Side View Blue +} +C 61350 53700 1 0 0 led-small.sym +{ +T 62950 53600 5 10 0 1 0 8 1 +device=LED 0805 Side View +T 61350 53700 5 10 0 1 180 2 1 +footprint=LED_0805_RA_LT220 +T 61650 53700 5 10 1 1 0 8 1 +refdes=D5 +T 63550 53200 5 10 1 1 180 0 1 +description=LED 0805 Side View Blue +T 61450 53300 5 10 1 1 0 0 1 +device="D5_Debug" +} +C 63200 53900 1 180 0 resistor-1.sym +{ +T 63200 53900 5 10 0 1 180 0 1 +footprint=0805_reflow_solder_2 +T 62400 54100 5 10 1 1 0 0 1 +refdes=R5 +T 62800 54100 5 10 1 1 0 0 1 +value=62 +} +C 63200 51800 1 180 0 resistor-1.sym +{ +T 63200 51800 5 10 0 1 180 0 1 +footprint=0805_reflow_solder_2 +T 62400 52000 5 10 1 1 0 0 1 +refdes=R6 +T 62800 52000 5 10 1 1 0 0 1 +value=62 +} +N 62150 51700 62300 51700 4 +N 62150 53800 62300 53800 4 +C 92000 58000 1 180 0 connector10-1B.sym +{ +T 92000 58000 5 10 0 0 180 6 1 +footprint=Molex5267_10 +T 93650 56100 5 10 1 1 0 6 1 +device=Molex 99-99-0994 +T 92500 57000 5 10 1 1 0 6 1 +refdes=J5B +T 92200 56700 5 10 1 1 0 0 1 +description=Solenoids +T 92200 56400 5 10 1 1 0 0 1 +description=KH-930 +} +C 92000 47600 1 180 0 connector8-1B.sym +{ +T 92000 47600 5 10 0 0 180 6 1 +footprint=Molex5267_8 +T 93650 46200 5 10 1 1 180 0 1 +device=Molex 99-99-0992 +T 92500 45300 5 10 1 1 180 0 1 +refdes=J4B +T 92200 45600 5 10 1 1 180 6 1 +description=Solenoids +T 92200 45900 5 10 1 1 180 6 1 +description=KH-930 +} +C 74400 49700 1 0 1 connector5-1B.sym +{ +T 74400 49700 5 10 0 0 0 0 1 +footprint=Molex5267_5 +T 76000 50200 5 10 1 1 0 6 1 +device=Molex 99-99-0989 +T 74900 51100 5 10 1 1 0 6 1 +refdes=J3B +T 74600 50800 5 10 1 1 0 0 1 +description=Encoder +T 74600 50500 5 10 1 1 0 0 1 +description=KH-930 +} +C 66300 53700 1 0 0 input-1.sym +{ +T 65900 54000 5 10 0 0 0 0 1 +device=INPUT +T 65800 53700 5 10 1 1 0 0 1 +net=5V:1 +} +N 67100 53800 67300 53800 4 +C 66300 53100 1 0 0 input-1.sym +{ +T 65900 53400 5 10 0 0 0 0 1 +device=INPUT +T 65700 53100 5 10 1 1 0 0 1 +net=SCL:1 +} +N 67100 53200 67300 53200 4 +C 66300 53400 1 0 0 input-1.sym +{ +T 65900 53700 5 10 0 0 0 0 1 +device=INPUT +T 65700 53400 5 10 1 1 0 0 1 +net=SDA:1 +} +N 67100 53500 67300 53500 4 +C 66300 51600 1 0 0 input-1.sym +{ +T 65900 51900 5 10 0 0 0 0 1 +device=INPUT +T 65800 51600 5 10 1 1 0 0 1 +net=5V:1 +} +N 67100 51700 67300 51700 4 +C 66300 51000 1 0 0 input-1.sym +{ +T 65900 51300 5 10 0 0 0 0 1 +device=INPUT +T 65700 51000 5 10 1 1 0 0 1 +net=SCL:1 +} +N 67100 51100 67300 51100 4 +C 66300 51300 1 0 0 input-1.sym +{ +T 65900 51600 5 10 0 0 0 0 1 +device=INPUT +T 65700 51300 5 10 1 1 0 0 1 +net=SDA:1 +} +N 67100 51400 67300 51400 4 +N 72900 52600 73300 52600 4 +C 72500 51800 1 180 0 output-1.sym +{ +T 72400 51500 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 51800 5 10 1 1 180 0 1 +net=ENCC:1 +} +C 71700 52800 1 0 0 input-1.sym +{ +T 71300 53100 5 10 0 0 0 0 1 +device=INPUT +T 71200 52800 5 10 1 1 0 0 1 +net=5V:1 +} +N 72500 51700 73300 51700 4 +N 72500 52900 73300 52900 4 +N 73300 48400 72900 48400 4 +N 90700 54200 90900 54200 4 +N 90900 54500 90700 54500 4 +N 90200 51800 90900 51800 4 +N 90900 53900 88800 53900 4 +N 88800 53900 88800 57200 4 +N 89000 56900 89000 53600 4 +N 89000 53600 90900 53600 4 +N 89200 56600 89200 53300 4 +N 89200 53300 90900 53300 4 +N 89400 56300 89400 53000 4 +N 89400 53000 90900 53000 4 +N 89600 56000 89600 52700 4 +N 89600 52700 90900 52700 4 +N 89800 55700 89800 52400 4 +N 89800 52400 90900 52400 4 +N 90000 55400 90000 52100 4 +N 90000 52100 90900 52100 4 +N 90200 51800 90200 55100 4 +N 88800 47400 88800 44500 4 +N 88800 44500 90900 44500 4 +N 89000 47100 89000 44200 4 +N 89000 44200 90900 44200 4 +N 89200 46800 89200 43900 4 +N 89200 43900 90900 43900 4 +N 89400 46500 89400 43600 4 +N 89400 43600 90900 43600 4 +N 89600 46200 89600 43300 4 +N 89600 43300 90900 43300 4 +N 89800 45900 89800 43000 4 +N 89800 43000 90900 43000 4 +N 90000 45600 90000 42700 4 +N 90000 42700 90900 42700 4 +N 90200 45300 90200 42400 4 +N 90200 42400 90900 42400 4 +C 92000 61300 1 180 0 connector10-1B.sym +{ +T 90100 58300 5 10 0 0 0 8 1 +device=CONNECTOR_10 +T 92000 61300 5 10 0 0 0 2 1 +footprint=header_10_SIL_V_Wiggle_25mm.fp +T 92500 59800 5 10 1 1 180 2 1 +refdes=J2A +T 92200 59500 5 10 1 1 180 8 1 +description=Solenoids +T 92200 59200 5 10 1 1 180 8 1 +description=KH-910 +} +C 92000 50600 1 180 0 connector8-1B.sym +{ +T 91900 47400 5 10 0 0 180 0 1 +device=CONNECTOR_8 +T 92000 50600 5 10 0 0 180 6 1 +footprint=header_8_SIL_V_Wiggle_25mm.fp +T 92500 49400 5 10 1 1 180 0 1 +refdes=J3A +T 92200 49700 5 10 1 1 180 6 1 +description=Solenoids +T 92200 50000 5 10 1 1 180 6 1 +description=KH-910 +} +C 72500 50600 1 180 0 output-1.sym +{ +T 72400 50300 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 50600 5 10 1 1 180 0 1 +net=ENCB:1 +} +N 72500 50500 73300 50500 4 +C 72500 50300 1 180 0 output-1.sym +{ +T 72400 50000 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 50300 5 10 1 1 180 0 1 +net=ENCA:1 +} +N 72500 50200 73300 50200 4 +C 72500 52400 1 180 0 output-1.sym +{ +T 72400 52100 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 52400 5 10 1 1 180 0 1 +net=ENCB:1 +} +C 72500 52100 1 180 0 output-1.sym +{ +T 72400 51800 5 10 0 0 180 0 1 +device=OUTPUT +T 71600 52100 5 10 1 1 180 0 1 +net=ENCA:1 +} +N 72500 52000 73300 52000 4 +N 72500 52300 73300 52300 4 +C 74400 53100 1 180 0 connector5-1B.sym +{ +T 74400 53100 5 10 0 0 180 6 1 +footprint=Molex53014-0510.fp +T 76100 52900 5 10 1 1 180 0 1 +device=Molex 53014-0510 +T 74900 52000 5 10 1 1 180 0 1 +refdes=J3C +T 74600 52300 5 10 1 1 180 6 1 +description=Encoder +T 74600 52600 5 10 1 1 180 6 1 +description=KH-965 +} +N 72300 47500 72300 48700 4 +N 72300 48700 73300 48700 4 +N 73300 48100 72600 48100 4 +N 72600 48100 72600 46900 4 +C 74400 47900 1 0 1 connector3-1B.sym +{ +T 74400 47900 5 10 0 0 0 0 1 +footprint=Molex53014-0310.fp +T 76100 47900 5 10 1 1 0 6 1 +device=Molex 53014-0310 +T 74900 48500 5 10 1 1 0 6 1 +refdes=J6C +T 74600 48300 5 10 1 1 0 0 1 +description=EOL-R +T 74600 48100 5 10 1 1 0 0 1 +description=KH-965 +} +T 87200 41200 1 16 1 0 0 0 1 +AYAB Interface +T 87500 40400 9 10 1 0 0 0 1 +1 +T 88900 40400 9 10 1 0 0 0 1 +1 +T 90900 40400 9 10 1 0 0 0 1 +Windell H. Oskay +T 90900 40700 9 10 1 0 0 0 1 +Rev E, January 2018 +T 81200 41700 1 12 1 0 0 0 2 +Copyright 2018, Windell H. Oskay/Evil Mad Science LLC +Distributed under the CC-BY-SA 4.0 License +T 76200 41400 1 14 1 0 0 0 3 +An Open-Source Design by +Evil Mad Scientist Laboratories +www.evilmadscientist.com +T 81200 40900 1 14 1 0 0 0 2 +Based on the AYAB Shield +http://ayab-knitting.com +T 60700 42900 9 10 1 0 0 0 2 +Alternate +5VDC +(In or out) +T 60450 45550 1 10 1 0 0 0 5 +J1: 9 V DC input +2.1 mm, center positive + +Use Regulated 9-12 V DC only +Minimum 1.5 A Capacity +T 60600 41700 1 10 1 0 0 0 2 +Note: Primary 5V power +is supplied via USB. +T 85850 60900 9 10 1 0 0 0 4 +Note: Pin numbers of the connectors have been +reversed as needed to match connector pin +numbering as per Molex/Hirose datasheets. + +T 67900 56100 1 12 1 0 0 0 2 +NOTE: 5V power supply derived entirely from +USB input. Limit total draw to 500 mA. +C 67000 46800 1 90 0 resistor-1.sym +{ +T 67000 46800 5 10 0 1 90 0 1 +footprint=0805_reflow_solder_2 +T 67100 47300 5 10 1 1 0 0 1 +refdes=R3 +T 67100 47000 5 10 1 1 0 0 1 +value=320 +} +N 66900 47900 66900 47700 4 +C 68100 47800 1 0 1 terminal-1.sym +{ +T 67790 48550 5 10 0 0 0 6 1 +device=terminal +T 68100 47800 5 10 0 1 180 0 1 +footprint=JUMPER1 +T 67850 47850 5 10 1 1 0 0 1 +refdes=9V +} +C 63900 46800 1 0 1 terminal-1.sym +{ +T 63590 47550 5 10 0 0 0 6 1 +device=terminal +T 63900 46800 5 10 0 1 180 0 1 +footprint=JUMPER1 +T 63250 47050 5 10 1 1 0 0 1 +refdes=GND2 +} +N 63000 46900 62800 46900 4 +C 92000 54700 1 180 0 connector10-1B.sym +{ +T 92000 54700 5 10 0 0 180 6 1 +footprint=Molex53014-1010.fp +T 93650 53400 5 10 1 1 180 0 1 +device=Molex 53014-1010 +T 92500 52500 5 10 1 1 180 0 1 +refdes=J5C +T 92200 52800 5 10 1 1 180 6 1 +description=Solenoids +T 92200 53100 5 10 1 1 180 6 1 +description=KH-900 +} +C 92000 44700 1 180 0 connector8-1B.sym +{ +T 92000 44700 5 10 0 0 180 6 1 +footprint=Molex53014-0810.fp +T 93850 43300 5 10 1 1 180 0 1 +device=Molex53014-0810.fp +T 92500 42400 5 10 1 1 180 0 1 +refdes=J4C +T 92200 42700 5 10 1 1 180 6 1 +description=Solenoids +T 92200 43000 5 10 1 1 180 6 1 +description=KH-900 +} +C 80050 46100 1 90 0 capacitor-1.sym +{ +T 79350 46300 5 10 0 0 90 0 1 +device=CAPACITOR +T 79150 46300 5 10 0 0 90 0 1 +symversion=0.1 +T 80050 46100 5 10 0 0 0 0 1 +footprint=1206_reflow_solder_2 +T 79650 46800 5 10 1 1 180 0 1 +refdes=C6 +T 79250 46300 5 10 1 1 0 0 1 +value=1 uF +} +N 80350 47200 79850 47200 4 +N 79850 47200 79850 47000 4 +N 79850 46100 79850 45800 4 +N 79850 45800 80350 45800 4 +C 79800 56800 1 270 0 capacitor-1.sym +{ +T 80500 56600 5 10 0 0 270 0 1 +device=CAPACITOR +T 80700 56600 5 10 0 0 270 0 1 +symversion=0.1 +T 79800 56800 5 10 0 0 180 0 1 +footprint=1206_reflow_solder_2 +T 79600 56500 5 10 1 1 0 0 1 +refdes=C5 +T 79900 56200 5 10 1 1 180 0 1 +value=1 uF +} +N 80000 55900 80000 55650 4 +N 80000 55650 80400 55650 4 +N 80000 56800 80000 57200 4 +N 76450 61500 76850 61500 4 +N 76450 59100 76450 61700 4 +N 76450 60300 76850 60300 4 +N 76850 61200 76650 61200 4 +N 76650 58300 76650 61200 4 +N 76650 60000 76850 60000 4 +N 75850 59700 76850 59700 4 +N 76250 59700 76250 60900 4 +N 76250 60900 76850 60900 4 +C 75850 59600 1 0 1 output-1.sym +{ +T 75750 59900 5 10 0 0 0 6 1 +device=OUTPUT +T 75700 59900 5 10 1 1 0 6 1 +net=EOLL:1 +} +C 76650 61700 1 0 1 generic-power.sym +{ +T 76450 61950 5 10 1 1 0 3 1 +net=5V:1 +} +C 77950 59500 1 0 1 connector3-1B.sym +{ +T 77950 59500 5 10 0 0 180 6 1 +footprint=Molex5267_3 +T 79500 59600 5 10 1 1 0 6 1 +device=Molex 99-99-0987 +T 78350 60300 5 10 1 1 0 6 1 +refdes=J2B +T 78050 60200 5 10 1 1 180 6 1 +description=EOL-L +T 78050 60000 5 10 1 1 180 6 1 +description=KH-930 +} +N 76850 58800 76650 58800 4 +N 76850 58500 76050 58500 4 +N 76050 58500 76050 59700 4 +N 76450 59100 76850 59100 4 +C 77950 60700 1 0 1 connector3-1B.sym +{ +T 76150 61600 5 10 0 0 0 6 1 +device=Header 0.1-3 +T 77950 60700 5 10 0 0 180 6 1 +footprint=header_3_SIL_V_Wiggle_25mm +T 78350 61500 5 10 1 1 0 6 1 +refdes=J7A +T 78050 61400 5 10 1 1 180 6 1 +description=EOL-L +T 78050 61200 5 10 1 1 180 6 1 +description=KH-910 +} +C 77950 59300 1 180 0 connector3-1B.sym +{ +T 77950 59300 5 10 0 0 0 2 1 +footprint=Molex53014-0310 +T 79650 58500 5 10 1 1 0 8 1 +device=Molex 53014-0310 +T 78450 59200 5 10 1 1 0 8 1 +refdes=J2C +T 78150 58900 5 10 1 1 0 2 1 +description=EOL-L +T 78150 58700 5 10 1 1 0 2 1 +description=KH-965 / 2mm +} +C 76550 58000 1 0 0 gnd-1.sym +N 82850 57950 82850 57200 4 +N 83250 57950 83250 56900 4 +N 83650 57950 83650 56600 4 +N 84050 57950 84050 56300 4 +N 84650 57950 84650 56000 4 +N 85050 57950 85050 55700 4 +N 85450 57950 85450 55400 4 +N 80300 57200 80300 59700 4 +N 80300 59700 85850 59700 4 +N 84050 59250 84050 59700 4 +N 83650 59250 83650 59700 4 +N 83250 59250 83250 59700 4 +N 82850 59250 82850 59700 4 +N 84200 49450 84200 49900 4 +N 83800 49450 83800 49900 4 +N 83400 49450 83400 49900 4 +N 83000 49450 83000 49900 4 +N 84200 48150 84200 46500 4 +N 83800 48150 83800 46800 4 +N 83400 48150 83400 47100 4 +N 83000 48150 83000 47400 4 +N 80350 49900 86000 49900 4 +N 82400 55100 86400 55100 4 +N 85850 55100 85850 57950 4 +N 82250 45300 86400 45300 4 +N 85850 59250 85850 59700 4 +N 85450 59700 85450 59250 4 +N 85050 59700 85050 59250 4 +N 84650 59250 84650 59700 4 +N 84800 49450 84800 49900 4 +N 86000 49450 86000 49900 4 +N 85600 49450 85600 49900 4 +N 85200 49450 85200 49900 4 +N 84800 48150 84800 46200 4 +N 85200 48150 85200 45900 4 +N 85600 48150 85600 45600 4 +N 86000 48150 86000 45300 4 +C 82750 57950 1 0 0 resistorpack8-isolated2.sym +{ +T 82850 59550 5 10 0 0 0 0 1 +device=Isolated resistor array, 4 pack +T 82150 58800 5 10 1 1 0 0 1 +refdes=RN1 +T 82850 59750 5 10 0 0 0 0 1 +footprint=ResArray_1206x4_YC164 +T 82350 58550 5 10 1 1 0 0 1 +value=1k +T 82750 57950 5 10 0 0 0 0 1 +model=YC164-JR-071KL +T 82750 57950 5 10 0 0 0 0 1 +source=Yageo +} +C 84550 57950 1 0 0 resistorpack8-isolated2.sym +{ +T 84650 59550 5 10 0 0 0 0 1 +device=Isolated resistor array, 4 pack +T 86050 58950 5 10 1 1 0 0 1 +refdes=RN2 +T 84650 59750 5 10 0 0 0 0 1 +footprint=ResArray_1206x4_YC164 +T 86100 58650 5 10 1 1 0 0 1 +value=1k +T 84550 57950 5 10 0 0 0 0 1 +model=YC164-JR-071KL +T 84550 57950 5 10 0 0 0 0 1 +source=Yageo +} +C 82900 48150 1 0 0 resistorpack8-isolated2.sym +{ +T 83000 49750 5 10 0 0 0 0 1 +device=Isolated resistor array, 4 pack +T 82300 49000 5 10 1 1 0 0 1 +refdes=RN3 +T 83000 49950 5 10 0 0 0 0 1 +footprint=ResArray_1206x4_YC164 +T 82500 48750 5 10 1 1 0 0 1 +value=1k +T 82900 48150 5 10 0 0 0 0 1 +model=YC164-JR-071KL +T 82900 48150 5 10 0 0 0 0 1 +source=Yageo +} +C 84700 48150 1 0 0 resistorpack8-isolated2.sym +{ +T 84800 49750 5 10 0 0 0 0 1 +device=Isolated resistor array, 4 pack +T 86200 49150 5 10 1 1 0 0 1 +refdes=RN4 +T 84800 49950 5 10 0 0 0 0 1 +footprint=ResArray_1206x4_YC164 +T 86250 48850 5 10 1 1 0 0 1 +value=1k +T 84700 48150 5 10 0 0 0 0 1 +model=YC164-JR-071KL +T 84700 48150 5 10 0 0 0 0 1 +source=Yageo +} diff --git a/qa/data/eeschema/io/geda/ayab/gafrc b/qa/data/eeschema/io/geda/ayab/gafrc new file mode 100644 index 0000000000..91d55c9963 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gafrc @@ -0,0 +1,2 @@ +(component-library "gschem-symbols") +(component-library "stdlib") diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/MetroMini.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/MetroMini.sym new file mode 100644 index 0000000000..1550b50c9f --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/MetroMini.sym @@ -0,0 +1,321 @@ +v 20130925 2 +L 300 0 1700 0 3 0 0 0 -1 -1 +L 300 4400 300 0 3 0 0 0 -1 -1 +L 300 4400 1700 4400 3 0 0 0 -1 -1 +L 1700 4400 1700 0 3 0 0 0 -1 -1 +P 0 4100 300 4100 1 0 0 +{ +T 0 4100 5 10 0 0 0 0 1 +pintype=io +T 355 4095 9 8 1 1 0 0 1 +pinlabel=VUSB +T 205 4145 5 8 1 1 0 6 1 +pinnumber=1 +T 0 4100 5 10 0 0 0 0 1 +pinseq=1 +} +P 0 3800 300 3800 1 0 0 +{ +T 0 3800 5 10 0 0 0 0 1 +pintype=io +T 355 3795 9 8 1 1 0 0 1 +pinlabel=RST +T 205 3845 5 8 1 1 0 6 1 +pinnumber=2 +T 0 3800 5 10 0 0 0 0 1 +pinseq=2 +} +P 0 3500 300 3500 1 0 0 +{ +T 0 3500 5 10 0 0 0 0 1 +pintype=io +T 355 3495 9 8 1 1 0 0 1 +pinlabel=3V +T 205 3545 5 8 1 1 0 6 1 +pinnumber=3 +T 0 3500 5 10 0 0 0 0 1 +pinseq=3 +} +P 0 3200 300 3200 1 0 0 +{ +T 0 3200 5 10 0 0 0 0 1 +pintype=io +T 355 3195 9 8 1 1 0 0 1 +pinlabel=5V +T 205 3245 5 8 1 1 0 6 1 +pinnumber=4 +T 0 3200 5 10 0 0 0 0 1 +pinseq=4 +} +P 0 2900 300 2900 1 0 0 +{ +T 0 2900 5 10 0 0 0 0 1 +pintype=io +T 355 2895 9 8 1 1 0 0 1 +pinlabel=GND +T 205 2945 5 8 1 1 0 6 1 +pinnumber=5 +T 0 2900 5 10 0 0 0 0 1 +pinseq=5 +} +P 0 2600 300 2600 1 0 0 +{ +T 0 2600 5 10 0 0 0 0 1 +pintype=io +T 355 2595 9 8 1 1 0 0 1 +pinlabel=GND +T 205 2645 5 8 1 1 0 6 1 +pinnumber=6 +T 0 2600 5 10 0 0 0 0 1 +pinseq=6 +} +P 0 2300 300 2300 1 0 0 +{ +T 0 2300 5 10 0 0 0 0 1 +pintype=io +T 355 2295 9 8 1 1 0 0 1 +pinlabel=VIN +T 205 2345 5 8 1 1 0 6 1 +pinnumber=7 +T 0 2300 5 10 0 0 0 0 1 +pinseq=7 +} +P 0 2000 300 2000 1 0 0 +{ +T 0 2000 5 10 0 0 0 0 1 +pintype=io +T 355 1995 9 8 1 1 0 0 1 +pinlabel=AREF +T 205 2045 5 8 1 1 0 6 1 +pinnumber=8 +T 0 2000 5 10 0 0 0 0 1 +pinseq=8 +} +P 0 1700 300 1700 1 0 0 +{ +T 0 1700 5 10 0 0 0 0 1 +pintype=io +T 355 1695 9 8 1 1 0 0 1 +pinlabel=A0 +T 205 1745 5 8 1 1 0 6 1 +pinnumber=9 +T 0 1700 5 10 0 0 0 0 1 +pinseq=9 +} +P 0 1400 300 1400 1 0 0 +{ +T 0 1400 5 10 0 0 0 0 1 +pintype=io +T 355 1395 9 8 1 1 0 0 1 +pinlabel=A1 +T 205 1445 5 8 1 1 0 6 1 +pinnumber=10 +T 0 1400 5 10 0 0 0 0 1 +pinseq=10 +} +P 0 1100 300 1100 1 0 0 +{ +T 0 1100 5 10 0 0 0 0 1 +pintype=io +T 355 1095 9 8 1 1 0 0 1 +pinlabel=A2 +T 205 1145 5 8 1 1 0 6 1 +pinnumber=11 +T 0 1100 5 10 0 0 0 0 1 +pinseq=11 +} +P 0 800 300 800 1 0 0 +{ +T 0 800 5 10 0 0 0 0 1 +pintype=io +T 355 795 9 8 1 1 0 0 1 +pinlabel=A3 +T 205 845 5 8 1 1 0 6 1 +pinnumber=12 +T 0 800 5 10 0 0 0 0 1 +pinseq=12 +} +P 0 500 300 500 1 0 0 +{ +T 0 500 5 10 0 0 0 0 1 +pintype=io +T 355 495 9 8 1 1 0 0 1 +pinlabel=A4 +T 205 545 5 8 1 1 0 6 1 +pinnumber=13 +T 0 500 5 10 0 0 0 0 1 +pinseq=13 +} +P 0 200 300 200 1 0 0 +{ +T 0 200 5 10 0 0 0 0 1 +pintype=io +T 355 195 9 8 1 1 0 0 1 +pinlabel=A5 +T 205 245 5 8 1 1 0 6 1 +pinnumber=14 +T 0 200 5 10 0 0 0 0 1 +pinseq=14 +} +P 2000 200 1700 200 1 0 0 +{ +T 2000 200 5 10 0 0 0 0 1 +pintype=io +T 1645 195 9 8 1 1 0 6 1 +pinlabel=D0 +T 1795 245 5 8 1 1 0 0 1 +pinnumber=15 +T 2000 200 5 10 0 0 0 0 1 +pinseq=15 +} +P 2000 500 1700 500 1 0 0 +{ +T 2000 500 5 10 0 0 0 0 1 +pintype=io +T 1645 495 9 8 1 1 0 6 1 +pinlabel=D1 +T 1795 545 5 8 1 1 0 0 1 +pinnumber=16 +T 2000 500 5 10 0 0 0 0 1 +pinseq=16 +} +P 2000 800 1700 800 1 0 0 +{ +T 2000 800 5 10 0 0 0 0 1 +pintype=io +T 1645 795 9 8 1 1 0 6 1 +pinlabel=D2 +T 1795 845 5 8 1 1 0 0 1 +pinnumber=17 +T 2000 800 5 10 0 0 0 0 1 +pinseq=17 +} +P 2000 1100 1700 1100 1 0 0 +{ +T 2000 1100 5 10 0 0 0 0 1 +pintype=io +T 1645 1095 9 8 1 1 0 6 1 +pinlabel=D3 +T 1795 1145 5 8 1 1 0 0 1 +pinnumber=18 +T 2000 1100 5 10 0 0 0 0 1 +pinseq=18 +} +P 2000 1400 1700 1400 1 0 0 +{ +T 2000 1400 5 10 0 0 0 0 1 +pintype=io +T 1645 1395 9 8 1 1 0 6 1 +pinlabel=D4 +T 1795 1445 5 8 1 1 0 0 1 +pinnumber=19 +T 2000 1400 5 10 0 0 0 0 1 +pinseq=19 +} +P 2000 1700 1700 1700 1 0 0 +{ +T 2000 1700 5 10 0 0 0 0 1 +pintype=io +T 1645 1695 9 8 1 1 0 6 1 +pinlabel=D5 +T 1795 1745 5 8 1 1 0 0 1 +pinnumber=20 +T 2000 1700 5 10 0 0 0 0 1 +pinseq=20 +} +P 2000 2000 1700 2000 1 0 0 +{ +T 2000 2000 5 10 0 0 0 0 1 +pintype=io +T 1645 1995 9 8 1 1 0 6 1 +pinlabel=D6 +T 1795 2045 5 8 1 1 0 0 1 +pinnumber=21 +T 2000 2000 5 10 0 0 0 0 1 +pinseq=21 +} +P 2000 2300 1700 2300 1 0 0 +{ +T 2000 2300 5 10 0 0 0 0 1 +pintype=io +T 1645 2295 9 8 1 1 0 6 1 +pinlabel=D7 +T 1795 2345 5 8 1 1 0 0 1 +pinnumber=22 +T 2000 2300 5 10 0 0 0 0 1 +pinseq=22 +} +P 2000 2600 1700 2600 1 0 0 +{ +T 2000 2600 5 10 0 0 0 0 1 +pintype=io +T 1645 2595 9 8 1 1 0 6 1 +pinlabel=D8 +T 1795 2645 5 8 1 1 0 0 1 +pinnumber=23 +T 2000 2600 5 10 0 0 0 0 1 +pinseq=23 +} +P 2000 2900 1700 2900 1 0 0 +{ +T 2000 2900 5 10 0 0 0 0 1 +pintype=io +T 1645 2895 9 8 1 1 0 6 1 +pinlabel=D9 +T 1795 2945 5 8 1 1 0 0 1 +pinnumber=24 +T 2000 2900 5 10 0 0 0 0 1 +pinseq=24 +} +P 2000 3200 1700 3200 1 0 0 +{ +T 2000 3200 5 10 0 0 0 0 1 +pintype=io +T 1645 3195 9 8 1 1 0 6 1 +pinlabel=D10 +T 1795 3245 5 8 1 1 0 0 1 +pinnumber=25 +T 2000 3200 5 10 0 0 0 0 1 +pinseq=25 +} +P 2000 3500 1700 3500 1 0 0 +{ +T 2000 3500 5 10 0 0 0 0 1 +pintype=io +T 1645 3495 9 8 1 1 0 6 1 +pinlabel=D11 +T 1795 3545 5 8 1 1 0 0 1 +pinnumber=26 +T 2000 3500 5 10 0 0 0 0 1 +pinseq=26 +} +P 2000 3800 1700 3800 1 0 0 +{ +T 2000 3800 5 10 0 0 0 0 1 +pintype=io +T 1645 3795 9 8 1 1 0 6 1 +pinlabel=D12 +T 1795 3845 5 8 1 1 0 0 1 +pinnumber=27 +T 2000 3800 5 10 0 0 0 0 1 +pinseq=27 +} +P 2000 4100 1700 4100 1 0 0 +{ +T 2000 4100 5 10 0 0 0 0 1 +pintype=io +T 1645 4095 9 8 1 1 0 6 1 +pinlabel=D13 +T 1795 4145 5 8 1 1 0 0 1 +pinnumber=28 +T 2000 4100 5 10 0 0 0 0 1 +pinseq=28 +} +T -5 0 8 10 0 1 0 0 1 +device=METROMINI +T -5 0 8 10 0 1 0 0 1 +footprint=DIP28METRO +T 295 4500 9 10 1 1 0 0 1 +value=METROMINI +T 1695 4500 5 10 1 1 0 6 1 +refdes=U? diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/PCF8574T-2.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/PCF8574T-2.sym new file mode 100644 index 0000000000..c0e8e724d1 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/PCF8574T-2.sym @@ -0,0 +1,188 @@ +v 20130925 2 +B 300 0 1200 3100 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 550 3150 8 10 1 1 0 6 1 +refdes=U? +P 300 2200 0 2200 1 0 1 +{ +T 200 2250 5 8 1 1 0 6 1 +pinnumber=1 +T 350 2200 9 8 1 1 0 0 1 +pinlabel=A0 +T 200 2150 5 8 0 1 0 8 1 +pinseq=1 +T 350 2200 5 8 0 1 0 2 1 +pintype=io +} +P 300 1900 0 1900 1 0 1 +{ +T 200 1950 5 8 1 1 0 6 1 +pinnumber=2 +T 350 1900 9 8 1 1 0 0 1 +pinlabel=A1 +T 200 1850 5 8 0 1 0 8 1 +pinseq=2 +T 350 1900 5 8 0 1 0 2 1 +pintype=io +} +P 300 1600 0 1600 1 0 1 +{ +T 200 1650 5 8 1 1 0 6 1 +pinnumber=3 +T 350 1600 9 8 1 1 0 0 1 +pinlabel=A2 +T 200 1550 5 8 0 1 0 8 1 +pinseq=3 +T 350 1600 5 8 0 1 0 2 1 +pintype=io +} +P 300 2800 0 2800 1 0 1 +{ +T 200 2850 5 8 1 1 0 6 1 +pinnumber=16 +T 350 2800 9 8 1 1 0 0 1 +pinlabel=VCC +T 200 2750 5 8 0 1 0 8 1 +pinseq=4 +T 350 2800 5 8 0 1 0 2 1 +pintype=io +} +P 300 900 0 900 1 0 1 +{ +T 200 950 5 8 1 1 0 6 1 +pinnumber=14 +T 350 900 9 8 1 1 0 0 1 +pinlabel=SCL +T 200 850 5 8 0 1 0 8 1 +pinseq=6 +T 350 900 5 8 0 1 0 2 1 +pintype=io +} +P 300 600 0 600 1 0 1 +{ +T 200 650 5 8 1 1 0 6 1 +pinnumber=15 +T 350 600 9 8 1 1 0 0 1 +pinlabel=SDA +T 200 550 5 8 0 1 0 8 1 +pinseq=7 +T 350 600 5 8 0 1 0 2 1 +pintype=io +} +P 300 200 0 200 1 0 1 +{ +T 200 250 5 8 1 1 0 6 1 +pinnumber=8 +T 350 200 9 8 1 1 0 0 1 +pinlabel=VSS +T 200 150 5 8 0 1 0 8 1 +pinseq=8 +T 350 200 5 8 0 1 0 2 1 +pintype=io +} +P 1500 200 1800 200 1 0 1 +{ +T 1600 250 5 8 1 1 0 0 1 +pinnumber=13 +T 1450 200 9 8 1 1 0 6 1 +pinlabel=INT* +T 1600 150 5 8 0 1 0 2 1 +pinseq=11 +T 1450 200 5 8 0 1 0 8 1 +pintype=io +} +P 1500 2800 1800 2800 1 0 1 +{ +T 1600 2850 5 8 1 1 0 0 1 +pinnumber=4 +T 1450 2800 9 8 1 1 0 6 1 +pinlabel=P0 +T 1600 2750 5 8 0 1 0 2 1 +pinseq=13 +T 1450 2800 5 8 0 1 0 8 1 +pintype=io +} +P 1500 2200 1800 2200 1 0 1 +{ +T 1600 2250 5 8 1 1 0 0 1 +pinnumber=6 +T 1450 2200 9 8 1 1 0 6 1 +pinlabel=P2 +T 1600 2150 5 8 0 1 0 2 1 +pinseq=15 +T 1450 2200 5 8 0 1 0 8 1 +pintype=io +} +P 1500 1900 1800 1900 1 0 1 +{ +T 1600 1950 5 8 1 1 0 0 1 +pinnumber=7 +T 1450 1900 9 8 1 1 0 6 1 +pinlabel=P3 +T 1600 1850 5 8 0 1 0 2 1 +pinseq=16 +T 1450 1900 5 8 0 1 0 8 1 +pintype=io +} +P 1500 1600 1800 1600 1 0 1 +{ +T 1600 1650 5 8 1 1 0 0 1 +pinnumber=9 +T 1450 1600 9 8 1 1 0 6 1 +pinlabel=P4 +T 1600 1550 5 8 0 1 0 2 1 +pinseq=17 +T 1450 1600 5 8 0 1 0 8 1 +pintype=io +} +P 1500 1300 1800 1300 1 0 1 +{ +T 1600 1350 5 8 1 1 0 0 1 +pinnumber=10 +T 1450 1300 9 8 1 1 0 6 1 +pinlabel=P5 +T 1600 1250 5 8 0 1 0 2 1 +pinseq=18 +T 1450 1300 5 8 0 1 0 8 1 +pintype=io +} +P 1500 1000 1800 1000 1 0 1 +{ +T 1600 1050 5 8 1 1 0 0 1 +pinnumber=11 +T 1450 1000 9 8 1 1 0 6 1 +pinlabel=P6 +T 1600 950 5 8 0 1 0 2 1 +pinseq=19 +T 1450 1000 5 8 0 1 0 8 1 +pintype=io +} +P 1500 700 1800 700 1 0 1 +{ +T 1600 750 5 8 1 1 0 0 1 +pinnumber=12 +T 1450 700 9 8 1 1 0 6 1 +pinlabel=P7 +T 1600 650 5 8 0 1 0 2 1 +pinseq=20 +T 1450 700 5 8 0 1 0 8 1 +pintype=io +} +T 300 4850 5 10 0 0 0 0 1 +footprint=DIL20 +T 300 4650 5 10 0 0 0 0 1 +description=ATtiny2313 AVR 8-bit Microcontroller (DIP) +T 300 5050 5 10 0 0 0 0 1 +numslots=0 +T 1000 3150 3 10 1 1 0 0 1 +device=PCF8574T +P 1500 2500 1800 2500 1 0 1 +{ +T 1600 2550 5 8 1 1 0 0 1 +pinnumber=5 +T 1450 2500 9 8 1 1 0 6 1 +pinlabel=P1 +T 1600 2450 5 8 0 1 0 2 1 +pinseq=14 +T 1450 2500 5 8 0 1 0 8 1 +pintype=io +} diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/ULN2803A.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/ULN2803A.sym new file mode 100644 index 0000000000..3f195c0d9e --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/ULN2803A.sym @@ -0,0 +1,206 @@ +v 20130925 2 +T 100 3050 3 10 1 0 0 0 1 +ULN2803A +T 300 3300 2 10 1 1 0 0 1 +refdes=U? +T 300 3700 8 10 0 0 0 0 1 +device=ULN2801A +P 300 2700 0 2700 1 0 1 +{ +T 136 2750 5 8 1 1 0 0 1 +pinnumber=1 +T 136 2750 5 8 0 0 0 0 1 +pinseq=1 +T 375 2650 3 8 1 1 0 0 1 +pinlabel=I1 +T 136 2750 5 8 0 1 0 0 1 +pintype=pas +} +P 300 2400 0 2400 1 0 1 +{ +T 96 2450 5 8 1 1 0 0 1 +pinnumber=2 +T 96 2450 5 8 0 0 0 0 1 +pinseq=2 +T 375 2350 3 8 1 1 0 0 1 +pinlabel=I2 +T 96 2450 5 8 0 1 0 0 1 +pintype=pas +} +P 300 2100 0 2100 1 0 1 +{ +T 120 2150 5 8 1 1 0 0 1 +pinnumber=3 +T 120 2150 5 8 0 0 0 0 1 +pinseq=3 +T 375 2050 3 8 1 1 0 0 1 +pinlabel=I3 +T 120 2150 5 8 0 1 0 0 1 +pintype=pas +} +P 300 1800 0 1800 1 0 1 +{ +T 96 1850 5 8 1 1 0 0 1 +pinnumber=4 +T 96 1850 5 8 0 0 0 0 1 +pinseq=4 +T 375 1750 3 8 1 1 0 0 1 +pinlabel=I4 +T 96 1850 5 8 0 1 0 0 1 +pintype=pas +} +P 300 1500 0 1500 1 0 1 +{ +T 120 1550 5 8 1 1 0 0 1 +pinnumber=5 +T 120 1550 5 8 0 0 0 0 1 +pinseq=5 +T 375 1450 3 8 1 1 0 0 1 +pinlabel=I5 +T 120 1550 5 8 0 1 0 0 1 +pintype=pas +} +P 300 1200 0 1200 1 0 1 +{ +T 104 1250 5 8 1 1 0 0 1 +pinnumber=6 +T 104 1250 5 8 0 0 0 0 1 +pinseq=6 +T 375 1150 3 8 1 1 0 0 1 +pinlabel=I6 +T 104 1250 5 8 0 1 0 0 1 +pintype=pas +} +P 300 900 0 900 1 0 1 +{ +T 120 950 5 8 1 1 0 0 1 +pinnumber=7 +T 120 950 5 8 0 0 0 0 1 +pinseq=7 +T 375 850 3 8 1 1 0 0 1 +pinlabel=I7 +T 120 950 5 8 0 1 0 0 1 +pintype=pas +} +P 300 600 0 600 1 0 1 +{ +T 112 650 5 8 1 1 0 0 1 +pinnumber=8 +T 112 650 5 8 0 0 0 0 1 +pinseq=8 +T 375 550 3 8 1 1 0 0 1 +pinlabel=I8 +T 112 650 5 8 0 1 0 0 1 +pintype=pas +} +P 1100 300 1100 0 1 0 1 +{ +T 1175 150 5 8 1 1 0 0 1 +pinnumber=9 +T 1175 150 5 8 0 0 0 0 1 +pinseq=9 +T 1150 375 3 8 1 1 90 0 1 +pinlabel=GND +T 1175 150 5 8 0 1 0 0 1 +pintype=pas +} +P 1300 3000 1300 3300 1 0 1 +{ +T 1375 3075 5 8 1 1 0 0 1 +pinnumber=10 +T 1375 3075 5 8 0 0 0 0 1 +pinseq=10 +T 1350 2190 3 8 1 1 90 0 1 +pinlabel=COMMON +T 1375 3075 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 600 2200 600 1 0 1 +{ +T 2000 650 5 8 1 1 0 0 1 +pinnumber=11 +T 2000 650 5 8 0 0 0 0 1 +pinseq=11 +T 1634 550 3 8 1 1 0 0 1 +pinlabel=O8 +T 2000 650 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 900 2200 900 1 0 1 +{ +T 2000 950 5 8 1 1 0 0 1 +pinnumber=12 +T 2000 950 5 8 0 0 0 0 1 +pinseq=12 +T 1642 850 3 8 1 1 0 0 1 +pinlabel=O7 +T 2000 950 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 1200 2200 1200 1 0 1 +{ +T 2000 1250 5 8 1 1 0 0 1 +pinnumber=13 +T 2000 1250 5 8 0 0 0 0 1 +pinseq=13 +T 1626 1150 3 8 1 1 0 0 1 +pinlabel=O6 +T 2000 1250 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 1500 2200 1500 1 0 1 +{ +T 2000 1550 5 8 1 1 0 0 1 +pinnumber=14 +T 2000 1550 5 8 0 0 0 0 1 +pinseq=14 +T 1642 1450 3 8 1 1 0 0 1 +pinlabel=O5 +T 2000 1550 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 1800 2200 1800 1 0 1 +{ +T 2000 1850 5 8 1 1 0 0 1 +pinnumber=15 +T 2000 1850 5 8 0 0 0 0 1 +pinseq=15 +T 1618 1750 3 8 1 1 0 0 1 +pinlabel=O4 +T 2000 1850 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 2100 2200 2100 1 0 1 +{ +T 2000 2150 5 8 1 1 0 0 1 +pinnumber=16 +T 2000 2150 5 8 0 0 0 0 1 +pinseq=16 +T 1642 2050 3 8 1 1 0 0 1 +pinlabel=O3 +T 2000 2150 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 2400 2200 2400 1 0 1 +{ +T 2000 2450 5 8 1 1 0 0 1 +pinnumber=17 +T 2000 2450 5 8 0 0 0 0 1 +pinseq=17 +T 1618 2350 3 8 1 1 0 0 1 +pinlabel=O2 +T 2000 2450 5 8 0 1 0 0 1 +pintype=pas +} +P 1900 2700 2200 2700 1 0 1 +{ +T 2000 2750 5 8 1 1 0 0 1 +pinnumber=18 +T 2000 2750 5 8 0 0 0 0 1 +pinseq=18 +T 1658 2650 3 8 1 1 0 0 1 +pinlabel=O1 +T 2000 2750 5 8 0 1 0 0 1 +pintype=pas +} +B 300 300 1600 2700 3 0 0 0 -1 -1 0 0 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/beeper.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/beeper.sym new file mode 100644 index 0000000000..c4fd3d7573 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/beeper.sym @@ -0,0 +1,44 @@ +v 20061020 1 +P 300 1000 300 800 1 0 0 +{ +T 300 900 5 8 0 1 0 7 1 +pinnumber=1 +T 300 900 5 8 0 1 0 7 1 +pinseq=1 +T 300 650 9 18 1 1 270 4 1 +pinlabel=+ +T 350 900 5 8 0 1 0 1 1 +pintype=pas +} +P 300 0 300 200 1 0 0 +{ +T 300 100 5 8 0 1 0 7 1 +pinnumber=2 +T 300 100 5 8 0 1 0 7 1 +pinseq=2 +T 350 300 9 18 1 1 180 4 1 +pinlabel=- +T 350 100 5 8 0 1 0 1 1 +pintype=pas +} +T 100 2100 5 8 0 0 0 0 1 +device=beeper +T 700 700 8 10 1 1 0 0 1 +refdes=U? +V 300 500 300 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 100 1900 5 8 0 0 0 0 1 +description=digisound coil beeper +T 100 1100 5 8 0 0 0 0 1 +numslots=0 +T 700 500 8 10 1 1 0 0 1 +value=F/UCW-12 +T 700 300 8 8 1 1 0 0 1 +footprint=BEEPER +T 325 500 9 10 1 0 0 4 1 +BEEP +T 100 1300 5 8 0 0 0 0 1 +license=GPL2 +T 100 1700 5 8 0 0 0 0 1 +documentation=http://www.digisound.de/pdf/06%20MBuzzerWOscil/F.UCW.01.pdf +T 100 1500 5 8 0 0 0 0 1 +author=K-M. Knaak, kmk@lilalaser.de diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector10-1B.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector10-1B.sym new file mode 100644 index 0000000000..471691b75d --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector10-1B.sym @@ -0,0 +1,126 @@ +v 20130925 2 +P 800 2600 1100 2600 1 0 1 +{ +T 250 2550 5 8 1 1 0 0 1 +pinnumber=2 +T -350 2550 5 8 0 0 0 0 1 +pinseq=2 +T -350 2550 5 8 0 1 0 0 1 +pinlabel=2 +T -350 2550 5 8 0 1 0 0 1 +pintype=pas +} +P 800 2000 1100 2000 1 0 1 +{ +T 250 1950 5 8 1 1 0 0 1 +pinnumber=4 +T -350 1950 5 8 0 0 0 0 1 +pinseq=4 +T -350 1950 5 8 0 1 0 0 1 +pinlabel=4 +T -350 1950 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1400 1100 1400 1 0 1 +{ +T 250 1350 5 8 1 1 0 0 1 +pinnumber=6 +T -350 1350 5 8 0 0 0 0 1 +pinseq=6 +T -350 1350 5 8 0 1 0 0 1 +pinlabel=6 +T -350 1350 5 8 0 1 0 0 1 +pintype=pas +} +P 800 800 1100 800 1 0 1 +{ +T 250 750 5 8 1 1 0 0 1 +pinnumber=8 +T -350 750 5 8 0 0 0 0 1 +pinseq=8 +T -350 750 5 8 0 1 0 0 1 +pinlabel=8 +T -350 750 5 8 0 1 0 0 1 +pintype=pas +} +P 800 2900 1100 2900 1 0 1 +{ +T 250 2850 5 8 1 1 0 0 1 +pinnumber=1 +T -350 2850 5 8 0 0 0 0 1 +pinseq=1 +T -350 2850 5 8 0 1 0 0 1 +pinlabel=1 +T -350 2850 5 8 0 1 0 0 1 +pintype=pas +} +P 800 2300 1100 2300 1 0 1 +{ +T 250 2250 5 8 1 1 0 0 1 +pinnumber=3 +T -350 2250 5 8 0 0 0 0 1 +pinseq=3 +T -350 2250 5 8 0 1 0 0 1 +pinlabel=3 +T -350 2250 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1700 1100 1700 1 0 1 +{ +T 250 1650 5 8 1 1 0 0 1 +pinnumber=5 +T -350 1650 5 8 0 0 0 0 1 +pinseq=5 +T -350 1650 5 8 0 1 0 0 1 +pinlabel=5 +T -350 1650 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1100 1100 1100 1 0 1 +{ +T 250 1050 5 8 1 1 0 0 1 +pinnumber=7 +T -350 1050 5 8 0 0 0 0 1 +pinseq=7 +T -350 1050 5 8 0 1 0 0 1 +pinlabel=7 +T -350 1050 5 8 0 1 0 0 1 +pintype=pas +} +P 800 200 1100 200 1 0 1 +{ +T 250 150 5 8 1 1 0 0 1 +pinnumber=10 +T -350 150 5 8 0 0 0 0 1 +pinseq=10 +T -350 150 5 8 0 1 0 0 1 +pinlabel=10 +T -350 150 5 8 0 1 0 0 1 +pintype=pas +} +P 800 500 1100 500 1 0 1 +{ +T 250 450 5 8 1 1 0 0 1 +pinnumber=9 +T -350 450 5 8 0 0 0 0 1 +pinseq=9 +T -350 450 5 8 0 1 0 0 1 +pinlabel=9 +T -350 450 5 8 0 1 0 0 1 +pintype=pas +} +L 800 2900 500 2900 3 0 0 0 -1 -1 +L 800 2600 500 2600 3 0 0 0 -1 -1 +L 800 2300 500 2300 3 0 0 0 -1 -1 +L 800 2000 500 2000 3 0 0 0 -1 -1 +B 0 0 500 3100 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 1900 3000 5 10 0 0 0 0 1 +device=CONNECTOR_10 +T 100 3200 8 10 1 1 0 0 1 +refdes=CONN? +L 800 1700 500 1700 3 0 0 0 -1 -1 +L 800 1400 500 1400 3 0 0 0 -1 -1 +L 800 1100 500 1100 3 0 0 0 -1 -1 +L 800 800 500 800 3 0 0 0 -1 -1 +L 800 200 500 200 3 0 0 0 -1 -1 +L 800 500 500 500 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector14-1.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector14-1.sym new file mode 100644 index 0000000000..7f0b0b64a3 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector14-1.sym @@ -0,0 +1,174 @@ +v 20130925 2 +P 1000 4500 1300 4500 1 0 1 +{ +T 350 4450 5 8 1 1 0 0 1 +pinnumber=2 +T -150 4450 5 8 0 0 0 0 1 +pinseq=2 +T -150 4450 5 8 0 1 0 0 1 +pinlabel=2 +T -150 4450 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 3900 1300 3900 1 0 1 +{ +T 350 3850 5 8 1 1 0 0 1 +pinnumber=4 +T -150 3850 5 8 0 0 0 0 1 +pinseq=4 +T -150 3850 5 8 0 1 0 0 1 +pinlabel=4 +T -150 3850 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 3300 1300 3300 1 0 1 +{ +T 350 3250 5 8 1 1 0 0 1 +pinnumber=6 +T -150 3250 5 8 0 0 0 0 1 +pinseq=6 +T -150 3250 5 8 0 1 0 0 1 +pinlabel=6 +T -150 3250 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 2700 1300 2700 1 0 1 +{ +T 350 2650 5 8 1 1 0 0 1 +pinnumber=8 +T -150 2650 5 8 0 0 0 0 1 +pinseq=8 +T -150 2650 5 8 0 1 0 0 1 +pinlabel=8 +T -150 2650 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 4800 1300 4800 1 0 1 +{ +T 350 4750 5 8 1 1 0 0 1 +pinnumber=1 +T -150 4750 5 8 0 0 0 0 1 +pinseq=1 +T -150 4750 5 8 0 1 0 0 1 +pinlabel=1 +T -150 4750 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 4200 1300 4200 1 0 1 +{ +T 350 4150 5 8 1 1 0 0 1 +pinnumber=3 +T -150 4150 5 8 0 0 0 0 1 +pinseq=3 +T -150 4150 5 8 0 1 0 0 1 +pinlabel=3 +T -150 4150 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 3600 1300 3600 1 0 1 +{ +T 350 3550 5 8 1 1 0 0 1 +pinnumber=5 +T -150 3550 5 8 0 0 0 0 1 +pinseq=5 +T -150 3550 5 8 0 1 0 0 1 +pinlabel=5 +T -150 3550 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 3000 1300 3000 1 0 1 +{ +T 350 2950 5 8 1 1 0 0 1 +pinnumber=7 +T -150 2950 5 8 0 0 0 0 1 +pinseq=7 +T -150 2950 5 8 0 1 0 0 1 +pinlabel=7 +T -150 2950 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 2100 1300 2100 1 0 1 +{ +T 350 2050 5 8 1 1 0 0 1 +pinnumber=10 +T -150 2050 5 8 0 0 0 0 1 +pinseq=10 +T -150 2050 5 8 0 1 0 0 1 +pinlabel=10 +T -150 2050 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 1500 1300 1500 1 0 1 +{ +T 350 1450 5 8 1 1 0 0 1 +pinnumber=12 +T -150 1450 5 8 0 0 0 0 1 +pinseq=12 +T -150 1450 5 8 0 1 0 0 1 +pinlabel=12 +T -150 1450 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 900 1300 900 1 0 1 +{ +T 350 850 5 8 1 1 0 0 1 +pinnumber=14 +T -150 850 5 8 0 0 0 0 1 +pinseq=14 +T -150 850 5 8 0 1 0 0 1 +pinlabel=14 +T -150 850 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 2400 1300 2400 1 0 1 +{ +T 350 2350 5 8 1 1 0 0 1 +pinnumber=9 +T -150 2350 5 8 0 0 0 0 1 +pinseq=9 +T -150 2350 5 8 0 1 0 0 1 +pinlabel=9 +T -150 2350 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 1800 1300 1800 1 0 1 +{ +T 350 1750 5 8 1 1 0 0 1 +pinnumber=11 +T -150 1750 5 8 0 0 0 0 1 +pinseq=11 +T -150 1750 5 8 0 1 0 0 1 +pinlabel=11 +T -150 1750 5 8 0 1 0 0 1 +pintype=pas +} +P 1000 1200 1300 1200 1 0 1 +{ +T 350 1150 5 8 1 1 0 0 1 +pinnumber=13 +T -150 1150 5 8 0 0 0 0 1 +pinseq=13 +T -150 1150 5 8 0 1 0 0 1 +pinlabel=13 +T -150 1150 5 8 0 1 0 0 1 +pintype=pas +} +L 1000 4800 600 4800 3 0 0 0 -1 -1 +L 1000 4500 600 4500 3 0 0 0 -1 -1 +L 1000 4200 600 4200 3 0 0 0 -1 -1 +L 1000 3900 600 3900 3 0 0 0 -1 -1 +L 1000 3600 600 3600 3 0 0 0 -1 -1 +L 1000 3300 600 3300 3 0 0 0 -1 -1 +L 1000 3000 600 3000 3 0 0 0 -1 -1 +L 1000 2700 600 2700 3 0 0 0 -1 -1 +L 1000 2400 600 2400 3 0 0 0 -1 -1 +L 1000 2100 600 2100 3 0 0 0 -1 -1 +L 1000 1800 600 1800 3 0 0 0 -1 -1 +L 1000 1500 600 1500 3 0 0 0 -1 -1 +L 1000 1200 600 1200 3 0 0 0 -1 -1 +L 1000 900 600 900 3 0 0 0 -1 -1 +B 100 700 500 4300 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 1900 4900 5 10 0 0 0 0 1 +device=CONNECTOR_16 +T 100 5100 8 10 1 1 0 0 1 +refdes=J? diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector3-1B.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector3-1B.sym new file mode 100644 index 0000000000..6fb1d499fa --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector3-1B.sym @@ -0,0 +1,42 @@ +v 20130925 2 +P 800 500 1100 500 1 0 1 +{ +T 250 450 5 8 1 1 0 0 1 +pinnumber=2 +T -350 450 5 8 0 0 0 0 1 +pinseq=2 +T -350 450 5 8 0 1 0 0 1 +pinlabel=2 +T -350 450 5 8 0 1 0 0 1 +pintype=pas +} +P 800 800 1100 800 1 0 1 +{ +T 250 750 5 8 1 1 0 0 1 +pinnumber=1 +T -350 750 5 8 0 0 0 0 1 +pinseq=1 +T -350 750 5 8 0 1 0 0 1 +pinlabel=1 +T -350 750 5 8 0 1 0 0 1 +pintype=pas +} +P 800 200 1100 200 1 0 1 +{ +T 250 150 5 8 1 1 0 0 1 +pinnumber=3 +T -350 150 5 8 0 0 0 0 1 +pinseq=3 +T -350 150 5 8 0 1 0 0 1 +pinlabel=3 +T -350 150 5 8 0 1 0 0 1 +pintype=pas +} +L 800 800 500 800 3 0 0 0 -1 -1 +B 0 0 500 1000 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 1800 900 5 10 0 0 0 0 1 +device=CONNECTOR_3 +T 0 1100 8 10 1 1 0 0 1 +refdes=CONN? +L 800 500 500 500 3 0 0 0 -1 -1 +L 800 200 500 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector4-1B.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector4-1B.sym new file mode 100644 index 0000000000..749d5223a8 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector4-1B.sym @@ -0,0 +1,58 @@ +v 20130925 2 +P 800 500 1100 500 1 0 1 +{ +T 250 450 5 8 1 1 0 0 1 +pinnumber=3 +T -350 450 5 8 0 0 0 0 1 +pinseq=3 +T -350 450 5 8 0 1 0 0 1 +pinlabel=3 +T -350 450 5 8 0 1 0 0 1 +pintype=pas +} +P 800 800 1100 800 1 0 1 +{ +T 250 750 5 8 1 1 0 0 1 +pinnumber=2 +T -350 750 5 8 0 0 0 0 1 +pinseq=2 +T -350 750 5 8 0 1 0 0 1 +pinlabel=2 +T -350 750 5 8 0 1 0 0 1 +pintype=pas +} +P 800 200 1100 200 1 0 1 +{ +T 250 150 5 8 1 1 0 0 1 +pinnumber=4 +T -350 150 5 8 0 0 0 0 1 +pinseq=4 +T -350 150 5 8 0 1 0 0 1 +pinlabel=4 +T -350 150 5 8 0 1 0 0 1 +pintype=pas +} +T 1800 900 5 10 0 0 0 0 1 +device=CONNECTOR_4 +P 800 1100 1100 1100 1 0 1 +{ +T 250 1050 5 8 1 1 0 0 1 +pinnumber=1 +T -350 1050 5 8 0 0 0 0 1 +pinseq=1 +T -350 1050 5 8 0 1 0 0 1 +pinlabel=1 +T -350 1050 5 8 0 1 0 0 1 +pintype=pas +} +L 800 1100 500 1100 3 0 0 0 -1 -1 +B 0 0 500 1300 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 0 1400 8 10 1 1 0 0 1 +refdes=CONN? +T 1800 1100 5 10 0 0 0 0 1 +class=IO +T 1800 1300 5 10 0 0 0 0 1 +pins=4 +L 800 800 500 800 3 0 0 0 -1 -1 +L 800 500 500 500 3 0 0 0 -1 -1 +L 800 200 500 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector5-1B.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector5-1B.sym new file mode 100644 index 0000000000..6bb5a5bbe4 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector5-1B.sym @@ -0,0 +1,66 @@ +v 20130925 2 +P 800 1100 1100 1100 1 0 1 +{ +T 250 1050 5 8 1 1 0 0 1 +pinnumber=2 +T -350 1050 5 8 0 0 0 0 1 +pinseq=2 +T -350 1050 5 8 0 1 0 0 1 +pinlabel=2 +T -350 1050 5 8 0 1 0 0 1 +pintype=pas +} +P 800 500 1100 500 1 0 1 +{ +T 250 450 5 8 1 1 0 0 1 +pinnumber=4 +T -350 450 5 8 0 0 0 0 1 +pinseq=4 +T -350 450 5 8 0 1 0 0 1 +pinlabel=4 +T -350 450 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1400 1100 1400 1 0 1 +{ +T 250 1350 5 8 1 1 0 0 1 +pinnumber=1 +T -350 1350 5 8 0 0 0 0 1 +pinseq=1 +T -350 1350 5 8 0 1 0 0 1 +pinlabel=1 +T -350 1350 5 8 0 1 0 0 1 +pintype=pas +} +P 800 800 1100 800 1 0 1 +{ +T 250 750 5 8 1 1 0 0 1 +pinnumber=3 +T -350 750 5 8 0 0 0 0 1 +pinseq=3 +T -350 750 5 8 0 1 0 0 1 +pinlabel=3 +T -350 750 5 8 0 1 0 0 1 +pintype=pas +} +P 800 200 1100 200 1 0 1 +{ +T 250 150 5 8 1 1 0 0 1 +pinnumber=5 +T -350 150 5 8 0 0 0 0 1 +pinseq=5 +T -350 150 5 8 0 1 0 0 1 +pinlabel=5 +T -350 150 5 8 0 1 0 0 1 +pintype=pas +} +L 800 1400 500 1400 3 0 0 0 -1 -1 +L 800 1100 500 1100 3 0 0 0 -1 -1 +L 800 800 500 800 3 0 0 0 -1 -1 +L 800 500 500 500 3 0 0 0 -1 -1 +L 800 200 500 200 3 0 0 0 -1 -1 +B 0 0 500 1600 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 1800 1500 5 10 0 0 0 0 1 +device=CONNECTOR_5 +T 100 1700 8 10 1 1 0 0 1 +refdes=CONN? diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector8-1B.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector8-1B.sym new file mode 100644 index 0000000000..48e0c8f497 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/connector8-1B.sym @@ -0,0 +1,106 @@ +v 20130925 2 +P 800 2000 1100 2000 1 0 1 +{ +T 250 1950 5 8 1 1 0 0 1 +pinnumber=2 +T -350 1950 5 8 0 0 0 0 1 +pinseq=2 +T -350 1950 5 8 0 1 0 0 1 +pinlabel=2 +T -350 1950 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1400 1100 1400 1 0 1 +{ +T 250 1350 5 8 1 1 0 0 1 +pinnumber=4 +T -350 1350 5 8 0 0 0 0 1 +pinseq=4 +T -350 1350 5 8 0 1 0 0 1 +pinlabel=4 +T -350 1350 5 8 0 1 0 0 1 +pintype=pas +} +P 800 800 1100 800 1 0 1 +{ +T 250 750 5 8 1 1 0 0 1 +pinnumber=6 +T -350 750 5 8 0 0 0 0 1 +pinseq=6 +T -350 750 5 8 0 1 0 0 1 +pinlabel=6 +T -350 750 5 8 0 1 0 0 1 +pintype=pas +} +P 800 200 1100 200 1 0 1 +{ +T 250 150 5 8 1 1 0 0 1 +pinnumber=8 +T -350 150 5 8 0 0 0 0 1 +pinseq=8 +T -350 150 5 8 0 1 0 0 1 +pinlabel=8 +T -350 150 5 8 0 1 0 0 1 +pintype=pas +} +P 800 2300 1100 2300 1 0 1 +{ +T 250 2250 5 8 1 1 0 0 1 +pinnumber=1 +T -350 2250 5 8 0 0 0 0 1 +pinseq=1 +T -350 2250 5 8 0 1 0 0 1 +pinlabel=1 +T -350 2250 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1700 1100 1700 1 0 1 +{ +T 250 1650 5 8 1 1 0 0 1 +pinnumber=3 +T -350 1650 5 8 0 0 0 0 1 +pinseq=3 +T -350 1650 5 8 0 1 0 0 1 +pinlabel=3 +T -350 1650 5 8 0 1 0 0 1 +pintype=pas +} +P 800 1100 1100 1100 1 0 1 +{ +T 250 1050 5 8 1 1 0 0 1 +pinnumber=5 +T -350 1050 5 8 0 0 0 0 1 +pinseq=5 +T -350 1050 5 8 0 1 0 0 1 +pinlabel=5 +T -350 1050 5 8 0 1 0 0 1 +pintype=pas +} +P 800 500 1100 500 1 0 1 +{ +T 250 450 5 8 1 1 0 0 1 +pinnumber=7 +T -350 450 5 8 0 0 0 0 1 +pinseq=7 +T -350 450 5 8 0 1 0 0 1 +pinlabel=7 +T -350 450 5 8 0 1 0 0 1 +pintype=pas +} +L 800 2300 500 2300 3 0 0 0 -1 -1 +L 800 2000 500 2000 3 0 0 0 -1 -1 +L 800 1700 500 1700 3 0 0 0 -1 -1 +L 800 1400 500 1400 3 0 0 0 -1 -1 +L 800 1100 500 1100 3 0 0 0 -1 -1 +L 800 800 500 800 3 0 0 0 -1 -1 +L 800 500 500 500 3 0 0 0 -1 -1 +L 800 200 500 200 3 0 0 0 -1 -1 +B 0 0 500 2500 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 100 3200 5 10 0 0 0 0 1 +device=CONNECTOR_8 +T 100 2600 8 10 1 1 0 0 1 +refdes=CONN? +T 100 2800 5 10 0 0 0 0 1 +class=IO +T 100 3000 5 10 0 0 0 0 1 +pins=8 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/diode-3a.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/diode-3a.sym new file mode 100644 index 0000000000..eb660c049c --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/diode-3a.sym @@ -0,0 +1,33 @@ +v 20091004 2 +L 600 0 600 400 3 0 0 0 -1 -1 +L 600 0 300 200 3 0 0 0 -1 -1 +T 450 550 5 10 0 0 0 0 1 +device=DIODE +L 300 200 600 400 3 0 0 0 -1 -1 +L 300 0 300 400 3 0 0 0 -1 -1 +P 900 200 700 200 1 0 0 +{ +T 800 150 5 8 0 1 180 0 1 +pinnumber=2 +T 800 150 5 8 0 0 180 0 1 +pinseq=2 +T 800 150 5 8 1 1 180 0 1 +pinlabel=2 +T 800 150 5 8 0 1 180 0 1 +pintype=pas +} +P 0 200 200 200 1 0 0 +{ +T 200 150 5 8 0 1 180 0 1 +pinnumber=1 +T 200 150 5 8 0 0 180 0 1 +pinseq=1 +T 200 150 5 8 1 1 180 0 1 +pinlabel=1 +T 200 150 5 8 0 1 180 0 1 +pintype=pas +} +L 200 200 300 200 3 0 0 0 -1 -1 +L 600 200 700 200 3 0 0 0 -1 -1 +T 350 450 8 10 1 1 0 0 1 +refdes=D? diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/led-small.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/led-small.sym new file mode 100644 index 0000000000..daef10dbd1 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/led-small.sym @@ -0,0 +1,39 @@ +v 20091004 2 +T 800 300 8 10 1 1 0 0 1 +refdes=D? +T 100 600 8 10 0 0 0 0 1 +device=LED +P 100 100 300 100 1 0 0 +{ +T 100 150 5 8 0 1 0 0 1 +pinnumber=1 +T 100 150 5 8 0 0 0 0 1 +pinseq=1 +T 100 150 5 8 0 1 0 0 1 +pinlabel=1 +T 100 150 5 8 0 1 0 0 1 +pintype=pas +} +P 800 100 600 100 1 0 0 +{ +T 700 150 5 8 0 1 0 0 1 +pinnumber=2 +T 700 150 5 8 0 0 0 0 1 +pinseq=2 +T 700 150 5 8 0 1 0 0 1 +pinlabel=2 +T 700 150 5 8 0 1 0 0 1 +pintype=pas +} +L 400 200 500 100 3 0 0 0 -1 -1 +L 500 100 400 0 3 0 0 0 -1 -1 +L 400 200 400 0 3 0 0 0 -1 -1 +L 500 200 500 0 3 0 0 0 -1 -1 +L 500 100 600 100 3 0 0 0 -1 -1 +L 400 100 300 100 3 0 0 0 -1 -1 +L 430 240 530 340 3 0 0 0 -1 -1 +L 530 340 480 310 3 0 0 0 -1 -1 +L 530 340 500 290 3 0 0 0 -1 -1 +L 500 240 600 340 3 0 0 0 -1 -1 +L 600 340 550 310 3 0 0 0 -1 -1 +L 600 340 570 290 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/nc-x.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/nc-x.sym new file mode 100644 index 0000000000..056bf6295d --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/nc-x.sym @@ -0,0 +1,18 @@ +v 20091004 2 +P 0 100 200 100 1 0 0 +{ +T 600 100 5 10 0 0 180 8 1 +pinseq=1 +T 600 300 5 10 0 0 180 8 1 +pinnumber=1 +} +L 100 0 300 200 3 0 0 0 -1 -1 +T 100 500 8 10 0 0 0 0 1 +value=NoConnection +T 0 600 8 10 0 0 0 0 1 +documentation=nc.pdf +T 100 700 8 10 0 0 0 0 1 +device=DRC_Directive +T 100 900 8 10 0 0 0 0 1 +graphical=1 +L 300 0 100 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/resistorpack8-isolated2.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/resistorpack8-isolated2.sym new file mode 100644 index 0000000000..683517d50e --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/resistorpack8-isolated2.sym @@ -0,0 +1,131 @@ +v 20130925 2 +L 0 800 200 700 3 0 0 0 -1 -1 +L 200 700 0 600 3 0 0 0 -1 -1 +L 0 600 200 500 3 0 0 0 -1 -1 +L 200 500 0 400 3 0 0 0 -1 -1 +L 0 800 200 900 3 0 0 0 -1 -1 +L 200 900 100 950 3 0 0 0 -1 -1 +L 0 401 100 350 3 0 0 0 -1 -1 +P 100 1300 100 1100 1 0 0 +{ +T 50 1143 5 8 1 1 90 0 1 +pinnumber=5 +T 225 1200 5 8 0 0 180 0 1 +pinseq=5 +T 100 993 5 8 0 1 90 6 1 +pinlabel=5 +T 225 1200 5 8 0 1 180 0 1 +pintype=pas +} +P 100 250 100 0 1 0 1 +{ +T 50 205 5 8 1 1 90 6 1 +pinnumber=1 +T 150 200 5 8 0 0 270 0 1 +pinseq=1 +T 100 355 5 8 0 1 90 0 1 +pinlabel=1 +T 150 200 5 8 0 1 270 0 1 +pintype=pas +} +L 100 950 100 1100 3 0 0 0 -1 -1 +T 100 1600 5 10 0 0 0 0 1 +device=RES_ARRAY_ISOLATED_4 +T 1600 950 8 10 1 1 0 0 1 +refdes=RN? +L 400 800 600 700 3 0 0 0 -1 -1 +L 600 700 400 600 3 0 0 0 -1 -1 +L 400 600 600 500 3 0 0 0 -1 -1 +L 600 500 400 400 3 0 0 0 -1 -1 +L 400 800 600 900 3 0 0 0 -1 -1 +L 600 900 500 950 3 0 0 0 -1 -1 +L 400 401 500 350 3 0 0 0 -1 -1 +P 500 1300 500 1100 1 0 0 +{ +T 450 1143 5 8 1 1 90 0 1 +pinnumber=6 +T 625 1200 5 8 0 0 180 0 1 +pinseq=6 +T 500 993 5 8 0 1 90 6 1 +pinlabel=6 +T 625 1200 5 8 0 1 180 0 1 +pintype=pas +} +P 500 250 500 0 1 0 1 +{ +T 450 205 5 8 1 1 90 6 1 +pinnumber=2 +T 550 200 5 8 0 0 270 0 1 +pinseq=2 +T 500 355 5 8 0 1 90 0 1 +pinlabel=2 +T 550 200 5 8 0 1 270 0 1 +pintype=pas +} +L 500 950 500 1100 3 0 0 0 -1 -1 +L 800 800 1000 700 3 0 0 0 -1 -1 +L 1000 700 800 600 3 0 0 0 -1 -1 +L 800 600 1000 500 3 0 0 0 -1 -1 +L 1000 500 800 400 3 0 0 0 -1 -1 +L 800 800 1000 900 3 0 0 0 -1 -1 +L 1000 900 900 950 3 0 0 0 -1 -1 +L 800 401 900 350 3 0 0 0 -1 -1 +P 900 1300 900 1100 1 0 0 +{ +T 850 1143 5 8 1 1 90 0 1 +pinnumber=7 +T 1025 1200 5 8 0 0 180 0 1 +pinseq=7 +T 900 993 5 8 0 1 90 6 1 +pinlabel=7 +T 1025 1200 5 8 0 1 180 0 1 +pintype=pas +} +P 900 250 900 0 1 0 1 +{ +T 850 205 5 8 1 1 90 6 1 +pinnumber=3 +T 950 200 5 8 0 0 270 0 1 +pinseq=3 +T 900 355 5 8 0 1 90 0 1 +pinlabel=3 +T 950 200 5 8 0 1 270 0 1 +pintype=pas +} +L 900 950 900 1100 3 0 0 0 -1 -1 +T 100 1800 5 10 0 0 0 0 1 +footprint=ResArray_1206x4 +L 900 250 900 350 3 0 0 0 -1 -1 +L 500 250 500 350 3 0 0 0 -1 -1 +L 100 250 100 350 3 0 0 0 -1 -1 +L 1200 800 1400 700 3 0 0 0 -1 -1 +L 1400 700 1200 600 3 0 0 0 -1 -1 +L 1200 600 1400 500 3 0 0 0 -1 -1 +L 1400 500 1200 400 3 0 0 0 -1 -1 +L 1200 800 1400 900 3 0 0 0 -1 -1 +L 1400 900 1300 950 3 0 0 0 -1 -1 +L 1200 401 1300 350 3 0 0 0 -1 -1 +P 1300 1300 1300 1100 1 0 0 +{ +T 1425 1200 5 8 0 0 180 0 1 +pinseq=8 +T 1240 1220 5 8 1 1 90 6 1 +pinlabel=8 +T 1425 1200 5 8 0 1 180 0 1 +pintype=pas +T 1300 1300 5 10 0 0 0 0 1 +pinnumber=8 +} +P 1300 250 1300 0 1 0 1 +{ +T 1350 200 5 8 0 0 270 0 1 +pinseq=4 +T 1260 120 5 8 1 1 90 0 1 +pinlabel=4 +T 1350 200 5 8 0 1 270 0 1 +pintype=pas +T 1300 250 5 10 0 0 0 0 1 +pinnumber=4 +} +L 1300 950 1300 1100 3 0 0 0 -1 -1 +L 1300 250 1300 350 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/switch-tact_sq.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/switch-tact_sq.sym new file mode 100644 index 0000000000..c1b682fe36 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/switch-tact_sq.sym @@ -0,0 +1,64 @@ +v 20061020 1 +T 500 600 8 10 1 1 0 0 1 +refdes=S? +P 0 0 250 0 1 0 0 +{ +T 150 50 5 8 1 1 0 0 1 +pinnumber=1 +T 150 50 5 8 0 0 0 0 1 +pinseq=1 +T 150 50 5 8 0 1 0 0 1 +pinlabel=1 +T 150 50 5 8 0 1 0 0 1 +pintype=pas +} +P 950 0 1200 0 1 0 1 +{ +T 1000 50 5 8 1 1 0 0 1 +pinnumber=4 +T 1000 50 5 8 0 0 0 0 1 +pinseq=4 +T 1000 50 5 8 0 1 0 0 1 +pinlabel=4 +T 1000 50 5 8 0 1 0 0 1 +pintype=pas +} +L 400 385 800 385 3 0 0 0 -1 -1 +L 570 555 620 555 3 0 0 0 -1 -1 +L 570 505 620 505 3 0 0 0 -1 -1 +L 570 505 595 455 3 0 0 0 -1 -1 +L 620 505 595 455 3 0 0 0 -1 -1 +L 595 505 595 555 3 0 0 0 -1 -1 +L 595 455 595 386 3 0 0 0 -1 -1 +T 500 600 8 10 0 0 0 0 1 +device=SWITCH_PUSHBUTTON_NO +P 0 300 250 300 1 0 0 +{ +T 150 350 5 8 1 1 0 0 1 +pinnumber=2 +T 150 350 5 8 0 0 0 0 1 +pinseq=2 +T 150 350 5 8 0 1 0 0 1 +pinlabel=2 +T 150 350 5 8 0 1 0 0 1 +pintype=pas +} +P 950 300 1200 300 1 0 1 +{ +T 1000 350 5 8 1 1 0 0 1 +pinnumber=3 +T 1000 350 5 8 0 0 0 0 1 +pinseq=3 +T 1000 350 5 8 0 1 0 0 1 +pinlabel=3 +T 1000 350 5 8 0 1 0 0 1 +pintype=pas +} +L 250 300 425 300 3 0 0 0 -1 -1 +L 950 300 775 300 3 0 0 0 -1 -1 +V 439 300 14 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +V 762 300 14 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +L 900 0 900 300 3 0 0 0 -1 -1 +L 350 0 350 300 3 0 0 0 -1 -1 +L 350 0 250 0 3 0 0 0 -1 -1 +L 900 0 950 0 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/gschem-symbols/trans_BEC_NPN.sym b/qa/data/eeschema/io/geda/ayab/gschem-symbols/trans_BEC_NPN.sym new file mode 100644 index 0000000000..33b9c3f668 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/gschem-symbols/trans_BEC_NPN.sym @@ -0,0 +1,47 @@ +v 20130925 2 +L 200 800 200 200 3 0 0 0 -1 -1 +T 600 500 5 10 0 0 0 0 1 +device=NPN_TRANSISTOR +P 0 500 200 500 1 0 0 +{ +T 100 550 5 6 1 1 0 0 1 +pinnumber=1 +T 100 550 5 6 0 0 0 0 1 +pinseq=1 +T 100 550 5 6 0 1 0 0 1 +pinlabel=B +T 100 550 5 6 0 1 0 0 1 +pintype=pas +} +P 500 1000 500 800 1 0 0 +{ +T 400 850 5 6 1 1 0 0 1 +pinnumber=3 +T 400 850 5 6 0 0 0 0 1 +pinseq=3 +T 400 850 5 6 0 1 0 0 1 +pinlabel=C +T 400 850 5 6 0 1 0 0 1 +pintype=pas +} +P 500 200 500 0 1 0 1 +{ +T 400 50 5 6 1 1 0 0 1 +pinnumber=2 +T 400 50 5 6 0 0 0 0 1 +pinseq=2 +T 400 50 5 6 0 1 0 0 1 +pinlabel=E +T 400 50 5 6 0 1 0 0 1 +pintype=pas +} +L 200 650 500 800 3 0 0 0 -1 -1 +L 200 350 500 200 3 0 0 0 -1 -1 +T 600 500 8 10 1 1 0 0 1 +refdes=Q? +H 3 0 0 0 -1 -1 1 -1 -1 -1 -1 -1 5 +M 403,209 +L 501,200 +L 431,273 +L 425,240 +z diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-1.sym new file mode 100644 index 0000000000..66b71cfda3 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-1.sym @@ -0,0 +1,31 @@ +v 20130925 2 +T 200 500 8 10 1 1 0 0 1 +refdes=C? +T 200 -100 8 10 0 0 0 0 1 +device=CAPACITOR +T 200 -100 5 10 0 0 0 0 1 +symversion=0.1 +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=2 +T 100 250 5 8 0 0 0 0 1 +pinseq=2 +T 100 250 5 8 0 1 0 0 1 +pinlabel=2 +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +P 900 200 700 200 1 0 0 +{ +T 800 250 5 8 0 1 0 0 1 +pinnumber=1 +T 800 250 5 8 0 0 0 0 1 +pinseq=1 +T 800 250 5 8 0 1 0 0 1 +pinlabel=1 +T 800 250 5 8 0 1 0 0 1 +pintype=pas +} +L 400 400 400 0 3 0 0 0 -1 -1 +L 500 400 500 0 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-2.sym b/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-2.sym new file mode 100644 index 0000000000..5e6e51792a --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/capacitor-2.sym @@ -0,0 +1,31 @@ +v 20130925 2 +T 200 500 8 10 1 1 0 0 1 +refdes=C? +T 200 -100 8 10 0 0 0 0 1 +device=POLARIZED_CAPACITOR +T 200 -100 5 10 0 0 0 0 1 +symversion=0.1 +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=2 +T 100 250 5 8 0 0 0 0 1 +pinseq=2 +T 100 250 5 8 0 1 0 0 1 +pinlabel=- +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +P 900 200 700 200 1 0 0 +{ +T 800 250 5 8 0 1 0 0 1 +pinnumber=1 +T 800 250 5 8 0 0 0 0 1 +pinseq=1 +T 800 250 5 8 0 1 0 0 1 +pinlabel=+ +T 800 250 5 8 0 1 0 0 1 +pintype=pas +} +L 400 400 400 0 3 0 0 0 -1 -1 +L 500 400 500 0 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/generic-power.sym b/qa/data/eeschema/io/geda/ayab/stdlib/generic-power.sym new file mode 100644 index 0000000000..98d24715f0 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/generic-power.sym @@ -0,0 +1,15 @@ +v 20130925 2 +T 200 700 8 10 0 0 0 0 1 +device=POWER +P 200 200 200 0 1 0 1 +{ +T 250 50 5 8 0 1 0 0 1 +pinnumber=1 +T 250 50 5 8 0 0 0 0 1 +pinseq=1 +T 250 50 5 8 0 1 0 0 1 +pinlabel=1 +T 250 50 5 8 0 1 0 0 1 +pintype=pwr +} +L 50 200 350 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/gnd-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/gnd-1.sym new file mode 100644 index 0000000000..0053da73dd --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/gnd-1.sym @@ -0,0 +1,17 @@ +v 20130925 2 +T 0 300 8 10 0 0 0 0 1 +device=GND +P 200 600 200 300 1 0 0 +{ +T 250 350 5 8 0 1 0 0 1 +pinnumber=1 +T 250 350 5 8 0 0 0 0 1 +pinseq=1 +T 250 350 5 8 0 1 0 0 1 +pinlabel=GND +T 250 350 5 8 0 1 0 0 1 +pintype=pwr +} +L 50 300 350 300 3 0 0 0 -1 -1 +L 100 200 300 200 3 0 0 0 -1 -1 +L 150 100 250 100 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/input-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/input-1.sym new file mode 100644 index 0000000000..cce96cfacc --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/input-1.sym @@ -0,0 +1,17 @@ +v 20130925 2 +T 400 500 8 10 0 0 0 0 1 +device=INPUT +P 400 200 600 200 1 0 0 +{ +T 450 250 5 8 0 1 0 0 1 +pinnumber=1 +T 450 250 5 8 0 0 0 0 1 +pinseq=1 +T 450 250 5 8 0 1 0 0 1 +pinlabel=1 +T 450 250 5 8 0 1 0 0 1 +pintype=out +} +L 400 400 400 0 3 0 0 0 -1 -1 +L 400 400 100 200 3 0 0 0 -1 -1 +L 400 0 100 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/nc-right-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/nc-right-1.sym new file mode 100644 index 0000000000..ea955f4d26 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/nc-right-1.sym @@ -0,0 +1,16 @@ +v 20130925 2 +T 300 300 8 10 0 0 0 0 1 +device=DRC_Directive +P 200 200 0 200 1 0 0 +{ +T 50 250 5 8 0 1 0 0 1 +pinnumber=1 +T 50 250 5 8 0 0 0 0 1 +pinseq=1 +T 50 250 5 8 0 1 0 0 1 +pinlabel=1 +T 50 250 5 8 0 1 0 0 1 +pintype=pas +} +L 200 300 300 200 3 0 0 0 -1 -1 +L 200 100 300 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/output-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/output-1.sym new file mode 100644 index 0000000000..28e5c67b57 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/output-1.sym @@ -0,0 +1,17 @@ +v 20130925 2 +T 200 500 8 10 0 0 0 0 1 +device=OUTPUT +P 200 200 0 200 1 0 0 +{ +T 50 250 5 8 0 1 0 0 1 +pinnumber=1 +T 50 250 5 8 0 0 0 0 1 +pinseq=1 +T 50 250 5 8 0 1 0 0 1 +pinlabel=1 +T 50 250 5 8 0 1 0 0 1 +pintype=in +} +L 200 400 200 0 3 0 0 0 -1 -1 +L 200 400 500 200 3 0 0 0 -1 -1 +L 200 0 500 200 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/resistor-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/resistor-1.sym new file mode 100644 index 0000000000..8d3a2f5377 --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/resistor-1.sym @@ -0,0 +1,28 @@ +v 20130925 2 +T 300 400 8 10 1 1 0 0 1 +refdes=R? +T 300 -100 8 10 0 0 0 0 1 +device=RESISTOR +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=2 +T 100 250 5 8 0 0 0 0 1 +pinseq=2 +T 100 250 5 8 0 1 0 0 1 +pinlabel=2 +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +P 900 200 700 200 1 0 0 +{ +T 800 250 5 8 0 1 0 0 1 +pinnumber=1 +T 800 250 5 8 0 0 0 0 1 +pinseq=1 +T 800 250 5 8 0 1 0 0 1 +pinlabel=1 +T 800 250 5 8 0 1 0 0 1 +pintype=pas +} +B 200 100 500 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/terminal-1.sym b/qa/data/eeschema/io/geda/ayab/stdlib/terminal-1.sym new file mode 100644 index 0000000000..55872fba8c --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/terminal-1.sym @@ -0,0 +1,17 @@ +v 20130925 2 +T 300 500 8 10 0 0 0 0 1 +device=terminal +T 100 600 8 10 1 1 0 0 1 +refdes=T? +P 200 200 0 200 1 0 0 +{ +T 50 250 5 8 0 1 0 0 1 +pinnumber=1 +T 50 250 5 8 0 0 0 0 1 +pinseq=1 +T 50 250 5 8 0 1 0 0 1 +pinlabel=1 +T 50 250 5 8 0 1 0 0 1 +pintype=pas +} +B 200 100 200 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/ayab/stdlib/title-D.sym b/qa/data/eeschema/io/geda/ayab/stdlib/title-D.sym new file mode 100644 index 0000000000..7d111d3c5b --- /dev/null +++ b/qa/data/eeschema/io/geda/ayab/stdlib/title-D.sym @@ -0,0 +1,4 @@ +v 20130925 2 +T 0 0 8 10 0 0 0 0 1 +device=TITLEBLOCK +B 0 0 34000 22000 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/bezier_test.sch b/qa/data/eeschema/io/geda/bezier_test.sch new file mode 100644 index 0000000000..29ffac472e --- /dev/null +++ b/qa/data/eeschema/io/geda/bezier_test.sch @@ -0,0 +1,8 @@ +v 20130925 2 +H 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 2 +M 100,100 +C 200,200 300,200 400,100 +H 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 3 +M 500,500 +C 600,700 800,700 900,500 +L 900,300 diff --git a/qa/data/eeschema/io/geda/bus_ripper_test.sch b/qa/data/eeschema/io/geda/bus_ripper_test.sch new file mode 100644 index 0000000000..2ff833d0b5 --- /dev/null +++ b/qa/data/eeschema/io/geda/bus_ripper_test.sch @@ -0,0 +1,4 @@ +v 20130925 2 +U 40000 45000 40000 50000 10 1 +N 40000 47000 38000 47000 4 +N 40000 49000 38000 49000 4 diff --git a/qa/data/eeschema/io/geda/bus_test.sch b/qa/data/eeschema/io/geda/bus_test.sch new file mode 100644 index 0000000000..f2d751a0b4 --- /dev/null +++ b/qa/data/eeschema/io/geda/bus_test.sch @@ -0,0 +1,4 @@ +v 20130925 2 +U 40000 45000 50000 45000 10 0 +U 50000 45000 50000 40000 10 0 +N 40000 45000 38000 45000 4 diff --git a/qa/data/eeschema/io/geda/comments_test.sch b/qa/data/eeschema/io/geda/comments_test.sch new file mode 100644 index 0000000000..f68e97a454 --- /dev/null +++ b/qa/data/eeschema/io/geda/comments_test.sch @@ -0,0 +1,12 @@ +v 20130925 2 +# This is a comment line that should be ignored +C 44000 47000 1 0 0 resistor-1.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +# Another comment inside an attribute block area +T 44300 46700 5 10 1 1 0 0 1 +value=1k +} +# Comment between objects +N 44000 47100 43000 47100 4 diff --git a/qa/data/eeschema/io/geda/documentation_test.sch b/qa/data/eeschema/io/geda/documentation_test.sch new file mode 100644 index 0000000000..c64a9dc31f --- /dev/null +++ b/qa/data/eeschema/io/geda/documentation_test.sch @@ -0,0 +1,10 @@ +v 20130925 2 +C 44000 47000 1 0 0 resistor-1.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +T 44300 46700 5 10 1 1 0 0 1 +value=10k +T 44300 48000 5 10 0 0 0 0 1 +documentation=http://www.example.com/datasheet.pdf +} diff --git a/qa/data/eeschema/io/geda/embedded_prefix_test.sch b/qa/data/eeschema/io/geda/embedded_prefix_test.sch new file mode 100644 index 0000000000..510228a357 --- /dev/null +++ b/qa/data/eeschema/io/geda/embedded_prefix_test.sch @@ -0,0 +1,29 @@ +v 20130925 2 +C 1000 1000 1 0 0 EMBEDDEDresistor-1.sym +{ +T 1200 1800 5 10 1 1 0 0 1 +refdes=R1 +T 1200 1600 5 10 0 1 0 0 1 +value=10k +} +[ +P 0 200 200 200 1 0 0 +{ +T 100 300 5 8 0 1 0 0 1 +pinnumber=1 +T 100 300 5 8 0 1 0 0 1 +pinlabel=1 +} +L 200 300 200 100 3 0 0 0 -1 -1 +L 200 300 800 200 3 0 0 0 -1 -1 +L 800 200 200 100 3 0 0 0 -1 -1 +P 1000 200 800 200 1 0 0 +{ +T 900 300 5 8 0 1 0 0 1 +pinnumber=2 +T 900 300 5 8 0 1 0 0 1 +pinlabel=2 +} +T 500 0 8 10 0 0 0 0 1 +device=RESISTOR +] diff --git a/qa/data/eeschema/io/geda/extra-syms/props_resistor.sym b/qa/data/eeschema/io/geda/extra-syms/props_resistor.sym new file mode 100644 index 0000000000..54f745de6c --- /dev/null +++ b/qa/data/eeschema/io/geda/extra-syms/props_resistor.sym @@ -0,0 +1,28 @@ +v 20130925 2 +B 200 0 500 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 300 500 5 10 0 0 0 0 1 +device=RESISTOR +P 900 200 700 200 1 0 0 +{ +T 700 250 5 8 0 1 0 0 1 +pinnumber=2 +T 700 250 5 8 0 0 0 0 1 +pinseq=2 +T 700 250 5 8 0 1 0 0 1 +pinlabel=2 +T 700 250 5 8 0 1 0 0 1 +pintype=pas +} +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=1 +T 100 250 5 8 0 0 0 0 1 +pinseq=1 +T 100 250 5 8 0 1 0 0 1 +pinlabel=1 +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +T 200 500 8 10 1 1 0 0 1 +refdes=R? diff --git a/qa/data/eeschema/io/geda/fuzzy_match_test.sch b/qa/data/eeschema/io/geda/fuzzy_match_test.sch new file mode 100644 index 0000000000..596379f275 --- /dev/null +++ b/qa/data/eeschema/io/geda/fuzzy_match_test.sch @@ -0,0 +1,9 @@ +v 20130925 2 +C 44000 47000 1 0 0 resistor-11.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +T 44300 46700 5 10 1 1 0 0 1 +value=10k +} +N 44000 47000 43000 47000 4 diff --git a/qa/data/eeschema/io/geda/goodfet50.sch b/qa/data/eeschema/io/geda/goodfet50.sch new file mode 100644 index 0000000000..cf28f9ddd2 --- /dev/null +++ b/qa/data/eeschema/io/geda/goodfet50.sch @@ -0,0 +1,476 @@ +v 20110115 2 +C 40000 40000 0 0 0 title-B.sym +C 45400 42400 1 0 0 msp430f550x-1.sym +{ +T 49600 50000 5 10 1 1 0 6 1 +refdes=U3 +T 45700 50200 5 10 0 0 0 0 1 +device=MSP430F550x +T 45700 50400 5 10 0 0 0 0 1 +footprint=LQFP48_7 +} +C 40200 48700 1 0 0 micro-usb.sym +{ +T 42000 50700 5 10 1 1 0 6 1 +refdes=U1 +T 40600 50900 5 10 0 0 0 0 1 +device=MICRO_B +T 40500 48900 5 10 1 1 0 0 1 +footprint=USB_MICRO_B +} +N 42300 50300 43300 50300 4 +{ +T 42400 50300 5 10 1 1 0 0 1 +netname=+5V +} +N 42300 50000 43300 50000 4 +{ +T 42400 50000 5 10 1 1 0 0 1 +netname=USBDM +} +N 43300 49700 42300 49700 4 +{ +T 42400 49700 5 10 1 1 0 0 1 +netname=USBDP +} +N 43300 49100 42300 49100 4 +{ +T 42400 49100 5 10 1 1 0 0 1 +netname=GND +} +N 45400 47800 43600 47800 4 +{ +T 44500 47800 5 10 1 1 0 0 1 +netname=+3V3 +} +N 44500 46600 45400 46600 4 +{ +T 44600 46600 5 10 1 1 0 0 1 +netname=+3V3 +} +C 43700 46400 1 90 0 capacitor-1.sym +{ +T 43000 46600 5 10 0 0 90 0 1 +device=CAPACITOR +T 43200 46600 5 10 1 1 90 0 1 +refdes=C3 +T 42800 46600 5 10 0 0 90 0 1 +symversion=0.1 +T 43900 46600 5 10 1 1 90 0 1 +value=0.1uF +T 43700 46400 5 10 1 1 0 0 1 +footprint=0603 +} +N 43500 46300 45400 46300 4 +{ +T 44600 46300 5 10 1 1 0 0 1 +netname=GND +} +N 44500 46600 44500 47400 4 +N 44500 47400 43500 47400 4 +N 43600 46000 45400 46000 4 +N 43600 45400 45400 45400 4 +{ +T 44500 45400 5 10 1 1 0 0 1 +netname=P1.1 +} +N 43600 45100 45400 45100 4 +{ +T 44500 45100 5 10 1 1 0 0 1 +netname=P1.2 +} +N 43600 44800 45400 44800 4 +{ +T 44500 44800 5 10 1 1 0 0 1 +netname=P1.3 +} +N 49900 43300 50700 43300 4 +{ +T 50000 43300 5 10 1 1 0 0 1 +netname=GND +} +N 49900 43600 50700 43600 4 +{ +T 50000 43600 5 10 1 1 0 0 1 +netname=+3V3 +} +N 51200 43900 49900 43900 4 +{ +T 50000 43900 5 10 1 1 0 0 1 +netname=SCLK1 +} +N 51200 45100 49900 45100 4 +{ +T 50000 45100 5 10 1 1 0 0 1 +netname=TXD1 +} +N 49900 45400 51200 45400 4 +{ +T 50000 45400 5 10 1 1 0 0 1 +netname=RXD1 +} +N 49900 49300 51200 49300 4 +N 51200 49600 49900 49600 4 +N 49900 46300 50700 46300 4 +{ +T 50100 46300 5 10 1 1 0 0 1 +netname=GND +} +N 49900 48400 51000 48400 4 +{ +T 50100 48400 5 10 1 1 0 0 1 +netname=GND +} +N 49900 47800 50700 47800 4 +{ +T 50100 47800 5 10 1 1 0 0 1 +netname=+3V3 +} +N 49900 47500 50700 47500 4 +{ +T 50100 47500 5 10 1 1 0 0 1 +netname=+5V +} +N 49900 47200 50700 47200 4 +{ +T 50000 47200 5 10 1 1 0 0 1 +netname=USBDM +} +N 50700 46600 49900 46600 4 +{ +T 50000 46600 5 10 1 1 0 0 1 +netname=USBDP +} +N 49900 46900 50700 46900 4 +{ +T 50000 46900 5 10 1 1 0 0 1 +netname=PUR +} +N 49900 48100 51000 48100 4 +N 49900 48700 50700 48700 4 +{ +T 50100 48700 5 10 1 1 0 0 1 +netname=XTI +} +N 49900 49000 50700 49000 4 +{ +T 50100 49000 5 10 1 1 0 0 1 +netname=XTO +} +C 51500 47800 1 90 0 capacitor-1.sym +{ +T 50800 48000 5 10 0 0 90 0 1 +device=CAPACITOR +T 51000 48000 5 10 1 1 90 0 1 +refdes=C6 +T 50600 48000 5 10 0 0 90 0 1 +symversion=0.1 +T 51700 48000 5 10 1 1 90 0 1 +value=0.1uF +T 51500 47800 5 10 1 1 0 0 1 +footprint=0603 +} +N 51000 48400 51000 48700 4 +N 51000 48700 51300 48700 4 +N 51300 47800 51000 47800 4 +N 51000 47800 51000 48100 4 +C 41400 41200 1 0 0 capacitor-1.sym +{ +T 41600 41900 5 10 0 0 0 0 1 +device=CAPACITOR +T 41600 41700 5 10 1 1 0 0 1 +refdes=C5 +T 41600 42100 5 10 0 0 0 0 1 +symversion=0.1 +T 41600 41000 5 10 1 1 0 0 1 +value=0.1uF +T 41400 41200 5 10 1 1 0 0 1 +footprint=0603 +} +N 42300 41400 43300 41400 4 +{ +T 42400 41400 5 10 1 1 0 0 1 +netname=+5V +} +N 41400 41400 40400 41400 4 +{ +T 40500 41400 5 10 1 1 0 0 1 +netname=GND +} +C 41400 40500 1 0 0 resistor-1.sym +{ +T 41700 40900 5 10 0 0 0 0 1 +device=RESISTOR +T 41600 40800 5 10 1 1 0 0 1 +refdes=R1 +T 41600 40300 5 10 1 1 0 0 1 +value=1k +T 41400 40500 5 10 1 1 0 0 1 +footprint=0603 +} +N 41400 40600 40400 40600 4 +{ +T 40500 40600 5 10 1 1 0 0 1 +netname=USBDP +} +N 43300 40600 42300 40600 4 +{ +T 42400 40600 5 10 1 1 0 0 1 +netname=+3V3 +} +N 40200 43900 41700 43900 4 +{ +T 40400 43900 5 10 1 1 0 0 1 +netname=XTO +} +N 42400 43900 43700 43900 4 +{ +T 43300 43900 5 10 1 1 0 0 1 +netname=XTI +} +N 42100 42300 42100 43200 4 +{ +T 42100 42400 5 10 1 1 90 0 1 +netname=GND +} +C 50700 50300 1 0 0 capacitor-1.sym +{ +T 50900 51000 5 10 0 0 0 0 1 +device=CAPACITOR +T 50900 50800 5 10 1 1 0 0 1 +refdes=C4 +T 50900 51200 5 10 0 0 0 0 1 +symversion=0.1 +T 50900 50100 5 10 1 1 0 0 1 +value=0.1uF +T 50700 50300 5 10 1 1 0 0 1 +footprint=0603 +} +N 49900 50500 50700 50500 4 +{ +T 50100 50500 5 10 1 1 0 0 1 +netname=+3V3 +} +N 51600 50500 52400 50500 4 +{ +T 51800 50500 5 10 1 1 0 0 1 +netname=GND +} +N 45400 46900 45300 46900 4 +N 45300 46900 45300 46300 4 +C 47100 41600 1 0 0 led-2.sym +{ +T 47900 41900 5 10 1 1 0 0 1 +refdes=D1 +T 47200 42200 5 10 0 0 0 0 1 +device=LED +T 47100 41600 5 10 1 1 0 0 1 +footprint=0603 +} +C 47100 41200 1 0 0 led-2.sym +{ +T 47900 41500 5 10 1 1 0 0 1 +refdes=D2 +T 47200 41800 5 10 0 0 0 0 1 +device=LED +T 47100 41200 5 10 1 1 0 0 1 +footprint=0603 +} +C 47100 40800 1 0 0 led-2.sym +{ +T 47900 41100 5 10 1 1 0 0 1 +refdes=D3 +T 47200 41400 5 10 0 0 0 0 1 +device=LED +T 47100 40800 5 10 1 1 0 0 1 +footprint=0603 +} +N 48000 41700 48400 41700 4 +N 48400 41700 48400 40500 4 +N 48400 40500 48000 40500 4 +N 48000 40900 48400 40900 4 +N 48000 41300 48400 41300 4 +N 47100 40900 46000 40900 4 +{ +T 46100 40900 5 10 1 1 0 0 1 +netname=P1.3 +} +N 47100 41300 46000 41300 4 +{ +T 46100 41300 5 10 1 1 0 0 1 +netname=P1.2 +} +N 47100 41700 46000 41700 4 +{ +T 46100 41700 5 10 1 1 0 0 1 +netname=P1.1 +} +N 47100 40500 46000 40500 4 +{ +T 46100 40500 5 10 1 1 0 0 1 +netname=GND +} +C 47100 40400 1 0 0 resistor-1.sym +{ +T 47400 40800 5 10 0 0 0 0 1 +device=RESISTOR +T 47300 40700 5 10 1 1 0 0 1 +refdes=R2 +T 47300 40200 5 10 1 1 0 0 1 +value=330 +T 47100 40400 5 10 1 1 0 0 1 +footprint=0603 +} +C 41700 43800 1 0 0 crystal-1.sym +{ +T 41900 44300 5 10 0 0 0 0 1 +device=CRYSTAL +T 41900 44100 5 10 1 1 0 0 1 +refdes=X1 +T 41900 44500 5 10 0 0 0 0 1 +symversion=0.1 +T 41700 43800 5 10 0 1 0 0 1 +footprint=HC49 +} +C 41100 43000 1 0 0 capacitor-1.sym +{ +T 41300 43700 5 10 0 0 0 0 1 +device=CAPACITOR +T 41300 43500 5 10 1 1 0 0 1 +refdes=C1 +T 41300 43900 5 10 0 0 0 0 1 +symversion=0.1 +T 41300 42800 5 10 1 1 0 0 1 +value=22pF +T 41100 43000 5 10 1 1 0 0 1 +footprint=0603 +} +C 42200 43000 1 0 0 capacitor-1.sym +{ +T 42400 43700 5 10 0 0 0 0 1 +device=CAPACITOR +T 42400 43500 5 10 1 1 0 0 1 +refdes=C2 +T 42400 43900 5 10 0 0 0 0 1 +symversion=0.1 +T 42400 42800 5 10 1 1 0 0 1 +value=22pF +T 42200 43000 5 10 1 1 0 0 1 +footprint=0603 +} +N 41100 43200 41100 43900 4 +N 43100 43200 43100 43900 4 +N 42200 43200 42000 43200 4 +T 52900 41000 9 20 1 0 0 4 1 +GoodFET 50 +T 54000 40100 9 8 1 0 0 0 1 +TheQUUX! +T 54000 40400 9 8 1 0 0 0 1 +C +C 53500 44800 1 0 0 header14-1.sym +{ +T 54100 47700 5 10 1 1 0 0 1 +refdes=J1 +T 56700 47200 5 10 0 0 0 0 1 +device=HEADER14 +T 53500 44800 5 10 1 0 0 0 1 +footprint=14.fp +} +N 54900 47000 56300 47000 4 +{ +T 55500 47000 5 10 1 1 0 0 1 +netname=+3V3 +} +N 54900 47400 55300 47400 4 +N 52300 45800 53500 45800 4 +{ +T 52400 45800 5 10 1 1 0 0 1 +netname=GND +} +N 55300 47400 55300 47000 4 +N 53500 47400 52300 47400 4 +{ +T 52400 47400 5 10 1 1 0 0 1 +netname=TDO +} +N 53500 47000 52300 47000 4 +{ +T 52400 47000 5 10 1 1 0 0 1 +netname=TDI +} +N 53500 46600 52300 46600 4 +{ +T 52400 46600 5 10 1 1 0 0 1 +netname=TMS +} +N 53500 46200 52300 46200 4 +{ +T 52400 46200 5 10 1 1 0 0 1 +netname=TCK +} +N 53500 45400 52300 45400 4 +{ +T 52400 45400 5 10 1 1 0 0 1 +netname=RST +} +N 54900 45400 56100 45400 4 +{ +T 55100 45400 5 10 1 1 0 0 1 +netname=RXD1 +} +N 54900 45000 56100 45000 4 +{ +T 55100 45000 5 10 1 1 0 0 1 +netname=TXD1 +} +N 54900 46200 56100 46200 4 +{ +T 55100 46200 5 10 1 1 0 0 1 +netname=TEST +} +N 56100 45800 54900 45800 4 +{ +T 55100 45800 5 10 1 1 0 0 1 +netname=SCLK1 +} +N 43500 46300 43500 46400 4 +N 43500 47300 43500 47400 4 +N 45400 43000 44200 43000 4 +{ +T 44300 43000 5 10 1 1 0 0 1 +netname=TDO +} +N 45400 42700 44200 42700 4 +{ +T 44300 42700 5 10 1 1 0 0 1 +netname=TDI +} +N 51100 42700 49900 42700 4 +{ +T 50000 42700 5 10 1 1 0 0 1 +netname=TMS +} +N 51100 43000 49900 43000 4 +{ +T 50000 43000 5 10 1 1 0 0 1 +netname=TCK +} +N 45400 43300 44200 43300 4 +{ +T 44300 43300 5 10 1 1 0 0 1 +netname=RST +} +N 49900 44200 51100 44200 4 +{ +T 50100 44200 5 10 1 1 0 0 1 +netname=TEST +} +C 52900 49800 1 180 0 connector2-1.sym +{ +T 52700 48800 5 10 0 0 180 0 1 +device=CONNECTOR_2 +T 52900 49000 5 10 1 1 180 0 1 +refdes=SBW +T 52900 49800 5 10 1 0 0 0 1 +footprint=HEADER2_1 +} diff --git a/qa/data/eeschema/io/geda/graphical_attr_test.sch b/qa/data/eeschema/io/geda/graphical_attr_test.sch new file mode 100644 index 0000000000..6e14bb02f2 --- /dev/null +++ b/qa/data/eeschema/io/geda/graphical_attr_test.sch @@ -0,0 +1,17 @@ +v 20130925 2 +C 44000 47000 1 0 0 resistor-1.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +T 44300 46700 5 10 1 1 0 0 1 +value=10k +} +C 44000 44000 1 0 0 resistor-1.sym +{ +T 44300 44400 5 10 1 1 0 0 1 +refdes=R2 +T 44300 43700 5 10 1 1 0 0 1 +value=20k +T 44300 43500 5 10 0 0 0 0 1 +graphical=1 +} diff --git a/qa/data/eeschema/io/geda/graphical_test.sch b/qa/data/eeschema/io/geda/graphical_test.sch new file mode 100644 index 0000000000..515324f8ce --- /dev/null +++ b/qa/data/eeschema/io/geda/graphical_test.sch @@ -0,0 +1,16 @@ +v 20130925 2 +C 44000 47000 1 0 0 resistor-1.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +T 44300 46700 5 10 1 1 0 0 1 +value=10k +} +C 44000 44000 1 0 0 nc-right-1.sym +{ +T 44100 44500 5 10 0 0 0 0 1 +value=NoConnection +T 44100 44700 5 10 0 0 0 0 1 +device=DRC_Directive +} +N 44000 47100 43000 47100 4 diff --git a/qa/data/eeschema/io/geda/gschemrc b/qa/data/eeschema/io/geda/gschemrc new file mode 100644 index 0000000000..6376c366f9 --- /dev/null +++ b/qa/data/eeschema/io/geda/gschemrc @@ -0,0 +1,3 @@ +; gschemrc - project-level gschem configuration +; This file configures local symbol libraries +(component-library "gschemrc-symbols") diff --git a/qa/data/eeschema/io/geda/gschemrc-symbols/gschemrc_resistor.sym b/qa/data/eeschema/io/geda/gschemrc-symbols/gschemrc_resistor.sym new file mode 100644 index 0000000000..54f745de6c --- /dev/null +++ b/qa/data/eeschema/io/geda/gschemrc-symbols/gschemrc_resistor.sym @@ -0,0 +1,28 @@ +v 20130925 2 +B 200 0 500 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 300 500 5 10 0 0 0 0 1 +device=RESISTOR +P 900 200 700 200 1 0 0 +{ +T 700 250 5 8 0 1 0 0 1 +pinnumber=2 +T 700 250 5 8 0 0 0 0 1 +pinseq=2 +T 700 250 5 8 0 1 0 0 1 +pinlabel=2 +T 700 250 5 8 0 1 0 0 1 +pintype=pas +} +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=1 +T 100 250 5 8 0 0 0 0 1 +pinseq=1 +T 100 250 5 8 0 1 0 0 1 +pinlabel=1 +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +T 200 500 8 10 1 1 0 0 1 +refdes=R? diff --git a/qa/data/eeschema/io/geda/gschemrc_test.sch b/qa/data/eeschema/io/geda/gschemrc_test.sch new file mode 100644 index 0000000000..5f08625f3c --- /dev/null +++ b/qa/data/eeschema/io/geda/gschemrc_test.sch @@ -0,0 +1,12 @@ +v 20130925 2 +C 40000 40000 1 0 0 gschemrc_resistor.sym +{ +T 40300 40400 5 10 1 1 0 0 1 +refdes=R1 +T 40300 40900 5 10 0 0 0 0 1 +device=RESISTOR +T 40300 39700 5 10 1 1 0 0 1 +value=1k +} +N 40000 40200 39000 40200 4 +N 40900 40200 41900 40200 4 diff --git a/qa/data/eeschema/io/geda/hierarchy_sub.sch b/qa/data/eeschema/io/geda/hierarchy_sub.sch new file mode 100644 index 0000000000..d2b7eb4a15 --- /dev/null +++ b/qa/data/eeschema/io/geda/hierarchy_sub.sch @@ -0,0 +1,13 @@ +v 20130925 2 +N 40000 45000 42000 45000 4 +{ +T 40000 45500 5 10 1 1 0 0 1 +netname=SUBNET +} +C 42000 44600 1 0 0 resistor-1.sym +{ +T 42400 45200 5 10 1 1 0 0 1 +refdes=R1 +T 42400 45600 5 10 1 1 0 0 1 +value=1k +} diff --git a/qa/data/eeschema/io/geda/hierarchy_test.sch b/qa/data/eeschema/io/geda/hierarchy_test.sch new file mode 100644 index 0000000000..74513067b9 --- /dev/null +++ b/qa/data/eeschema/io/geda/hierarchy_test.sch @@ -0,0 +1,9 @@ +v 20130925 2 +C 40000 45000 1 0 0 sub_block.sym +{ +T 40400 46100 5 10 1 1 0 0 1 +refdes=S1 +T 40400 46500 5 10 1 1 0 0 1 +source=hierarchy_sub.sch +} +N 38000 45500 40000 45500 4 diff --git a/qa/data/eeschema/io/geda/legacy_kicad.sch b/qa/data/eeschema/io/geda/legacy_kicad.sch new file mode 100644 index 0000000000..8b829fb04f --- /dev/null +++ b/qa/data/eeschema/io/geda/legacy_kicad.sch @@ -0,0 +1 @@ +EESchema Schematic File Version 2 diff --git a/qa/data/eeschema/io/geda/lepton-symbols/lepton_resistor.sym b/qa/data/eeschema/io/geda/lepton-symbols/lepton_resistor.sym new file mode 100644 index 0000000000..03462c57f5 --- /dev/null +++ b/qa/data/eeschema/io/geda/lepton-symbols/lepton_resistor.sym @@ -0,0 +1,28 @@ +v 20201004 2 +B 200 0 600 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 300 400 5 10 0 0 0 0 1 +device=RESISTOR +P 900 100 800 100 1 0 0 +{ +T 800 150 5 8 0 1 0 0 1 +pinnumber=2 +T 800 150 5 8 0 0 0 0 1 +pinseq=2 +T 800 150 5 8 0 1 0 0 1 +pinlabel=2 +T 800 150 5 8 0 1 0 0 1 +pintype=pas +} +P 0 100 200 100 1 0 0 +{ +T 100 150 5 8 0 1 0 0 1 +pinnumber=1 +T 100 150 5 8 0 0 0 0 1 +pinseq=1 +T 100 150 5 8 0 1 0 0 1 +pinlabel=1 +T 100 150 5 8 0 1 0 0 1 +pintype=pas +} +T 200 300 8 10 1 1 0 0 1 +refdes=R? diff --git a/qa/data/eeschema/io/geda/lepton.conf b/qa/data/eeschema/io/geda/lepton.conf new file mode 100644 index 0000000000..a862cea354 --- /dev/null +++ b/qa/data/eeschema/io/geda/lepton.conf @@ -0,0 +1,5 @@ +# Lepton-EDA configuration file +; This is a test config for the gEDA importer QA tests + +[libs] +component-library=lepton-symbols diff --git a/qa/data/eeschema/io/geda/lepton_conf_test.sch b/qa/data/eeschema/io/geda/lepton_conf_test.sch new file mode 100644 index 0000000000..594546667c --- /dev/null +++ b/qa/data/eeschema/io/geda/lepton_conf_test.sch @@ -0,0 +1,9 @@ +v 20201004 2 +C 1000 1000 1 0 0 lepton_resistor.sym +{ +T 1200 1200 5 10 1 1 0 0 1 +refdes=R1 +T 1200 1000 5 10 1 1 0 0 1 +value=4.7k +} +N 900 1100 1000 1100 4 diff --git a/qa/data/eeschema/io/geda/minimal_test.sch b/qa/data/eeschema/io/geda/minimal_test.sch new file mode 100644 index 0000000000..0ecc3b9188 --- /dev/null +++ b/qa/data/eeschema/io/geda/minimal_test.sch @@ -0,0 +1,42 @@ +v 20130925 2 +C 40000 40000 0 0 0 title-B.sym +C 44000 47000 1 0 0 resistor-1.sym +{ +T 44300 47400 5 10 1 1 0 0 1 +refdes=R1 +T 44300 47900 5 10 0 0 0 0 1 +device=RESISTOR +T 44300 46700 5 10 1 1 0 0 1 +value=10k +T 44300 47100 5 10 1 1 0 0 1 +footprint=0805 +} +C 46500 45500 1 90 0 capacitor-1.sym +{ +T 45800 45700 5 10 1 1 90 0 1 +refdes=C1 +T 46200 45700 5 10 0 0 90 0 1 +device=CAPACITOR +T 45500 45700 5 10 1 1 90 0 1 +value=100nF +T 46000 46000 5 10 1 1 0 0 1 +footprint=0603 +T 45800 45700 5 10 0 0 90 0 1 +symversion=0.1 +} +N 44000 47000 43000 47000 4 +{ +T 43000 47100 5 10 1 1 0 0 1 +netname=INPUT +} +N 45900 47000 46500 47000 4 +N 46500 47000 46500 46400 4 +{ +T 46600 46800 5 10 1 1 0 0 1 +netname=MID +} +N 46500 45500 46500 44500 4 +{ +T 46600 44800 5 10 1 1 0 0 1 +netname=GND +} diff --git a/qa/data/eeschema/io/geda/multipage_page1.sch b/qa/data/eeschema/io/geda/multipage_page1.sch new file mode 100644 index 0000000000..a816d83ee9 --- /dev/null +++ b/qa/data/eeschema/io/geda/multipage_page1.sch @@ -0,0 +1,6 @@ +v 20130925 2 +N 40000 45000 42000 45000 4 +{ +T 40000 45500 5 10 1 1 0 0 1 +netname=NET_A +} diff --git a/qa/data/eeschema/io/geda/multipage_page2.sch b/qa/data/eeschema/io/geda/multipage_page2.sch new file mode 100644 index 0000000000..f486dafa09 --- /dev/null +++ b/qa/data/eeschema/io/geda/multipage_page2.sch @@ -0,0 +1,14 @@ +v 20130925 2 +N 40000 45000 42000 45000 4 +{ +T 40000 45500 5 10 1 1 0 0 1 +netname=NET_B +} +N 42000 45000 42000 43000 4 +C 43000 44000 1 0 0 resistor-1.sym +{ +T 43400 44800 5 10 1 1 0 0 1 +refdes=R2 +T 43400 44300 5 10 1 1 0 0 1 +value=22k +} diff --git a/qa/data/eeschema/io/geda/multislot_test.sch b/qa/data/eeschema/io/geda/multislot_test.sch new file mode 100644 index 0000000000..8388a75908 --- /dev/null +++ b/qa/data/eeschema/io/geda/multislot_test.sch @@ -0,0 +1,39 @@ +v 20130925 2 +C 40000 48000 1 0 0 7400-1.sym +{ +T 40300 48400 5 10 1 1 0 0 1 +refdes=U1 +T 40300 48200 5 10 0 1 0 0 1 +slot=1 +T 40300 48000 5 10 0 1 0 0 1 +numslots=4 +T 40300 47800 5 10 0 1 0 0 1 +slotdef=1:1,2,3 +T 40300 47600 5 10 0 1 0 0 1 +slotdef=2:4,5,6 +T 40300 47400 5 10 0 1 0 0 1 +slotdef=3:9,10,8 +T 40300 47200 5 10 0 1 0 0 1 +slotdef=4:12,13,11 +T 40300 47000 5 10 1 1 0 0 1 +value=7400 +} +C 44000 48000 1 0 0 7400-1.sym +{ +T 44300 48400 5 10 1 1 0 0 1 +refdes=U1 +T 44300 48200 5 10 0 1 0 0 1 +slot=2 +T 44300 48000 5 10 0 1 0 0 1 +numslots=4 +T 44300 47800 5 10 0 1 0 0 1 +slotdef=1:1,2,3 +T 44300 47600 5 10 0 1 0 0 1 +slotdef=2:4,5,6 +T 44300 47400 5 10 0 1 0 0 1 +slotdef=3:9,10,8 +T 44300 47200 5 10 0 1 0 0 1 +slotdef=4:12,13,11 +T 44300 47000 5 10 1 1 0 0 1 +value=7400 +} diff --git a/qa/data/eeschema/io/geda/old_bus_pin_test.sch b/qa/data/eeschema/io/geda/old_bus_pin_test.sch new file mode 100644 index 0000000000..6dce35f1c0 --- /dev/null +++ b/qa/data/eeschema/io/geda/old_bus_pin_test.sch @@ -0,0 +1,4 @@ +v 20020101 1 +U 40000 45000 50000 45000 10 +P 44000 47000 45000 47000 3 +N 40000 45000 38000 45000 4 diff --git a/qa/data/eeschema/io/geda/old_format_test.sch b/qa/data/eeschema/io/geda/old_format_test.sch new file mode 100644 index 0000000000..42f6d755aa --- /dev/null +++ b/qa/data/eeschema/io/geda/old_format_test.sch @@ -0,0 +1,6 @@ +v 20000101 1 +L 1000 1000 3000 1000 3 +B 1000 2000 2000 1000 3 +V 2000 4000 500 3 +A 4000 4000 500 0 180 3 +N 1000 1000 1000 3000 4 diff --git a/qa/data/eeschema/io/geda/old_text_test.sch b/qa/data/eeschema/io/geda/old_text_test.sch new file mode 100644 index 0000000000..c9cde84859 --- /dev/null +++ b/qa/data/eeschema/io/geda/old_text_test.sch @@ -0,0 +1,4 @@ +v 20000301 0 +T 44000 47000 5 10 1 0 0 0 +Hello World +N 44000 47100 43000 47100 4 diff --git a/qa/data/eeschema/io/geda/overbar_test.sch b/qa/data/eeschema/io/geda/overbar_test.sch new file mode 100644 index 0000000000..769da91b18 --- /dev/null +++ b/qa/data/eeschema/io/geda/overbar_test.sch @@ -0,0 +1,13 @@ +v 20130925 2 +T 1000 1000 9 10 1 0 0 0 1 +\_ACTIVE\_ +T 1000 1500 9 10 1 0 0 0 1 +DATA\_LOW\_ +T 1000 2000 9 10 1 0 0 0 1 +ACTIVE \_HIGH\_ +T 1000 2500 9 10 1 0 0 0 1 +\\backslash +T 1000 3000 9 10 1 0 0 0 1 +No overbar here +T 1000 3500 9 10 1 0 0 0 1 +\_CS\_ and \_WR\_ diff --git a/qa/data/eeschema/io/geda/picture_test.sch b/qa/data/eeschema/io/geda/picture_test.sch new file mode 100644 index 0000000000..55c4dce370 --- /dev/null +++ b/qa/data/eeschema/io/geda/picture_test.sch @@ -0,0 +1,5 @@ +v 20130925 2 +G 1000 1000 500 500 0 0 1 +test_image.png +iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAEElEQVR4nGP4z8AARAwQCgAf7gP9i18U1AAAAABJRU5ErkJggg== +. diff --git a/qa/data/eeschema/io/geda/power_override_test/gafrc b/qa/data/eeschema/io/geda/power_override_test/gafrc new file mode 100644 index 0000000000..6a47a13996 --- /dev/null +++ b/qa/data/eeschema/io/geda/power_override_test/gafrc @@ -0,0 +1,2 @@ +; -*-Scheme-*- +(component-library "sym") diff --git a/qa/data/eeschema/io/geda/power_override_test/power_override_test.sch b/qa/data/eeschema/io/geda/power_override_test/power_override_test.sch new file mode 100644 index 0000000000..49d2297d48 --- /dev/null +++ b/qa/data/eeschema/io/geda/power_override_test/power_override_test.sch @@ -0,0 +1,7 @@ +v 20130925 2 +C 44000 47000 1 0 0 gnd-1.sym +{ +T 44200 46700 5 10 0 0 0 0 1 +refdes=GND1 +} +N 44200 47600 44200 48000 4 diff --git a/qa/data/eeschema/io/geda/power_override_test/sym/gnd-1.sym b/qa/data/eeschema/io/geda/power_override_test/sym/gnd-1.sym new file mode 100644 index 0000000000..0053da73dd --- /dev/null +++ b/qa/data/eeschema/io/geda/power_override_test/sym/gnd-1.sym @@ -0,0 +1,17 @@ +v 20130925 2 +T 0 300 8 10 0 0 0 0 1 +device=GND +P 200 600 200 300 1 0 0 +{ +T 250 350 5 8 0 1 0 0 1 +pinnumber=1 +T 250 350 5 8 0 0 0 0 1 +pinseq=1 +T 250 350 5 8 0 1 0 0 1 +pinlabel=GND +T 250 350 5 8 0 1 0 0 1 +pintype=pwr +} +L 50 300 350 300 3 0 0 0 -1 -1 +L 100 200 300 200 3 0 0 0 -1 -1 +L 150 100 250 100 3 0 0 0 -1 -1 diff --git a/qa/data/eeschema/io/geda/powermeter.sch b/qa/data/eeschema/io/geda/powermeter.sch new file mode 100644 index 0000000000..469248c19f --- /dev/null +++ b/qa/data/eeschema/io/geda/powermeter.sch @@ -0,0 +1,592 @@ +v 20130925 2 +C 40000 40000 0 0 0 title-B.sym +C 49800 44900 1 0 0 CS5463.sym +{ +T 50495 48595 5 10 1 1 0 0 1 +footprint=SSOP24 +T 50800 48200 5 10 1 1 0 0 1 +device=CS5463 +T 49800 44900 5 10 1 1 0 0 1 +refdes=U1 +T 50300 48800 5 10 1 0 0 0 1 +symversion=0.1 +} +N 50500 45100 52100 45100 4 +{ +T 50500 45100 5 10 1 1 0 0 1 +netname=GND +} +C 49300 45100 1 90 0 capacitor-1.sym +{ +T 48600 45300 5 10 0 0 90 0 1 +device=CAPACITOR +T 48800 45300 5 10 1 1 90 0 1 +refdes=C1 +T 48400 45300 5 10 0 0 90 0 1 +symversion=0.1 +T 48900 45600 5 10 1 1 0 0 1 +footprint=1812 +T 48900 45300 5 10 1 1 0 0 1 +value=22nF +} +C 47300 44500 1 90 0 capacitor-1.sym +{ +T 46600 44700 5 10 0 0 90 0 1 +device=CAPACITOR +T 46800 44700 5 10 1 1 90 0 1 +refdes=C3 +T 46400 44700 5 10 0 0 90 0 1 +symversion=0.1 +T 47100 44500 5 10 1 1 90 0 1 +footprint=0603 +T 47300 44500 5 10 1 1 90 0 1 +value=220pF +} +N 49800 45800 49700 45800 4 +N 49700 45100 49700 45800 4 +N 49100 45100 49700 45100 4 +C 49800 44000 1 90 0 capacitor-1.sym +{ +T 49100 44200 5 10 0 0 90 0 1 +device=CAPACITOR +T 49300 44200 5 10 1 1 90 0 1 +refdes=C2 +T 48900 44200 5 10 0 0 90 0 1 +symversion=0.1 +T 49400 44500 5 10 1 1 0 0 1 +footprint=0603 +T 49400 44200 5 10 1 1 0 0 1 +value=220p +} +N 49600 44900 49600 45100 4 +N 50500 44000 50500 45100 4 +C 48700 47800 1 0 0 xtal.sym +{ +T 48795 47850 5 10 0 1 0 0 1 +device=XTAL +T 48695 48549 5 10 1 1 0 0 1 +footprint=HC49SMD +T 48895 47850 5 10 1 1 0 0 1 +refdes=X1 +} +N 49800 47900 49500 47900 4 +N 49500 47900 49500 48200 4 +N 49800 47700 48700 47700 4 +N 48700 47700 48700 48200 4 +C 49500 49300 1 0 0 capacitor-1.sym +{ +T 49700 50000 5 10 0 0 0 0 1 +device=CAPACITOR +T 49700 49800 5 10 1 1 0 0 1 +refdes=C4 +T 49700 50200 5 10 0 0 0 0 1 +symversion=0.1 +T 49500 49300 5 10 1 1 0 0 1 +footprint=0603 +T 49500 49600 5 10 1 1 0 0 1 +value=100nf +} +N 50500 48600 50500 49500 4 +{ +T 50400 49200 5 10 1 1 0 0 1 +netname=5v +} +N 50500 49500 50400 49500 4 +N 49500 49500 48900 49500 4 +{ +T 49000 49500 5 10 1 1 0 0 1 +netname=GND +} +C 51700 49300 1 0 0 capacitor-1.sym +{ +T 51900 50000 5 10 0 0 0 0 1 +device=CAPACITOR +T 51900 49800 5 10 1 1 0 0 1 +refdes=C5 +T 51900 50200 5 10 0 0 0 0 1 +symversion=0.1 +T 51700 49300 5 10 1 1 0 0 1 +footprint=0603 +T 51600 49600 5 10 1 1 0 0 1 +value=100nF +} +N 51600 48600 51600 49500 4 +{ +T 51600 48600 5 10 1 0 0 0 1 +netname=3v +} +N 51600 49500 51700 49500 4 +N 52600 49500 53100 49500 4 +{ +T 52600 49500 5 10 1 1 0 0 1 +netname=GND +} +N 41200 50600 42300 50600 4 +{ +T 41200 50600 5 10 1 1 0 0 1 +netname=5v +} +N 52300 45800 52300 46000 4 +C 52100 44900 1 0 0 capacitor-1.sym +{ +T 52300 45600 5 10 0 0 0 0 1 +device=CAPACITOR +T 52300 45400 5 10 1 1 0 0 1 +refdes=C6 +T 52300 45800 5 10 0 0 0 0 1 +symversion=0.1 +T 52100 45100 5 10 1 1 0 0 1 +footprint=0603 +T 52100 44900 5 10 1 1 0 0 1 +value=100nF +} +N 53000 45100 53000 45800 4 +N 53000 45800 52300 45800 4 +C 52700 46800 1 0 0 resistor-1.sym +{ +T 53000 47200 5 10 0 0 0 0 1 +device=RESISTOR +T 53000 46900 5 10 1 1 0 0 1 +refdes=R1 +T 52900 46700 5 10 1 1 0 0 1 +footprint=0805 +T 52700 46800 5 10 1 1 0 0 1 +value=150 +} +C 52700 47100 1 0 0 resistor-1.sym +{ +T 53000 47500 5 10 0 0 0 0 1 +device=RESISTOR +T 52900 47400 5 10 1 1 0 0 1 +refdes=R2 +T 53100 47300 5 10 1 1 0 0 1 +footprint=0805 +T 52700 47300 5 10 1 1 0 0 1 +value=1k +} +N 52700 46900 52300 46900 4 +N 52300 47100 52700 47100 4 +N 52700 47100 52700 47200 4 +N 53600 46900 53600 47200 4 +{ +T 53600 46900 5 10 1 1 0 0 1 +netname=5v +} +C 43500 49400 1 0 0 DS1117-3_3.sym +{ +T 43500 49395 5 10 0 1 0 0 1 +footprint=SOT223 +T 43500 49395 5 10 0 1 0 0 1 +device=DS117-3.3 +T 43200 50200 5 10 1 1 0 0 1 +refdes=U2 +} +N 41200 49600 42300 49600 4 +{ +T 41200 49600 5 10 1 1 0 0 1 +netname=GND +} +N 43700 49400 43700 48600 4 +{ +T 43600 48800 5 10 1 1 90 0 1 +netname=GND +} +N 44000 49400 44000 48600 4 +{ +T 44000 48900 5 10 1 1 90 0 1 +netname=3v +} +N 44300 49400 44300 48600 4 +{ +T 44300 48900 5 10 1 1 90 0 1 +netname=5v +} +N 49800 47500 48900 47500 4 +{ +T 49100 47500 5 10 1 1 0 0 1 +netname=SCLK +} +N 49800 47300 48900 47300 4 +{ +T 49100 47300 5 10 1 1 0 0 1 +netname=SDO +} +N 49800 47100 48900 47100 4 +{ +T 49100 47100 5 10 1 1 0 0 1 +netname=SDI +} +N 49800 46900 48900 46900 4 +{ +T 49100 46900 5 10 1 1 0 0 1 +netname=CS +} +N 41200 46600 42200 46600 4 +{ +T 41200 46600 5 10 1 1 0 0 1 +netname=SCLK +} +N 41200 45600 42200 45600 4 +{ +T 41200 45600 5 10 1 1 0 0 1 +netname=SDI +} +N 41200 44500 42200 44500 4 +{ +T 41200 44500 5 10 1 1 0 0 1 +netname=SDO +} +N 41200 43400 42200 43400 4 +{ +T 41200 43400 5 10 1 1 0 0 1 +netname=CS +} +N 41200 48500 42400 48500 4 +{ +T 41200 48500 5 10 1 1 0 0 1 +netname=3v +} +T 41200 41600 8 10 1 1 0 0 1 +value=LINE_IN +N 41200 41800 42100 41800 4 +{ +T 41200 41800 5 10 1 1 0 0 1 +netname=P1_A +} +C 42100 41700 1 0 0 resistor-1.sym +{ +T 42400 42100 5 10 0 0 0 0 1 +device=RESISTOR +T 42300 42000 5 10 1 1 0 0 1 +refdes=R3 +T 42100 41700 5 10 1 1 0 0 1 +footprint=1206 +T 42500 41900 5 10 1 1 0 0 1 +value=0.5 +} +N 43000 41800 43800 41800 4 +{ +T 43000 41800 5 10 1 1 0 0 1 +netname=P1_B +} +C 44800 42600 1 90 1 BT136.sym +{ +T 44105 41405 5 10 0 1 270 2 1 +footprint=TO252 +T 44405 41405 5 10 0 1 270 2 1 +device=TRIAC +T 44800 42600 5 10 1 1 0 0 1 +refdes=T1 +} +N 41200 40700 45900 40700 4 +{ +T 41200 40700 5 10 1 1 0 0 1 +netname=P2 +} +N 44800 41800 45900 41800 4 +C 44800 46500 1 90 1 MOC3021.sym +{ +T 44800 46505 5 10 0 1 270 2 1 +footprint=730C-04 +T 44827 46505 5 10 0 1 270 2 1 +device=MOC3023 +T 44800 46500 5 10 1 1 0 0 1 +refdes=U3 +} +N 44600 42600 44600 43500 4 +C 43600 42500 1 90 0 resistor-1.sym +{ +T 43200 42800 5 10 0 0 90 0 1 +device=RESISTOR +T 43300 42700 5 10 1 1 90 0 1 +refdes=R4 +T 43800 42900 5 10 1 1 90 0 1 +footprint=1206 +T 43400 43000 5 10 1 1 90 0 1 +value=360 +} +N 43500 43400 43500 43500 4 +N 43500 42500 43500 41800 4 +C 42500 47400 1 0 0 resistor-1.sym +{ +T 42800 47800 5 10 0 0 0 0 1 +device=RESISTOR +T 42700 47700 5 10 1 1 0 0 1 +refdes=R5 +T 42900 47400 5 10 1 1 0 0 1 +footprint=0805 +T 42400 47600 5 10 1 1 0 0 1 +value=100 +} +N 41200 47500 42500 47500 4 +N 43400 47500 43500 47500 4 +N 43500 47500 43500 46500 4 +N 44600 46500 44600 47500 4 +{ +T 44600 46600 5 10 1 1 90 0 1 +netname=GND +} +C 48200 45000 1 0 0 resistor-1.sym +{ +T 48500 45400 5 10 0 0 0 0 1 +device=RESISTOR +T 48100 44900 5 10 1 1 0 0 1 +refdes=R10 +T 48600 44800 5 10 1 1 0 0 1 +footprint=0805 +T 48200 45200 5 10 1 1 0 0 1 +value=1k +} +N 48200 45100 47700 45100 4 +{ +T 47700 45100 5 10 1 1 0 0 1 +netname=P1_A +} +N 46800 46000 49800 46000 4 +N 47100 46000 47100 45400 4 +N 47100 44500 47100 44000 4 +N 47100 44000 50500 44000 4 +C 45900 45900 1 0 0 resistor-1.sym +{ +T 46200 46300 5 10 0 0 0 0 1 +device=RESISTOR +T 46100 46200 5 10 1 1 0 0 1 +refdes=R6 +T 46200 45900 5 10 1 1 0 0 1 +footprint=0805 +T 45900 46100 5 10 1 1 0 0 1 +value=1k +} +N 45900 46000 45200 46000 4 +{ +T 45400 46000 5 10 1 1 0 0 1 +netname=P1_B +} +C 48100 46300 1 90 0 capacitor-1.sym +{ +T 47400 46500 5 10 0 0 90 0 1 +device=CAPACITOR +T 47600 46500 5 10 1 1 90 0 1 +refdes=C7 +T 47200 46500 5 10 0 0 90 0 1 +symversion=0.1 +T 47700 46800 5 10 1 1 0 0 1 +footprint=0603 +T 47700 46500 5 10 1 1 0 0 1 +value=220p +} +C 48100 47500 1 90 0 capacitor-1.sym +{ +T 47400 47700 5 10 0 0 90 0 1 +device=CAPACITOR +T 47600 47700 5 10 1 1 90 0 1 +refdes=C8 +T 47200 47700 5 10 0 0 90 0 1 +symversion=0.1 +T 47700 48000 5 10 1 1 0 0 1 +footprint=0603 +T 47700 47700 5 10 1 1 0 0 1 +value=220p +} +N 47200 46300 49800 46300 4 +N 49800 46500 48300 46500 4 +N 48300 46500 48300 48400 4 +N 46200 48400 48300 48400 4 +N 47900 47200 47900 47500 4 +{ +T 47900 47100 5 10 1 1 90 0 1 +netname=GND +} +C 47400 47000 1 90 0 capacitor-1.sym +{ +T 46700 47200 5 10 0 0 90 0 1 +device=CAPACITOR +T 46900 47200 5 10 1 1 90 0 1 +refdes=C9 +T 46500 47200 5 10 0 0 90 0 1 +symversion=0.1 +T 47000 47500 5 10 1 1 0 0 1 +footprint=1812 +T 47000 47200 5 10 1 1 0 0 1 +value=22nF +} +N 47200 47900 47200 48400 4 +N 47200 47000 47200 46300 4 +C 46100 46600 1 0 0 resistor-1.sym +{ +T 46400 47000 5 10 0 0 0 0 1 +device=RESISTOR +T 46300 46900 5 10 1 1 0 0 1 +refdes=R7 +T 46400 46600 5 10 1 1 0 0 1 +footprint=0805 +T 46100 46800 5 10 1 1 0 0 1 +value=1k +} +N 47000 46700 47200 46700 4 +N 46100 46700 45500 46700 4 +N 45500 46000 45500 46900 4 +C 45600 46900 1 90 0 resistor-1.sym +{ +T 45200 47200 5 10 0 0 90 0 1 +device=RESISTOR +T 45300 47400 5 10 1 1 90 0 1 +refdes=R8 +T 45600 47200 5 10 1 1 90 0 1 +footprint=0805 +T 45400 46900 5 10 1 1 90 0 1 +value=100 +} +C 45600 48300 1 90 0 resistor-1.sym +{ +T 45200 48600 5 10 0 0 90 0 1 +device=RESISTOR +T 45300 48800 5 10 1 1 90 0 1 +refdes=R9 +T 45600 48600 5 10 1 1 90 0 1 +footprint=0805 +T 45400 48100 5 10 1 1 90 0 1 +value=200k +} +N 45500 48300 45500 47800 4 +N 46200 48400 46200 48000 4 +N 46200 48000 45500 48000 4 +N 45500 49200 45500 49700 4 +{ +T 45500 49200 5 10 1 1 0 0 1 +netname=P2 +} +N 49200 44900 49100 45100 4 +N 49200 44900 49100 45100 4 +C 40300 50500 1 0 0 terminal-1.sym +{ +T 40610 51250 5 10 0 0 0 0 1 +device=terminal +T 40850 50750 5 10 1 1 0 6 1 +refdes=T13 +T 40500 50300 5 10 1 1 0 0 1 +footprint=PAD40 +T 40400 50500 5 10 1 1 0 0 1 +value=5V +} +C 40300 49500 1 0 0 terminal-1.sym +{ +T 40610 50250 5 10 0 0 0 0 1 +device=terminal +T 40750 49750 5 10 1 1 0 6 1 +refdes=T2 +T 40600 49300 5 10 1 1 0 0 1 +footprint=PAD40 +T 40200 49500 5 10 1 1 0 0 1 +value=GND +} +C 40300 48400 1 0 0 terminal-1.sym +{ +T 40610 49150 5 10 0 0 0 0 1 +device=terminal +T 40750 48650 5 10 1 1 0 6 1 +refdes=T3 +T 40600 48200 5 10 1 1 0 0 1 +footprint=PAD40 +T 40200 48400 5 10 1 1 0 0 1 +value=3v +} +C 40300 47400 1 0 0 terminal-1.sym +{ +T 40610 48150 5 10 0 0 0 0 1 +device=terminal +T 40750 47650 5 10 1 1 0 6 1 +refdes=T4 +T 40600 47200 5 10 1 1 0 0 1 +footprint=PAD20 +T 40200 47400 5 10 1 1 0 0 1 +value=ON +} +C 40300 46500 1 0 0 terminal-1.sym +{ +T 40610 47250 5 10 0 0 0 0 1 +device=terminal +T 40750 46750 5 10 1 1 0 6 1 +refdes=T5 +T 40600 46300 5 10 1 1 0 0 1 +footprint=PAD20 +T 40200 46500 5 10 1 1 0 0 1 +value=SCLK +} +C 40300 45500 1 0 0 terminal-1.sym +{ +T 40610 46250 5 10 0 0 0 0 1 +device=terminal +T 40750 45750 5 10 1 1 0 6 1 +refdes=T6 +T 40600 45300 5 10 1 1 0 0 1 +footprint=PAD20 +T 40200 45500 5 10 1 1 0 0 1 +value=SDI +} +C 40300 44400 1 0 0 terminal-1.sym +{ +T 40610 45150 5 10 0 0 0 0 1 +device=terminal +T 40750 44650 5 10 1 1 0 6 1 +refdes=T7 +T 40600 44200 5 10 1 1 0 0 1 +footprint=PAD20 +T 40200 44400 5 10 1 1 0 0 1 +value=SDO +} +C 40300 43300 1 0 0 terminal-1.sym +{ +T 40610 44050 5 10 0 0 0 0 1 +device=terminal +T 40750 43550 5 10 1 1 0 6 1 +refdes=T8 +T 40600 43100 5 10 1 1 0 0 1 +footprint=PAD20 +T 40200 43300 5 10 1 1 0 0 1 +value=CS +} +C 40300 41700 1 0 0 terminal-1.sym +{ +T 40610 42450 5 10 0 0 0 0 1 +device=terminal +T 40750 41950 5 10 1 1 0 6 1 +refdes=T9 +T 40600 41500 5 10 1 1 0 0 1 +footprint=PAD60 +T 39900 41700 5 10 1 1 0 0 1 +value=LINE_IN +} +C 40300 40600 1 0 0 terminal-1.sym +{ +T 40610 41350 5 10 0 0 0 0 1 +device=terminal +T 40750 40850 5 10 1 1 0 6 1 +refdes=T10 +T 40600 40400 5 10 1 1 0 0 1 +footprint=PAD60 +T 39900 40600 5 10 1 1 0 0 1 +value=NEUTRE +} +C 46800 40800 1 180 0 terminal-1.sym +{ +T 46490 40050 5 10 0 0 180 0 1 +device=terminal +T 46350 40550 5 10 1 1 180 6 1 +refdes=T12 +T 46500 41000 5 10 1 1 180 0 1 +footprint=PAD60 +T 46900 40800 5 10 1 1 180 0 1 +value=NEUTRE +} +C 46800 41900 1 180 0 terminal-1.sym +{ +T 46490 41150 5 10 0 0 180 0 1 +device=terminal +T 46350 41650 5 10 1 1 180 6 1 +refdes=T11 +T 46500 42100 5 10 1 1 180 0 1 +footprint=PAD60 +T 46900 41900 5 10 1 1 180 0 1 +value=LINE_OUT +} diff --git a/qa/data/eeschema/io/geda/priority_test/gafrc b/qa/data/eeschema/io/geda/priority_test/gafrc new file mode 100644 index 0000000000..f21077303b --- /dev/null +++ b/qa/data/eeschema/io/geda/priority_test/gafrc @@ -0,0 +1 @@ +(component-library "sym") diff --git a/qa/data/eeschema/io/geda/priority_test/priority_test.sch b/qa/data/eeschema/io/geda/priority_test/priority_test.sch new file mode 100644 index 0000000000..d68b6972b5 --- /dev/null +++ b/qa/data/eeschema/io/geda/priority_test/priority_test.sch @@ -0,0 +1,8 @@ +v 20130925 2 +C 40000 40000 1 0 0 resistor-1.sym +{ +T 40300 40400 5 10 1 1 0 0 1 +refdes=R1 +T 40300 40600 5 10 1 1 0 0 1 +value=1k +} diff --git a/qa/data/eeschema/io/geda/priority_test/sym/resistor-1.sym b/qa/data/eeschema/io/geda/priority_test/sym/resistor-1.sym new file mode 100644 index 0000000000..a6dd75e742 --- /dev/null +++ b/qa/data/eeschema/io/geda/priority_test/sym/resistor-1.sym @@ -0,0 +1,39 @@ +v 20130925 2 +T 300 400 8 10 1 1 0 0 1 +refdes=R? +T 300 -100 8 10 0 0 0 0 1 +device=RESISTOR +P 0 200 200 200 1 0 0 +{ +T 100 250 5 8 0 1 0 0 1 +pinnumber=1 +T 100 250 5 8 0 0 0 0 1 +pinseq=1 +T 100 250 5 8 0 1 0 0 1 +pinlabel=1 +T 100 250 5 8 0 1 0 0 1 +pintype=pas +} +P 900 200 700 200 1 0 0 +{ +T 800 250 5 8 0 1 0 0 1 +pinnumber=2 +T 800 250 5 8 0 0 0 0 1 +pinseq=2 +T 800 250 5 8 0 1 0 0 1 +pinlabel=2 +T 800 250 5 8 0 1 0 0 1 +pintype=pas +} +P 450 0 450 100 1 0 0 +{ +T 500 50 5 8 0 1 0 0 1 +pinnumber=3 +T 500 50 5 8 0 0 0 0 1 +pinseq=3 +T 500 50 5 8 0 1 0 0 1 +pinlabel=3 +T 500 50 5 8 0 1 0 0 1 +pintype=pas +} +B 200 100 500 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 diff --git a/qa/data/eeschema/io/geda/props_test.sch b/qa/data/eeschema/io/geda/props_test.sch new file mode 100644 index 0000000000..86dc3f9379 --- /dev/null +++ b/qa/data/eeschema/io/geda/props_test.sch @@ -0,0 +1,12 @@ +v 20130925 2 +C 40000 40000 1 0 0 props_resistor.sym +{ +T 40300 40400 5 10 1 1 0 0 1 +refdes=R1 +T 40300 40900 5 10 0 0 0 0 1 +device=RESISTOR +T 40300 39700 5 10 1 1 0 0 1 +value=2.2k +} +N 40000 40200 39000 40200 4 +N 40900 40200 41900 40200 4 diff --git a/qa/data/eeschema/io/geda/random.sch b/qa/data/eeschema/io/geda/random.sch new file mode 100644 index 0000000000..fb3c43cc4a --- /dev/null +++ b/qa/data/eeschema/io/geda/random.sch @@ -0,0 +1 @@ +this is not a schematic diff --git a/qa/data/eeschema/io/geda/relative_path_test.sch b/qa/data/eeschema/io/geda/relative_path_test.sch new file mode 100644 index 0000000000..188db5a257 --- /dev/null +++ b/qa/data/eeschema/io/geda/relative_path_test.sch @@ -0,0 +1,7 @@ +v 20130925 2 +H 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 2 +M 1000 1000 +l 500 0 +H 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 2 +M 2000 2000 +L 2500 2000 diff --git a/qa/data/eeschema/io/geda/scsi2sd.sch b/qa/data/eeschema/io/geda/scsi2sd.sch new file mode 100644 index 0000000000..82d71c2935 --- /dev/null +++ b/qa/data/eeschema/io/geda/scsi2sd.sch @@ -0,0 +1,2647 @@ +v 20130925 2 +C 69300 32700 1 90 0 capacitor-1.sym +{ +T 68600 32900 5 10 0 0 90 0 1 +device=CAPACITOR +T 68800 32900 5 10 1 1 90 0 1 +refdes=C22 +T 68400 32900 5 10 0 0 90 0 1 +symversion=0.1 +T 69300 32700 5 10 1 1 90 0 1 +value=100nF +T 69300 32700 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 69300 32700 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 69000 32400 1 0 0 gnd-1.sym +C 68900 33600 1 0 0 3.3V-plus-1.sym +{ +T 68900 33600 5 10 0 0 0 0 1 +net=3.3V:1 +} +C 36500 45900 1 0 0 7406.sym +{ +T 37900 49300 5 10 1 1 0 6 1 +refdes=U3 +T 36900 49500 5 10 0 0 0 0 1 +device=7406 +T 36900 49700 5 10 0 0 0 0 1 +footprint=SO14 +} +C 36500 42100 1 0 0 7406.sym +{ +T 37900 45500 5 10 1 1 0 6 1 +refdes=U4 +T 36900 45700 5 10 0 0 0 0 1 +device=7406 +T 36900 45900 5 10 0 0 0 0 1 +footprint=SO14 +} +C 36500 38400 1 0 0 7406.sym +{ +T 37900 41800 5 10 1 1 0 6 1 +refdes=U5 +T 36900 42000 5 10 0 0 0 0 1 +device=7406 +T 36900 42200 5 10 0 0 0 0 1 +footprint=SO14 +} +U 34000 49400 36000 49400 10 0 +U 36000 49400 36000 38500 10 -1 +U 45100 49200 39000 49200 10 1 +U 39000 49200 39000 38500 10 -1 +N 38200 48400 38800 48400 4 +{ +T 38200 48400 5 10 1 1 0 0 1 +netname=REQ +} +C 38800 48400 1 270 0 busripper-1.sym +{ +T 39200 48400 5 8 0 0 270 0 1 +device=none +} +N 38200 47600 38800 47600 4 +{ +T 38200 47600 5 10 1 1 0 0 1 +netname=SEL +} +C 38800 47600 1 270 0 busripper-1.sym +{ +T 39200 47600 5 8 0 0 270 0 1 +device=none +} +N 38200 46800 38800 46800 4 +{ +T 38200 46800 5 10 1 1 0 0 1 +netname=RST +} +C 38800 46800 1 270 0 busripper-1.sym +{ +T 39200 46800 5 8 0 0 270 0 1 +device=none +} +N 37200 48600 38800 48600 4 +{ +T 38200 48600 5 10 1 1 0 0 1 +netname=I/O +} +C 38800 48600 1 270 0 busripper-1.sym +{ +T 39200 48600 5 8 0 0 270 0 1 +device=none +} +N 37200 47800 38800 47800 4 +{ +T 38200 47800 5 10 1 1 0 0 1 +netname=C/D +} +C 38800 47800 1 270 0 busripper-1.sym +{ +T 39200 47800 5 8 0 0 270 0 1 +device=none +} +N 37200 47000 38800 47000 4 +{ +T 38200 47000 5 10 1 1 0 0 1 +netname=MSG +} +C 38800 47000 1 270 0 busripper-1.sym +{ +T 39200 47000 5 8 0 0 270 0 1 +device=none +} +N 38200 44600 38800 44600 4 +{ +T 38200 44600 5 10 1 1 0 0 1 +netname=BSY +} +C 38800 44600 1 270 0 busripper-1.sym +{ +T 39200 44600 5 8 0 0 270 0 1 +device=none +} +N 38200 43800 38800 43800 4 +{ +T 38200 43800 5 10 1 1 0 0 1 +netname=DBP +} +C 38800 43800 1 270 0 busripper-1.sym +{ +T 39200 43800 5 8 0 0 270 0 1 +device=none +} +N 38200 43000 38800 43000 4 +{ +T 38200 43000 5 10 1 1 0 0 1 +netname=DB6 +} +C 38800 43000 1 270 0 busripper-1.sym +{ +T 39200 43000 5 8 0 0 270 0 1 +device=none +} +N 37200 44800 38800 44800 4 +{ +T 38200 44800 5 10 1 1 0 0 1 +netname=ACK +} +C 38800 44800 1 270 0 busripper-1.sym +{ +T 39200 44800 5 8 0 0 270 0 1 +device=none +} +N 37200 44000 38800 44000 4 +{ +T 38200 44000 5 10 1 1 0 0 1 +netname=ATN +} +C 38800 44000 1 270 0 busripper-1.sym +{ +T 39200 44000 5 8 0 0 270 0 1 +device=none +} +N 37200 43200 38800 43200 4 +{ +T 38200 43200 5 10 1 1 0 0 1 +netname=DB7 +} +C 38800 43200 1 270 0 busripper-1.sym +{ +T 39200 43200 5 8 0 0 270 0 1 +device=none +} +N 38200 40900 38800 40900 4 +{ +T 38200 40900 5 10 1 1 0 0 1 +netname=DB4 +} +C 38800 40900 1 270 0 busripper-1.sym +{ +T 39200 40900 5 8 0 0 270 0 1 +device=none +} +N 38200 40100 38800 40100 4 +{ +T 38200 40100 5 10 1 1 0 0 1 +netname=DB2 +} +C 38800 40100 1 270 0 busripper-1.sym +{ +T 39200 40100 5 8 0 0 270 0 1 +device=none +} +N 38200 39300 38800 39300 4 +{ +T 38200 39300 5 10 1 1 0 0 1 +netname=DB0 +} +C 38800 39300 1 270 0 busripper-1.sym +{ +T 39200 39300 5 8 0 0 270 0 1 +device=none +} +N 37200 41100 38800 41100 4 +{ +T 38200 41100 5 10 1 1 0 0 1 +netname=DB5 +} +C 38800 41100 1 270 0 busripper-1.sym +{ +T 39200 41100 5 8 0 0 270 0 1 +device=none +} +N 37200 40300 38800 40300 4 +{ +T 38200 40300 5 10 1 1 0 0 1 +netname=DB3 +} +C 38800 40300 1 270 0 busripper-1.sym +{ +T 39200 40300 5 8 0 0 270 0 1 +device=none +} +N 37200 39500 38800 39500 4 +{ +T 38200 39500 5 10 1 1 0 0 1 +netname=DB1 +} +C 38800 39500 1 270 0 busripper-1.sym +{ +T 39200 39500 5 8 0 0 270 0 1 +device=none +} +N 36600 48800 37200 48800 4 +N 37200 48800 37200 48600 4 +N 36600 48000 37200 48000 4 +N 37200 48000 37200 47800 4 +N 36600 47200 37200 47200 4 +N 37200 47200 37200 47000 4 +N 36600 48400 36200 48400 4 +{ +T 36200 48400 5 10 1 1 0 0 1 +netname=\_I/O\_ +} +C 36200 48400 1 180 0 busripper-1.sym +{ +T 36200 48000 5 8 0 0 180 0 1 +device=none +} +N 36600 47600 36200 47600 4 +{ +T 36200 47600 5 10 1 1 0 0 1 +netname=\_C/D\_ +} +C 36200 47600 1 180 0 busripper-1.sym +{ +T 36200 47200 5 8 0 0 180 0 1 +device=none +} +N 36600 46800 36200 46800 4 +{ +T 36200 46800 5 10 1 1 0 0 1 +netname=\_MSG\_ +} +C 36200 46800 1 180 0 busripper-1.sym +{ +T 36200 46400 5 8 0 0 180 0 1 +device=none +} +N 38200 48000 37600 48000 4 +N 37600 48000 37600 48200 4 +N 37600 48200 36200 48200 4 +{ +T 36200 48200 5 10 1 1 0 0 1 +netname=\_REQ\_ +} +C 36200 48200 1 180 0 busripper-1.sym +{ +T 36200 47800 5 8 0 0 180 0 1 +device=none +} +N 38200 47200 37600 47200 4 +N 37600 47200 37600 47400 4 +N 37600 47400 36200 47400 4 +{ +T 36200 47400 5 10 1 1 0 0 1 +netname=\_SEL\_ +} +C 36200 47400 1 180 0 busripper-1.sym +{ +T 36200 47000 5 8 0 0 180 0 1 +device=none +} +N 38200 46400 37600 46400 4 +N 37600 46400 37600 46600 4 +N 37600 46600 36200 46600 4 +{ +T 36200 46600 5 10 1 1 0 0 1 +netname=\_RST\_ +} +C 36200 46600 1 180 0 busripper-1.sym +{ +T 36200 46200 5 8 0 0 180 0 1 +device=none +} +N 36600 45000 37200 45000 4 +N 37200 45000 37200 44800 4 +N 36600 44200 37200 44200 4 +N 37200 44200 37200 44000 4 +N 36600 43400 37200 43400 4 +N 37200 43400 37200 43200 4 +N 36600 41300 37200 41300 4 +N 37200 41300 37200 41100 4 +N 36600 40500 37200 40500 4 +N 37200 40500 37200 40300 4 +N 36600 39700 37200 39700 4 +N 37200 39700 37200 39500 4 +N 36600 44600 36200 44600 4 +{ +T 36200 44600 5 10 1 1 0 0 1 +netname=\_ACK\_ +} +C 36200 44600 1 180 0 busripper-1.sym +{ +T 36200 44200 5 8 0 0 180 0 1 +device=none +} +N 38200 44200 37600 44200 4 +N 37600 44200 37600 44400 4 +N 37600 44400 36200 44400 4 +{ +T 36200 44400 5 10 1 1 0 0 1 +netname=\_BSY\_ +} +C 36200 44400 1 180 0 busripper-1.sym +{ +T 36200 44000 5 8 0 0 180 0 1 +device=none +} +N 36600 43800 36200 43800 4 +{ +T 36200 43800 5 10 1 1 0 0 1 +netname=\_ATN\_ +} +C 36200 43800 1 180 0 busripper-1.sym +{ +T 36200 43400 5 8 0 0 180 0 1 +device=none +} +N 38200 43400 37600 43400 4 +N 37600 43400 37600 43600 4 +N 37600 43600 36200 43600 4 +{ +T 36200 43600 5 10 1 1 0 0 1 +netname=\_DBP\_ +} +C 36200 43600 1 180 0 busripper-1.sym +{ +T 36200 43200 5 8 0 0 180 0 1 +device=none +} +N 36600 43000 36200 43000 4 +{ +T 36200 43000 5 10 1 1 0 0 1 +netname=\_DB7\_ +} +C 36200 43000 1 180 0 busripper-1.sym +{ +T 36200 42600 5 8 0 0 180 0 1 +device=none +} +N 38200 42600 37600 42600 4 +N 37600 42600 37600 42800 4 +N 37600 42800 36200 42800 4 +{ +T 36200 42800 5 10 1 1 0 0 1 +netname=\_DB6\_ +} +C 36200 42800 1 180 0 busripper-1.sym +{ +T 36200 42400 5 8 0 0 180 0 1 +device=none +} +N 36600 40900 36200 40900 4 +{ +T 36200 40900 5 10 1 1 0 0 1 +netname=\_DB5\_ +} +C 36200 40900 1 180 0 busripper-1.sym +{ +T 36200 40500 5 8 0 0 180 0 1 +device=none +} +N 36600 40100 36200 40100 4 +{ +T 36200 40100 5 10 1 1 0 0 1 +netname=\_DB3\_ +} +C 36200 40100 1 180 0 busripper-1.sym +{ +T 36200 39700 5 8 0 0 180 0 1 +device=none +} +N 36600 39300 36200 39300 4 +{ +T 36200 39300 5 10 1 1 0 0 1 +netname=\_DB1\_ +} +C 36200 39300 1 180 0 busripper-1.sym +{ +T 36200 38900 5 8 0 0 180 0 1 +device=none +} +N 38200 40500 37600 40500 4 +N 37600 40500 37600 40700 4 +N 37600 40700 36200 40700 4 +{ +T 36200 40700 5 10 1 1 0 0 1 +netname=\_DB4\_ +} +C 36200 40700 1 180 0 busripper-1.sym +{ +T 36200 40300 5 8 0 0 180 0 1 +device=none +} +N 38200 39700 37600 39700 4 +N 37600 39700 37600 39900 4 +N 37600 39900 36200 39900 4 +{ +T 36200 39900 5 10 1 1 0 0 1 +netname=\_DB2\_ +} +C 36200 39900 1 180 0 busripper-1.sym +{ +T 36200 39500 5 8 0 0 180 0 1 +device=none +} +N 38200 38900 37600 38900 4 +N 37600 38900 37600 39100 4 +N 37600 39100 36200 39100 4 +{ +T 36200 39100 5 10 1 1 0 0 1 +netname=\_DB0\_ +} +C 36200 39100 1 180 0 busripper-1.sym +{ +T 36200 38700 5 8 0 0 180 0 1 +device=none +} +U 39000 45200 39000 45400 10 0 +U 36000 38500 36000 31900 10 -1 +C 42700 39100 1 0 0 header10-2.sym +{ +T 42700 41100 5 10 0 1 0 0 1 +device=HEADER10 +T 43300 41200 5 10 1 1 0 0 1 +refdes=J4 +T 42700 39100 5 10 0 0 0 0 1 +footprint=FTSH-105-01-L-DV-K +} +N 44100 39300 45600 39300 2 +N 45600 39300 45600 44200 2 +N 45600 44200 46200 44200 2 +N 44100 40100 44700 40100 4 +N 44700 38600 44700 44300 4 +N 44700 38600 46200 38600 4 +N 44100 40500 44900 40500 4 +N 44900 40500 44900 40000 4 +N 44900 40000 46200 40000 4 +N 44100 40900 45300 40900 4 +N 45300 40900 45300 40700 4 +N 45300 40700 46200 40700 4 +N 42700 40900 42100 40900 4 +N 42100 36100 42100 41900 4 +N 42100 36100 47100 36100 4 +N 42700 40500 42700 39300 4 +C 42800 39000 1 0 1 gnd-1.sym +{ +T 42800 39000 5 10 0 0 0 6 1 +net=GND:1 +} +C 47300 35200 1 90 0 capacitor-1.sym +{ +T 46600 35400 5 10 0 0 90 0 1 +device=CAPACITOR +T 47000 35400 5 10 1 1 90 0 1 +refdes=C9 +T 46400 35400 5 10 0 0 90 0 1 +symversion=0.1 +T 47300 35200 5 10 1 1 90 0 1 +value=100nF +T 47300 35200 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 47300 35200 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 47200 34900 1 0 1 gnd-1.sym +{ +T 47200 34900 5 10 0 0 0 6 1 +net=GND:1 +} +N 67200 33600 70000 33600 4 +N 32600 38300 33900 38300 4 +C 36500 46100 1 0 0 gnd-1.sym +{ +T 36500 46100 5 10 0 0 0 0 1 +net=GND:1 +} +C 36500 42300 1 0 0 gnd-1.sym +{ +T 36500 42300 5 10 0 0 0 0 1 +net=GND:1 +} +C 36500 38600 1 0 0 gnd-1.sym +{ +T 36500 38600 5 10 0 0 0 0 1 +net=GND:1 +} +C 38800 49100 1 90 0 capacitor-1.sym +{ +T 38100 49300 5 10 0 0 90 0 1 +device=CAPACITOR +T 38500 49800 5 10 1 1 180 0 1 +refdes=C3 +T 37900 49300 5 10 0 0 90 0 1 +symversion=0.1 +T 38600 49600 5 10 1 1 0 0 1 +value=100nF +T 38800 49100 5 10 0 1 0 0 1 +footprint=cap_0402 +} +C 38500 48800 1 0 0 gnd-1.sym +{ +T 38500 48800 5 10 0 0 0 0 1 +net=GND:1 +} +C 38800 50000 1 0 1 5V-plus-1.sym +{ +T 38800 50000 5 10 0 0 0 6 1 +net=5V:1 +} +N 38200 48800 38200 50000 4 +N 38600 50000 38200 50000 4 +N 38200 45000 38200 46200 4 +C 38800 45300 1 90 0 capacitor-1.sym +{ +T 38100 45500 5 10 0 0 90 0 1 +device=CAPACITOR +T 38500 46000 5 10 1 1 180 0 1 +refdes=C10 +T 37900 45500 5 10 0 0 90 0 1 +symversion=0.1 +T 38600 45800 5 10 1 1 0 0 1 +value=100nF +T 38800 45300 5 10 0 1 0 0 1 +footprint=cap_0402 +} +C 38800 46200 1 0 1 5V-plus-1.sym +{ +T 38800 46200 5 10 0 0 0 6 1 +net=5V:1 +} +N 38600 46200 38200 46200 4 +C 38500 45000 1 0 0 gnd-1.sym +{ +T 38500 45000 5 10 0 0 0 0 1 +net=GND:1 +} +N 38200 41300 38200 42500 4 +C 38800 41600 1 90 0 capacitor-1.sym +{ +T 38100 41800 5 10 0 0 90 0 1 +device=CAPACITOR +T 38500 42300 5 10 1 1 180 0 1 +refdes=C11 +T 37900 41800 5 10 0 0 90 0 1 +symversion=0.1 +T 38600 42100 5 10 1 1 0 0 1 +value=100nF +T 38800 41600 5 10 0 1 0 0 1 +footprint=cap_0402 +} +C 38800 42500 1 0 1 5V-plus-1.sym +{ +T 38800 42500 5 10 0 0 0 6 1 +net=5V:1 +} +N 38600 42500 38200 42500 4 +C 38500 41300 1 0 0 gnd-1.sym +{ +T 38500 41300 5 10 0 0 0 0 1 +net=GND:1 +} +C 66800 52800 1 90 0 resistor-1.sym +{ +T 66400 53100 5 10 0 0 90 0 1 +device=RESISTOR +T 66600 52900 5 10 1 1 90 0 1 +refdes=R3 +T 66600 53300 5 10 1 1 90 0 1 +value=1600 +T 66800 52800 5 10 0 0 90 0 1 +footprint=SMD_SIMPLE 80 50 +T 66800 52800 5 10 0 0 90 0 1 +description=Reduce current to 2mA +} +C 55600 35900 1 0 1 gnd-1.sym +{ +T 55600 35900 5 10 0 0 0 6 1 +net=GND:1 +} +C 64900 46000 1 0 1 gnd-1.sym +{ +T 64900 46000 5 10 0 0 0 6 1 +net=GND:1 +} +C 64900 47400 1 0 1 gnd-1.sym +{ +T 64900 47400 5 10 0 0 0 6 1 +net=GND:1 +} +C 56500 54800 1 0 1 gnd-1.sym +{ +T 56500 54800 5 10 0 0 0 6 1 +net=GND:1 +} +N 56400 55100 56200 55100 4 +N 56200 55100 56200 55000 4 +C 46300 47400 1 0 1 gnd-1.sym +{ +T 46300 47400 5 10 0 0 0 6 1 +net=GND:1 +} +C 46300 44600 1 0 1 gnd-1.sym +{ +T 46300 44600 5 10 0 0 0 6 1 +net=GND:1 +} +C 46300 46000 1 0 1 gnd-1.sym +{ +T 46300 46000 5 10 0 0 0 6 1 +net=GND:1 +} +C 46300 45300 1 0 1 gnd-1.sym +{ +T 46300 45300 5 10 0 0 0 6 1 +net=GND:1 +} +C 65600 35700 1 90 0 capacitor-1.sym +{ +T 64900 35900 5 10 0 0 90 0 1 +device=CAPACITOR +T 65300 35900 5 10 1 1 90 0 1 +refdes=C28 +T 64700 35900 5 10 0 0 90 0 1 +symversion=0.1 +T 65600 35700 5 10 1 1 90 0 1 +value=100nF +T 65600 35700 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 65600 35700 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 65200 36600 1 0 0 3.3V-plus-1.sym +{ +T 65200 36600 5 10 0 0 0 0 1 +net=3.3V:1 +} +C 65300 35400 1 0 0 gnd-1.sym +C 65800 54100 1 0 0 gnd-1.sym +C 66100 54400 1 90 0 capacitor-1.sym +{ +T 66100 54400 5 10 1 1 90 0 1 +value=100nF +T 65400 54600 5 10 0 0 90 0 1 +device=CAPACITOR +T 65800 54600 5 10 1 1 90 0 1 +refdes=C21 +T 65200 54600 5 10 0 0 90 0 1 +symversion=0.1 +T 66100 54400 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 66100 54400 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 65900 55300 64800 55300 4 +N 64800 55300 64800 54000 4 +C 45800 54300 1 0 0 gnd-1.sym +C 46100 54600 1 90 0 capacitor-1.sym +{ +T 46100 54600 5 10 1 1 90 0 1 +value=100nF +T 45400 54800 5 10 0 0 90 0 1 +device=CAPACITOR +T 45800 54800 5 10 1 1 90 0 1 +refdes=C17 +T 45200 54800 5 10 0 0 90 0 1 +symversion=0.1 +T 46100 54600 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 46100 54600 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 45900 55500 47100 55500 4 +C 54500 34300 1 0 0 gnd-1.sym +C 54800 34600 1 90 0 capacitor-1.sym +{ +T 54800 34600 5 10 1 1 90 0 1 +value=100nF +T 54100 34800 5 10 0 0 90 0 1 +device=CAPACITOR +T 54500 34800 5 10 1 1 90 0 1 +refdes=C23 +T 53900 34800 5 10 0 0 90 0 1 +symversion=0.1 +T 54800 34600 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 54800 34600 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 54800 35500 54800 50000 4 +N 54800 35500 54600 35500 4 +C 65100 46000 1 0 0 gnd-1.sym +C 65400 46300 1 90 0 capacitor-1.sym +{ +T 65400 46300 5 10 1 1 90 0 1 +value=100nF +T 64700 46500 5 10 0 0 90 0 1 +device=CAPACITOR +T 65100 46500 5 10 1 1 90 0 1 +refdes=C24 +T 64500 46500 5 10 0 0 90 0 1 +symversion=0.1 +T 65400 46300 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 65400 46300 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 64800 47200 66300 47200 4 +N 64800 47200 64800 47000 4 +C 55700 54800 1 0 0 gnd-1.sym +C 56000 55100 1 90 0 capacitor-1.sym +{ +T 56000 55100 5 10 1 1 90 0 1 +value=100nF +T 55300 55300 5 10 0 0 90 0 1 +device=CAPACITOR +T 55700 55300 5 10 1 1 90 0 1 +refdes=C19 +T 55100 55300 5 10 0 0 90 0 1 +symversion=0.1 +T 56000 55100 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 56000 55100 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 55100 56000 55800 56000 4 +N 55500 50000 55500 56000 4 +C 65800 45400 1 0 0 gnd-1.sym +C 66100 45700 1 90 0 capacitor-1.sym +{ +T 66100 45700 5 10 1 1 90 0 1 +value=1uF +T 65400 45900 5 10 0 0 90 0 1 +device=CAPACITOR +T 65800 45900 5 10 1 1 90 0 1 +refdes=C27 +T 65200 45900 5 10 0 0 90 0 1 +symversion=0.1 +T 66100 45700 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 66100 45700 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 65900 46600 65500 46600 4 +N 65500 46600 65500 45600 4 +N 65500 45600 64800 45600 4 +C 57100 54800 1 0 0 gnd-1.sym +C 57400 55100 1 90 0 capacitor-1.sym +{ +T 57400 55100 5 10 1 1 90 0 1 +value=1uF +T 56700 55300 5 10 0 0 90 0 1 +device=CAPACITOR +T 57100 55300 5 10 1 1 90 0 1 +refdes=C20 +T 56500 55300 5 10 0 0 90 0 1 +symversion=0.1 +T 57400 55100 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 57400 55100 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 57200 56000 56900 56000 4 +N 56900 38600 56900 56000 4 +C 66500 46300 1 90 0 capacitor-1.sym +{ +T 66500 46300 5 10 1 1 90 0 1 +value=1uF +T 65800 46500 5 10 0 0 90 0 1 +device=CAPACITOR +T 66200 46500 5 10 1 1 90 0 1 +refdes=C26 +T 65600 46500 5 10 0 0 90 0 1 +symversion=0.1 +T 66500 46300 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 66500 46300 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 66200 46000 1 0 0 gnd-1.sym +U 66300 35300 66300 30100 10 1 +U 64500 35300 60000 35300 10 1 +N 67200 31200 66500 31200 4 +{ +T 66500 31200 5 10 1 1 0 0 1 +netname=\_SD_CD\_ +} +C 66500 31200 1 90 0 busripper-1.sym +{ +T 66100 31200 5 8 0 0 90 0 1 +device=none +} +N 67200 34400 66500 34400 4 +{ +T 66900 34400 5 10 0 1 0 0 1 +netname=\_SD_CS\_ +} +C 66500 34400 1 90 0 busripper-1.sym +{ +T 66100 34400 5 8 0 0 90 0 1 +device=none +} +N 60400 36200 60400 35500 4 +{ +T 60300 35500 5 10 1 1 90 0 1 +netname=SD_MISO +} +C 60400 35500 1 270 0 busripper-1.sym +{ +T 60800 35500 5 8 0 0 270 0 1 +device=none +} +N 67200 34000 66500 34000 4 +{ +T 66900 34000 5 10 0 0 0 0 1 +netname=SD_MOSI +} +C 66500 34000 1 90 0 busripper-1.sym +{ +T 66100 34000 5 8 0 0 90 0 1 +device=none +} +N 61100 36200 61100 35500 4 +{ +T 61000 35400 5 10 1 1 90 0 1 +netname=SD_SCK +} +C 61100 35500 1 270 0 busripper-1.sym +{ +T 61500 35500 5 8 0 0 270 0 1 +device=none +} +N 67200 33200 66500 33200 4 +{ +T 66900 32800 5 10 0 1 0 0 1 +netname=SD_SCK +} +C 66500 33200 1 90 0 busripper-1.sym +{ +T 66100 33200 5 8 0 0 90 0 1 +device=none +} +N 61800 36200 61800 35500 4 +{ +T 61700 35500 5 10 1 1 90 0 1 +netname=SD_MOSI +} +C 61800 35500 1 270 0 busripper-1.sym +{ +T 62200 35500 5 8 0 0 270 0 1 +device=none +} +N 67200 32400 66500 32400 4 +{ +T 66900 32000 5 10 0 1 0 0 1 +netname=SD_MISO +} +C 66500 32400 1 90 0 busripper-1.sym +{ +T 66100 32400 5 8 0 0 90 0 1 +device=none +} +N 62500 36200 62500 35500 4 +{ +T 62400 35500 5 10 1 1 90 0 1 +netname=\_SD_CS\_ +} +C 62500 35500 1 270 0 busripper-1.sym +{ +T 62900 35500 5 8 0 0 270 0 1 +device=none +} +U 45100 41200 45100 56200 10 1 +U 45100 56200 66300 56200 10 -1 +U 66300 56200 66300 52400 10 1 +N 64800 52600 66100 52600 4 +{ +T 64800 52600 5 10 1 1 0 0 1 +netname=I/O +} +C 66100 52600 1 0 0 busripper-1.sym +{ +T 66100 53000 5 8 0 0 0 0 1 +device=none +} +N 64800 53300 66100 53300 4 +{ +T 64800 53300 5 10 1 1 0 0 1 +netname=REQ +} +C 66100 53300 1 0 0 busripper-1.sym +{ +T 66100 53700 5 8 0 0 0 0 1 +device=none +} +N 63900 55000 63900 56000 4 +{ +T 63900 55000 5 10 1 1 0 0 1 +netname=\_I/O\_ +} +C 63900 56000 1 90 0 busripper-1.sym +{ +T 63500 56000 5 8 0 0 90 0 1 +device=none +} +N 63200 55000 63200 56000 4 +{ +T 63200 55000 5 10 1 1 0 0 1 +netname=\_REQ\_ +} +C 63200 56000 1 90 0 busripper-1.sym +{ +T 62800 56000 5 8 0 0 90 0 1 +device=none +} +N 62500 55000 62500 56000 4 +{ +T 62500 55000 5 10 1 1 0 0 1 +netname=C/D +} +C 62500 56000 1 90 0 busripper-1.sym +{ +T 62100 56000 5 8 0 0 90 0 1 +device=none +} +N 61800 55000 61800 56000 4 +{ +T 61800 55000 5 10 1 1 0 0 1 +netname=SEL +} +C 61800 56000 1 90 0 busripper-1.sym +{ +T 61400 56000 5 8 0 0 90 0 1 +device=none +} +N 61100 55000 61100 56000 4 +{ +T 61100 55000 5 10 1 1 0 0 1 +netname=\_C/D\_ +} +C 61100 56000 1 90 0 busripper-1.sym +{ +T 60700 56000 5 8 0 0 90 0 1 +device=none +} +N 60400 55000 60400 56000 4 +{ +T 60400 55000 5 10 1 1 0 0 1 +netname=\_SEL\_ +} +C 60400 56000 1 90 0 busripper-1.sym +{ +T 60000 56000 5 8 0 0 90 0 1 +device=none +} +N 59700 55000 59700 56000 4 +{ +T 59700 55000 5 10 1 1 0 0 1 +netname=MSG +} +C 59700 56000 1 90 0 busripper-1.sym +{ +T 59300 56000 5 8 0 0 90 0 1 +device=none +} +N 59000 55000 59000 56000 4 +{ +T 59000 55000 5 10 1 1 0 0 1 +netname=RST +} +C 59000 56000 1 90 0 busripper-1.sym +{ +T 58600 56000 5 8 0 0 90 0 1 +device=none +} +N 58300 55000 58300 56000 4 +{ +T 58300 55000 5 10 1 1 0 0 1 +netname=\_MSG\_ +} +C 58300 56000 1 90 0 busripper-1.sym +{ +T 57900 56000 5 8 0 0 90 0 1 +device=none +} +N 57600 55000 57600 56000 4 +{ +T 57600 55000 5 10 1 1 0 0 1 +netname=\_RST\_ +} +C 57600 56000 1 90 0 busripper-1.sym +{ +T 57200 56000 5 8 0 0 90 0 1 +device=none +} +N 54800 55000 54800 56000 4 +{ +T 54800 55000 5 10 1 1 0 0 1 +netname=ACK +} +C 54800 56000 1 90 0 busripper-1.sym +{ +T 54400 56000 5 8 0 0 90 0 1 +device=none +} +N 54100 55000 54100 56000 4 +{ +T 54100 55000 5 10 1 1 0 0 1 +netname=BSY +} +C 54100 56000 1 90 0 busripper-1.sym +{ +T 53700 56000 5 8 0 0 90 0 1 +device=none +} +N 53400 55000 53400 56000 4 +{ +T 53400 55000 5 10 1 1 0 0 1 +netname=\_ACK\_ +} +C 53400 56000 1 90 0 busripper-1.sym +{ +T 53000 56000 5 8 0 0 90 0 1 +device=none +} +N 52700 55000 52700 56000 4 +{ +T 52700 55000 5 10 1 1 0 0 1 +netname=\_BSY\_ +} +C 52700 56000 1 90 0 busripper-1.sym +{ +T 52300 56000 5 8 0 0 90 0 1 +device=none +} +N 50600 55000 50600 56000 4 +{ +T 50600 55000 5 10 1 1 0 0 1 +netname=\_ATN\_ +} +C 50600 56000 1 90 0 busripper-1.sym +{ +T 50200 56000 5 8 0 0 90 0 1 +device=none +} +N 49900 55000 49900 56000 4 +{ +T 49900 55000 5 10 1 1 0 0 1 +netname=\_DBP\_ +} +C 49900 56000 1 90 0 busripper-1.sym +{ +T 49500 56000 5 8 0 0 90 0 1 +device=none +} +N 49200 55000 49200 56000 4 +{ +T 49200 55000 5 10 1 1 0 0 1 +netname=DB7 +} +C 49200 56000 1 90 0 busripper-1.sym +{ +T 48800 56000 5 8 0 0 90 0 1 +device=none +} +N 48500 55000 48500 56000 4 +{ +T 48500 55000 5 10 1 1 0 0 1 +netname=DB6 +} +C 48500 56000 1 90 0 busripper-1.sym +{ +T 48100 56000 5 8 0 0 90 0 1 +device=none +} +N 47800 55000 47800 56000 4 +{ +T 47800 55000 5 10 1 1 0 0 1 +netname=\_DB7\_ +} +C 47800 56000 1 90 0 busripper-1.sym +{ +T 47400 56000 5 8 0 0 90 0 1 +device=none +} +N 46200 54000 45300 54000 4 +{ +T 45700 54000 5 10 1 1 0 0 1 +netname=\_DB6\_ +} +C 45300 54000 1 90 0 busripper-1.sym +{ +T 44900 54000 5 8 0 0 90 0 1 +device=none +} +N 46200 53300 45300 53300 4 +{ +T 45700 53300 5 10 1 1 0 0 1 +netname=DB5 +} +C 45300 53300 1 90 0 busripper-1.sym +{ +T 44900 53300 5 8 0 0 90 0 1 +device=none +} +N 45100 52600 45100 52700 4 +N 46200 52600 45300 52600 4 +{ +T 45700 52600 5 10 1 1 0 0 1 +netname=DB4 +} +C 45300 52600 1 90 0 busripper-1.sym +{ +T 44900 52600 5 8 0 0 90 0 1 +device=none +} +N 46200 51900 45300 51900 4 +{ +T 45700 51900 5 10 1 1 0 0 1 +netname=\_DB5\_ +} +C 45300 51900 1 90 0 busripper-1.sym +{ +T 44900 51900 5 8 0 0 90 0 1 +device=none +} +N 46200 51200 45300 51200 4 +{ +T 45700 51200 5 10 1 1 0 0 1 +netname=\_DB4\_ +} +C 45300 51200 1 90 0 busripper-1.sym +{ +T 44900 51200 5 8 0 0 90 0 1 +device=none +} +N 46200 50500 45300 50500 4 +{ +T 45700 50500 5 10 1 1 0 0 1 +netname=DB3 +} +C 45300 50500 1 90 0 busripper-1.sym +{ +T 44900 50500 5 8 0 0 90 0 1 +device=none +} +N 46200 49800 45300 49800 4 +{ +T 45700 49800 5 10 1 1 0 0 1 +netname=DB2 +} +C 45300 49800 1 90 0 busripper-1.sym +{ +T 44900 49800 5 8 0 0 90 0 1 +device=none +} +N 46200 49100 45300 49100 4 +{ +T 45700 49100 5 10 1 1 0 0 1 +netname=\_DB3\_ +} +C 45300 49100 1 90 0 busripper-1.sym +{ +T 44900 49100 5 8 0 0 90 0 1 +device=none +} +N 46200 48400 45300 48400 4 +{ +T 45700 48400 5 10 1 1 0 0 1 +netname=\_DB2\_ +} +C 45300 48400 1 90 0 busripper-1.sym +{ +T 44900 48400 5 8 0 0 90 0 1 +device=none +} +N 46200 43500 45300 43500 4 +{ +T 45800 43500 5 10 1 1 0 0 1 +netname=DB1 +} +C 45300 43500 1 90 0 busripper-1.sym +{ +T 44900 43500 5 8 0 0 90 0 1 +device=none +} +N 46200 42800 45300 42800 4 +{ +T 45800 42800 5 10 1 1 0 0 1 +netname=DB0 +} +C 45300 42800 1 90 0 busripper-1.sym +{ +T 44900 42800 5 8 0 0 90 0 1 +device=none +} +N 46200 42100 45300 42100 4 +{ +T 45800 42100 5 10 1 1 0 0 1 +netname=\_DB1\_ +} +C 45300 42100 1 90 0 busripper-1.sym +{ +T 44900 42100 5 8 0 0 90 0 1 +device=none +} +C 45300 41400 1 90 0 busripper-1.sym +{ +T 44900 41400 5 8 0 0 90 0 1 +device=none +} +N 45300 41400 46200 41400 4 +{ +T 45800 41400 5 10 1 1 0 0 1 +netname=\_DB0\_ +} +N 47100 36200 47100 36100 4 +U 64500 35300 66300 35300 10 0 +N 63200 36200 63200 35500 4 +{ +T 63200 35500 5 10 1 1 90 0 1 +netname=\_SD_CD\_ +} +N 47100 55500 47100 55000 4 +N 56900 38600 56200 38600 4 +N 56200 36200 56200 38600 4 +N 55800 56500 55800 56000 4 +N 64800 36600 65400 36600 4 +N 63900 36200 64800 36200 4 +N 64800 36200 64800 36600 4 +C 46200 47100 1 180 0 nc-right-1.sym +{ +T 46100 46600 5 10 0 0 180 0 1 +value=NoConnection +T 46100 46400 5 10 0 0 180 0 1 +device=DRC_Directive +} +C 58200 36200 1 270 0 nc-right-1.sym +{ +T 58700 36100 5 10 0 0 270 0 1 +value=NoConnection +T 58900 36100 5 10 0 0 270 0 1 +device=DRC_Directive +} +C 46100 36100 1 0 0 CY8C53.sym +{ +T 64500 54800 5 10 1 1 0 6 1 +refdes=U1 +T 55300 45800 5 10 0 0 0 0 1 +device=CY8C53 +T 55300 46000 5 10 0 0 0 0 1 +footprint=TQFP100_14_reflow +} +C 46100 55500 1 0 1 5V-plus-1.sym +{ +T 46100 55500 5 10 0 0 0 6 1 +net=5V:1 +} +C 56000 56500 1 0 1 5V-plus-1.sym +{ +T 56000 56500 5 10 0 0 0 6 1 +net=5V:1 +} +C 66100 55300 1 0 1 5V-plus-1.sym +{ +T 66100 55300 5 10 0 0 0 6 1 +net=5V:1 +} +C 65400 47200 1 0 1 5V-plus-1.sym +{ +T 65400 47200 5 10 0 0 0 6 1 +net=5V:1 +} +C 46200 36100 1 0 1 5V-plus-1.sym +{ +T 46200 36100 5 10 0 0 0 6 1 +net=5V:1 +} +C 54800 35500 1 0 1 5V-plus-1.sym +{ +T 54800 35500 5 10 0 0 0 6 1 +net=5V:1 +} +C 55300 55100 1 90 0 capacitor-1.sym +{ +T 55300 55100 5 10 1 1 90 0 1 +value=1uF +T 54600 55300 5 10 0 0 90 0 1 +device=CAPACITOR +T 55000 55300 5 10 1 1 90 0 1 +refdes=C8 +T 54400 55300 5 10 0 0 90 0 1 +symversion=0.1 +T 55300 55100 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 55300 55100 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 55000 54800 1 0 0 gnd-1.sym +C 31700 36200 1 0 0 gnd-1.sym +{ +T 31700 36200 5 10 0 0 0 0 1 +net=GND:1 +} +C 30800 37400 1 90 0 capacitor-1.sym +{ +T 30100 37600 5 10 0 0 90 0 1 +device=CAPACITOR +T 30500 37600 5 10 1 1 90 0 1 +refdes=C5 +T 29900 37600 5 10 0 0 90 0 1 +symversion=0.1 +T 30800 37400 5 10 1 1 90 0 1 +value=10uF +T 30800 37400 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 30800 37400 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 30500 37100 1 0 0 gnd-1.sym +{ +T 30500 37100 5 10 0 0 0 0 1 +net=GND:1 +} +C 66900 53700 1 0 1 5V-plus-1.sym +{ +T 66900 53700 5 10 0 0 0 6 1 +net=5V:1 +} +C 68700 29400 1 0 0 3.3V-plus-1.sym +{ +T 68700 29400 5 10 0 0 0 0 1 +net=3.3V:1 +} +C 68800 28200 1 0 0 gnd-1.sym +C 67600 28400 1 0 0 gnd-1.sym +C 69100 28500 1 90 0 capacitor-1.sym +{ +T 68400 28700 5 10 0 0 90 0 1 +device=CAPACITOR +T 68600 28700 5 10 1 1 90 0 1 +refdes=C14 +T 68200 28700 5 10 0 0 90 0 1 +symversion=0.1 +T 69100 28500 5 10 1 1 90 0 1 +value=47uF +T 69100 28500 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 69100 28500 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +} +N 68500 29400 68900 29400 4 +C 66600 28500 1 90 0 capacitor-1.sym +{ +T 65900 28700 5 10 0 0 90 0 1 +device=CAPACITOR +T 66300 28600 5 10 1 1 90 0 1 +refdes=C12 +T 65700 28700 5 10 0 0 90 0 1 +symversion=0.1 +T 66600 28500 5 10 1 1 90 0 1 +value=10uF +T 66600 28500 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 66600 28500 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 66300 28200 1 0 0 gnd-1.sym +N 66900 29400 66400 29400 4 +C 66600 29400 1 0 1 5V-plus-1.sym +{ +T 66600 29400 5 10 0 0 0 6 1 +net=5V:1 +} +C 30900 37500 1 0 0 LD1117.sym +{ +T 32300 38800 5 10 1 1 0 6 1 +refdes=U2 +T 31300 39000 5 10 0 0 0 0 1 +device=LD1117 +T 31300 39200 5 10 0 0 0 0 1 +footprint=DPAK +T 30900 37500 5 10 0 0 0 0 2 +documentation=LD1117DTTR +Digikey part 497-1239-1-ND +} +C 66800 28600 1 0 0 LD1117.sym +{ +T 68200 29900 5 10 1 1 0 6 1 +refdes=U6 +T 67200 30100 5 10 0 0 0 0 1 +device=LD1117 +T 67200 30300 5 10 0 0 0 0 1 +footprint=DPAK +} +C 33600 37400 1 90 0 capacitor-1.sym +{ +T 32900 37600 5 10 0 0 90 0 1 +device=CAPACITOR +T 33300 37600 5 10 1 1 90 0 1 +refdes=C7 +T 32700 37600 5 10 0 0 90 0 1 +symversion=0.1 +T 33600 37400 5 10 1 1 90 0 1 +value=47uF +T 33600 37400 5 10 0 2 90 0 1 +description=Ceramic decoupling cap +T 33600 37400 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +} +C 33300 37100 1 0 0 gnd-1.sym +{ +T 33300 37100 5 10 0 0 0 0 1 +net=GND:1 +} +C 64800 39900 1 0 0 nc-right-1.sym +{ +T 64900 40400 5 10 0 0 0 0 1 +value=NoConnection +T 64900 40600 5 10 0 0 0 0 1 +device=DRC_Directive +} +C 58900 35900 1 0 0 gnd-1.sym +C 65100 40600 1 90 0 gnd-1.sym +C 56800 35900 1 0 0 gnd-1.sym +C 57500 35900 1 0 0 gnd-1.sym +C 65100 41300 1 90 0 gnd-1.sym +C 65100 42000 1 90 0 gnd-1.sym +C 65100 42700 1 90 0 gnd-1.sym +C 65100 43400 1 90 0 gnd-1.sym +C 65100 44100 1 90 0 gnd-1.sym +C 65100 44800 1 90 0 gnd-1.sym +N 54800 50000 55500 50000 4 +C 50400 33800 1 0 0 fuse-1.sym +{ +T 50600 34200 5 10 0 0 0 0 1 +device=FUSE +T 50600 34000 5 10 1 1 0 0 1 +refdes=F2 +T 50600 34400 5 10 0 0 0 0 1 +symversion=0.1 +T 50400 33800 5 10 0 2 0 0 1 +documentation=PTC Fuse. +T 50600 33500 5 10 1 1 0 0 1 +value=500mA Hold +T 50400 33800 5 10 0 0 0 0 1 +device=Bourns MF-NSMF050-2 +T 50400 33800 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +} +C 51600 33600 1 0 0 schottky-1.sym +{ +T 51922 34272 5 10 0 0 0 0 1 +device=DIODE +T 51900 34100 5 10 1 1 0 0 1 +refdes=D3 +T 51941 34432 5 10 0 1 0 0 1 +footprint=diode-DO-214AA-SMB +T 51600 33600 5 10 0 0 0 0 1 +description=Schottky diode +} +C 52800 33900 1 0 1 5V-plus-1.sym +{ +T 52800 33900 5 10 0 0 0 6 1 +net=5V:1 +} +N 52500 33800 52600 33800 4 +N 52600 33800 52600 33900 4 +N 53400 36200 53400 34600 4 +N 54100 36200 54100 34600 4 +C 49100 32500 1 0 0 usbmini.sym +{ +T 49800 34100 5 10 1 1 0 0 1 +refdes=J5 +T 49200 34100 5 10 1 1 0 0 1 +device=USB +T 49500 45150 5 10 0 0 0 0 1 +footprint=fci-10118192-0001LF +} +N 53400 33200 50400 33200 4 +N 54100 33500 50400 33500 4 +C 50400 32800 1 0 0 nc-right-1.sym +{ +T 50500 33300 5 10 0 0 0 0 1 +value=NoConnection +T 50500 33500 5 10 0 0 0 0 1 +device=DRC_Directive +} +C 50500 32300 1 0 1 gnd-1.sym +{ +T 50500 32300 5 10 0 0 0 6 1 +net=GND:1 +} +C 53500 33700 1 90 0 resistor-1.sym +{ +T 53100 34000 5 10 0 0 90 0 1 +device=RESISTOR +T 53200 33900 5 10 1 1 90 0 1 +refdes=R4 +T 53500 33700 5 10 0 0 90 0 1 +footprint=SMD_SIMPLE 80 50 +T 53700 33900 5 10 1 1 90 0 1 +value=22Ω +T 53500 33700 5 10 0 0 0 0 1 +description=1% precision required. +} +C 54200 33700 1 90 0 resistor-1.sym +{ +T 53800 34000 5 10 0 0 90 0 1 +device=RESISTOR +T 53900 33900 5 10 1 1 90 0 1 +refdes=R5 +T 54200 33700 5 10 0 0 90 0 1 +footprint=SMD_SIMPLE 80 50 +T 54400 33900 5 10 1 1 90 0 1 +value=22Ω +T 54200 33700 5 10 0 0 0 0 1 +documentation=1% precision required. +} +N 53400 33700 53400 33200 4 +N 54100 33700 54100 33500 4 +N 51600 33800 51300 33800 4 +N 33700 38300 33700 35100 4 +N 32700 35100 33900 35100 4 +N 35800 37500 35000 37500 4 +{ +T 35000 37500 5 10 1 1 0 0 1 +netname=\_DB7\_ +} +C 35800 35700 1 270 0 busripper-1.sym +{ +T 36200 35700 5 8 0 0 270 0 1 +device=none +} +N 35800 35400 35000 35400 4 +{ +T 35000 35400 5 10 1 1 0 0 1 +netname=\_DB0\_ +} +C 35800 37800 1 270 0 busripper-1.sym +{ +T 36200 37800 5 8 0 0 270 0 1 +device=none +} +N 35000 35700 35800 35700 4 +{ +T 35000 35700 5 10 1 1 0 0 1 +netname=\_DB1\_ +} +C 35800 37500 1 270 0 busripper-1.sym +{ +T 36200 37500 5 8 0 0 270 0 1 +device=none +} +N 35000 36000 35800 36000 4 +{ +T 35000 36000 5 10 1 1 0 0 1 +netname=\_DB2\_ +} +C 35800 37200 1 270 0 busripper-1.sym +{ +T 36200 37200 5 8 0 0 270 0 1 +device=none +} +N 35000 36300 35800 36300 4 +{ +T 35000 36300 5 10 1 1 0 0 1 +netname=\_DB3\_ +} +C 35800 36900 1 270 0 busripper-1.sym +{ +T 36200 36900 5 8 0 0 270 0 1 +device=none +} +N 35000 36600 35800 36600 4 +{ +T 35000 36600 5 10 1 1 0 0 1 +netname=\_DB4\_ +} +C 35800 36600 1 270 0 busripper-1.sym +{ +T 36200 36600 5 8 0 0 270 0 1 +device=none +} +N 35000 36900 35800 36900 4 +{ +T 35000 36900 5 10 1 1 0 0 1 +netname=\_DB5\_ +} +C 35800 36300 1 270 0 busripper-1.sym +{ +T 36200 36300 5 8 0 0 270 0 1 +device=none +} +N 35000 37200 35800 37200 4 +{ +T 35000 37200 5 10 1 1 0 0 1 +netname=\_DB6\_ +} +C 35800 36000 1 270 0 busripper-1.sym +{ +T 36200 36000 5 8 0 0 270 0 1 +device=none +} +N 35000 32200 35800 32200 4 +{ +T 35000 32200 5 10 1 1 0 0 1 +netname=\_ATN\_ +} +C 35800 34600 1 270 0 busripper-1.sym +{ +T 36200 34600 5 8 0 0 270 0 1 +device=none +} +N 35000 32500 35800 32500 4 +{ +T 35000 32500 5 10 1 1 0 0 1 +netname=\_BSY\_ +} +C 35800 34300 1 270 0 busripper-1.sym +{ +T 36200 34300 5 8 0 0 270 0 1 +device=none +} +N 35000 32800 35800 32800 4 +{ +T 35000 32800 5 10 1 1 0 0 1 +netname=\_ACK\_ +} +C 35800 34000 1 270 0 busripper-1.sym +{ +T 36200 34000 5 8 0 0 270 0 1 +device=none +} +N 35000 33100 35800 33100 4 +{ +T 35000 33100 5 10 1 1 0 0 1 +netname=\_RST\_ +} +C 35800 33700 1 270 0 busripper-1.sym +{ +T 36200 33700 5 8 0 0 270 0 1 +device=none +} +N 35000 33400 35800 33400 4 +{ +T 35000 33400 5 10 1 1 0 0 1 +netname=\_MSG\_ +} +C 35800 33400 1 270 0 busripper-1.sym +{ +T 36200 33400 5 8 0 0 270 0 1 +device=none +} +N 35000 33700 35800 33700 4 +{ +T 35000 33700 5 10 1 1 0 0 1 +netname=\_SEL\_ +} +C 35800 33100 1 270 0 busripper-1.sym +{ +T 36200 33100 5 8 0 0 270 0 1 +device=none +} +N 35000 34000 35800 34000 4 +{ +T 35000 34000 5 10 1 1 0 0 1 +netname=\_C/D\_ +} +C 35800 32800 1 270 0 busripper-1.sym +{ +T 36200 32800 5 8 0 0 270 0 1 +device=none +} +N 35000 34300 35800 34300 4 +{ +T 35000 34300 5 10 1 1 0 0 1 +netname=\_REQ\_ +} +C 35800 32500 1 270 0 busripper-1.sym +{ +T 36200 32500 5 8 0 0 270 0 1 +device=none +} +C 35000 35300 1 90 0 resistorpack10-1.sym +{ +T 33800 35400 5 10 0 0 90 0 1 +device=RESISTORPACK_10 +T 33800 35400 5 10 1 1 90 0 1 +refdes=R1 +T 35000 35300 5 10 0 0 0 0 1 +footprint=SIP10 +} +C 35000 32100 1 90 0 resistorpack10-1.sym +{ +T 33800 32200 5 10 0 0 90 0 1 +device=RESISTORPACK_10 +T 33800 32200 5 10 1 1 90 0 1 +refdes=R2 +T 35000 32100 5 10 0 0 0 0 1 +footprint=SIP10 +} +N 35000 37800 35800 37800 4 +{ +T 35000 37800 5 10 1 1 0 0 1 +netname=\_DBP\_ +} +C 35800 35400 1 270 0 busripper-1.sym +{ +T 36200 35400 5 8 0 0 270 0 1 +device=none +} +N 35000 34600 35800 34600 4 +{ +T 35000 34600 5 10 1 1 0 0 1 +netname=\_I/O\_ +} +C 35800 32200 1 270 0 busripper-1.sym +{ +T 36200 32200 5 8 0 0 270 0 1 +device=none +} +C 66800 32500 1 0 0 gnd-1.sym +C 67100 31300 1 0 0 gnd-1.sym +N 66900 32800 67200 32800 4 +C 67100 30700 1 0 0 wurth-microsd.sym +{ +T 68500 35300 5 10 1 1 0 6 1 +refdes=J6 +T 67500 35500 5 10 0 0 0 0 1 +device=wurth-693071010811 +T 67500 35700 5 10 0 0 0 0 1 +footprint=wurth-microsd +} +N 44100 39700 44400 39700 4 +N 44400 37900 44400 42700 4 +N 44400 37900 46200 37900 4 +U 34000 49400 34000 50000 10 0 +U 34000 50000 29500 50000 10 0 +N 51300 55000 51300 56000 4 +{ +T 51300 55000 5 10 1 1 0 0 1 +netname=DBP +} +C 51300 56000 1 90 0 busripper-1.sym +{ +T 50900 56000 5 8 0 0 90 0 1 +device=none +} +N 52000 55000 52000 56000 4 +{ +T 52000 55000 5 10 1 1 0 0 1 +netname=ATN +} +C 52000 56000 1 90 0 busripper-1.sym +{ +T 51600 56000 5 8 0 0 90 0 1 +device=none +} +C 63200 35500 1 270 0 busripper-1.sym +{ +T 63600 35500 5 8 0 0 270 0 1 +device=none +} +C 67200 34900 1 180 0 nc-right-1.sym +{ +T 67100 34400 5 10 0 0 180 0 1 +value=NoConnection +T 67100 34200 5 10 0 0 180 0 1 +device=DRC_Directive +} +C 67200 32100 1 180 0 nc-right-1.sym +{ +T 67100 31600 5 10 0 0 180 0 1 +value=NoConnection +T 67100 31400 5 10 0 0 180 0 1 +device=DRC_Directive +} +N 44200 37200 46200 37200 4 +C 44100 45700 1 180 0 header20-2.sym +{ +T 43850 45950 5 10 0 1 180 0 1 +device=HEADER20 +T 43500 41600 5 10 1 1 180 0 1 +refdes=J9 +T 44100 45700 5 10 0 0 0 0 1 +footprint=ARMJTAG +} +N 42100 41900 42700 41900 4 +N 44100 41900 44100 41600 4 +N 44100 41600 42700 41600 4 +N 42700 41600 42700 41900 4 +N 42700 45500 42700 42300 4 +N 44200 37200 44200 42300 4 +N 44200 42300 44100 42300 4 +N 44400 42700 44100 42700 4 +N 44500 40900 44500 43100 4 +N 44500 43100 44100 43100 4 +N 44600 40500 44600 43500 4 +N 44600 43500 44100 43500 4 +N 44700 44300 44100 44300 4 +T 42700 45700 9 10 1 0 0 0 2 +ARM 20-pin JTAG + +T 42500 38500 9 10 1 0 0 0 2 +ARM Cortex JTAG + +N 44100 44700 45600 44700 2 +N 45600 44700 45600 44100 2 +C 44200 43600 1 0 1 gnd-1.sym +{ +T 44200 43600 5 10 0 0 0 6 1 +net=GND:1 +} +C 44100 45400 1 0 0 nc-right-1.sym +{ +T 44200 45900 5 10 0 0 0 0 1 +value=NoConnection +T 44200 46100 5 10 0 0 0 0 1 +device=DRC_Directive +} +C 44100 45000 1 0 0 nc-right-1.sym +{ +T 44200 45500 5 10 0 0 0 0 1 +value=NoConnection +T 44200 45700 5 10 0 0 0 0 1 +device=DRC_Directive +} +C 42800 42000 1 0 1 gnd-1.sym +{ +T 42800 42000 5 10 0 0 0 6 1 +net=GND:1 +} +C 59600 35900 1 0 0 gnd-1.sym +C 31800 54600 1 180 0 MOLEX8981.sym +{ +T 31400 52200 5 10 0 0 180 0 1 +device=MOLEX8981 +T 31400 52000 5 10 0 0 180 0 1 +footprint=MOLEX8981 +T 30600 53900 5 10 1 1 180 6 1 +refdes=J1 +} +C 32200 53000 1 0 0 gnd-1.sym +{ +T 32200 53000 5 10 0 0 0 0 1 +net=GND:1 +} +N 31700 53300 32300 53300 4 +N 32300 53300 32300 53700 4 +N 31700 53700 32300 53700 4 +C 32200 52800 1 0 1 nc-left-1.sym +{ +T 32200 53200 5 10 0 0 0 6 1 +value=NoConnection +T 32200 53600 5 10 0 0 0 6 1 +device=DRC_Directive +} +C 35300 54400 1 0 0 5V-plus-1.sym +{ +T 35300 54400 5 10 0 0 0 0 1 +net=5V:1 +} +C 35700 53200 1 90 0 capacitor-1.sym +{ +T 35000 53400 5 10 0 0 90 0 1 +device=CAPACITOR +T 34800 53400 5 10 0 0 90 0 1 +symversion=0.1 +T 35700 53200 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 35700 53200 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +T 35400 53400 5 10 1 1 90 0 1 +refdes=C2 +T 35700 53200 5 10 1 1 90 0 1 +value=10uF +} +N 35500 54100 35500 54400 4 +C 35400 52900 1 0 0 gnd-1.sym +{ +T 35400 52900 5 10 0 0 0 0 1 +net=GND:1 +} +C 36400 53200 1 90 0 capacitor-1.sym +{ +T 35700 53400 5 10 0 0 90 0 1 +device=CAPACITOR +T 35500 53400 5 10 0 0 90 0 1 +symversion=0.1 +T 36400 53200 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 36400 53200 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +T 36100 53400 5 10 1 1 90 0 1 +refdes=C4 +T 36400 53200 5 10 1 1 90 0 1 +value=47uF +} +C 36100 52900 1 0 0 gnd-1.sym +{ +T 36100 52900 5 10 0 0 0 0 1 +net=GND:1 +} +N 35000 54100 36200 54100 4 +C 33600 54500 1 0 0 generic-power.sym +{ +T 33800 54750 5 10 1 1 0 3 1 +net=drive_5V:1 +} +C 34100 53900 1 0 0 schottky-1.sym +{ +T 34422 54572 5 10 0 0 0 0 1 +device=DIODE +T 34441 54732 5 10 0 1 0 0 1 +footprint=diode-DO-214AA-SMB +T 34100 53900 5 10 0 0 0 0 1 +description=Schottky diode +T 34400 54400 5 10 1 1 0 0 1 +refdes=D2 +} +C 32500 54100 1 0 0 fuse-1.sym +{ +T 32700 54500 5 10 0 0 0 0 1 +device=FUSE +T 32700 54700 5 10 0 0 0 0 1 +symversion=0.1 +T 32500 54100 5 10 0 2 0 0 1 +documentation=PTC Fuse. +T 32500 54100 5 10 0 0 0 0 1 +device=Bourns MF-NSMF200-2 +T 32500 54100 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +T 32700 54300 5 10 1 1 0 0 1 +refdes=F1 +T 32700 53800 5 10 1 1 0 0 1 +value=1.5A Hold +} +N 31700 54100 32500 54100 4 +N 33400 54100 34100 54100 4 +N 33800 54500 33800 54100 4 +C 25800 39500 1 0 0 header50-1.sym +{ +T 26050 50200 5 10 0 0 0 0 1 +device=HEADER50 +T 25800 39500 5 10 0 0 0 0 1 +footprint=HEADER50_2_RA +T 26400 49600 1 10 1 1 0 0 1 +refdes=J2 +} +C 25200 43800 1 0 0 gnd-1.sym +{ +T 25200 43800 5 10 0 0 0 0 1 +net=GND:1 +} +N 25800 44900 25800 49300 1 +N 25800 39700 25800 44100 1 +N 25800 44900 25300 44900 1 +N 25300 44900 25300 44100 1 +N 25300 44100 25800 44100 1 +C 27800 44600 1 0 0 gnd-1.sym +{ +T 27800 44600 5 10 0 0 0 0 1 +net=GND:1 +} +N 27200 44900 27900 44900 1 +N 27900 44900 27900 45700 1 +N 27900 45300 27200 45300 1 +N 27200 45700 27900 45700 1 +C 27400 43600 1 0 0 gnd-1.sym +{ +T 27400 43600 5 10 0 0 0 0 1 +net=GND:1 +} +N 27200 43900 27500 43900 1 +N 27200 43700 27200 44100 1 +C 27200 42600 1 0 0 gnd-1.sym +{ +T 27200 42600 5 10 0 0 0 0 1 +net=GND:1 +} +N 27200 42900 27300 42900 1 +N 27200 49300 29300 49300 4 +{ +T 27200 49300 5 10 1 1 0 0 1 +netname=\_DB0\_ +} +C 25300 44400 1 0 0 nc-left-1.sym +{ +T 25300 44800 5 10 0 0 0 0 1 +value=NoConnection +T 25300 45200 5 10 0 0 0 0 1 +device=DRC_Directive +} +N 27200 48500 29300 48500 4 +{ +T 27200 48500 5 10 1 1 0 0 1 +netname=\_DB2\_ +} +N 27200 48100 29300 48100 4 +{ +T 27200 48100 5 10 1 1 0 0 1 +netname=\_DB3\_ +} +N 27200 47700 29300 47700 4 +{ +T 27200 47700 5 10 1 1 0 0 1 +netname=\_DB4\_ +} +N 27200 47300 29300 47300 4 +{ +T 27200 47300 5 10 1 1 0 0 1 +netname=\_DB5\_ +} +N 27200 46900 29300 46900 4 +{ +T 27200 46900 5 10 1 1 0 0 1 +netname=\_DB6\_ +} +N 27200 46500 29300 46500 4 +{ +T 27200 46500 5 10 1 1 0 0 1 +netname=\_DB7\_ +} +N 27200 46100 29300 46100 4 +{ +T 27200 46100 5 10 1 1 0 0 1 +netname=\_DBP\_ +} +N 27200 42500 29300 42500 4 +{ +T 27200 42500 5 10 1 1 0 0 1 +netname=\_BSY\_ +} +N 27200 42100 29300 42100 4 +{ +T 27200 42100 5 10 1 1 0 0 1 +netname=\_ACK\_ +} +N 27200 41700 29300 41700 4 +{ +T 27200 41700 5 10 1 1 0 0 1 +netname=\_RST\_ +} +N 27200 41300 29300 41300 4 +{ +T 27200 41300 5 10 1 1 0 0 1 +netname=\_MSG\_ +} +N 27200 40900 29300 40900 4 +{ +T 27200 40900 5 10 1 1 0 0 1 +netname=\_SEL\_ +} +N 27200 40500 29300 40500 4 +{ +T 27200 40500 5 10 1 1 0 0 1 +netname=\_C/D\_ +} +N 27200 40100 29300 40100 4 +{ +T 27200 40100 5 10 1 1 0 0 1 +netname=\_REQ\_ +} +N 27200 39700 29300 39700 4 +{ +T 27200 39700 5 10 1 1 0 0 1 +netname=\_I/O\_ +} +N 27200 43300 29300 43300 4 +{ +T 27200 43300 5 10 1 1 0 0 1 +netname=\_ATN\_ +} +U 29500 50000 29500 39400 10 1 +C 29300 49300 1 0 0 busripper-1.sym +{ +T 29300 49700 5 8 0 0 0 0 1 +device=none +} +C 29300 48500 1 270 0 busripper-1.sym +{ +T 29700 48500 5 8 0 0 270 0 1 +device=none +} +C 29300 48100 1 270 0 busripper-1.sym +{ +T 29700 48100 5 8 0 0 270 0 1 +device=none +} +C 29300 47700 1 270 0 busripper-1.sym +{ +T 29700 47700 5 8 0 0 270 0 1 +device=none +} +C 29300 47300 1 270 0 busripper-1.sym +{ +T 29700 47300 5 8 0 0 270 0 1 +device=none +} +C 29300 46900 1 270 0 busripper-1.sym +{ +T 29700 46900 5 8 0 0 270 0 1 +device=none +} +C 29300 46500 1 270 0 busripper-1.sym +{ +T 29700 46500 5 8 0 0 270 0 1 +device=none +} +C 29300 46100 1 270 0 busripper-1.sym +{ +T 29700 46100 5 8 0 0 270 0 1 +device=none +} +C 29300 43300 1 270 0 busripper-1.sym +{ +T 29700 43300 5 8 0 0 270 0 1 +device=none +} +C 29300 42500 1 270 0 busripper-1.sym +{ +T 29700 42500 5 8 0 0 270 0 1 +device=none +} +C 29300 42100 1 270 0 busripper-1.sym +{ +T 29700 42100 5 8 0 0 270 0 1 +device=none +} +C 29300 41700 1 270 0 busripper-1.sym +{ +T 29700 41700 5 8 0 0 270 0 1 +device=none +} +C 29300 41300 1 270 0 busripper-1.sym +{ +T 29700 41300 5 8 0 0 270 0 1 +device=none +} +C 29300 40900 1 270 0 busripper-1.sym +{ +T 29700 40900 5 8 0 0 270 0 1 +device=none +} +C 29300 40500 1 270 0 busripper-1.sym +{ +T 29700 40500 5 8 0 0 270 0 1 +device=none +} +C 29300 40100 1 270 0 busripper-1.sym +{ +T 29700 40100 5 8 0 0 270 0 1 +device=none +} +C 29300 39700 1 270 0 busripper-1.sym +{ +T 29700 39700 5 8 0 0 270 0 1 +device=none +} +N 27200 48900 29300 48900 4 +{ +T 27200 48900 5 10 1 1 0 0 1 +netname=\_DB1\_ +} +C 29300 48900 1 0 0 busripper-1.sym +{ +T 29300 49300 5 8 0 0 0 0 1 +device=none +} +C 32600 43300 1 0 0 gnd-1.sym +{ +T 32600 43300 5 10 0 0 0 0 1 +net=GND:1 +} +C 32900 43600 1 90 0 capacitor-1.sym +{ +T 32200 43800 5 10 0 0 90 0 1 +device=CAPACITOR +T 32000 43800 5 10 0 0 90 0 1 +symversion=0.1 +T 32900 43600 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 32900 43600 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 120 60 +T 32600 43800 5 10 1 1 90 0 1 +refdes=C1 +T 32900 43600 5 10 1 1 90 0 1 +value=47uF +} +C 32600 45400 1 0 0 jumper-1.sym +{ +T 32900 45900 5 8 0 0 0 0 1 +device=JUMPER +T 32600 45400 5 10 0 0 0 0 1 +footprint=HEADER2_2 +T 32900 45900 5 10 1 1 0 0 1 +refdes=J3 +} +C 32500 46400 1 0 0 generic-power.sym +{ +T 32700 46650 5 10 1 1 0 3 1 +net=drive_5V:1 +} +C 32500 45400 1 270 0 schottky-1.sym +{ +T 33172 45078 5 10 0 0 270 0 1 +device=DIODE +T 33332 45059 5 10 0 1 270 0 1 +footprint=diode-DO-214AA-SMB +T 32500 45400 5 10 0 0 0 0 1 +description=Schottky diode +T 33000 45100 5 10 1 1 270 0 1 +refdes=D1 +} +N 32700 44500 27200 44500 4 +N 30000 44500 30000 38300 4 +N 30000 38300 31000 38300 4 +C 33200 52300 1 0 0 jumper-1.sym +{ +T 33500 52800 5 8 0 0 0 0 1 +device=JUMPER +T 33500 52800 5 10 1 1 0 0 1 +refdes=J7 +T 33200 52300 5 10 0 0 0 0 1 +footprint=HEADER2_2 +} +N 32500 54100 32500 53300 13 +N 32500 53300 33300 53300 13 +C 33200 52000 1 0 0 gnd-1.sym +{ +T 33200 52000 5 10 0 0 0 0 1 +net=GND:1 +} +C 68500 51800 1 0 0 jumper-1.sym +{ +T 68800 52300 5 8 0 0 0 0 1 +device=JUMPER +T 68800 52300 5 10 1 1 0 0 1 +refdes=J10 +T 68500 51800 5 10 0 0 0 0 1 +footprint=HEADER2_2 +} +C 68400 52800 1 0 0 3.3V-plus-1.sym +{ +T 68400 52800 5 10 0 0 0 0 1 +net=3.3V:1 +} +T 61500 51900 9 10 1 0 0 0 1 +onboard LED, active low, 2mA +N 64800 51900 66700 51900 4 +T 61400 51200 9 10 1 0 0 0 1 +external LED, active high 30mA +T 69300 52300 9 10 1 0 0 0 1 +>= 1.7Vf LED, 30mA max. +C 67700 51700 1 0 0 resistor-1.sym +{ +T 68000 52100 5 10 0 0 0 0 1 +device=RESISTOR +T 67900 52000 5 10 1 1 0 0 1 +refdes=R7 +T 67800 51500 5 10 1 1 0 0 1 +value=56Ω +T 67700 51700 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 67200 51000 1 0 0 nmos-3.sym +{ +T 67800 51500 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 67100 51500 5 10 1 1 0 0 1 +refdes=Q1 +T 67200 51000 5 10 0 0 0 0 1 +description=n-Channel enhancemen mode +T 67200 51000 5 10 0 0 0 0 2 +documentation=NXP 2N7002P,215 +DigiKey 568-5818-1-ND +T 67200 51000 5 10 0 0 0 0 1 +footprint=SOT23_MOSFET +} +C 67600 50700 1 0 0 gnd-1.sym +C 65700 51100 1 0 0 resistor-1.sym +{ +T 66000 51500 5 10 0 0 0 0 1 +device=RESISTOR +T 65900 51400 5 10 1 1 0 0 1 +refdes=R6 +T 65800 50900 5 10 1 1 0 0 1 +value=22Ω +T 65700 51100 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +N 66600 51200 67200 51200 4 +N 64800 51200 65700 51200 4 +C 47900 33900 1 0 1 5V-plus-1.sym +{ +T 47900 33900 5 10 0 0 0 6 1 +net=5V:1 +} +C 47800 32000 1 0 1 gnd-1.sym +{ +T 47800 32000 5 10 0 0 0 6 1 +net=GND:1 +} +T 46700 30600 9 10 1 0 0 0 1 +5V EXT +T 67500 36300 9 10 1 0 0 0 2 +3.3V EXT + +N 46300 33900 46300 34500 4 +C 47800 33200 1 0 1 gnd-1.sym +{ +T 47800 33200 5 10 0 0 0 6 1 +net=GND:1 +} +C 47800 32400 1 0 1 gnd-1.sym +{ +T 47800 32400 5 10 0 0 0 6 1 +net=GND:1 +} +C 47800 32800 1 0 1 gnd-1.sym +{ +T 47800 32800 5 10 0 0 0 6 1 +net=GND:1 +} +C 46300 39000 1 0 1 gnd-1.sym +{ +T 46300 39000 5 10 0 0 0 6 1 +net=GND:1 +} +C 68400 40200 1 0 0 3.3V-plus-1.sym +{ +T 68400 40200 5 10 0 0 0 0 1 +net=3.3V:1 +} +C 68900 39300 1 90 0 gnd-1.sym +C 68900 38900 1 90 0 gnd-1.sym +C 68900 38500 1 90 0 gnd-1.sym +C 68900 38100 1 90 0 gnd-1.sym +C 68900 37700 1 90 0 gnd-1.sym +C 68900 37300 1 90 0 gnd-1.sym +C 68900 36900 1 90 0 gnd-1.sym +U 66300 35300 66300 38700 10 -1 +N 67200 37000 66500 37000 4 +{ +T 66600 37000 5 10 1 1 0 0 1 +netname=\_SD_CD\_ +} +C 66500 37000 1 180 0 busripper-1.sym +{ +T 66500 36600 5 8 0 0 180 0 1 +device=none +} +N 67200 37400 66500 37400 4 +{ +T 66600 37400 5 10 1 1 0 0 1 +netname=\_SD_CS\_ +} +C 66500 37400 1 180 0 busripper-1.sym +{ +T 66500 37000 5 8 0 0 180 0 1 +device=none +} +N 67200 37800 66500 37800 4 +{ +T 66600 37800 5 10 1 1 0 0 1 +netname=SD_MOSI +} +C 66500 37800 1 180 0 busripper-1.sym +{ +T 66500 37400 5 8 0 0 180 0 1 +device=none +} +N 67200 38200 66500 38200 4 +{ +T 66600 38200 5 10 1 1 0 0 1 +netname=SD_SCK +} +C 66500 38200 1 180 0 busripper-1.sym +{ +T 66500 37800 5 8 0 0 180 0 1 +device=none +} +N 67200 38600 66500 38600 4 +{ +T 66600 38600 5 10 1 1 0 0 1 +netname=SD_MISO +} +C 66500 38600 1 180 0 busripper-1.sym +{ +T 66500 38200 5 8 0 0 180 0 1 +device=none +} +N 64800 37200 66000 37200 4 +N 66000 37200 66000 39000 4 +N 66000 39000 67200 39000 4 +N 64800 37900 65900 37900 4 +N 65900 37900 65900 39400 4 +N 65900 39400 67200 39400 4 +N 64800 38600 65800 38600 4 +N 65800 38600 65800 39800 4 +N 65800 39800 67200 39800 4 +N 64800 39300 65700 39300 4 +N 65700 39300 65700 40200 4 +N 65700 40200 67200 40200 4 +C 67200 36800 1 0 0 header18-2.sym +{ +T 67250 36150 5 10 0 1 0 0 1 +device=HEADER18 +T 67800 40500 5 10 1 1 0 0 1 +refdes=J12 +T 67200 36800 5 10 0 0 0 0 1 +footprint=HEADER18_2 +} +C 66900 48500 1 0 0 header8-2.sym +{ +T 66900 50100 5 10 0 1 0 0 1 +device=HEADER8 +T 67500 50200 5 10 1 1 0 0 1 +refdes=J11 +T 66900 48500 5 10 0 0 0 0 1 +footprint=HEADER8_2 +} +T 67300 48300 9 10 1 0 0 0 1 +5V EXT2 +C 68500 49900 1 0 1 5V-plus-1.sym +{ +T 68500 49900 5 10 0 0 0 6 1 +net=5V:1 +} +C 68600 49400 1 90 0 gnd-1.sym +C 68600 49000 1 90 0 gnd-1.sym +C 68600 48600 1 90 0 gnd-1.sym +N 64800 50500 66900 50500 4 +N 66900 50500 66900 49900 4 +N 64800 49800 66900 49800 4 +N 66900 49800 66900 49500 4 +N 64800 49100 66900 49100 4 +N 64800 48400 66900 48400 4 +N 66900 48400 66900 48700 4 +C 68900 39700 1 90 0 gnd-1.sym +C 46300 30900 1 0 0 header16-1.sym +{ +T 46350 29850 5 10 0 1 0 0 1 +device=HEADER16 +T 46900 34200 5 10 1 1 0 0 1 +refdes=J8 +T 46300 30900 5 10 0 0 0 0 1 +footprint=HEADER16_2 +} +C 47800 31600 1 0 1 gnd-1.sym +{ +T 47800 31600 5 10 0 0 0 6 1 +net=GND:1 +} +C 47800 31200 1 0 1 gnd-1.sym +{ +T 47800 31200 5 10 0 0 0 6 1 +net=GND:1 +} +C 47800 30800 1 0 1 gnd-1.sym +{ +T 47800 30800 5 10 0 0 0 6 1 +net=GND:1 +} +N 46300 33500 46300 33600 4 +N 46300 33600 47900 33600 4 +N 46300 33100 46300 33200 4 +N 46300 33200 48000 33200 4 +N 46300 32700 46300 32800 4 +N 46300 32800 48100 32800 4 +N 46300 32300 46300 32400 4 +N 46300 32400 48200 32400 4 +N 46300 31900 46300 32000 4 +N 46300 32000 48300 32000 4 +N 46300 31500 46300 31600 4 +N 46300 31600 48400 31600 4 +N 46300 31100 46300 31200 4 +N 46300 31200 48500 31200 4 +N 47800 36200 47800 34500 4 +N 47800 34500 46300 34500 4 +N 47900 33600 47900 36000 4 +N 47900 36000 48500 36000 4 +N 48500 36000 48500 36200 4 +N 49200 36200 49200 35900 4 +N 49200 35900 48000 35900 4 +N 48000 35900 48000 33200 4 +N 48100 32800 48100 35800 4 +N 48100 35800 49900 35800 4 +N 49900 35800 49900 36200 4 +N 48200 32400 48200 35700 4 +N 48200 35700 50600 35700 4 +N 50600 35700 50600 36200 4 +N 48300 32000 48300 35600 4 +N 48300 35600 51300 35600 4 +N 51300 35600 51300 36200 4 +N 48400 31600 48400 35500 4 +N 48400 35500 52000 35500 4 +N 52000 35500 52000 36200 4 +N 48500 31200 48500 35400 4 +N 48500 35400 52700 35400 4 +N 52700 35400 52700 36200 4 +C 32800 37400 1 90 0 resistor-1.sym +{ +T 32400 37700 5 10 0 0 90 0 1 +device=RESISTOR +T 32500 37600 5 10 1 1 90 0 1 +refdes=R8 +T 33000 37500 5 10 1 1 90 0 1 +value=120Ω +T 32800 37400 5 10 0 0 90 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 31900 36500 1 90 0 resistor-1.sym +{ +T 31500 36800 5 10 0 0 90 0 1 +device=RESISTOR +T 31600 36700 5 10 1 1 90 0 1 +refdes=R9 +T 32100 36600 5 10 1 1 90 0 1 +value=154Ω +T 31900 36500 5 10 0 0 90 0 1 +footprint=SMD_SIMPLE 80 50 +} +N 32700 37400 31800 37400 4 +N 31800 37400 31800 37600 4 +C 32900 36500 1 90 0 capacitor-1.sym +{ +T 32200 36700 5 10 0 0 90 0 1 +device=CAPACITOR +T 32600 36700 5 10 1 1 90 0 1 +refdes=C6 +T 32000 36700 5 10 0 0 90 0 1 +symversion=0.1 +T 32900 36500 5 10 1 1 90 0 1 +value=10uF +T 32900 36500 5 10 0 2 90 0 1 +description=Ceramic decoupling cap +T 32900 36500 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 32600 36200 1 0 0 gnd-1.sym +{ +T 32600 36200 5 10 0 0 0 0 1 +net=GND:1 +} +C 33600 35700 1 90 0 capacitor-1.sym +{ +T 32900 35900 5 10 0 0 90 0 1 +device=CAPACITOR +T 33300 35900 5 10 1 1 90 0 1 +refdes=C15 +T 32700 35900 5 10 0 0 90 0 1 +symversion=0.1 +T 33600 35700 5 10 1 1 90 0 1 +value=0.1uF +T 33600 35700 5 10 0 2 90 0 1 +description=Ceramic decoupling cap +T 33600 35700 5 10 0 0 0 0 1 +footprint=cap_0402 +} +C 32900 34200 1 90 0 capacitor-1.sym +{ +T 32200 34400 5 10 0 0 90 0 1 +device=CAPACITOR +T 32600 34400 5 10 1 1 90 0 1 +refdes=C16 +T 32000 34400 5 10 0 0 90 0 1 +symversion=0.1 +T 32900 34200 5 10 1 1 90 0 1 +value=0.1uF +T 32900 34200 5 10 0 2 90 0 1 +description=Ceramic decoupling cap +T 32900 34200 5 10 0 0 0 0 1 +footprint=cap_0402 +} +N 33400 36600 33700 36600 4 +C 33300 35400 1 0 0 gnd-1.sym +{ +T 33300 35400 5 10 0 0 0 0 1 +net=GND:1 +} +C 32600 33900 1 0 0 gnd-1.sym +{ +T 32600 33900 5 10 0 0 0 0 1 +net=GND:1 +} +C 70200 32700 1 90 0 capacitor-1.sym +{ +T 69500 32900 5 10 0 0 90 0 1 +device=CAPACITOR +T 69700 32900 5 10 1 1 90 0 1 +refdes=C13 +T 69300 32900 5 10 0 0 90 0 1 +symversion=0.1 +T 70200 32700 5 10 1 1 90 0 1 +value=10uF +T 70200 32700 5 10 0 1 90 0 1 +description=Ceramic decoupling cap +T 70200 32700 5 10 0 0 0 0 1 +footprint=SMD_SIMPLE 80 50 +} +C 69900 32400 1 0 0 gnd-1.sym +C 66500 52800 1 270 0 led.sym +{ +T 67100 52000 5 10 0 0 270 0 1 +device=LED +T 66900 52800 5 10 1 1 270 0 1 +refdes=LED1 +T 67300 52000 5 10 0 0 270 0 1 +symversion=0.1 +T 66500 52800 5 10 0 0 0 0 1 +description=Low current 2mA, 1.85Vf red led +T 66500 52800 5 10 0 0 0 0 1 +footprint=SMD_DIODE 80 50 +} diff --git a/qa/data/eeschema/io/geda/symver_resistor.sym b/qa/data/eeschema/io/geda/symver_resistor.sym new file mode 100644 index 0000000000..befcb56195 --- /dev/null +++ b/qa/data/eeschema/io/geda/symver_resistor.sym @@ -0,0 +1,30 @@ +v 20201004 2 +B 200 0 600 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 300 400 5 10 0 0 0 0 1 +device=RESISTOR +T 300 600 5 10 0 0 0 0 1 +symversion=2.0 +P 900 100 800 100 1 0 0 +{ +T 800 150 5 8 0 1 0 0 1 +pinnumber=2 +T 800 150 5 8 0 0 0 0 1 +pinseq=2 +T 800 150 5 8 0 1 0 0 1 +pinlabel=2 +T 800 150 5 8 0 1 0 0 1 +pintype=pas +} +P 0 100 200 100 1 0 0 +{ +T 100 150 5 8 0 1 0 0 1 +pinnumber=1 +T 100 150 5 8 0 0 0 0 1 +pinseq=1 +T 100 150 5 8 0 1 0 0 1 +pinlabel=1 +T 100 150 5 8 0 1 0 0 1 +pintype=pas +} +T 200 300 8 10 1 1 0 0 1 +refdes=R? diff --git a/qa/data/eeschema/io/geda/symversion_test.sch b/qa/data/eeschema/io/geda/symversion_test.sch new file mode 100644 index 0000000000..6337105251 --- /dev/null +++ b/qa/data/eeschema/io/geda/symversion_test.sch @@ -0,0 +1,11 @@ +v 20201004 2 +C 1000 1000 1 0 0 symver_resistor.sym +{ +T 1200 1200 5 10 1 1 0 0 1 +refdes=R1 +T 1200 1000 5 10 1 1 0 0 1 +value=10k +T 1200 800 5 10 0 0 0 0 1 +symversion=1.0 +} +N 900 1100 1000 1100 4 diff --git a/qa/data/eeschema/io/geda/text_angle_test.sch b/qa/data/eeschema/io/geda/text_angle_test.sch new file mode 100644 index 0000000000..9e18881000 --- /dev/null +++ b/qa/data/eeschema/io/geda/text_angle_test.sch @@ -0,0 +1,11 @@ +v 20130925 2 +T 1000 1000 9 10 1 0 45 0 1 +Angled45 +T 2000 2000 9 10 1 0 135 0 1 +Angled135 +T 3000 3000 9 10 1 0 200 0 1 +Angled200 +T 4000 4000 9 10 1 0 315 0 1 +Angled315 +T 5000 5000 9 10 1 0 90 0 1 +Exact90 diff --git a/qa/data/eeschema/io/geda/text_size_test.sch b/qa/data/eeschema/io/geda/text_size_test.sch new file mode 100644 index 0000000000..0dd4dd40c1 --- /dev/null +++ b/qa/data/eeschema/io/geda/text_size_test.sch @@ -0,0 +1,5 @@ +v 20130925 2 +T 1000 1000 9 10 1 0 0 0 1 +Hello World +T 2000 2000 9 20 1 0 0 0 1 +Big Text diff --git a/qa/data/eeschema/io/geda/tjunction_test.sch b/qa/data/eeschema/io/geda/tjunction_test.sch new file mode 100644 index 0000000000..d3fd41a66c --- /dev/null +++ b/qa/data/eeschema/io/geda/tjunction_test.sch @@ -0,0 +1,5 @@ +v 20130925 2 +N 44000 47000 48000 47000 4 +N 46000 47000 46000 45000 4 +N 44000 45000 48000 45000 4 +N 46000 45000 46000 43000 4 diff --git a/qa/data/eeschema/io/geda/very_old_text_test.sch b/qa/data/eeschema/io/geda/very_old_text_test.sch new file mode 100644 index 0000000000..a91e64ee94 --- /dev/null +++ b/qa/data/eeschema/io/geda/very_old_text_test.sch @@ -0,0 +1,4 @@ +v 19991231 0 +T 44000 47000 5 10 1 0 0 +Old Text +N 44000 47100 43000 47100 4 diff --git a/qa/data/eeschema/io/geda/zpowerMeter.sch b/qa/data/eeschema/io/geda/zpowerMeter.sch new file mode 100644 index 0000000000..98a5ad7243 --- /dev/null +++ b/qa/data/eeschema/io/geda/zpowerMeter.sch @@ -0,0 +1,728 @@ +v 20130925 2 +C 40000 40000 0 0 0 title-B.sym +C 40000 44300 1 0 0 terminal-1.sym +{ +T 40310 45050 5 10 0 0 0 0 1 +device=terminal +T 40310 44900 5 10 0 0 0 0 1 +footprint=CONNECTOR 1 1 +T 40250 44350 5 10 1 1 0 6 1 +refdes=T? +} +C 40000 43300 1 0 0 terminal-1.sym +{ +T 40310 44050 5 10 0 0 0 0 1 +device=terminal +T 40310 43900 5 10 0 0 0 0 1 +footprint=CONNECTOR 1 1 +T 40250 43350 5 10 1 1 0 6 1 +refdes=T? +} +T 40500 44000 9 12 1 0 0 0 1 +POWER LINE 220V +B 44800 40700 1500 600 3 0 1 0 -1 -1 0 -1 -1 -1 -1 -1 +T 44900 40900 9 12 1 0 0 0 1 +LED DRIVER +P 44400 41200 44800 41200 1 0 0 +{ +T 44500 41250 5 10 0 0 0 0 1 +pintype=unknown +T 44455 41295 9 10 1 1 0 0 1 +pinlabel=POWER +T 44705 41245 5 10 0 1 0 6 1 +pinnumber=0 +T 44500 41250 5 10 0 0 0 0 1 +pinseq=0 +} +P 44400 40800 44800 40800 1 0 0 +{ +T 44500 40850 5 10 0 0 0 0 1 +pintype=unknown +T 44455 40595 9 10 1 1 0 0 1 +pinlabel=POWER +T 44705 40845 5 10 0 1 0 6 1 +pinnumber=0 +T 44500 40850 5 10 0 0 0 0 1 +pinseq=0 +} +N 40900 43400 42700 43400 4 +{ +T 41700 43455 5 10 1 1 0 3 1 +netname=P2 +} +N 42300 40800 44400 40800 4 +C 47100 41200 1 0 0 led-1.sym +{ +T 47900 41800 5 10 0 0 0 0 1 +device=LED +T 47300 41600 5 10 1 1 0 0 1 +refdes=LED? +T 47900 42000 5 10 0 0 0 0 1 +symversion=0.1 +} +C 48700 41200 1 0 0 led-1.sym +{ +T 49500 41800 5 10 0 0 0 0 1 +device=LED +T 49000 41600 5 10 1 1 0 0 1 +refdes=LED? +T 49500 42000 5 10 0 0 0 0 1 +symversion=0.1 +} +C 50200 41200 1 0 0 led-1.sym +{ +T 51000 41800 5 10 0 0 0 0 1 +device=LED +T 50500 41600 5 10 1 1 0 0 1 +refdes=LED? +T 51000 42000 5 10 0 0 0 0 1 +symversion=0.1 +} +C 51600 41200 1 0 0 led-1.sym +{ +T 52400 41800 5 10 0 0 0 0 1 +device=LED +T 51800 41600 5 10 1 1 0 0 1 +refdes=LED? +T 52400 42000 5 10 0 0 0 0 1 +symversion=0.1 +} +C 52800 41200 1 0 0 led-1.sym +{ +T 53600 41800 5 10 0 0 0 0 1 +device=LED +T 53000 41600 5 10 1 1 0 0 1 +refdes=LED? +T 53600 42000 5 10 0 0 0 0 1 +symversion=0.1 +} +C 48000 40300 1 0 1 led-1.sym +{ +T 47200 40900 5 10 0 0 0 6 1 +device=LED +T 47200 41100 5 10 0 0 0 6 1 +symversion=0.1 +T 47800 40800 5 10 1 1 0 6 1 +refdes=LED? +} +C 49600 40300 1 0 1 led-1.sym +{ +T 48800 40900 5 10 0 0 0 6 1 +device=LED +T 48800 41100 5 10 0 0 0 6 1 +symversion=0.1 +T 49400 40700 5 10 1 1 0 6 1 +refdes=LED? +} +C 51300 40300 1 0 1 led-1.sym +{ +T 50500 40900 5 10 0 0 0 6 1 +device=LED +T 50500 41100 5 10 0 0 0 6 1 +symversion=0.1 +T 51100 40700 5 10 1 1 0 6 1 +refdes=LED? +} +C 52500 40300 1 0 1 led-1.sym +{ +T 51700 40900 5 10 0 0 0 6 1 +device=LED +T 51700 41100 5 10 0 0 0 6 1 +symversion=0.1 +T 52300 40700 5 10 1 1 0 6 1 +refdes=LED? +} +C 53700 40300 1 0 1 led-1.sym +{ +T 52900 40900 5 10 0 0 0 6 1 +device=LED +T 52900 41100 5 10 0 0 0 6 1 +symversion=0.1 +T 53500 40700 5 10 1 1 0 6 1 +refdes=LED? +} +N 48000 41400 48700 41400 4 +N 49600 41400 50200 41400 4 +N 51100 41400 51600 41400 4 +N 52500 41400 52800 41400 4 +N 53700 41400 54300 41400 4 +N 54300 41400 54300 40500 4 +N 54300 40500 53700 40500 4 +N 52800 40500 52500 40500 4 +N 51600 40500 51300 40500 4 +N 50400 40500 49600 40500 4 +N 48700 40500 48000 40500 4 +P 46600 41200 46300 41200 1 0 0 +{ +T 46500 41250 5 10 0 0 0 6 1 +pintype=unknown +T 46845 41295 9 10 1 1 0 6 1 +pinlabel=PLUS +T 46395 41245 5 10 0 1 0 0 1 +pinnumber=0 +T 46500 41250 5 10 0 0 0 6 1 +pinseq=0 +} +P 46600 40800 46300 40800 1 0 0 +{ +T 46500 40850 5 10 0 0 0 6 1 +pintype=unknown +T 46545 40495 9 10 1 1 0 6 1 +pinlabel=MINUX +T 46395 40845 5 10 0 1 0 0 1 +pinnumber=0 +T 46500 40850 5 10 0 0 0 6 1 +pinseq=0 +} +N 46600 40800 47100 40800 4 +N 47100 40800 47100 40500 4 +N 46600 41200 47100 41200 4 +N 47100 41200 47100 41400 4 +T 43400 45000 9 12 1 0 0 0 2 +AC-DC +5Volt +B 43200 44900 1000 700 3 0 1 0 -1 -1 0 -1 -1 -1 -1 -1 +P 42800 45500 43200 45500 1 0 0 +{ +T 42900 45550 5 10 0 0 0 0 1 +pintype=unknown +T 42855 45595 9 10 1 1 0 0 1 +pinlabel=POWER +T 43105 45545 5 10 0 1 0 6 1 +pinnumber=0 +T 42900 45550 5 10 0 0 0 0 1 +pinseq=0 +} +P 42800 45000 43200 45000 1 0 0 +{ +T 42900 45050 5 10 0 0 0 0 1 +pintype=unknown +T 42855 44795 9 10 1 1 0 0 1 +pinlabel=POWER +T 43105 45045 5 10 0 1 0 6 1 +pinnumber=0 +T 42900 45050 5 10 0 0 0 0 1 +pinseq=0 +} +P 44500 45500 44200 45500 1 0 0 +{ +T 44400 45550 5 10 0 0 0 6 1 +pintype=unknown +T 44745 45595 9 10 1 1 0 6 1 +pinlabel=5Volts +T 44295 45545 5 10 0 1 0 0 1 +pinnumber=0 +T 44400 45550 5 10 0 0 0 6 1 +pinseq=0 +} +P 44500 45000 44200 45000 1 0 0 +{ +T 44400 45050 5 10 0 0 0 6 1 +pintype=unknown +T 44745 44795 9 10 1 1 0 6 1 +pinlabel=GND +T 44295 45045 5 10 0 1 0 0 1 +pinnumber=0 +T 44400 45050 5 10 0 0 0 6 1 +pinseq=0 +} +C 44400 44400 1 0 0 gnd-1.sym +N 44500 45000 44500 44700 4 +N 42800 45000 42700 45000 4 +N 42800 45500 42300 45500 4 +N 44600 46400 44600 45500 4 +N 44600 45500 44500 45500 4 +C 43700 46000 1 0 0 generic-power.sym +{ +T 43900 46250 5 10 1 1 0 3 1 +net=5Volt +} +N 43900 46000 43900 45900 4 +N 43900 45900 44600 45900 4 +C 45100 45300 1 0 0 gnd-1.sym +N 45200 45600 45200 46400 4 +C 45800 45900 1 0 0 generic-power.sym +{ +T 46000 46150 5 10 1 1 0 3 1 +net=3.3Volt +} +N 44900 46400 44900 45900 4 +N 44900 45900 46000 45900 4 +C 44400 46400 1 0 0 DS1117-3_3.sym +{ +T 44400 46395 5 10 0 1 0 0 1 +footprint=SOT-223 +T 44400 46395 5 10 0 1 0 0 1 +device=none +} +C 41400 46900 1 0 0 CC2530Module.sym +{ +T 40995 49995 5 10 1 1 0 0 1 +device=CC2530-MODULE +T 41395 46995 5 10 0 1 0 0 1 +footprint=DIP24 +} +C 42800 46500 1 0 0 gnd-1.sym +N 42900 46900 42900 46800 4 +C 42600 50500 1 0 0 generic-power.sym +{ +T 42800 50750 5 10 1 1 0 3 1 +net=3.3Volt +} +N 42800 50500 42800 50200 4 +C 46200 48000 1 90 0 resistor-1.sym +{ +T 45800 48300 5 10 0 0 90 0 1 +device=RESISTOR +T 45900 48200 5 10 1 1 90 0 1 +refdes=R8 +} +C 45900 49100 1 0 0 generic-power.sym +{ +T 46100 49350 5 10 1 1 0 3 1 +net=3.3Volt +} +N 46100 47900 46100 48000 4 +N 46100 49100 46100 48900 4 +C 46300 47900 1 0 0 switch-spst-1.sym +{ +T 46700 48600 5 10 0 0 0 0 1 +device=SPST +T 46600 48200 5 10 1 1 0 0 1 +refdes=S? +} +C 47000 47200 1 0 0 gnd-1.sym +N 47100 47900 47100 47500 4 +N 44000 47900 46300 47900 4 +C 44000 42500 1 0 1 BT136.sym +{ +T 42805 43195 5 10 0 1 0 6 1 +footprint=TO92 +T 42805 42895 5 10 0 1 0 6 1 +device=none +T 44000 42500 5 10 1 1 0 0 1 +footprint=TO-252 +} +N 43200 43500 43200 44400 4 +N 43200 42500 43200 41200 4 +N 43200 41200 44400 41200 4 +T 42900 43900 9 12 1 0 0 0 1 +BT136 +C 47600 42400 1 0 1 MOC3021.sym +{ +T 47605 42400 5 10 0 1 0 6 1 +footprint=DIP6 +T 47605 42373 5 10 0 1 0 6 1 +device=none +T 47600 42400 5 10 1 1 0 0 1 +footprint=SOP6 +} +C 43500 43600 1 0 0 resistor-1.sym +{ +T 43800 44000 5 10 0 0 0 0 1 +device=RESISTOR +T 43700 43900 5 10 1 1 0 0 1 +refdes=R? +T 43700 43500 5 10 1 1 0 0 1 +value=360 +T 43500 43600 5 10 1 1 0 0 1 +footprint=1206 +} +N 43500 43700 43200 43700 4 +N 44400 43700 44600 43700 4 +N 44600 42600 44000 42600 4 +N 44000 42600 44000 42700 4 +C 47700 42100 1 0 0 gnd-1.sym +N 47600 42600 47800 42600 4 +N 47800 42600 47800 42400 4 +C 47900 43600 1 0 0 resistor-1.sym +{ +T 48200 44000 5 10 0 0 0 0 1 +device=RESISTOR +T 48100 43900 5 10 1 1 0 0 1 +refdes=R7 +T 48100 43500 5 10 1 1 0 0 1 +value=70 +} +N 47600 43700 47900 43700 4 +N 48800 43700 49600 43700 4 +{ +T 49200 43755 5 10 1 1 0 3 1 +netname=LIGHT_ON +} +N 41400 49600 40300 49600 4 +{ +T 40850 49655 5 10 1 1 0 3 1 +netname=LIGHT_ON +} +C 52300 45800 1 0 0 CS5463.sym +{ +T 52295 45795 5 10 0 1 0 0 1 +footprint=24LSSOP +} +C 53500 45300 1 0 0 gnd-1.sym +N 53600 45600 53600 46000 4 +N 53000 46000 54100 46000 4 +C 53900 50000 1 0 0 generic-power.sym +{ +T 54100 50250 5 10 1 1 0 3 1 +net=3.3Volt +} +C 52800 50000 1 0 0 generic-power.sym +{ +T 52800 50200 5 10 1 1 0 0 1 +net=5Volt +} +N 53000 49500 53000 50000 4 +N 54100 49500 54100 50000 4 +C 55100 47700 1 0 0 resistor-1.sym +{ +T 55400 48100 5 10 0 0 0 0 1 +device=RESISTOR +T 55300 48000 5 10 1 1 0 0 1 +refdes=R? +T 55300 47600 5 10 1 1 0 0 1 +value=150 +} +N 55100 47800 54800 47800 4 +N 56000 47800 56300 47800 4 +N 56300 47800 56300 49900 4 +N 54100 49900 56300 49900 4 +T 53400 47450 8 10 0 1 0 3 1 +net=Vcc:1 +C 54400 49400 1 0 0 capacitor-1.sym +{ +T 54600 50100 5 10 0 0 0 0 1 +device=CAPACITOR +T 54600 49600 5 10 1 1 0 0 1 +refdes=C2 +T 54600 50300 5 10 0 0 0 0 1 +symversion=0.1 +T 54400 49400 5 10 1 1 0 0 1 +value=100n +} +N 54400 49600 54100 49600 4 +C 55300 49200 1 0 0 gnd-1.sym +N 55300 49600 55400 49600 4 +N 55400 49600 55400 49500 4 +C 53800 49400 1 0 0 gnd-1.sym +N 54800 46700 55000 46700 4 +N 55000 46600 55000 46900 4 +N 55000 46900 54800 46900 4 +C 55200 45700 1 90 0 capacitor-1.sym +{ +T 54500 45900 5 10 0 0 90 0 1 +device=CAPACITOR +T 54900 46100 5 10 1 1 180 0 1 +refdes=C3 +T 54300 45900 5 10 0 0 90 0 1 +symversion=0.1 +T 55000 46300 5 10 1 1 180 0 1 +value=100n +} +N 55000 45700 53600 45700 4 +N 42700 44900 42700 43400 4 +C 41200 44300 1 0 0 resistor-1.sym +{ +T 41500 44700 5 10 0 0 0 0 1 +device=RESISTOR +T 41400 44600 5 10 1 1 0 0 1 +refdes=R1 +T 41400 44200 5 10 1 1 0 0 1 +value=0.04 +T 41200 44300 5 10 1 0 0 0 1 +footprint=2512 +} +N 42100 44400 42300 44400 4 +{ +T 42200 44455 5 10 1 1 0 3 1 +netname=P1_B +} +N 40900 44400 41200 44400 4 +{ +T 41050 44455 5 10 1 1 0 3 1 +netname=P1_A +} +C 51800 46000 1 90 0 capacitor-1.sym +{ +T 51100 46200 5 10 0 0 90 0 1 +device=CAPACITOR +T 51500 46400 5 10 1 1 180 0 1 +refdes=C5 +T 50900 46200 5 10 0 0 90 0 1 +symversion=0.1 +T 51600 46600 5 10 1 1 180 0 1 +value=220p +} +C 51800 44900 1 90 0 capacitor-1.sym +{ +T 51100 45100 5 10 0 0 90 0 1 +device=CAPACITOR +T 51500 45300 5 10 1 1 180 0 1 +refdes=C4 +T 50900 45100 5 10 0 0 90 0 1 +symversion=0.1 +T 51600 45500 5 10 1 1 180 0 1 +value=220p +} +N 50800 46900 52300 46900 4 +N 52300 46700 52200 46700 4 +N 52200 46700 52200 44900 4 +N 50800 44900 52200 44900 4 +N 51600 45800 51600 46000 4 +C 51800 45500 1 0 0 gnd-1.sym +N 51900 45800 51900 45900 4 +N 51900 45900 51600 45900 4 +C 51100 45500 1 90 0 capacitor-1.sym +{ +T 50400 45700 5 10 0 0 90 0 1 +device=CAPACITOR +T 50800 45900 5 10 1 1 180 0 1 +footprint=1812 +T 50200 45700 5 10 0 0 90 0 1 +symversion=0.1 +T 50900 46100 5 10 1 1 180 0 1 +value=22n +} +N 50900 45500 50900 44900 4 +N 50900 46400 50900 46900 4 +C 49900 46800 1 0 0 resistor-1.sym +{ +T 50200 47200 5 10 0 0 0 0 1 +device=RESISTOR +T 49900 46700 5 10 1 1 0 0 1 +refdes=R2 +T 50300 46700 5 10 1 1 0 0 1 +value=1k +T 49900 46800 5 10 0 1 0 0 1 +footprint=0805 +} +C 49900 44800 1 0 0 resistor-1.sym +{ +T 50200 45200 5 10 0 0 0 0 1 +device=RESISTOR +T 50000 45100 5 10 1 1 0 0 1 +refdes=R1 +T 50400 45100 5 10 1 1 0 0 1 +value=1k +} +N 42300 40800 42300 45500 4 +N 49900 44900 49500 44900 4 +{ +T 49700 44955 5 10 1 1 0 3 1 +netname=P1_A +} +N 48400 46900 49900 46900 4 +{ +T 48245 47050 5 10 1 1 90 3 1 +netname=P1_B +} +N 52300 47800 51500 47800 4 +{ +T 51950 47755 5 10 1 1 0 3 1 +netname=\_CS +} +N 52300 48000 51500 48000 4 +{ +T 51950 47955 5 10 1 1 0 3 1 +netname=SDI +} +N 52300 48200 51500 48200 4 +{ +T 51950 48155 5 10 1 1 0 3 1 +netname=SDO +} +N 52300 48400 51500 48400 4 +{ +T 51950 48355 5 10 1 1 0 3 1 +netname=SCLK +} +N 51500 48600 52300 48600 4 +C 52300 49600 1 180 0 xtal.sym +{ +T 52205 49550 5 10 0 1 180 0 1 +device=XTAL +T 52305 49551 5 10 0 1 180 0 1 +footprint=dip2 +T 52305 49150 5 10 1 1 180 0 1 +refdes=X1 +T 51500 49400 5 10 1 1 0 0 1 +value=4.096Mhz +} +C 53000 49700 1 0 0 capacitor-1.sym +{ +T 53200 50400 5 10 0 0 0 0 1 +device=CAPACITOR +T 53200 50000 5 10 1 1 0 0 1 +refdes=C1 +T 53200 50600 5 10 0 0 0 0 1 +symversion=0.1 +T 53000 49700 5 10 1 1 0 0 1 +value=100n +} +N 53900 49900 53900 49700 4 +N 52300 48800 52300 49200 4 +N 51500 48600 51500 49200 4 +C 50800 47300 1 90 0 capacitor-1.sym +{ +T 50100 47500 5 10 0 0 90 0 1 +device=CAPACITOR +T 50500 47700 5 10 1 1 180 0 1 +refdes=C7 +T 49900 47500 5 10 0 0 90 0 1 +symversion=0.1 +T 50600 47900 5 10 1 1 180 0 1 +footprint=0603 +} +C 50800 48400 1 90 0 capacitor-1.sym +{ +T 50100 48600 5 10 0 0 90 0 1 +device=CAPACITOR +T 50500 48800 5 10 1 1 180 0 1 +refdes=C8 +T 49900 48600 5 10 0 0 90 0 1 +symversion=0.1 +T 50600 49000 5 10 1 1 180 0 1 +footprint=0603 +} +C 50800 47900 1 0 0 gnd-1.sym +N 49500 47200 52300 47200 4 +N 50600 47200 50600 47300 4 +N 52300 47400 51100 47400 4 +N 51100 47400 51100 49400 4 +N 49100 49400 51100 49400 4 +N 50600 49400 50600 49300 4 +N 50600 48200 50600 48400 4 +N 50900 48200 50900 48300 4 +N 50900 48300 50600 48300 4 +C 50100 48000 1 90 0 capacitor-1.sym +{ +T 49400 48200 5 10 0 0 90 0 1 +device=CAPACITOR +T 49800 48400 5 10 1 1 180 0 1 +refdes=C9 +T 49200 48200 5 10 0 0 90 0 1 +symversion=0.1 +T 49900 48600 5 10 1 1 180 0 1 +value=22n +T 49200 48000 5 10 0 0 0 0 1 +footprint=1812 +} +N 49900 48000 49900 47200 4 +N 49900 48900 49900 49400 4 +C 48600 47100 1 0 0 resistor-1.sym +{ +T 48900 47500 5 10 0 0 0 0 1 +device=RESISTOR +T 48900 47400 5 10 1 1 0 0 1 +refdes=R3 +T 49200 47300 5 10 0 1 0 0 1 +footprint=0805 +T 49100 47300 5 10 1 1 0 0 1 +value=1k +} +N 48400 46900 48400 47300 4 +N 48400 47200 48600 47200 4 +C 48500 47300 1 90 0 resistor-1.sym +{ +T 48100 47600 5 10 0 0 90 0 1 +device=RESISTOR +T 48600 47300 5 10 1 1 90 0 1 +refdes=R4 +T 48600 47700 5 10 1 1 90 0 1 +value=1k +} +C 48500 48500 1 90 0 resistor-1.sym +{ +T 48100 48800 5 10 0 0 90 0 1 +device=RESISTOR +T 48600 48500 5 10 1 1 90 0 1 +refdes=R5 +T 48600 48900 5 10 1 1 90 0 1 +value=2M +} +N 48400 49400 48400 49800 4 +{ +T 48350 49600 5 10 1 1 90 3 1 +netname=P2 +} +N 48400 48200 48400 48500 4 +N 48400 48300 49100 48300 4 +N 49100 48300 49100 49400 4 +N 41400 49000 40400 49000 4 +{ +T 40900 48955 5 10 1 1 0 3 1 +netname=SDI +} +N 41400 49200 40400 49200 4 +{ +T 40900 49155 5 10 1 1 0 3 1 +netname=SDO +} +N 41400 48600 40400 48600 4 +{ +T 40900 48555 5 10 1 1 0 3 1 +netname=SCK +} +N 41400 48200 40400 48200 4 +{ +T 40900 48155 5 10 1 1 0 3 1 +netname=\_CS +} +N 41400 49400 40300 49400 4 +{ +T 40850 49455 5 10 1 1 0 3 1 +netname=LED +} +C 51600 43300 1 0 0 led-1.sym +{ +T 52400 43900 5 10 0 0 0 0 1 +device=LED +T 51900 43700 5 10 1 1 0 0 1 +refdes=LED? +T 52400 44100 5 10 0 0 0 0 1 +symversion=0.1 +} +C 50700 43400 1 0 0 resistor-1.sym +{ +T 51000 43800 5 10 0 0 0 0 1 +device=RESISTOR +T 50900 43700 5 10 1 1 0 0 1 +refdes=R7 +T 50900 43300 5 10 1 1 0 0 1 +value=220 +} +N 50700 43500 50000 43500 4 +{ +T 50350 43555 5 10 1 1 0 3 1 +netname=LED +} +C 52600 43100 1 0 0 gnd-1.sym +N 52700 43400 52700 43500 4 +N 52700 43500 52500 43500 4 +N 43200 44400 42300 44400 4 +C 46700 49700 1 0 0 switch-spst-1.sym +{ +T 47100 50400 5 10 0 0 0 0 1 +device=SPST +T 47000 50000 5 10 1 1 0 0 1 +refdes=S? +} +N 47500 49700 47500 47900 4 +N 47500 47900 47100 47900 4 +N 44000 49700 44000 49600 4 +C 44700 50600 1 0 0 generic-power.sym +{ +T 44900 50850 5 10 1 1 0 3 1 +net=3.3Volt +} +C 45000 49700 1 90 0 resistor-1.sym +{ +T 44600 50000 5 10 0 0 90 0 1 +device=RESISTOR +T 44700 49900 5 10 1 1 90 0 1 +refdes=R8 +} +N 44000 49200 44900 49200 4 +N 44900 49200 44900 49700 4 +N 44900 49700 46700 49700 4 diff --git a/qa/data/pcbnew/io/geda/goodfet50.pcb b/qa/data/pcbnew/io/geda/goodfet50.pcb new file mode 100644 index 0000000000..272f74aa14 --- /dev/null +++ b/qa/data/pcbnew/io/geda/goodfet50.pcb @@ -0,0 +1,1400 @@ +# release: pcb 20100929 +# date: Wed Jun 29 16:02:01 2011 +# user: thequux () +# host: vulcan.home.thequux.com + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20100606] + +PCB["" 600000 500000] + +Grid[1.000000 0 0 0] +Cursor[0 0 0.000000] +PolyArea[200000000.000000] +Thermal[0.500000] +DRC[700 1000 700 700 1300 700] +Flags("showdrc,autodrc,alldirection,uniquename,clearnew,snappin") +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,700,2700,1300,700:Power,2500,6000,3500,1000:Fat,4000,6000,3500,1000:Skinny,600,2402,1181,600"] + +Symbol(' ' 18) +( +) +Symbol('!' 12) +( + SymbolLine(0 45 0 50 8) + SymbolLine(0 10 0 35 8) +) +Symbol('"' 12) +( + SymbolLine(0 10 0 20 8) + SymbolLine(10 10 10 20 8) +) +Symbol('#' 12) +( + SymbolLine(0 35 20 35 8) + SymbolLine(0 25 20 25 8) + SymbolLine(15 20 15 40 8) + SymbolLine(5 20 5 40 8) +) +Symbol('$' 12) +( + SymbolLine(15 15 20 20 8) + SymbolLine(5 15 15 15 8) + SymbolLine(0 20 5 15 8) + SymbolLine(0 20 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 40 8) + SymbolLine(15 45 20 40 8) + SymbolLine(5 45 15 45 8) + SymbolLine(0 40 5 45 8) + SymbolLine(10 10 10 50 8) +) +Symbol('%' 12) +( + SymbolLine(0 15 0 20 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 10 10 8) + SymbolLine(10 10 15 15 8) + SymbolLine(15 15 15 20 8) + SymbolLine(10 25 15 20 8) + SymbolLine(5 25 10 25 8) + SymbolLine(0 20 5 25 8) + SymbolLine(0 50 40 10 8) + SymbolLine(35 50 40 45 8) + SymbolLine(40 40 40 45 8) + SymbolLine(35 35 40 40 8) + SymbolLine(30 35 35 35 8) + SymbolLine(25 40 30 35 8) + SymbolLine(25 40 25 45 8) + SymbolLine(25 45 30 50 8) + SymbolLine(30 50 35 50 8) +) +Symbol('&' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 35 15 20 8) + SymbolLine(5 50 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(0 25 25 50 8) + SymbolLine(5 10 10 10 8) + SymbolLine(10 10 15 15 8) + SymbolLine(15 15 15 20 8) + SymbolLine(0 35 0 45 8) +) +Symbol(''' 12) +( + SymbolLine(0 20 10 10 8) +) +Symbol('(' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) +) +Symbol(')' 12) +( + SymbolLine(0 10 5 15 8) + SymbolLine(5 15 5 45 8) + SymbolLine(0 50 5 45 8) +) +Symbol('*' 12) +( + SymbolLine(0 20 20 40 8) + SymbolLine(0 40 20 20 8) + SymbolLine(0 30 20 30 8) + SymbolLine(10 20 10 40 8) +) +Symbol('+' 12) +( + SymbolLine(0 30 20 30 8) + SymbolLine(10 20 10 40 8) +) +Symbol(',' 12) +( + SymbolLine(0 60 10 50 8) +) +Symbol('-' 12) +( + SymbolLine(0 30 20 30 8) +) +Symbol('.' 12) +( + SymbolLine(0 50 5 50 8) +) +Symbol('/' 12) +( + SymbolLine(0 45 30 15 8) +) +Symbol('0' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 40 20 20 8) +) +Symbol('1' 12) +( + SymbolLine(5 50 15 50 8) + SymbolLine(10 10 10 50 8) + SymbolLine(0 20 10 10 8) +) +Symbol('2' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(0 50 25 25 8) + SymbolLine(0 50 25 50 8) +) +Symbol('3' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 30 20 30 8) +) +Symbol('4' 12) +( + SymbolLine(0 30 20 10 8) + SymbolLine(0 30 25 30 8) + SymbolLine(20 10 20 50 8) +) +Symbol('5' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(0 10 0 30 8) + SymbolLine(0 30 5 25 8) + SymbolLine(5 25 15 25 8) + SymbolLine(15 25 20 30 8) + SymbolLine(20 30 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('6' 12) +( + SymbolLine(15 10 20 15 8) + SymbolLine(5 10 15 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(15 30 20 35 8) + SymbolLine(0 30 15 30 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 35 20 45 8) +) +Symbol('7' 12) +( + SymbolLine(0 50 25 25 8) + SymbolLine(25 10 25 25 8) + SymbolLine(0 10 25 10 8) +) +Symbol('8' 12) +( + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 25 5 30 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 25 8) + SymbolLine(15 30 20 25 8) +) +Symbol('9' 12) +( + SymbolLine(0 50 20 30 8) + SymbolLine(20 15 20 30 8) + SymbolLine(15 10 20 15 8) + SymbolLine(5 10 15 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 20 30 8) +) +Symbol(':' 12) +( + SymbolLine(0 25 5 25 8) + SymbolLine(0 35 5 35 8) +) +Symbol(';' 12) +( + SymbolLine(0 50 10 40 8) + SymbolLine(10 25 10 30 8) +) +Symbol('<' 12) +( + SymbolLine(0 30 10 20 8) + SymbolLine(0 30 10 40 8) +) +Symbol('=' 12) +( + SymbolLine(0 25 20 25 8) + SymbolLine(0 35 20 35 8) +) +Symbol('>' 12) +( + SymbolLine(0 20 10 30 8) + SymbolLine(0 40 10 30 8) +) +Symbol('?' 12) +( + SymbolLine(10 30 10 35 8) + SymbolLine(10 45 10 50 8) + SymbolLine(0 15 0 20 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 20 8) + SymbolLine(10 30 20 20 8) +) +Symbol('@' 12) +( + SymbolLine(0 10 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 40 50 8) + SymbolLine(50 35 50 10 8) + SymbolLine(50 10 40 0 8) + SymbolLine(40 0 10 0 8) + SymbolLine(10 0 0 10 8) + SymbolLine(15 20 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 30 35 8) + SymbolLine(30 35 35 30 8) + SymbolLine(35 30 40 35 8) + SymbolLine(35 30 35 15 8) + SymbolLine(35 20 30 15 8) + SymbolLine(20 15 30 15 8) + SymbolLine(20 15 15 20 8) + SymbolLine(40 35 50 35 8) +) +Symbol('A' 12) +( + SymbolLine(0 15 0 50 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 50 8) + SymbolLine(0 30 25 30 8) +) +Symbol('B' 12) +( + SymbolLine(0 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 30 25 35 8) + SymbolLine(5 30 20 30 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) +) +Symbol('C' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 20 10 8) +) +Symbol('D' 12) +( + SymbolLine(5 10 5 50 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(0 50 20 50 8) + SymbolLine(0 10 20 10 8) +) +Symbol('E' 12) +( + SymbolLine(0 30 15 30 8) + SymbolLine(0 50 20 50 8) + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 20 10 8) +) +Symbol('F' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(0 30 15 30 8) +) +Symbol('G' 12) +( + SymbolLine(20 10 25 15 8) + SymbolLine(5 10 20 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 30 25 35 8) + SymbolLine(10 30 20 30 8) +) +Symbol('H' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(25 10 25 50 8) + SymbolLine(0 30 25 30 8) +) +Symbol('I' 12) +( + SymbolLine(0 10 10 10 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 50 10 50 8) +) +Symbol('J' 12) +( + SymbolLine(0 10 15 10 8) + SymbolLine(15 10 15 45 8) + SymbolLine(10 50 15 45 8) + SymbolLine(5 50 10 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('K' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 30 20 10 8) + SymbolLine(0 30 20 50 8) +) +Symbol('L' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 20 50 8) +) +Symbol('M' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 15 25 8) + SymbolLine(15 25 30 10 8) + SymbolLine(30 10 30 50 8) +) +Symbol('N' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 25 40 8) + SymbolLine(25 10 25 50 8) +) +Symbol('O' 12) +( + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('P' 12) +( + SymbolLine(5 10 5 50 8) + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) + SymbolLine(5 30 20 30 8) +) +Symbol('Q' 12) +( + SymbolLine(0 15 0 45 8) + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 15 10 8) + SymbolLine(15 10 20 15 8) + SymbolLine(20 15 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(10 40 20 50 8) +) +Symbol('R' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(20 10 25 15 8) + SymbolLine(25 15 25 25 8) + SymbolLine(20 30 25 25 8) + SymbolLine(5 30 20 30 8) + SymbolLine(5 10 5 50 8) + SymbolLine(5 30 25 50 8) +) +Symbol('S' 12) +( + SymbolLine(20 10 25 15 8) + SymbolLine(5 10 20 10 8) + SymbolLine(0 15 5 10 8) + SymbolLine(0 15 0 25 8) + SymbolLine(0 25 5 30 8) + SymbolLine(5 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('T' 12) +( + SymbolLine(0 10 20 10 8) + SymbolLine(10 10 10 50 8) +) +Symbol('U' 12) +( + SymbolLine(0 10 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 10 20 45 8) +) +Symbol('V' 12) +( + SymbolLine(0 10 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(20 10 20 40 8) +) +Symbol('W' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 15 35 8) + SymbolLine(15 35 30 50 8) + SymbolLine(30 10 30 50 8) +) +Symbol('X' 12) +( + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 25 40 8) + SymbolLine(25 40 25 50 8) + SymbolLine(0 40 0 50 8) + SymbolLine(0 40 25 15 8) + SymbolLine(25 10 25 15 8) +) +Symbol('Y' 12) +( + SymbolLine(0 10 0 15 8) + SymbolLine(0 15 10 25 8) + SymbolLine(10 25 20 15 8) + SymbolLine(20 10 20 15 8) + SymbolLine(10 25 10 50 8) +) +Symbol('Z' 12) +( + SymbolLine(0 10 25 10 8) + SymbolLine(25 10 25 15 8) + SymbolLine(0 40 25 15 8) + SymbolLine(0 40 0 50 8) + SymbolLine(0 50 25 50 8) +) +Symbol('[' 12) +( + SymbolLine(0 10 5 10 8) + SymbolLine(0 10 0 50 8) + SymbolLine(0 50 5 50 8) +) +Symbol('\' 12) +( + SymbolLine(0 15 30 45 8) +) +Symbol(']' 12) +( + SymbolLine(0 10 5 10 8) + SymbolLine(5 10 5 50 8) + SymbolLine(0 50 5 50 8) +) +Symbol('^' 12) +( + SymbolLine(0 15 5 10 8) + SymbolLine(5 10 10 15 8) +) +Symbol('_' 12) +( + SymbolLine(0 50 20 50 8) +) +Symbol('a' 12) +( + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(20 30 20 45 8) + SymbolLine(20 45 25 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('b' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) +) +Symbol('c' 12) +( + SymbolLine(5 30 20 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 20 50 8) +) +Symbol('d' 12) +( + SymbolLine(20 10 20 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) +) +Symbol('e' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(0 45 5 50 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(0 40 20 40 8) + SymbolLine(20 40 20 35 8) +) +Symbol('f' 10) +( + SymbolLine(5 15 5 50 8) + SymbolLine(5 15 10 10 8) + SymbolLine(10 10 15 10 8) + SymbolLine(0 30 10 30 8) +) +Symbol('g' 12) +( + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(0 60 5 65 8) + SymbolLine(5 65 15 65 8) + SymbolLine(15 65 20 60 8) + SymbolLine(20 30 20 60 8) +) +Symbol('h' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) +) +Symbol('i' 10) +( + SymbolLine(0 20 0 25 8) + SymbolLine(0 35 0 50 8) +) +Symbol('j' 10) +( + SymbolLine(5 20 5 25 8) + SymbolLine(5 35 5 60 8) + SymbolLine(0 65 5 60 8) +) +Symbol('k' 12) +( + SymbolLine(0 10 0 50 8) + SymbolLine(0 35 15 50 8) + SymbolLine(0 35 10 25 8) +) +Symbol('l' 10) +( + SymbolLine(0 10 0 45 8) + SymbolLine(0 45 5 50 8) +) +Symbol('m' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) + SymbolLine(20 35 25 30 8) + SymbolLine(25 30 30 30 8) + SymbolLine(30 30 35 35 8) + SymbolLine(35 35 35 50 8) + SymbolLine(0 30 5 35 8) +) +Symbol('n' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 50 8) + SymbolLine(0 30 5 35 8) +) +Symbol('o' 12) +( + SymbolLine(0 35 0 45 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 15 30 8) + SymbolLine(15 30 20 35 8) + SymbolLine(20 35 20 45 8) + SymbolLine(15 50 20 45 8) + SymbolLine(5 50 15 50 8) + SymbolLine(0 45 5 50 8) +) +Symbol('p' 12) +( + SymbolLine(5 35 5 65 8) + SymbolLine(0 30 5 35 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(25 35 25 45 8) + SymbolLine(20 50 25 45 8) + SymbolLine(10 50 20 50 8) + SymbolLine(5 45 10 50 8) +) +Symbol('q' 12) +( + SymbolLine(20 35 20 65 8) + SymbolLine(15 30 20 35 8) + SymbolLine(5 30 15 30 8) + SymbolLine(0 35 5 30 8) + SymbolLine(0 35 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('r' 12) +( + SymbolLine(5 35 5 50 8) + SymbolLine(5 35 10 30 8) + SymbolLine(10 30 20 30 8) + SymbolLine(0 30 5 35 8) +) +Symbol('s' 12) +( + SymbolLine(5 50 20 50 8) + SymbolLine(20 50 25 45 8) + SymbolLine(20 40 25 45 8) + SymbolLine(5 40 20 40 8) + SymbolLine(0 35 5 40 8) + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 20 30 8) + SymbolLine(20 30 25 35 8) + SymbolLine(0 45 5 50 8) +) +Symbol('t' 10) +( + SymbolLine(5 10 5 45 8) + SymbolLine(5 45 10 50 8) + SymbolLine(0 25 10 25 8) +) +Symbol('u' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) + SymbolLine(20 30 20 45 8) +) +Symbol('v' 12) +( + SymbolLine(0 30 0 40 8) + SymbolLine(0 40 10 50 8) + SymbolLine(10 50 20 40 8) + SymbolLine(20 30 20 40 8) +) +Symbol('w' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(5 50 10 50 8) + SymbolLine(10 50 15 45 8) + SymbolLine(15 30 15 45 8) + SymbolLine(15 45 20 50 8) + SymbolLine(20 50 25 50 8) + SymbolLine(25 50 30 45 8) + SymbolLine(30 30 30 45 8) +) +Symbol('x' 12) +( + SymbolLine(0 30 20 50 8) + SymbolLine(0 50 20 30 8) +) +Symbol('y' 12) +( + SymbolLine(0 30 0 45 8) + SymbolLine(0 45 5 50 8) + SymbolLine(20 30 20 60 8) + SymbolLine(15 65 20 60 8) + SymbolLine(5 65 15 65 8) + SymbolLine(0 60 5 65 8) + SymbolLine(5 50 15 50 8) + SymbolLine(15 50 20 45 8) +) +Symbol('z' 12) +( + SymbolLine(0 30 20 30 8) + SymbolLine(0 50 20 30 8) + SymbolLine(0 50 20 50 8) +) +Symbol('{' 12) +( + SymbolLine(5 15 10 10 8) + SymbolLine(5 15 5 25 8) + SymbolLine(0 30 5 25 8) + SymbolLine(0 30 5 35 8) + SymbolLine(5 35 5 45 8) + SymbolLine(5 45 10 50 8) +) +Symbol('|' 12) +( + SymbolLine(0 10 0 50 8) +) +Symbol('}' 12) +( + SymbolLine(0 10 5 15 8) + SymbolLine(5 15 5 25 8) + SymbolLine(5 25 10 30 8) + SymbolLine(5 35 10 30 8) + SymbolLine(5 35 5 45 8) + SymbolLine(0 50 5 45 8) +) +Symbol('~' 12) +( + SymbolLine(0 35 5 30 8) + SymbolLine(5 30 10 30 8) + SymbolLine(10 30 15 35 8) + SymbolLine(15 35 20 35 8) + SymbolLine(20 35 25 30 8) +) +Via[156000 89000 2700 2000 0 1300 "" ""] +Via[166000 90000 2700 2000 0 1300 "" ""] +Via[173900 107200 2700 1400 0 1300 "" ""] +Via[175900 110500 2700 1400 0 1300 "" ""] +Via[143200 110548 2700 1400 0 1300 "" ""] +Via[141600 107200 2700 1400 0 1300 "" ""] +Via[144900 114200 2700 1400 0 1300 "" ""] +Via[137700 124100 2700 1400 0 1300 "" "thermal(1X)"] +Via[179500 109200 2700 1400 0 1300 "" ""] +Via[149200 118100 2700 1400 0 1300 "" "thermal(1X)"] +Via[168100 104000 2700 1400 0 1300 "" "thermal(1X)"] +Via[190100 98300 2700 1400 0 1300 "" "thermal(0X,1X)"] +Via[203000 133500 2700 1400 0 1300 "" ""] +Via[196000 140500 2700 1400 0 1300 "" ""] +Via[206500 130000 2700 1400 0 1300 "" ""] +Via[199500 137000 2700 1400 0 1300 "" ""] +Via[201000 144000 2700 1400 0 1300 "" ""] +Via[208000 111000 2700 1400 0 1300 "" ""] +Via[211500 109000 2700 1400 0 1300 "" ""] +Via[212500 130000 2700 1400 0 1300 "" ""] +Via[209500 133000 2700 1400 0 1300 "" ""] + +Element["hidename" "14.fp" "J1" "unknown" 220000 80000 -13000 -3000 0 100 ""] +( + Pin[0 0 6000 3000 6600 3800 "1" "1" "square"] + Pin[10000 0 6000 3000 6600 3800 "2" "2" ""] + Pin[0 10000 6000 3000 6600 3800 "3" "3" ""] + Pin[10000 10000 6000 3000 6600 3800 "4" "4" ""] + Pin[0 20000 6000 3000 6600 3800 "5" "5" ""] + Pin[10000 20000 6000 3000 6600 3800 "6" "6" ""] + Pin[0 30000 6000 3000 6600 3800 "7" "7" ""] + Pin[10000 30000 6000 3000 6600 3800 "8" "8" ""] + Pin[0 40000 6000 3000 6600 3800 "9" "9" "thermal(1X)"] + Pin[10000 40000 6000 3000 6600 3800 "10" "10" ""] + Pin[0 50000 6000 3000 6600 3800 "11" "11" ""] + Pin[10000 50000 6000 3000 6600 3800 "12" "12" ""] + Pin[0 60000 6000 3000 6600 3800 "13" "13" ""] + Pin[10000 60000 6000 3000 6600 3800 "14" "14" ""] + ElementLine [-5000 -5000 -5000 65000 1000] + ElementLine [-5000 65000 15000 65000 1000] + ElementLine [15000 -5000 15000 65000 1000] + ElementLine [-5000 -5000 15000 -5000 1000] + ElementLine [-5000 5000 5000 5000 1000] + ElementLine [5000 -5000 5000 5000 1000] + + ) + +Element["hidename" "HC49" "X1" "unknown" 156000 79000 27500 -2500 0 100 ""] +( + Pin[0 0 6000 3000 6600 2800 "1" "1" "square,edge2"] + Pin[20000 0 6000 3000 6600 2800 "2" "2" "edge2"] + ElementLine [0 5000 20000 5000 1000] + ElementLine [0 -5000 20000 -5000 1000] + ElementArc [20000 0 5000 5000 90 180 1000] + ElementArc [0 0 5000 5000 270 180 1000] + + ) + +Element["" "0603" "C5" "0.1uF" 147548 104900 2 -5109 1 100 ""] +( + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C4" "0.1uF" 203500 120941 -9150 5732 0 100 ""] +( + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "0603" "D1" "unknown" 152941 134000 -11650 -3709 0 100 ""] +( + Pad[2559 -492 2559 492 2952 2000 3552 "1" "1" "square"] + Pad[-2559 -492 -2559 492 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "HEADER2_1" "SBW" "unknown" 140000 80000 -7000 -4000 3 100 ""] +( + Pin[0 0 6000 3000 6600 3800 "1" "1" "square"] + Pin[0 10000 6000 3000 6600 3800 "2" "2" ""] + ElementLine [-5000 -5000 5000 -5000 1000] + ElementLine [-5000 -5000 -5000 15000 1000] + ElementLine [-5000 15000 5000 15000 1000] + ElementLine [5000 -5000 5000 15000 1000] + ElementLine [-5000 -5000 -5000 5000 1000] + ElementLine [-5000 5000 5000 5000 1000] + + ) + +Element["" "0603" "C6" "0.1uF" 190100 92600 5350 -2150 0 100 ""] +( + Pad[-2559 -492 -2559 492 2952 2000 3552 "1" "1" "square"] + Pad[2559 -492 2559 492 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "0603" "C1" "22pF" 171500 89441 -1850 -2150 3 100 ""] +( + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C2" "22pF" 177000 89441 2850 5150 1 100 ""] +( + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "R2" "330" 138000 141000 -11591 -2709 0 100 ""] +( + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "R1" "1k" 140227 116799 250 -16391 3 100 ""] +( + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "USB_MICRO_B" "U1" "unknown" 119001 114223 6102 16928 0 100 ""] +( + Pad[-197 -15748 197 -15748 7086 2755 7874 "shell1" "shell1" "square"] + Pad[-197 15748 197 15748 7086 2755 7874 "shell4" "shell4" "square"] + Pad[9055 0 15354 0 1575 2755 2362 "D+" "3" "square,edge2"] + Pad[9055 2560 15354 2560 1575 2755 2362 "ID" "4" "square,edge2"] + Pad[9055 5119 15354 5119 1575 2755 2362 "GND" "5" "square,edge2"] + Pad[9055 -2559 15354 -2559 1575 2755 2362 "D-" "2" "square,edge2"] + Pad[9055 -5118 15354 -5118 1575 2755 2362 "+5V" "1" "square,edge2"] + Pad[-1 -4723 -1 -4723 7480 2755 8267 "shell2" "shell2" "square"] + Pad[-1 4725 -1 4725 7480 2755 8267 "shell3" "shell3" "square"] + ElementLine [4724 -15748 13386 -15748 1000] + ElementLine [13386 -15748 13386 -7283 1000] + ElementLine [7480 -7283 13386 -7283 1000] + ElementLine [7480 -7283 7480 6890 1000] + ElementLine [7480 6890 13386 6890 1000] + ElementLine [13386 6890 13386 15749 1000] + ElementLine [4724 15749 13386 15749 1000] + ElementLine [-5709 -15748 -4528 -15748 1000] + ElementLine [-5709 -15748 -5709 15749 1000] + ElementLine [-5709 15749 -4529 15749 1000] + + ) + +Element["hidename" "0603" "D2" "unknown" 152941 139000 -11532 -3032 0 100 ""] +( + Pad[2559 -492 2559 492 2952 2000 3552 "1" "1" "square"] + Pad[-2559 -492 -2559 492 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "0603" "D3" "unknown" 152941 144000 -11327 -2591 0 100 ""] +( + Pad[2559 -492 2559 492 2952 2000 3552 "1" "1" "square"] + Pad[-2559 -492 -2559 492 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C3" "0.1uF" 145500 125000 -1909 -1591 3 100 ""] +( + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["hidename" "LQFP48_7" "U3" "unknown" 171000 115000 3000 -3000 3 100 ""] +( + Pad[-18228 -10826 -14830 -10826 1102 3000 1402 "P6.0 (A0/CB0)" "1" "square"] + Pad[-18228 -8858 -14830 -8858 1102 3000 1402 "P6.1 (A1/CB1)" "2" "square"] + Pad[-18228 -6889 -14830 -6889 1102 3000 1402 "P6.2 (A2/CB2)" "3" "square"] + Pad[-18228 -4921 -14830 -4921 1102 3000 1402 "P6.3 (A3/CB3)" "4" "square"] + Pad[-18228 -2952 -14830 -2952 1102 3000 1402 "P5.0 (A8/VeREF+)" "5" "square"] + Pad[-18228 -984 -14830 -984 1102 3000 1402 "P5.1 (A9/VeREF-)" "6" "square"] + Pad[-18228 985 -14830 985 1102 3000 1402 "AVCC1" "7" "square"] + Pad[-18228 2953 -14830 2953 1102 3000 1402 "P5.4 (XIN)" "8" "square"] + Pad[-18228 4922 -14830 4922 1102 3000 1402 "P5.5 (XOUT)" "9" "square"] + Pad[-18228 6890 -14830 6890 1102 3000 1402 "AVSS1" "10" "square"] + Pad[-18228 8859 -14830 8859 1102 3000 1402 "DVCC1" "11" "square"] + Pad[-18228 10827 -14830 10827 1102 3000 1402 "DVSS1" "12" "square"] + Pad[-10826 14830 -10826 18228 1102 3000 1402 "VCORE" "13" "square,octagon,edge2"] + Pad[-8858 14830 -8858 18228 1102 3000 1402 "P1.0 (TA0CLK/ACLK)" "14" "square,octagon,edge2"] + Pad[-6889 14830 -6889 18228 1102 3000 1402 "P1.1 (TA0.0)" "15" "square,octagon,edge2"] + Pad[-4921 14830 -4921 18228 1102 3000 1402 "P1.2 (TA0.1)" "16" "square,octagon,edge2"] + Pad[-2952 14830 -2952 18228 1102 3000 1402 "P1.3 (TA0.2)" "17" "square,octagon,edge2"] + Pad[-984 14830 -984 18228 1102 3000 1402 "P1.4 (TA0.3)" "18" "square,octagon,edge2"] + Pad[985 14830 985 18228 1102 3000 1402 "P1.5 (TA0.4)" "19" "square,octagon,edge2"] + Pad[2953 14830 2953 18228 1102 3000 1402 "P1.6 (TA1CLK/CBOUT)" "20" "square,octagon,edge2"] + Pad[4922 14830 4922 18228 1102 3000 1402 "P1.7 (TA1.0)" "21" "square,octagon,edge2"] + Pad[6890 14830 6890 18228 1102 3000 1402 "P2.0 (TA1.1)" "22" "square,octagon,edge2"] + Pad[8859 14830 8859 18228 1102 3000 1402 "PJ.0 (TDO)" "23" "square,octagon,edge2"] + Pad[10827 14830 10827 18228 1102 3000 1402 "PJ.1 (TDI/TCLK)" "24" "square,octagon,edge2"] + Pad[14830 10826 18228 10826 1102 3000 1402 "(TMS) PJ.2" "25" "square,edge2"] + Pad[14830 8858 18228 8858 1102 3000 1402 "(TCK) PJ.3" "26" "square,edge2"] + Pad[14830 6889 18228 6889 1102 3000 1402 "DVSS2" "27" "square,edge2"] + Pad[14830 4921 18228 4921 1102 3000 1402 "DVCC2" "28" "square,edge2"] + Pad[14830 2952 18228 2952 1102 3000 1402 "(UCB1_STE/UCA1_SCLK) P4.0" "29" "square,edge2"] + Pad[14830 984 18228 984 1102 3000 1402 "(UCB1_MOSI/UCB1_SDA) P4.1" "30" "square,edge2"] + Pad[14830 -985 18228 -985 1102 3000 1402 "(UCB1_MISO/UCB1_SCL) P4.2" "31" "square,edge2"] + Pad[14830 -2953 18228 -2953 1102 3000 1402 "(UCB1_SCLK/UCA1_STE) P4.3" "32" "square,edge2"] + Pad[14830 -4922 18228 -4922 1102 3000 1402 "(UCA1_TXD/UCA1_MOSI) P4.4" "33" "square,edge2"] + Pad[14830 -6890 18228 -6890 1102 3000 1402 "(UCA1_RXD/UCA1_MISO) P4.5" "34" "square,edge2"] + Pad[14830 -8859 18228 -8859 1102 3000 1402 "P4.6" "35" "square,edge2"] + Pad[14830 -10827 18228 -10827 1102 3000 1402 "P4.7" "36" "square,edge2"] + Pad[10826 -18228 10826 -14830 1102 3000 1402 "VSSU" "37" "square,octagon"] + Pad[8858 -18228 8858 -14830 1102 3000 1402 "(D+) PU.0" "38" "square,octagon"] + Pad[6889 -18228 6889 -14830 1102 3000 1402 "PUR" "39" "square,octagon"] + Pad[4921 -18228 4921 -14830 1102 3000 1402 "(D-) PU.1" "40" "square,octagon"] + Pad[2952 -18228 2952 -14830 1102 3000 1402 "VBUS" "41" "square,octagon"] + Pad[984 -18228 984 -14830 1102 3000 1402 "VUSB" "42" "square,octagon"] + Pad[-985 -18228 -985 -14830 1102 3000 1402 "V18" "43" "square,octagon"] + Pad[-2953 -18228 -2953 -14830 1102 3000 1402 "AVSS2" "44" "square,octagon"] + Pad[-4922 -18228 -4922 -14830 1102 3000 1402 "(XT2IN) P5.2" "45" "square,octagon"] + Pad[-6890 -18228 -6890 -14830 1102 3000 1402 "(XT2OUT) P5.3" "46" "square,octagon"] + Pad[-8859 -18228 -8859 -14830 1102 3000 1402 "TEST/SBWTCK" "47" "square,octagon"] + Pad[-10827 -18228 -10827 -14830 1102 3000 1402 "RST/NMI/SBWTDIO" "48" "square,octagon"] + ElementLine [-10479 -13379 13379 -13379 800] + ElementLine [13379 -13379 13379 13379 800] + ElementLine [-13379 13379 13379 13379 800] + ElementLine [-13379 -10479 -13379 13379 800] + ElementLine [-13379 -10479 -10479 -13379 800] + ElementArc [-10479 -10479 1000 1000 0 360 800] + + ) +Layer(1 "component") +( + Line[156000 89000 156000 91000 700 2000 "clearline"] + Line[156000 91000 158000 93000 700 2000 "clearline"] + Line[158000 93000 163000 93000 700 2000 "clearline"] + Line[163000 93000 164000 94000 700 2000 "clearline"] + Line[164000 94000 164000 98361 700 2000 "clearline"] + Line[164000 98361 164110 98471 1000 2000 "clearline"] + Line[166078 98471 166078 90078 700 2000 "clearline"] + Line[166078 90078 166000 90000 1000 2000 "clearline"] + Line[156000 79000 162000 79000 700 2000 "clearline"] + Line[162000 79000 170000 87000 700 2000 "clearline"] + Line[176000 79000 176000 86441 700 2000 "clearline"] + Line[176000 86441 177000 87441 700 2000 "clearline"] + Line[142084 111664 143200 110548 700 1400 "clearline"] + Line[139735 119358 142759 122382 700 1400 "clearline"] + Line[168047 94047 168000 94000 700 2000 "clearline"] + Line[168000 94000 169000 93000 700 2000 "clearline"] + Line[169000 93000 170000 93000 700 2000 "clearline"] + Line[162141 98471 162141 95141 700 2000 "clearline"] + Line[162141 95141 162000 95000 700 2000 "clearline"] + Line[162000 95000 153000 95000 700 2000 "clearline"] + Line[153000 95000 149000 91000 700 2000 "clearline"] + Line[149000 91000 149000 83000 700 2000 "clearline"] + Line[149000 83000 146000 80000 700 2000 "clearline"] + Line[146000 80000 140000 80000 700 2000 "clearline"] + Line[142759 122382 145500 122382 700 1400 "clearline"] + Line[168047 94047 168047 98471 700 1400 "clearline"] + Line[173952 107148 173952 98471 700 1400 "clearline,rubberend"] + Line[173900 107200 173952 107148 700 1400 "clearline"] + Line[171079 119921 171000 120000 700 1400 "clearline"] + Line[152772 125827 151099 127500 700 1400 "clearline"] + Line[168141 123859 146977 123859 700 1400 "clearline"] + Line[146977 123859 145500 122382 700 1400 "clearline"] + Line[175921 96772 175921 105406 700 1400 "clearline"] + Line[141100 107200 139243 109105 700 1400 "clearline"] + Line[179100 108700 179858 107942 700 1400 "clearline"] + Line[170015 96772 170015 95485 700 1400 "clearline"] + Line[170015 95485 170673 94827 700 1400 "clearline"] + Line[170673 94827 185314 94827 700 1400 "clearline"] + Line[185314 94827 187541 92600 700 1400 "clearline"] + Line[171008 92000 177000 92000 700 1400 "clearline"] + Line[171984 96772 171984 104516 700 1400 "clearline"] + Line[171984 104516 171000 105500 700 1400 "clearline"] + Line[170985 115985 154471 115985 700 1400 "clearline"] + Line[171000 116000 170985 115985 700 1400 "clearline"] + Line[171000 105500 171000 121000 700 1400 "clearline"] + Line[132942 119342 141100 127500 700 1400 "clearline"] + Line[168141 123859 171000 121000 700 1400 "clearline"] + Line[200000 123500 198389 121889 700 1400 "clearline"] + Line[128056 114223 144925 114223 700 1400 "clearline"] + Line[128056 109105 139243 109105 700 1400 "clearline"] + Line[128056 111664 142084 111664 700 1400 "clearline"] + Line[179858 98471 179858 107942 700 1400 "clearline"] + Line[128056 119342 132942 119342 700 1400 "clearline"] + Line[151099 127500 141100 127500 700 1400 "clearline"] + Line[175900 110500 176300 110100 700 1400 "clearline"] + Line[175900 110500 176600 109800 700 1400 "clearline"] + Line[176600 109800 176600 107274 700 1400 "clearline"] + Line[175900 105300 176600 106000 700 1400 "clearline"] + Line[176600 106000 176600 107126 700 1400 "clearline"] + Line[140000 90000 148471 98471 700 1400 "clearline"] + Line[148471 98471 160173 98471 700 1400 "clearline"] + Line[141600 107200 146459 102341 700 1400 "clearline"] + Line[146459 102341 147548 102341 700 1400 "clearline"] + Line[147056 107459 149200 109603 700 1400 "clearline"] + Line[151110 121890 154471 121890 700 1400 "clearline"] + Line[149200 109603 149200 120100 700 1400 "clearline"] + Line[149200 120100 151000 121900 700 1400 "clearline"] + Line[168047 96772 168100 96825 700 1400 "clearline"] + Line[168100 96825 168100 103800 700 1400 "clearline"] + Line[181826 98372 190128 98372 700 1400 "clearline"] + Line[190128 98372 192659 95841 700 1400 "clearline"] + Line[192659 95841 192659 92600 700 1400 "clearline"] + Line[177890 129830 177890 138390 700 1400 "clearline"] + Line[179859 129830 179859 136859 700 1400 "clearline"] + Line[177890 138390 183500 144000 700 1400 "clearline"] + Line[201961 119921 203500 118382 700 1400 "clearline"] + Line[179859 136859 183500 140500 700 1400 "clearline"] + Line[183500 140500 196000 140500 700 1400 "clearline"] + Line[181827 129830 181827 135827 700 1400 "clearline"] + Line[181827 135827 183000 137000 700 1400 "clearline"] + Line[183000 137000 199500 137000 700 1400 "clearline"] + Line[185830 125826 195326 125826 700 1400 "clearline"] + Line[195326 125826 203000 133500 700 1400 "clearline"] + Line[206500 130000 201906 130000 700 1400 "clearline"] + Line[201906 130000 195764 123858 700 1400 "clearline"] + Line[195764 123858 187529 123858 700 1400 "clearline"] + Line[185830 121889 198389 121889 700 1400 "clearline"] + Line[200000 123500 203500 123500 700 1400 "clearline"] + Line[171079 119921 201961 119921 700 1400 "clearline"] + Line[183500 144000 201000 144000 700 1400 "clearline"] + Line[149941 143559 138000 143559 700 1200 "clearline"] + Line[211110 108610 211500 109000 700 1400 "clearline"] + Line[207078 110078 208000 111000 700 1400 "clearline"] + Line[185830 110078 207078 110078 700 1400 "clearline"] + Line[185830 108110 210610 108110 700 1400 "clearline"] + Line[210610 108110 211500 109000 700 1400 "clearline"] + Line[212500 130000 217500 135000 700 1200 "clearline"] + Line[217500 135000 225000 135000 700 1200 "clearline"] + Line[225000 135000 230000 130000 700 1200 "clearline"] + Line[230000 130000 227000 133000 700 1200 "clearline"] + Line[209500 133000 209500 141500 700 1200 "clearline"] + Line[209500 141500 213500 145500 700 1200 "clearline"] + Line[213500 145500 224500 145500 700 1200 "clearline"] + Line[224500 145500 230000 140000 700 1200 "clearline"] + Line[185830 115984 192016 115984 700 1200 "clearline"] + Line[184500 101500 196000 101500 700 1200 "clearline"] + Line[192016 115984 194299 113701 700 1200 "clearline"] + Line[182500 120000 182500 103500 700 1200 "clearline"] + Line[182500 103500 184500 101500 700 1200 "clearline"] + Line[225000 95000 202500 95000 700 1200 "clearline"] + Line[185830 117952 196048 117952 700 1200 "clearline"] + Line[196048 117952 198500 115500 700 1200 "clearline"] + Line[214500 111000 214500 108000 700 1200 "clearline"] + Line[214500 108000 217500 105000 700 1200 "clearline"] + Line[217500 105000 225000 105000 700 1200 "clearline"] + Line[225000 105000 230000 110000 700 1200 "clearline"] + Line[230000 80000 230000 90000 700 1200 "clearline"] + Line[230000 90000 225000 95000 700 1200 "clearline"] + Line[196000 101500 202500 95000 700 1200 "clearline"] + Line[194299 113701 211799 113701 700 1200 "clearline"] + Line[211799 113701 214500 111000 700 1200 "clearline"] + Line[198500 115500 225500 115500 700 1200 "clearline"] + Line[225500 115500 230000 120000 700 1200 "clearline"] + Line[203008 123500 216500 123500 700 1200 "clearline"] + Line[216500 123500 220000 120000 700 1200 "clearline"] + Line[137508 138441 137700 138249 700 1200 "clearline"] + Line[163836 134664 163000 135500 700 1200 "clearline"] + Line[137700 138249 137700 124100 700 1200 "clearline"] + Line[157000 135500 155500 134000 700 1200 "clearline"] + Line[163000 135500 157000 135500 700 1200 "clearline"] + Line[164111 129830 164111 134225 700 1200 "clearline"] + Line[164111 134225 163836 134500 700 1200 "clearline"] + Line[166079 129830 166079 136421 700 1200 "clearline"] + Line[166079 136421 163500 139000 700 1200 "clearline"] + Line[163500 139000 155500 139000 700 1200 "clearline"] + Line[168048 129830 168048 139452 700 1200 "clearline"] + Line[168048 139452 163500 144000 700 1200 "clearline"] + Line[163500 144000 155500 144000 700 1200 "clearline"] + Line[163836 134500 163836 134664 700 1200 "clearline"] + Line[150382 133508 150382 144000 700 1200 "clearline"] + Line[150382 144000 149941 143559 700 1200 "clearline"] +) +Layer(2 "solder") +( + Line[156000 79000 156000 89000 1000 2000 "clearline"] + Line[176000 79000 176000 87000 1000 2000 "clearline"] + Line[176000 87000 173000 90000 1000 2000 "clearline"] + Line[173000 90000 166000 90000 1000 2000 "clearline"] + Line[143200 110500 175900 110500 700 1400 "clearline"] + Line[140700 107200 173900 107200 700 1400 "clearline,rubberend"] + Line[144900 114200 176600 114200 700 1400 "clearline"] + Line[176600 114200 179100 111700 700 1400 "clearline"] + Line[179100 111700 179100 108700 700 1400 "clearline"] + Line[211500 109000 212500 110000 700 1402 "clearline"] + Line[209500 112500 209500 133000 700 1402 "clearline"] + Line[208000 111000 209500 112500 700 1402 "clearline"] + Line[212500 110000 212500 130000 700 1402 "clearline"] + Line[201000 144000 206000 144000 700 1402 "clearline"] + Line[206000 144000 220000 130000 700 1402 "clearline"] + Line[196000 140500 196000 85500 700 1402 "clearline"] + Line[196000 85500 201500 80000 700 1402 "clearline"] + Line[201500 80000 220000 80000 700 1402 "clearline"] + Line[199500 137000 199500 93500 700 1402 "clearline"] + Line[199500 93500 203000 90000 700 1402 "clearline"] + Line[203000 90000 220000 90000 700 1402 "clearline"] + Line[203000 133500 203000 101500 700 1402 "clearline"] + Line[203000 101500 204500 100000 700 1402 "clearline"] + Line[204500 100000 220000 100000 700 1402 "clearline"] + Line[206500 130000 206500 116000 700 1402 "clearline"] + Line[206500 116000 205500 115000 700 1402 "clearline"] + Line[215500 105500 220000 110000 700 1402 "clearline"] + Line[206701 105500 215500 105500 700 1402 "clearline"] + Line[206700 105500 205100 107100 700 1402 "clearline"] + Line[205100 114500 205100 107100 700 1402 "clearline"] + Line[205500 115000 205100 114500 700 1402 "clearline"] + Text[118000 137000 0 88 "thequux@gmail.com" "clearline,auto"] + Text[117999 144029 0 88 "Dan Hirsch" "clearline,auto"] + Text[150000 144000 0 88 "+1(256)415-7889" "clearline,auto"] + Text[119000 101000 0 100 "http://goodfet.sf.net" "clearline,auto"] + Polygon("clearpoly,lock") + ( + [115500 74000] [236000 74000] [236000 146000] [115500 146000] + ) +) +Layer(3 "outline") +( + Line[237000 147000 237000 73000 1000 2000 "clearline"] + Line[114500 147000 237000 147000 1000 2000 "clearline"] + Line[114500 73000 114500 147000 1000 2000 "clearline"] + Line[237000 73000 114500 73000 1000 2000 "clearline"] +) +Layer(4 "GND") +( +) +Layer(5 "power") +( +) +Layer(6 "signal1") +( +) +Layer(7 "signal2") +( +) +Layer(8 "signal3") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( + Line[137000 106500 139000 112000 700 1200 "clearline"] + Line[156000 130500 150000 130500 700 1200 "clearline"] + Line[150000 130500 152000 128500 700 1200 "clearline"] + Text[161500 138500 0 100 "GoodFET50" "clearline"] + Text[126000 91500 1 122 "SBW" "clearline"] + Text[167000 121500 0 122 "5510" "clearline"] +) +NetList() +( + Net("+3V3" "(unknown)") + ( + Connect("C3-2") + Connect("C4-1") + Connect("J1-2") + Connect("J1-4") + Connect("R1-2") + Connect("U3-7") + Connect("U3-11") + Connect("U3-28") + Connect("U3-42") + ) + Net("+5V" "(unknown)") + ( + Connect("C5-2") + Connect("U1-1") + Connect("U3-41") + ) + Net("GND" "(unknown)") + ( + Connect("C1-2") + Connect("C2-1") + Connect("C3-1") + Connect("C4-2") + Connect("C5-1") + Connect("C6-2") + Connect("J1-9") + Connect("R2-1") + Connect("U1-5") + Connect("U3-10") + Connect("U3-12") + Connect("U3-27") + Connect("U3-37") + Connect("U3-44") + ) + Net("P1.1" "(unknown)") + ( + Connect("D1-1") + Connect("U3-15") + ) + Net("P1.2" "(unknown)") + ( + Connect("D2-1") + Connect("U3-16") + ) + Net("P1.3" "(unknown)") + ( + Connect("D3-1") + Connect("U3-17") + ) + Net("PUR" "(unknown)") + ( + Connect("U3-39") + ) + Net("RST" "(unknown)") + ( + Connect("J1-11") + Connect("U3-22") + ) + Net("RXD1" "(unknown)") + ( + Connect("J1-12") + Connect("U3-34") + ) + Net("SCLK1" "(unknown)") + ( + Connect("J1-10") + Connect("U3-29") + ) + Net("TCK" "(unknown)") + ( + Connect("J1-7") + Connect("U3-26") + ) + Net("TDI" "(unknown)") + ( + Connect("J1-3") + Connect("U3-24") + ) + Net("TDO" "(unknown)") + ( + Connect("J1-1") + Connect("U3-23") + ) + Net("TEST" "(unknown)") + ( + Connect("J1-8") + Connect("U3-30") + ) + Net("TMS" "(unknown)") + ( + Connect("J1-5") + Connect("U3-25") + ) + Net("TXD1" "(unknown)") + ( + Connect("J1-14") + Connect("U3-33") + ) + Net("unnamed_net1" "(unknown)") + ( + Connect("U3-13") + ) + Net("unnamed_net2" "(unknown)") + ( + Connect("C6-1") + Connect("U3-43") + ) + Net("unnamed_net3" "(unknown)") + ( + Connect("SBW-1") + Connect("U3-47") + ) + Net("unnamed_net4" "(unknown)") + ( + Connect("SBW-2") + Connect("U3-48") + ) + Net("unnamed_net5" "(unknown)") + ( + Connect("D1-2") + Connect("D2-2") + Connect("D3-2") + Connect("R2-2") + ) + Net("USBDM" "(unknown)") + ( + Connect("U1-2") + Connect("U3-40") + ) + Net("USBDP" "(unknown)") + ( + Connect("R1-1") + Connect("U1-3") + Connect("U3-38") + ) + Net("XTI" "(unknown)") + ( + Connect("C2-2") + Connect("U3-45") + Connect("X1-2") + ) + Net("XTO" "(unknown)") + ( + Connect("C1-1") + Connect("U3-46") + Connect("X1-1") + ) +) diff --git a/qa/data/pcbnew/io/geda/minimal_test.pcb b/qa/data/pcbnew/io/geda/minimal_test.pcb new file mode 100644 index 0000000000..4a2a8ac5c3 --- /dev/null +++ b/qa/data/pcbnew/io/geda/minimal_test.pcb @@ -0,0 +1,95 @@ +# release: pcb 20140316 + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20091103] + +PCB["minimal_test" 200.00mil 200.00mil] + +Grid[1000.000000 0.0000 0.0000 0] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[10.00mil 10.00mil 10.00mil 10.00mil 15.00mil 10.00mil] +Flags("nameonpcb,uniquename,clearnew,snappin") +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,10.00mil,36.00mil,20.00mil,10.00mil:Power,25.00mil,60.00mil,35.00mil,10.00mil:Fat,40.00mil,60.00mil,35.00mil,10.00mil:Skinny,6.00mil,24.02mil,11.81mil,6.00mil"] + +Symbol[' ' 18.00mil] +( +) + +Element["" "0805" "R1" "10k" 5000 5000 -2000 -3000 0 100 ""] +( + Attribute("device" "RESISTOR") + Pad[-393 -2755 393 -2755 2952 2000 3552 "1" "1" "square"] + Pad[-393 2755 393 2755 2952 2000 3552 "2" "2" "square"] + ElementLine [-1969 -3937 -1969 3937 800] + ElementLine [-1969 3937 1969 3937 800] + ElementLine [1969 3937 1969 -3937 800] + ElementLine [1969 -3937 -1969 -3937 800] + + ) + +Element["" "0603" "C1" "100nF" 15000 5000 -2000 -3000 0 100 ""] +( + Attribute("device" "CAPACITOR") + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + ElementLine [-1574 -3543 -1574 3543 800] + ElementLine [-1574 3543 1574 3543 800] + ElementLine [1574 3543 1574 -3543 800] + ElementLine [1574 -3543 -1574 -3543 800] + + ) + +Via[10000 5000 3600 2000 0 2000 "" ""] + +Layer(1 "component") +( + Line[5000 2245 10000 2245 1000 2000 "clearline"] + Line[10000 2245 10000 5000 1000 2000 "clearline"] +) +Layer(2 "solder") +( + Line[10000 5000 15000 5000 1000 2000 "clearline"] + Line[15000 5000 15000 2441 1000 2000 "clearline"] +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( +) +Layer(6 "signal2") +( +) +Layer(7 "outline") +( +) +Layer(8 "spare") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( +) +NetList() +( + Net("INPUT" "(unknown)") + ( + Connect("R1-1") + ) + Net("MID" "(unknown)") + ( + Connect("R1-2") + Connect("C1-1") + ) + Net("GND" "(unknown)") + ( + Connect("C1-2") + ) +) diff --git a/qa/data/pcbnew/io/geda/multilayer_test.pcb b/qa/data/pcbnew/io/geda/multilayer_test.pcb new file mode 100644 index 0000000000..ee114c319a --- /dev/null +++ b/qa/data/pcbnew/io/geda/multilayer_test.pcb @@ -0,0 +1,82 @@ +# release: pcb 20140316 +FileVersion[20091103] + +PCB["multilayer_test" 500.00mil 500.00mil] + +Grid[1000.000000 0.0000 0.0000 0] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[10.00mil 10.00mil 10.00mil 10.00mil 15.00mil 10.00mil] +Flags("nameonpcb,uniquename,clearnew,snappin") +Groups("1,c:2,s:3:4") +Styles["Signal,10.00mil,36.00mil,20.00mil,10.00mil:Power,25.00mil,60.00mil,35.00mil,10.00mil:Fat,40.00mil,60.00mil,35.00mil,10.00mil:Skinny,6.00mil,24.02mil,11.81mil,6.00mil"] + +Symbol[' ' 18.00mil] +( +) + +# Through-hole component +Element["" "DIP8" "U1" "OPAMP" 25000 25000 -5000 -5000 0 100 ""] +( + Pin[0 0 6000 3000 6600 2800 "1" "1" "square"] + Pin[10000 0 6000 3000 6600 2800 "2" "2" ""] + Pin[20000 0 6000 3000 6600 2800 "3" "3" ""] + Pin[30000 0 6000 3000 6600 2800 "4" "4" ""] + Pin[30000 30000 6000 3000 6600 2800 "5" "5" ""] + Pin[20000 30000 6000 3000 6600 2800 "6" "6" ""] + Pin[10000 30000 6000 3000 6600 2800 "7" "7" ""] + Pin[0 30000 6000 3000 6600 2800 "8" "8" ""] + ElementLine [-5000 -5000 35000 -5000 1000] + ElementLine [35000 -5000 35000 35000 1000] + ElementLine [35000 35000 -5000 35000 1000] + ElementLine [-5000 35000 -5000 -5000 1000] + ) + +# Through-hole resistor +Element["" "AXIAL300" "R1" "1k" 75000 25000 0 0 0 100 ""] +( + Pin[0 0 6000 3000 6600 2800 "1" "1" "square"] + Pin[30000 0 6000 3000 6600 2800 "2" "2" ""] + ElementLine [5000 -2000 25000 -2000 1000] + ElementLine [25000 -2000 25000 2000 1000] + ElementLine [25000 2000 5000 2000 1000] + ElementLine [5000 2000 5000 -2000 1000] + ElementLine [0 0 5000 0 1000] + ElementLine [25000 0 30000 0 1000] + ) + +Layer(1 "component") +( + Line[25000 25000 75000 25000 1000 2000 "clearline"] +) + +Layer(2 "solder") +( + Line[55000 25000 75000 55000 1000 2000 "clearline"] +) + +Layer(3 "inner1") +( + Line[25000 55000 75000 55000 1000 2000 "clearline"] +) + +Layer(4 "inner2") +( + Line[55000 55000 25000 25000 1000 2000 "clearline"] +) + +Via[55000 25000 6000 2000 0 2800 "" ""] + +NetList() +( + Net("GND" "(unknown)") + ( + Connect("U1-4") + Connect("R1-2") + ) + Net("VCC" "(unknown)") + ( + Connect("U1-8") + Connect("R1-1") + ) +) diff --git a/qa/data/pcbnew/io/geda/non_geda.pcb b/qa/data/pcbnew/io/geda/non_geda.pcb new file mode 100644 index 0000000000..0443cd6343 --- /dev/null +++ b/qa/data/pcbnew/io/geda/non_geda.pcb @@ -0,0 +1,7 @@ +# This is not a gEDA board file. +# It has the right extension but lacks the required header. +Some random content +that is not a valid format. +Version 1.0 +Width 100 +Height 200 diff --git a/qa/data/pcbnew/io/geda/onsolder_test.pcb b/qa/data/pcbnew/io/geda/onsolder_test.pcb new file mode 100644 index 0000000000..f3fefbc62d --- /dev/null +++ b/qa/data/pcbnew/io/geda/onsolder_test.pcb @@ -0,0 +1,38 @@ +# release: pcb 20140316 +FileVersion[20091103] + +PCB["onsolder_test" 200.00mil 200.00mil] + +Grid[1000.000000 0.0000 0.0000 0] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[10.00mil 10.00mil 10.00mil 10.00mil 15.00mil 10.00mil] +Flags("nameonpcb,uniquename,clearnew,snappin") +Groups("1,c:2,s") +Styles["Signal,10.00mil,36.00mil,20.00mil,10.00mil:Power,25.00mil,60.00mil,35.00mil,10.00mil:Fat,40.00mil,60.00mil,35.00mil,10.00mil:Skinny,6.00mil,24.02mil,11.81mil,6.00mil"] + +Symbol[' ' 18.00mil] +( +) + +# Top-side resistor (no onsolder flag) +Element["" "0805" "R1" "10k" 5000 5000 -2000 -3000 0 100 ""] +( + Pad[-393 -2755 393 -2755 2952 2000 3552 "1" "1" "square"] + Pad[-393 2755 393 2755 2952 2000 3552 "2" "2" "square"] + ElementLine [-1969 -3937 -1969 3937 800] + ElementLine [-1969 3937 1969 3937 800] + ElementLine [1969 3937 1969 -3937 800] + ElementLine [1969 -3937 -1969 -3937 800] + ) + +# Bottom-side capacitor (onsolder flag) +Element["onsolder" "0603" "C1" "100nF" 15000 5000 -2000 -3000 0 100 ""] +( + Pad[-295 -2067 295 -2067 2362 2000 2962 "1" "1" "square,onsolder"] + Pad[-295 2067 295 2067 2362 2000 2962 "2" "2" "square,onsolder"] + ElementLine [-1476 -2953 -1476 2953 800] + ElementLine [-1476 2953 1476 2953 800] + ElementLine [1476 2953 1476 -2953 800] + ElementLine [1476 -2953 -1476 -2953 800] + ) diff --git a/qa/data/pcbnew/io/geda/powermeter.pcb b/qa/data/pcbnew/io/geda/powermeter.pcb new file mode 100644 index 0000000000..ecaa990e6e --- /dev/null +++ b/qa/data/pcbnew/io/geda/powermeter.pcb @@ -0,0 +1,1858 @@ +# release: pcb 20110918 + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20070407] + +PCB["" 155000 102500] + +Grid[500.0 0 0 1] +Cursor[0 21500 0.000000] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[1000 1000 1000 1000 1400 1000] +Flags("nameonpcb,clearnew,snappin") +Groups("1,c:3,s:2:4") +Styles["Signal,1000,3600,2000,1000:Power,4000,6000,3500,1000:Fat,1600,6000,3500,1000:Skinny,600,2402,1181,600"] + +Symbol[' ' 1800] +( +) +Symbol['!' 1200] +( + SymbolLine[0 4500 0 5000 800] + SymbolLine[0 1000 0 3500 800] +) +Symbol['"' 1200] +( + SymbolLine[0 1000 0 2000 800] + SymbolLine[1000 1000 1000 2000 800] +) +Symbol['#' 1200] +( + SymbolLine[0 3500 2000 3500 800] + SymbolLine[0 2500 2000 2500 800] + SymbolLine[1500 2000 1500 4000 800] + SymbolLine[500 2000 500 4000 800] +) +Symbol['$' 1200] +( + SymbolLine[1500 1500 2000 2000 800] + SymbolLine[500 1500 1500 1500 800] + SymbolLine[0 2000 500 1500 800] + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4000 800] + SymbolLine[1500 4500 2000 4000 800] + SymbolLine[500 4500 1500 4500 800] + SymbolLine[0 4000 500 4500 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['%' 1200] +( + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[1000 2500 1500 2000 800] + SymbolLine[500 2500 1000 2500 800] + SymbolLine[0 2000 500 2500 800] + SymbolLine[0 5000 4000 1000 800] + SymbolLine[3500 5000 4000 4500 800] + SymbolLine[4000 4000 4000 4500 800] + SymbolLine[3500 3500 4000 4000 800] + SymbolLine[3000 3500 3500 3500 800] + SymbolLine[2500 4000 3000 3500 800] + SymbolLine[2500 4000 2500 4500 800] + SymbolLine[2500 4500 3000 5000 800] + SymbolLine[3000 5000 3500 5000 800] +) +Symbol['&' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 3500 1500 2000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[0 2500 2500 5000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[0 3500 0 4500 800] +) +Symbol[''' 1200] +( + SymbolLine[0 2000 1000 1000 800] +) +Symbol['(' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] +) +Symbol[')' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['*' 1200] +( + SymbolLine[0 2000 2000 4000 800] + SymbolLine[0 4000 2000 2000 800] + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol['+' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol[',' 1200] +( + SymbolLine[0 6000 1000 5000 800] +) +Symbol['-' 1200] +( + SymbolLine[0 3000 2000 3000 800] +) +Symbol['.' 1200] +( + SymbolLine[0 5000 500 5000 800] +) +Symbol['/' 1200] +( + SymbolLine[0 4500 3000 1500 800] +) +Symbol['0' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4000 2000 2000 800] +) +Symbol['1' 1200] +( + SymbolLine[0 1800 800 1000 800] + SymbolLine[800 1000 800 5000 800] + SymbolLine[0 5000 1500 5000 800] +) +Symbol['2' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[0 5000 2500 2500 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['3' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 2800 1500 2800 800] + SymbolLine[2000 1500 2000 2300 800] + SymbolLine[2000 3300 2000 4500 800] + SymbolLine[2000 3300 1500 2800 800] + SymbolLine[2000 2300 1500 2800 800] +) +Symbol['4' 1200] +( + SymbolLine[0 3500 2000 1000 800] + SymbolLine[0 3500 2500 3500 800] + SymbolLine[2000 1000 2000 5000 800] +) +Symbol['5' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[500 2500 1500 2500 800] + SymbolLine[1500 2500 2000 3000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['6' 1200] +( + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1500 2800 2000 3300 800] + SymbolLine[0 2800 1500 2800 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3300 2000 4500 800] +) +Symbol['7' 1200] +( + SymbolLine[500 5000 2500 1000 800] + SymbolLine[0 1000 2500 1000 800] +) +Symbol['8' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3700 0 4500 800] + SymbolLine[0 3700 700 3000 800] + SymbolLine[700 3000 1300 3000 800] + SymbolLine[1300 3000 2000 3700 800] + SymbolLine[2000 3700 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 2300 700 3000 800] + SymbolLine[0 1500 0 2300 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2300 800] + SymbolLine[1300 3000 2000 2300 800] +) +Symbol['9' 1200] +( + SymbolLine[500 5000 2000 3000 800] + SymbolLine[2000 1500 2000 3000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol[':' 1200] +( + SymbolLine[0 2500 500 2500 800] + SymbolLine[0 3500 500 3500 800] +) +Symbol[';' 1200] +( + SymbolLine[0 5000 1000 4000 800] + SymbolLine[1000 2500 1000 3000 800] +) +Symbol['<' 1200] +( + SymbolLine[0 3000 1000 2000 800] + SymbolLine[0 3000 1000 4000 800] +) +Symbol['=' 1200] +( + SymbolLine[0 2500 2000 2500 800] + SymbolLine[0 3500 2000 3500 800] +) +Symbol['>' 1200] +( + SymbolLine[0 2000 1000 3000 800] + SymbolLine[0 4000 1000 3000 800] +) +Symbol['?' 1200] +( + SymbolLine[1000 3000 1000 3500 800] + SymbolLine[1000 4500 1000 5000 800] + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2000 800] + SymbolLine[1000 3000 2000 2000 800] +) +Symbol['@' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 4000 5000 800] + SymbolLine[5000 3500 5000 1000 800] + SymbolLine[5000 1000 4000 0 800] + SymbolLine[4000 0 1000 0 800] + SymbolLine[1000 0 0 1000 800] + SymbolLine[1500 2000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 3000 3500 800] + SymbolLine[3000 3500 3500 3000 800] + SymbolLine[3500 3000 4000 3500 800] + SymbolLine[3500 3000 3500 1500 800] + SymbolLine[3500 2000 3000 1500 800] + SymbolLine[2000 1500 3000 1500 800] + SymbolLine[2000 1500 1500 2000 800] + SymbolLine[4000 3500 5000 3500 800] +) +Symbol['A' 1200] +( + SymbolLine[0 2000 0 5000 800] + SymbolLine[0 2000 700 1000 800] + SymbolLine[700 1000 1800 1000 800] + SymbolLine[1800 1000 2500 2000 800] + SymbolLine[2500 2000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['B' 1200] +( + SymbolLine[0 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3300 2500 4500 800] + SymbolLine[2000 2800 2500 3300 800] + SymbolLine[500 2800 2000 2800 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2300 800] + SymbolLine[2000 2800 2500 2300 800] +) +Symbol['C' 1200] +( + SymbolLine[700 5000 2000 5000 800] + SymbolLine[0 4300 700 5000 800] + SymbolLine[0 1700 0 4300 800] + SymbolLine[0 1700 700 1000 800] + SymbolLine[700 1000 2000 1000 800] +) +Symbol['D' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[1800 1000 2500 1700 800] + SymbolLine[2500 1700 2500 4300 800] + SymbolLine[1800 5000 2500 4300 800] + SymbolLine[0 5000 1800 5000 800] + SymbolLine[0 1000 1800 1000 800] +) +Symbol['E' 1200] +( + SymbolLine[0 2800 1500 2800 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['F' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 2800 1500 2800 800] +) +Symbol['G' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[1000 3000 2000 3000 800] +) +Symbol['H' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[2500 1000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['I' 1200] +( + SymbolLine[0 1000 1000 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 1000 5000 800] +) +Symbol['J' 1200] +( + SymbolLine[700 1000 1500 1000 800] + SymbolLine[1500 1000 1500 4500 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 4500 0 4000 800] +) +Symbol['K' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2000 5000 800] +) +Symbol['L' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['M' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 1500 3000 800] + SymbolLine[1500 3000 3000 1000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['N' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2500 5000 800] + SymbolLine[2500 1000 2500 5000 800] +) +Symbol['O' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['P' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['Q' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1000 3500 2000 5000 800] +) +Symbol['R' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[1300 3000 2500 5000 800] +) +Symbol['S' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['T' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['U' 1200] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 1000 2000 4500 800] +) +Symbol['V' 1200] +( + SymbolLine[0 1000 1000 5000 800] + SymbolLine[1000 5000 2000 1000 800] +) +Symbol['W' 1200] +( + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 5000 800] + SymbolLine[500 5000 1500 3000 800] + SymbolLine[1500 3000 2500 5000 800] + SymbolLine[2500 5000 3000 3000 800] + SymbolLine[3000 3000 3000 1000 800] +) +Symbol['X' 1200] +( + SymbolLine[0 5000 2500 1000 800] + SymbolLine[0 1000 2500 5000 800] +) +Symbol['Y' 1200] +( + SymbolLine[0 1000 1000 3000 800] + SymbolLine[1000 3000 2000 1000 800] + SymbolLine[1000 3000 1000 5000 800] +) +Symbol['Z' 1200] +( + SymbolLine[0 1000 2500 1000 800] + SymbolLine[0 5000 2500 1000 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['[' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['\' 1200] +( + SymbolLine[0 1500 3000 4500 800] +) +Symbol[']' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['^' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1500 800] +) +Symbol['_' 1200] +( + SymbolLine[0 5000 2000 5000 800] +) +Symbol['a' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[2000 4500 2500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['b' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] +) +Symbol['c' 1200] +( + SymbolLine[500 3000 2000 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] +) +Symbol['d' 1200] +( + SymbolLine[2000 1000 2000 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] +) +Symbol['e' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 4000 2000 4000 800] + SymbolLine[2000 4000 2000 3500 800] +) +Symbol['f' 1000] +( + SymbolLine[500 1500 500 5000 800] + SymbolLine[500 1500 1000 1000 800] + SymbolLine[1000 1000 1500 1000 800] + SymbolLine[0 3000 1000 3000 800] +) +Symbol['g' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[2000 3000 2000 6000 800] +) +Symbol['h' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] +) +Symbol['i' 1000] +( + SymbolLine[0 2000 0 2100 1000] + SymbolLine[0 3500 0 5000 800] +) +Symbol['j' 1000] +( + SymbolLine[500 2000 500 2100 1000] + SymbolLine[500 3500 500 6000 800] + SymbolLine[0 6500 500 6000 800] +) +Symbol['k' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 1500 5000 800] + SymbolLine[0 3500 1000 2500 800] +) +Symbol['l' 1000] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['m' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[2000 3500 2500 3000 800] + SymbolLine[2500 3000 3000 3000 800] + SymbolLine[3000 3000 3500 3500 800] + SymbolLine[3500 3500 3500 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['n' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['o' 1200] +( + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['p' 1200] +( + SymbolLine[500 3500 500 6500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[1000 5000 2000 5000 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['q' 1200] +( + SymbolLine[2000 3500 2000 6500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['r' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['s' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2000 4000 2500 4500 800] + SymbolLine[500 4000 2000 4000 800] + SymbolLine[0 3500 500 4000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['t' 1000] +( + SymbolLine[500 1000 500 4500 800] + SymbolLine[500 4500 1000 5000 800] + SymbolLine[0 2500 1000 2500 800] +) +Symbol['u' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3000 2000 4500 800] +) +Symbol['v' 1200] +( + SymbolLine[0 3000 1000 5000 800] + SymbolLine[2000 3000 1000 5000 800] +) +Symbol['w' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[1500 3000 1500 4500 800] + SymbolLine[1500 4500 2000 5000 800] + SymbolLine[2000 5000 2500 5000 800] + SymbolLine[2500 5000 3000 4500 800] + SymbolLine[3000 3000 3000 4500 800] +) +Symbol['x' 1200] +( + SymbolLine[0 3000 2000 5000 800] + SymbolLine[0 5000 2000 3000 800] +) +Symbol['y' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 6000 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['z' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[0 5000 2000 3000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['{' 1200] +( + SymbolLine[500 1500 1000 1000 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['|' 1200] +( + SymbolLine[0 1000 0 5000 800] +) +Symbol['}' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[500 2500 1000 3000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['~' 1200] +( + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1000 3000 800] + SymbolLine[1000 3000 1500 3500 800] + SymbolLine[1500 3500 2000 3500 800] + SymbolLine[2000 3500 2500 3000 800] +) +Attribute("import::src0" "/home/paolo/workspace/zpowermeter/gEDA/powermeter.sch") +Attribute("PCB::grid::unit" "mil") +Via[35500 37500 3600 2000 0 2000 "" ""] +Via[35500 42500 3600 2000 0 2000 "" ""] +Via[35500 47500 3600 2000 0 2000 "" ""] +Via[54500 76000 3600 2000 0 2000 "" ""] +Via[71000 67500 3600 2000 0 2000 "" ""] +Via[91000 69000 3600 2000 0 2000 "" "thermal(2X)"] +Via[102000 69500 3600 2000 0 2000 "" "thermal(2X)"] +Via[144000 92500 6000 2000 0 3500 "" ""] +Via[137000 10500 6000 2000 0 3500 "" ""] +Via[56500 37000 6000 2000 0 3500 "" "thermal(2X)"] +Via[43500 62500 3600 2000 0 2000 "" "thermal(2X)"] +Via[71000 60000 6000 2000 0 3500 "" "thermal(2X)"] +Via[36500 26000 6000 2000 0 3500 "" ""] +Via[17500 30500 6000 2000 0 3500 "" ""] +Via[8500 56500 6000 2000 0 3500 "" "thermal(2X)"] +Via[19500 56000 3600 2000 0 2000 "" "thermal(2X)"] +Via[66000 49500 3600 2000 0 2000 "" ""] +Via[102500 39000 3600 2000 0 2000 "" ""] +Via[117000 20500 3600 2000 0 2000 "" "thermal(2X)"] +Via[35000 14500 3600 2000 0 2000 "" ""] +Via[40000 3500 3600 2000 0 2000 "" "thermal(2X)"] +Via[35000 8500 3600 2000 0 2000 "" "thermal(1X,2X)"] +Via[29000 3500 3600 2000 0 2000 "" "thermal(1X,2X)"] + +Element["" "730C-04" "U3" "unknown" 130300 21300 -4200 -9100 0 100 ""] +( + Attribute("device" "MOC3023") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-23800 -10700 -19800 -10700 5000 3000 5600 "ANODO" "1" ""] + Pad[-23800 -700 -19800 -700 5000 3000 5600 "CATHODO" "2" "square"] + Pad[-23800 9300 -19800 9300 5000 3000 5600 "3" "3" "square"] + Pad[15200 -10700 19200 -10700 5000 3000 5600 "MAIN TERMINAL" "4" "edge2"] + Pad[15200 -700 19200 -700 5000 3000 5600 "5" "5" "square,edge2"] + Pad[15200 9300 19200 9300 5000 3000 5600 "MAIN TERMINAL" "6" "square,edge2"] + ElementLine [-27800 -14700 -4800 -14700 1000] + ElementLine [200 -14700 23200 -14700 1000] + ElementLine [-27800 -14700 -27800 13800 1000] + ElementLine [-27800 13800 23200 13800 1000] + ElementLine [23200 -14700 23200 13800 1000] + ElementArc [-2300 -14700 2500 2500 0 180 1000] + + ) + +Element["" "0603" "C3" "220pF" 102000 62500 -2827 -3150 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C2" "220p" 91000 62000 -1551 -3249 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C7" "220p" 41500 56000 -2150 -2709 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["selected" "1206" "C1" "22nF" 96500 51500 -2150 -2530 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square"] + Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square"] + ElementLine [-2362 -3740 2362 -3740 800] + ElementLine [-2362 3740 2362 3740 800] + + ) + +Element["selected" "1206" "R3" "0.5" 60500 83000 -2770 -3204 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square"] + Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square"] + ElementLine [-2362 -3740 2362 -3740 800] + ElementLine [-2362 3740 2362 3740 800] + + ) + +Element["selected" "0805" "R7" "1k" 40000 71500 -3193 -3150 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-3543 -393 -3543 393 5118 2000 5718 "1" "1" "square"] + Pad[3543 -393 3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 -2755 393 -2755 800] + ElementLine [-393 2755 393 2755 800] + + ) + +Element["selected" "0805" "R8" "100" 23500 72000 -2193 -3245 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[3543 -393 3543 393 5118 2000 5718 "1" "1" "square"] + Pad[-3543 -393 -3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 2755 393 2755 800] + ElementLine [-393 -2755 393 -2755 800] + + ) + +Element["selected" "0805" "R2" "1k" 92500 41000 -3193 -3150 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-3543 -393 -3543 393 5118 2000 5718 "1" "1" "square"] + Pad[3543 -393 3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 -2755 393 -2755 800] + ElementLine [-393 2755 393 2755 800] + + ) + +Element["selected" "0805" "R1" "150" 92543 32000 -4193 -5150 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-3543 -393 -3543 393 5118 2000 5718 "1" "1" "square"] + Pad[3543 -393 3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 -2755 393 -2755 800] + ElementLine [-393 2755 393 2755 800] + + ) + +Element["selected" "0805" "R5" "100" 96000 14500 -3107 -3193 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-393 -3543 393 -3543 5118 2000 5718 "1" "1" "square"] + Pad[-393 3543 393 3543 5118 2000 5718 "2" "2" "square"] + ElementLine [2755 -393 2755 393 800] + ElementLine [-2755 -393 -2755 393 800] + + ) + +Element["selected" "PAD60" "T9" "LINE_IN" 13450 82500 -2880 -2412 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 6000 3000 6600 "terminal" "1" "square"] + ElementLine [-3500 3500 3500 3500 600] + ElementLine [-3500 -3500 3500 -3500 600] + ElementLine [-3500 3500 -3500 -3500 600] + ElementLine [3500 -3500 3500 3500 600] + + ) + +Element["selected" "0805" "R6" "1k" 110000 63000 -2765 -3102 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-393 3543 393 3543 5118 2000 5718 "1" "1" "square"] + Pad[-393 -3543 393 -3543 5118 2000 5718 "2" "2" "square"] + ElementLine [-2755 -393 -2755 393 800] + ElementLine [2755 -393 2755 393 800] + + ) + +Element["selected" "1206" "R4" "360" 110500 45500 -3055 -2745 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-1181 5905 1181 5905 5118 2000 5718 "1" "1" "square"] + Pad[-1181 -5905 1181 -5905 5118 2000 5718 "2" "2" "square"] + ElementLine [-3740 -2362 -3740 2362 800] + ElementLine [3740 -2362 3740 2362 800] + + ) + +Element["selected" "PAD40" "T2" "GND" 34450 3500 3600 -2550 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 4000 3000 4600 "terminal" "1" "square"] + ElementLine [-2500 2500 2500 2500 600] + ElementLine [-2500 -2500 2500 -2500 600] + ElementLine [-2500 2500 -2500 -2500 600] + ElementLine [2500 -2500 2500 2500 600] + + ) + +Element["selected" "PAD40" "T3" "3v" 4450 4000 3550 -3550 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 4000 3000 4600 "terminal" "1" "square"] + ElementLine [-2500 2500 2500 2500 600] + ElementLine [-2500 -2500 2500 -2500 600] + ElementLine [-2500 2500 -2500 -2500 600] + ElementLine [2500 -2500 2500 2500 600] + + ) + +Element["selected" "PAD40" "T13" "5V" 21450 3500 3550 -3050 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 4000 3000 4600 "terminal" "1" "square"] + ElementLine [-2500 2500 2500 2500 600] + ElementLine [-2500 -2500 2500 -2500 600] + ElementLine [-2500 2500 -2500 -2500 600] + ElementLine [2500 -2500 2500 2500 600] + + ) + +Element["selected" "PAD20" "T6" "SDI" 95950 25500 -2550 -3000 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 2000 3000 2600 "terminal" "1" "square"] + ElementLine [-1500 1500 1500 1500 600] + ElementLine [-1500 -1500 1500 -1500 600] + ElementLine [-1500 1500 -1500 -1500 600] + ElementLine [1500 -1500 1500 1500 600] + + ) + +Element["selected" "PAD20" "T4" "ON" 95450 5000 -4500 -4500 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 2000 3000 2600 "terminal" "1" "square"] + ElementLine [-1500 1500 1500 1500 600] + ElementLine [-1500 -1500 1500 -1500 600] + ElementLine [-1500 1500 -1500 -1500 600] + ElementLine [1500 -1500 1500 1500 600] + + ) + +Element["selected" "PAD60" "T11" "LINE_OUT" 114500 95000 -3850 -4050 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 6000 3000 6600 "terminal" "1" "square"] + ElementLine [-3500 3500 3500 3500 600] + ElementLine [-3500 -3500 3500 -3500 600] + ElementLine [-3500 3500 -3500 -3500 600] + ElementLine [3500 -3500 3500 3500 600] + + ) + +Element["selected" "0805" "R9" "200k" 9000 64500 -3209 -3650 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[3543 -393 3543 393 5118 2000 5718 "1" "1" "square"] + Pad[-3543 -393 -3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 2755 393 2755 800] + ElementLine [-393 -2755 393 -2755 800] + + ) + +Element["" "0603" "C5" "100nF" 41500 34000 -3521 -3236 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-492 -2559 492 -2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 2559 492 2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["selected" "1206" "C9" "22nF" 28500 63500 -2650 -2650 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[5905 -1181 5905 1181 5118 2000 5718 "1" "1" "square"] + Pad[-5905 -1181 -5905 1181 5118 2000 5718 "2" "2" "square"] + ElementLine [-2362 3740 2362 3740 800] + ElementLine [-2362 -3740 2362 -3740 800] + + ) + +Element["selected" "0805" "R10" "1k" 80500 67500 -5107 -2607 0 100 ""] +( + Attribute("device" "RESISTOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-3543 -393 -3543 393 5118 2000 5718 "1" "1" "square"] + Pad[3543 -393 3543 393 5118 2000 5718 "2" "2" "square"] + ElementLine [-393 -2755 393 -2755 800] + ElementLine [-393 2755 393 2755 800] + + ) + +Element["selected" "SSOP24" "U1" "unknown" 49000 29500 -2000 -6000 0 100 "selected"] +( + Attribute("device" "CS5463") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-1500 0 700 0 1600 3000 2200 "XOUT" "1" ""] + Pad[-1500 2600 700 2600 1600 3000 2200 "CPUCLK" "2" "square"] + Pad[-1500 5100 700 5100 1600 3000 2200 "VD+" "3" "square"] + Pad[-1500 7700 700 7700 1600 3000 2200 "DGND" "4" "square"] + Pad[-1500 10300 700 10300 1600 3000 2200 "SCLK" "5" "square"] + Pad[-1500 12800 700 12800 1600 3000 2200 "SDO" "6" "square"] + Pad[-1500 15400 700 15400 1600 3000 2200 "_CS" "7" "square"] + Pad[-1500 17900 700 17900 1600 3000 2200 "MODE" "8" "square"] + Pad[-1500 20500 700 20500 1600 3000 2200 "VIN+" "9" "square"] + Pad[-1500 23100 700 23100 1600 3000 2200 "VIN-" "10" "square"] + Pad[-1500 25600 700 25600 1600 3000 2200 "VREFOUT" "11" "square"] + Pad[-1500 28200 700 28200 1600 3000 2200 "VREFIN" "12" "square"] + Pad[27600 28300 29800 28300 1600 3000 2200 "AGND" "13" "square,edge2"] + Pad[27600 25700 29800 25700 1600 3000 2200 "VA+" "14" "square,edge2"] + Pad[27600 23200 29800 23200 1600 3000 2200 "IIN-" "15" "square,edge2"] + Pad[27600 20600 29800 20600 1600 3000 2200 "IIN+" "16" "square,edge2"] + Pad[27600 18000 29800 18000 1600 3000 2200 "PFMON" "17" "square,edge2"] + Pad[27600 15500 29800 15500 1600 3000 2200 "_E3" "18" "square,edge2"] + Pad[27600 12900 29800 12900 1600 3000 2200 "_RESET" "19" "square,edge2"] + Pad[27600 10400 29800 10400 1600 3000 2200 "_INT" "20" "square,edge2"] + Pad[27600 7800 29800 7800 1600 3000 2200 "_E1" "21" "square,edge2"] + Pad[27600 5200 29800 5200 1600 3000 2200 "_E2" "22" "square,edge2"] + Pad[27600 2700 29800 2700 1600 3000 2200 "SDI" "23" "square,edge2"] + Pad[27600 100 29800 100 1600 3000 2200 "XIN" "24" "square,edge2"] + ElementLine [-3300 -2200 11600 -2200 1000] + ElementLine [16600 -2200 31600 -2200 1000] + ElementLine [31600 -2200 31600 30500 1000] + ElementLine [31600 30500 -3300 30500 1000] + ElementLine [-3300 30500 -3300 -2200 1000] + ElementArc [14100 -2200 2500 2500 0 180 1000] + + ) + +Element["" "0603" "C4" "100nf" 84500 58500 -2150 -2650 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-492 2559 492 2559 2952 2000 3552 "1" "1" "square"] + Pad[-492 -2559 492 -2559 2952 2000 3552 "2" "2" "square"] + + ) + +Element["" "0603" "C6" "100nF" 50500 64000 -2193 -2650 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-2559 -492 -2559 492 2952 2000 3552 "1" "1" "square"] + Pad[2559 -492 2559 492 2952 2000 3552 "2" "2" "square"] + + ) + +Element["selected" "TO252" "T1" "unknown" 135500 57000 -3000 -3400 0 100 ""] +( + Attribute("device" "TRIAC") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-6800 24500 -6800 26500 6000 3000 6600 "T1" "1" "square,edge2"] + Pad[-100 0 100 0 28000 3000 28600 "T2" "2" "square"] + Pad[8800 24500 8800 26500 6000 3000 6600 "G" "3" "square,edge2"] + ElementLine [-18000 -17000 -18000 32000 600] + ElementLine [-18000 -17000 18000 -17000 600] + ElementLine [-18000 32000 18000 32000 600] + ElementLine [18000 -17000 18000 32000 600] + + ) + +Element["selected" "SOT223" "U2" "unknown" 8500 44400 1500 -3800 0 100 ""] +( + Attribute("device" "DS117-3.3") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 -3300 0 3300 5600 3000 6200 "GND" "1" "square,edge2"] + Pad[9000 -3300 9000 3300 5600 3000 6200 "VOUT" "2" "square,edge2"] + Pad[18100 -3300 18100 3300 5600 3000 6200 "VIN" "3" "square,edge2"] + Pad[4500 -24400 13500 -24400 12200 3000 12800 "4" "4" "square"] + ElementLine [-5200 -32900 -5200 8500 500] + ElementLine [-5200 8500 23300 8500 500] + ElementLine [23300 -32900 23300 8500 500] + ElementLine [-5200 -32900 23300 -32900 500] + + ) + +Element["selected" "PAD60" "T10" "NEUTRE" 95450 95000 -3493 -3550 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 6000 3000 6600 "terminal" "1" "square"] + ElementLine [-3500 3500 3500 3500 600] + ElementLine [-3500 -3500 3500 -3500 600] + ElementLine [-3500 3500 -3500 -3500 600] + ElementLine [3500 -3500 3500 3500 600] + + ) + +Element["selected" "PAD60" "T12" "NEUTRE" 6950 95000 5550 -2050 0 100 ""] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 6000 3000 6600 "terminal" "1" "square"] + ElementLine [-3500 3500 3500 3500 600] + ElementLine [-3500 -3500 3500 -3500 600] + ElementLine [-3500 3500 -3500 -3500 600] + ElementLine [3500 -3500 3500 3500 600] + + ) + +Element["selected,onsolder" "PAD20" "T5" "SCLK" 3450 28500 4050 1950 2 100 "auto"] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 2000 3000 2600 "terminal" "1" "onsolder,square"] + ElementLine [-1500 -1500 1500 -1500 600] + ElementLine [-1500 1500 1500 1500 600] + ElementLine [-1500 -1500 -1500 1500 600] + ElementLine [1500 1500 1500 -1500 600] + + ) + +Element["selected,onsolder" "PAD20" "T8" "CS" 3450 47500 3950 2050 2 100 "auto"] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 2000 3000 2600 "terminal" "1" "onsolder,square"] + ElementLine [-1500 1500 1500 1500 600] + ElementLine [-1500 -1500 1500 -1500 600] + ElementLine [-1500 1500 -1500 -1500 600] + ElementLine [1500 -1500 1500 1500 600] + + ) + +Element["selected,onsolder" "PAD20" "T7" "SDO" 3450 38000 4000 1950 2 100 "auto"] +( + Attribute("device" "terminal") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[0 0 100 0 2000 3000 2600 "terminal" "1" "onsolder,square"] + ElementLine [-1500 -1500 1500 -1500 600] + ElementLine [-1500 1500 1500 1500 600] + ElementLine [-1500 -1500 -1500 1500 600] + ElementLine [1500 1500 1500 -1500 600] + + ) + +Element["selected" "HC49SMD" "X1" "unknown" 63500 15500 0 0 2 25 ""] +( + Attribute("device" "XTAL") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[12000 0 21600 0 8000 3000 8600 "x1" "1" "square,edge2"] + Pad[-21600 0 -12000 0 8000 3000 8600 "x2" "2" "square"] + ElementLine [-22500 -8900 22500 -8900 800] + ElementLine [22500 -8900 22500 8900 800] + ElementLine [-22500 8900 22500 8900 800] + ElementLine [-22500 -8900 -22500 8900 800] + + ) + +Element["" "0603" "C8" "220p" 26500 56000 -2091 -2650 0 100 ""] +( + Attribute("device" "CAPACITOR") + Attribute("manufacturer" "unknown") + Attribute("manufacturer_part_number" "unknown") + Attribute("vendor" "unknown") + Attribute("vendor_part_number" "unknown") + Pad[-2559 -492 -2559 492 2952 2000 3552 "1" "1" "square"] + Pad[2559 -492 2559 492 2952 2000 3552 "2" "2" "square"] + + ) +Layer(1 "top") +( + Line[83759 55200 84500 55941 1000 2000 "clearline"] + Line[42141 37200 41500 36559 1000 2000 "clearline"] + Line[45600 34600 42500 31500 1000 2000 "clearline"] + Line[48600 29500 48600 17400 1000 2000 "clearline"] + Line[48600 17400 46700 15500 1000 2000 "clearline"] + Line[77700 29600 77700 18100 1000 2000 "clearline"] + Line[77700 18100 80300 15500 1000 2000 "clearline"] + Line[48600 55100 48600 57700 1000 2000 "clearline"] + Line[49700 57700 53000 61000 1000 2000 "clearline"] + Line[53000 61000 53059 63941 1000 2000 "clearline"] + Line[44500 63500 47441 63500 1000 2000 "clearline"] + Line[47441 63500 47941 64000 1000 2000 "clearline"] + Line[80800 32200 86000 27000 1000 2000 "clearline"] + Line[86000 27000 88500 27000 1000 2000 "clearline"] + Line[88500 27000 90000 25500 1000 2000 "clearline"] + Line[90000 25500 95950 25500 1000 2000 "clearline"] + Line[96000 10957 96000 5500 1000 2000 "clearline"] + Line[96000 5500 95500 5000 1000 2000 "clearline"] + Line[110500 10600 106500 10600 1000 2000 "clearline"] + Line[105900 10600 101500 15000 1000 2000 "clearline"] + Line[101500 15000 101500 15500 1000 2000 "clearline"] + Line[101500 15500 100000 17000 1000 2000 "clearline"] + Line[100000 17000 97043 17000 1000 2000 "clearline"] + Line[97043 17000 96000 18043 1000 2000 "clearline"] + Line[80400 42400 80500 42500 1000 2000 "clearline"] + Line[80500 42500 80900 42500 1000 2000 "clearline"] + Line[80900 42500 81000 42400 1000 2000 "clearline"] + Line[81000 42400 81100 42400 1000 2000 "clearline"] + Line[81100 42400 83000 40500 1000 2000 "clearline"] + Line[83000 40500 83000 34500 1000 2000 "clearline"] + Line[83000 34500 85500 32000 1000 2000 "clearline"] + Line[85500 32000 89000 32000 1000 2000 "clearline"] + Line[81000 47500 87500 41000 1000 2000 "clearline"] + Line[87500 41000 88957 41000 1000 2000 "clearline"] + Line[147500 30600 147500 35000 1000 2000 "clearline"] + Line[147500 35000 146500 36000 1000 2000 "clearline"] + Line[146500 36000 146000 36000 1000 2000 "clearline"] + Line[146000 36000 144500 37500 1000 2000 "clearline"] + Line[144500 37500 113095 37500 1000 2000 "clearline"] + Line[113095 37500 110500 40095 1000 2000 "clearline"] + Line[81900 50100 86000 46000 1000 2000 "clearline"] + Line[86000 46000 101500 46000 1000 2000 "clearline"] + Line[101500 46000 102500 47000 1000 2000 "clearline"] + Line[102500 47000 102500 51405 1000 2000 "clearline"] + Line[83800 52700 85000 51500 1000 2000 "clearline"] + Line[85000 51500 90595 51500 1000 2000 "clearline"] + Line[91000 59441 91000 52681 1000 2000 "clearline"] + Line[102000 59941 102000 52681 1000 2000 "clearline"] + Line[102500 51405 102405 51905 1000 2000 "clearline"] + Line[102000 59941 109457 60000 1000 2000 "clearline"] + Line[109457 60000 110000 59457 1000 2000 "clearline"] + Line[38300 39800 36000 37500 1000 2000 "clearline"] + Line[35700 42300 35500 42500 1000 2000 "clearline"] + Line[39100 44900 37500 46500 1000 2000 "clearline"] + Line[37500 46500 36500 46500 1000 2000 "clearline"] + Line[36500 46500 35500 47500 1000 2000 "clearline"] + Line[42341 52600 41500 53441 1000 2000 "clearline"] + Line[38500 50000 34250 54250 1000 2000 "clearline"] + Line[41441 53441 38000 53500 1000 2000 "clearline"] + Line[38000 53500 37500 54000 1000 2000 "clearline"] + Line[37500 54000 37500 60405 1000 2000 "clearline"] + Line[34250 54250 33750 54250 1000 2000 "clearline"] + Line[33750 54250 32000 56000 1000 2000 "clearline"] + Line[32000 56000 29059 56000 1000 2000 "clearline"] + Line[27043 72000 35957 72000 1000 2000 "clearline"] + Line[35957 72000 36457 71500 1000 2000 "clearline"] + Line[37500 60405 34202 63702 1000 2000 "clearline"] + Line[54095 82500 54595 83000 2500 2000 "clearline"] + Line[125957 66543 135500 57000 2500 2000 "clearline"] + Line[129905 51405 135500 57000 2500 2000 "clearline"] + Line[66500 83000 109500 83000 4000 2000 "clearline"] + Line[109500 83000 135500 57000 4000 2000 "clearline"] + Line[125957 66543 134500 58000 4000 2000 "clearline"] + Line[36457 72000 36500 72043 1000 2000 "clearline"] + Line[36500 74500 38500 76500 1000 2000 "clearline"] + Line[38500 76500 48500 76500 1000 2000 "clearline"] + Line[48500 76500 50000 75000 1000 2000 "clearline"] + Line[54500 76000 54595 82500 1000 2000 "clearline"] + Line[54595 82500 54298 82702 1000 2000 "clearline"] + Line[71000 67500 76957 67500 1000 2000 "clearline"] + Line[50000 75000 50000 73500 1000 2000 "clearline"] + Line[50000 73500 51500 72000 1000 2000 "clearline"] + Line[51500 72000 62500 72000 1000 2000 "clearline"] + Line[62500 72000 66500 76000 1000 2000 "clearline"] + Line[66500 76000 66500 81819 1000 2000 "clearline"] + Line[66405 82905 66500 83000 1000 2000 "clearline"] + Line[84441 61059 80000 61000 2500 2000 "clearline"] + Line[80000 61000 78000 57800 2500 2000 "clearline"] + Line[86059 61059 88500 63500 1000 2000 "clearline"] + Line[91492 63000 93941 63000 1000 2000 "clearline"] + Line[89941 63500 91000 64559 1000 2000 "clearline"] + Line[91000 59441 93000 59500 1000 2000 "clearline"] + Line[93000 59500 95000 61500 1000 2000 "clearline"] + Line[91000 69000 91000 64559 1000 2000 "clearline"] + Line[91000 64559 90508 64529 1000 2000 "clearline"] + Line[102000 69500 102000 65059 1000 2000 "clearline"] + Line[95250 61750 95250 71750 1000 2000 "clearline"] + Line[95250 71750 93000 74000 1000 2000 "clearline"] + Line[93000 74000 89000 74000 1000 2000 "clearline"] + Line[89000 74000 84000 69000 1000 2000 "clearline"] + Line[84000 69000 84043 67543 1000 2000 "clearline"] + Line[137000 10500 147400 10600 2500 2000 "clearline"] + Line[144000 92500 144300 82800 2500 2000 "clearline"] + Line[56300 37200 56500 37000 1600 2000 "clearline"] + Line[41500 58559 41500 60500 1000 2000 "clearline"] + Line[41500 60500 44500 63500 1000 2000 "clearline"] + Line[43543 71893 43543 71107 1000 2000 "clearline"] + Line[43543 69543 38000 64000 1000 2000 "clearline"] + Line[38000 64000 34905 64000 1000 2000 "clearline"] + Line[34905 64000 34405 63500 1000 2000 "clearline"] + Line[71000 60000 77500 60000 2500 2000 "clearline"] + Line[77500 60000 78250 59250 2500 2000 "clearline"] + Line[23941 56000 20500 56000 1000 2000 "clearline"] + Line[41000 31500 41000 31441 2500 2000 "clearline"] + Line[41000 30500 36500 26000 2500 2000 "clearline"] + Line[25800 7750 30350 12300 2500 2000 "clearline,auto"] + Line[25800 7750 25800 7750 2500 2000 "clearline,auto"] + Line[21550 3500 21550 3500 2500 2000 "clearline,auto"] + Line[4500 4000 3500 6500 1600 2000 "clearline"] + Line[3500 6500 3500 27000 1600 2000 "clearline"] + Line[3500 27000 5500 29000 1600 2000 "clearline"] + Line[5500 29000 16000 29000 1600 2000 "clearline"] + Line[16000 29000 17500 30500 1600 2000 "clearline"] + Line[20000 56500 20500 56000 1600 2000 "clearline"] + Line[5457 93457 7000 95000 1000 2000 "clearline"] + Line[29059 58000 28500 58500 1000 2000 "clearline"] + Line[29059 57500 29059 58000 1000 2000 "clearline"] + Line[29059 59441 26500 62000 1000 2000 "clearline"] + Line[26500 62000 24095 62000 1000 2000 "clearline"] + Line[22595 63500 13543 63500 1000 2000 "clearline"] + Line[13543 63500 12543 64500 1000 2000 "clearline"] + Line[24095 62000 19957 66138 1000 2000 "clearline"] + Line[116200 95000 128700 82500 4000 2000 "clearline"] + Line[74200 55200 73000 54000 1000 2000 "clearline"] + Line[73000 54000 70000 54000 1000 2000 "clearline"] + Line[70000 54000 66000 50000 1000 2000 "clearline"] + Line[96086 32586 102500 39000 1000 2000 "clearline"] + Line[96043 41000 100500 41000 1000 2000 "clearline"] + Line[100500 41000 102500 39000 1000 2000 "clearline"] + Line[116900 20600 117000 20500 1000 2000 "clearline"] + Line[34550 3500 34500 3550 1000 2000 "clearline"] + Line[34500 8000 35000 8500 1000 2000 "clearline"] + Line[40000 3500 34550 3500 1000 2000 "clearline"] + Line[35000 14500 30350 14500 1000 2000 "clearline"] + Line[26600 41100 30350 37350 2500 2000 "clearline,auto"] + Line[66000 49500 66000 50000 1000 2000 "clearline"] + Line[19500 56000 20000 56500 1600 2000 "clearline"] + Line[20000 56500 20000 56500 1600 2000 "clearline"] + Line[44500 63500 43500 62500 1000 2000 "clearline"] + Line[43500 62500 43500 62500 1000 2000 "clearline"] + Line[35500 37500 36000 37500 1000 2000 "clearline"] + Line[29059 56000 29000 55508 1000 2000 "clearline"] + Line[29000 55508 29059 55508 1000 2000 "clearline"] + Line[135600 57000 135600 58000 4000 2000 "clearline"] + Line[135600 58000 135500 57000 4000 2000 "clearline"] + Line[135600 58000 135600 57000 4000 2000 "clearline"] + Line[86059 61059 84992 61059 1000 2000 "clearline"] + Line[78800 57800 78800 59000 2500 2000 "clearline"] + Line[78800 59250 78250 59250 2500 2000 "clearline"] + Line[78800 57800 78800 59000 2500 2000 "clearline"] + Line[78800 59000 78000 57800 2500 2000 "clearline"] + Line[78800 59000 78800 57800 2500 2000 "clearline"] + Line[19957 66138 21414 64681 1000 2000 "clearline"] + Line[21414 64681 22595 64681 1000 2000 "clearline"] + Line[34405 63702 34202 63702 1000 2000 "clearline"] + Line[41000 30500 41000 31441 2500 2000 "clearline"] + Line[41992 31441 41992 31500 2500 2000 "clearline"] + Line[41992 31500 41500 31441 2500 2000 "clearline"] + Line[41992 31441 41992 31500 2500 2000 "clearline"] + Line[41992 31500 41500 31441 2500 2000 "clearline"] + Line[41992 31500 41992 31441 2500 2000 "clearline"] + Line[3500 6500 3500 4950 1600 2000 "clearline"] + Line[111681 39595 111681 40095 1000 2000 "clearline"] + Line[110500 40095 110500 39595 1000 2000 "clearline"] + Line[36500 74500 36457 71893 1000 2000 "clearline"] + Line[66405 82905 66500 83000 1000 2000 "clearline"] + Line[66500 84181 66405 84181 1000 2000 "clearline"] + Line[66405 82905 66500 81819 1000 2000 "clearline"] + Line[66500 81819 66405 81819 1000 2000 "clearline"] + Line[54595 82702 54298 82702 1000 2000 "clearline"] + Line[102405 51905 102000 52681 1000 2000 "clearline"] + Line[102000 52681 102405 52681 1000 2000 "clearline"] + Line[102405 51905 102000 50319 1000 2000 "clearline"] + Line[102000 50319 102405 50319 1000 2000 "clearline"] + Line[90595 51500 91000 52681 1000 2000 "clearline"] + Line[91000 52681 90595 52681 1000 2000 "clearline"] + Line[91000 50319 90595 50319 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41992 53441 41992 53500 1000 2000 "clearline"] + Line[41992 53500 41441 53441 1000 2000 "clearline"] + Line[41992 53500 41992 53441 1000 2000 "clearline"] + Line[93000 59500 92941 59441 1000 2000 "clearline"] + Line[92941 59441 91492 59441 1000 2000 "clearline"] + Line[91492 59441 91492 59500 1000 2000 "clearline"] + Line[91492 59500 91000 59441 1000 2000 "clearline"] + Line[91492 59500 91492 59441 1000 2000 "clearline"] + Line[91492 64559 91492 64529 1000 2000 "clearline"] + Line[91492 64529 91000 64559 1000 2000 "clearline"] + Line[91492 64559 91492 64529 1000 2000 "clearline"] + Line[91492 63000 91492 64529 1000 2000 "clearline"] + Line[90508 64559 90508 64529 1000 2000 "clearline"] + Line[90508 63500 89941 63500 1000 2000 "clearline"] + Line[102492 59941 102492 60000 1000 2000 "clearline"] + Line[102492 60000 102000 59941 1000 2000 "clearline"] + Line[102492 60000 102492 59941 1000 2000 "clearline"] + Line[90508 64529 90508 63500 1000 2000 "clearline"] + Line[91492 64529 91492 64559 1000 2000 "clearline"] + Line[91492 64529 91492 63000 1000 2000 "clearline"] + Line[91000 64559 90508 64529 1000 2000 "clearline"] + Line[41500 31441 41000 31500 2500 2000 "clearline"] + Line[78800 59000 78800 59250 2500 2000 "clearline"] + Line[135500 57000 134500 58000 4000 2000 "clearline"] + Line[29059 57036 29059 57500 1000 2000 "clearline"] + Line[110500 20600 116900 20600 1000 2000 "clearline"] + Line[7050 95000 95450 95000 4000 2000 "clearline"] + Line[19957 71607 19957 66138 1000 2000 "clearline"] + Line[29059 58000 29059 59441 1000 2000 "clearline"] + Line[5457 64893 5457 93457 1000 2000 "clearline"] + Line[8500 47700 8500 56500 1600 2000 "clearline"] + Line[17500 41100 17500 30500 2500 2000 "clearline"] + Line[30350 14500 30350 37350 2500 2000 "clearline,auto"] + Line[41000 31441 41000 30500 2500 2000 "clearline"] + Line[84992 61059 86059 61059 1000 2000 "clearline"] + Line[66500 81819 66405 82905 1000 2000 "clearline"] + Line[110393 66543 125957 66543 4000 2000 "clearline"] + Line[13550 82500 54095 82500 4000 2000 "clearline"] + Line[111681 51405 129905 51405 2500 2000 "clearline"] + Line[47500 50000 38500 50000 1000 2000 "clearline"] + Line[47500 52600 42341 52600 1000 2000 "clearline"] + Line[47500 44900 39100 44900 1000 2000 "clearline"] + Line[47500 42300 35700 42300 1000 2000 "clearline"] + Line[38700 39800 38300 39800 1000 2000 "clearline"] + Line[47500 39800 38700 39800 1000 2000 "clearline"] + Line[102000 52681 102405 51905 1000 2000 "clearline"] + Line[91000 52681 90595 51500 1000 2000 "clearline"] + Line[78800 52700 83800 52700 1000 2000 "clearline"] + Line[78800 50100 81900 50100 1000 2000 "clearline"] + Line[78800 47500 81000 47500 1000 2000 "clearline"] + Line[78800 42400 80400 42400 1000 2000 "clearline"] + Line[78800 32200 80800 32200 1000 2000 "clearline"] + Line[41992 31500 41559 31441 1000 2000 "clearline"] + Line[47500 34600 45600 34600 1000 2000 "clearline"] + Line[78800 55200 83759 55200 1000 2000 "clearline"] + Line[47500 37200 42141 37200 1000 2000 "clearline"] + Line[49700 37200 56300 37200 1600 2000 "clearline"] + Line[76600 55200 74200 55200 1000 2000 "clearline"] + Line[34450 3500 29000 3500 1000 2000 "clearline"] + Line[29059 57500 29059 58000 1000 2000 "clearline"] + Line[47500 39800 38700 39800 1000 2000 "clearline"] + Line[29059 57036 29059 57500 1000 2000 "clearline"] + Line[135600 58000 135600 57000 4000 2000 "clearline"] + Line[78800 59250 78800 59000 2500 2000 "clearline"] + Line[41992 31441 41992 31500 2500 2000 "clearline"] + Line[111681 39595 111681 40095 1000 2000 "clearline"] + Line[66405 84181 66500 84181 1000 2000 "clearline"] + Line[90595 50319 91000 50319 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41992 53500 41992 53441 1000 2000 "clearline"] + Line[91492 59500 91492 59441 1000 2000 "clearline"] + Line[102492 60000 102492 59941 1000 2000 "clearline"] + Line[78800 59000 78800 57800 2500 2000 "clearline"] + Line[135600 58000 135600 57000 4000 2000 "clearline"] + Line[78800 59250 78800 59000 2500 2000 "clearline"] + Line[41992 31441 41992 31500 2500 2000 "clearline"] + Line[4450 4000 4450 4000 1600 2000 "clearline"] + Line[34550 3500 34550 3500 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41500 60500 41500 58559 1000 2000 "clearline"] + Line[41992 53500 41992 53441 1000 2000 "clearline"] + Line[91492 59500 91492 59441 1000 2000 "clearline"] + Line[102492 60000 102492 59941 1000 2000 "clearline"] + Line[78800 59000 78800 57800 2500 2000 "clearline"] + Line[3500 4950 4450 4000 1600 2000 "clearline"] + Line[34500 3550 34500 8000 1000 2000 "clearline"] + Line[25800 7750 21550 3500 2500 2000 "clearline,auto"] + Line[30350 12300 30350 14500 2500 2000 "clearline,auto"] + Line[36500 72043 36500 74500 1000 2000 "clearline"] +) +Layer(2 "outline") +( + Line[26450 200 4000 22650 1000 2000 "clearline"] + Line[40750 97000 147750 97000 1000 2000 "clearline"] + Line[148500 96250 148500 13750 1000 2000 "clearline"] + Line[134950 200 26450 200 1000 2000 "clearline"] + Line[148500 13750 134950 200 1000 2000 "clearline"] + Line[147750 97000 148500 96250 1000 2000 "clearline"] + Line[4000 60250 40750 97000 1000 2000 "clearline"] + Line[4000 22650 4000 60250 1000 2000 "clearline"] +) +Layer(3 "bottom") +( + Line[54500 76000 63000 67500 1000 2000 "clearline"] + Line[63000 67500 71000 67500 1000 2000 "clearline"] + Line[101500 69000 102000 69500 1000 2000 "clearline"] + Line[137000 10500 137000 85500 2500 2000 "clearline"] + Line[137000 85500 144000 92500 2500 2000 "clearline"] + Line[57000 37500 56500 37000 1000 2000 "clearline"] + Line[56250 37250 56500 37000 2500 2000 "clearline"] + Line[35500 47500 3550 47500 1000 2000 "clearline"] + Line[35500 42500 8000 42500 1000 2000 "clearline"] + Line[8000 42500 3500 38000 1000 2000 "clearline"] + Line[35500 37500 12500 37500 1000 2000 "clearline"] + Line[12500 37500 3500 28500 1000 2000 "clearline"] + Line[63000 31500 66000 34500 1000 2000 "clearline"] + Line[66000 34500 66000 38500 1000 2000 "clearline"] + Line[102500 39000 66500 39000 1000 2000 "clearline"] + Line[66500 39000 66000 38500 1000 2000 "clearline"] + Line[66000 38500 66000 39500 1000 2000 "clearline"] + Line[66000 40000 66000 39500 1000 2000 "clearline"] + Line[66000 39500 66500 39000 1000 2000 "clearline"] + Line[17500 30500 22000 26000 1600 2000 "clearline"] + Line[22000 26000 36500 26000 1600 2000 "clearline"] + Line[35000 14500 59500 14500 1000 2000 "clearline"] + Line[59500 14500 63000 18000 1000 2000 "clearline"] + Line[63000 18000 63000 31500 1000 2000 "clearline"] + Line[56500 37000 56500 37250 1000 2000 "clearline"] + Line[56500 37250 56250 37250 1000 2000 "clearline"] + Line[56500 37000 56500 37250 1000 2000 "clearline"] + Line[56500 37250 56750 37500 1000 2000 "clearline"] + Line[102000 69500 101500 69000 1000 2000 "clearline"] + Line[101500 69000 101500 69000 1000 2000 "clearline"] + Line[56500 37250 56500 37250 1000 2000 "clearline"] + Line[66000 39500 66000 40000 1000 2000 "clearline"] + Line[66000 39500 66000 40000 1000 2000 "clearline"] + Line[66000 40000 66000 49500 1000 2000 "clearline"] + Line[66000 38500 66000 39500 1000 2000 "clearline"] + Line[56750 37500 57000 37500 1000 2000 "clearline"] + Polygon("clearpoly") + ( + [0 0] [154500 0] [154500 104000] [0 104000] + ) +) +Layer(4 "spare") +( +) +Layer(5 "silk") +( +) +Layer(6 "silk") +( +) +NetList() +( + Net("3v" "(unknown)") + ( + Connect("C5-1") + Connect("T3-1") + Connect("U1-3") + Connect("U2-2") + ) + Net("5v" "(unknown)") + ( + Connect("C4-2") + Connect("R1-2") + Connect("R2-2") + Connect("T13-1") + Connect("U1-14") + Connect("U2-3") + ) + Net("CS" "(unknown)") + ( + Connect("T8-1") + Connect("U1-7") + ) + Net("GND" "(unknown)") + ( + Connect("C2-1") + Connect("C3-1") + Connect("C4-1") + Connect("C5-2") + Connect("C6-1") + Connect("C7-2") + Connect("C8-1") + Connect("T2-1") + Connect("U1-4") + Connect("U1-13") + Connect("U2-1") + Connect("U3-2") + ) + Net("P1_A" "(unknown)") + ( + Connect("R3-1") + Connect("R10-1") + Connect("T9-1") + ) + Net("P1_B" "(unknown)") + ( + Connect("R3-2") + Connect("R4-1") + Connect("R6-1") + Connect("R7-1") + Connect("R8-1") + Connect("T1-2") + ) + Net("P2" "(unknown)") + ( + Connect("R9-2") + Connect("T10-1") + Connect("T12-1") + ) + Net("SCLK" "(unknown)") + ( + Connect("T5-1") + Connect("U1-5") + ) + Net("SDI" "(unknown)") + ( + Connect("T6-1") + Connect("U1-23") + ) + Net("SDO" "(unknown)") + ( + Connect("T7-1") + Connect("U1-6") + ) + Net("unnamed_net1" "(unknown)") + ( + Connect("U1-1") + Connect("X1-2") + ) + Net("unnamed_net2" "(unknown)") + ( + Connect("C8-2") + Connect("C9-2") + Connect("R8-2") + Connect("R9-1") + Connect("U1-9") + ) + Net("unnamed_net3" "(unknown)") + ( + Connect("C7-1") + Connect("C9-1") + Connect("R7-2") + Connect("U1-10") + ) + Net("unnamed_net4" "(unknown)") + ( + Connect("C6-2") + Connect("U1-11") + Connect("U1-12") + ) + Net("unnamed_net5" "(unknown)") + ( + Connect("C1-1") + Connect("C2-2") + Connect("R10-2") + Connect("U1-15") + ) + Net("unnamed_net6" "(unknown)") + ( + Connect("C1-2") + Connect("C3-2") + Connect("R6-2") + Connect("U1-16") + ) + Net("unnamed_net7" "(unknown)") + ( + Connect("R2-1") + Connect("U1-17") + ) + Net("unnamed_net8" "(unknown)") + ( + Connect("R1-1") + Connect("U1-19") + ) + Net("unnamed_net9" "(unknown)") + ( + Connect("U1-24") + Connect("X1-1") + ) + Net("unnamed_net10" "(unknown)") + ( + Connect("T1-1") + Connect("T11-1") + ) + Net("unnamed_net11" "(unknown)") + ( + Connect("T1-3") + Connect("U3-4") + ) + Net("unnamed_net12" "(unknown)") + ( + Connect("R4-2") + Connect("U3-6") + ) + Net("unnamed_net13" "(unknown)") + ( + Connect("R5-2") + Connect("U3-1") + ) + Net("unnamed_net14" "(unknown)") + ( + Connect("R5-1") + Connect("T4-1") + ) +) diff --git a/qa/data/pcbnew/io/geda/scsi2sd.pcb b/qa/data/pcbnew/io/geda/scsi2sd.pcb new file mode 100644 index 0000000000..b96c6dde24 --- /dev/null +++ b/qa/data/pcbnew/io/geda/scsi2sd.pcb @@ -0,0 +1,4144 @@ +# release: pcb 20140316 + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20091103] + +PCB["" 3930.00mil 3937.00mil] + +Grid[100.000000 0.0000 0.0000 1] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[6.00mil 0.10mil 6.00mil 6.00mil 12.00mil 8.00mil] +Flags("showdrc,nameonpcb,clearnew,newfullpoly,snappin") +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,10.00mil,30.00mil,12.00mil,6.00mil:Power,25.00mil,60.00mil,35.00mil,10.00mil:Fat,40.00mil,295.00mil,134.00mil,10.00mil:Skinny,6.00mil,28.00mil,12.00mil,6.00mil"] + +Symbol[' ' 18.00mil] +( +) +Symbol['!' 12.00mil] +( + SymbolLine[0.0000 45.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 0.0000 35.00mil 8.00mil] +) +Symbol['"' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 20.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 10.00mil 20.00mil 8.00mil] +) +Symbol['#' 12.00mil] +( + SymbolLine[0.0000 35.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 20.00mil 25.00mil 8.00mil] + SymbolLine[15.00mil 20.00mil 15.00mil 40.00mil 8.00mil] + SymbolLine[5.00mil 20.00mil 5.00mil 40.00mil 8.00mil] +) +Symbol['$' 12.00mil] +( + SymbolLine[15.00mil 15.00mil 20.00mil 20.00mil 8.00mil] + SymbolLine[5.00mil 15.00mil 15.00mil 15.00mil 8.00mil] + SymbolLine[0.0000 20.00mil 5.00mil 15.00mil 8.00mil] + SymbolLine[0.0000 20.00mil 0.0000 25.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[15.00mil 45.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[5.00mil 45.00mil 15.00mil 45.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 5.00mil 45.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['%' 12.00mil] +( + SymbolLine[0.0000 15.00mil 0.0000 20.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 10.00mil 10.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 15.00mil 15.00mil 8.00mil] + SymbolLine[15.00mil 15.00mil 15.00mil 20.00mil 8.00mil] + SymbolLine[10.00mil 25.00mil 15.00mil 20.00mil 8.00mil] + SymbolLine[5.00mil 25.00mil 10.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 20.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 40.00mil 10.00mil 8.00mil] + SymbolLine[35.00mil 50.00mil 40.00mil 45.00mil 8.00mil] + SymbolLine[40.00mil 40.00mil 40.00mil 45.00mil 8.00mil] + SymbolLine[35.00mil 35.00mil 40.00mil 40.00mil 8.00mil] + SymbolLine[30.00mil 35.00mil 35.00mil 35.00mil 8.00mil] + SymbolLine[25.00mil 40.00mil 30.00mil 35.00mil 8.00mil] + SymbolLine[25.00mil 40.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[25.00mil 45.00mil 30.00mil 50.00mil 8.00mil] + SymbolLine[30.00mil 50.00mil 35.00mil 50.00mil 8.00mil] +) +Symbol['&' 12.00mil] +( + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 25.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 15.00mil 20.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 10.00mil 10.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 15.00mil 15.00mil 8.00mil] + SymbolLine[15.00mil 15.00mil 15.00mil 20.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] +) +Symbol[''' 12.00mil] +( + SymbolLine[0.0000 20.00mil 10.00mil 10.00mil 8.00mil] +) +Symbol['(' 12.00mil] +( + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] +) +Symbol[')' 12.00mil] +( + SymbolLine[0.0000 10.00mil 5.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 15.00mil 5.00mil 45.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 5.00mil 45.00mil 8.00mil] +) +Symbol['*' 12.00mil] +( + SymbolLine[0.0000 20.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 20.00mil 20.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 20.00mil 10.00mil 40.00mil 8.00mil] +) +Symbol['+' 12.00mil] +( + SymbolLine[0.0000 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 20.00mil 10.00mil 40.00mil 8.00mil] +) +Symbol[',' 12.00mil] +( + SymbolLine[0.0000 60.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['-' 12.00mil] +( + SymbolLine[0.0000 30.00mil 20.00mil 30.00mil 8.00mil] +) +Symbol['.' 12.00mil] +( + SymbolLine[0.0000 50.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['/' 12.00mil] +( + SymbolLine[0.0000 45.00mil 30.00mil 15.00mil 8.00mil] +) +Symbol['0' 12.00mil] +( + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 20.00mil 20.00mil 8.00mil] +) +Symbol['1' 12.00mil] +( + SymbolLine[0.0000 18.00mil 8.00mil 10.00mil 8.00mil] + SymbolLine[8.00mil 10.00mil 8.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 15.00mil 50.00mil 8.00mil] +) +Symbol['2' 12.00mil] +( + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[25.00mil 15.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 25.00mil 50.00mil 8.00mil] +) +Symbol['3' 12.00mil] +( + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 28.00mil 15.00mil 28.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 23.00mil 8.00mil] + SymbolLine[20.00mil 33.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 33.00mil 15.00mil 28.00mil 8.00mil] + SymbolLine[20.00mil 23.00mil 15.00mil 28.00mil 8.00mil] +) +Symbol['4' 12.00mil] +( + SymbolLine[0.0000 35.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 25.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['5' 12.00mil] +( + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 0.0000 30.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[5.00mil 25.00mil 15.00mil 25.00mil 8.00mil] + SymbolLine[15.00mil 25.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['6' 12.00mil] +( + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 28.00mil 20.00mil 33.00mil 8.00mil] + SymbolLine[0.0000 28.00mil 15.00mil 28.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 33.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['7' 12.00mil] +( + SymbolLine[5.00mil 50.00mil 25.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 25.00mil 10.00mil 8.00mil] +) +Symbol['8' 12.00mil] +( + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 37.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 37.00mil 7.00mil 30.00mil 8.00mil] + SymbolLine[7.00mil 30.00mil 13.00mil 30.00mil 8.00mil] + SymbolLine[13.00mil 30.00mil 20.00mil 37.00mil 8.00mil] + SymbolLine[20.00mil 37.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 23.00mil 7.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 23.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 23.00mil 8.00mil] + SymbolLine[13.00mil 30.00mil 20.00mil 23.00mil 8.00mil] +) +Symbol['9' 12.00mil] +( + SymbolLine[5.00mil 50.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 25.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] +) +Symbol[':' 12.00mil] +( + SymbolLine[0.0000 25.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 35.00mil 8.00mil] +) +Symbol[';' 12.00mil] +( + SymbolLine[0.0000 50.00mil 10.00mil 40.00mil 8.00mil] + SymbolLine[10.00mil 25.00mil 10.00mil 30.00mil 8.00mil] +) +Symbol['<' 12.00mil] +( + SymbolLine[0.0000 30.00mil 10.00mil 20.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 10.00mil 40.00mil 8.00mil] +) +Symbol['=' 12.00mil] +( + SymbolLine[0.0000 25.00mil 20.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 20.00mil 35.00mil 8.00mil] +) +Symbol['>' 12.00mil] +( + SymbolLine[0.0000 20.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 10.00mil 30.00mil 8.00mil] +) +Symbol['?' 12.00mil] +( + SymbolLine[10.00mil 30.00mil 10.00mil 35.00mil 8.00mil] + SymbolLine[10.00mil 45.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 20.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 20.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 20.00mil 20.00mil 8.00mil] +) +Symbol['@' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 40.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 40.00mil 50.00mil 8.00mil] + SymbolLine[50.00mil 35.00mil 50.00mil 10.00mil 8.00mil] + SymbolLine[50.00mil 10.00mil 40.00mil 0.0000 8.00mil] + SymbolLine[40.00mil 0.0000 10.00mil 0.0000 8.00mil] + SymbolLine[10.00mil 0.0000 0.0000 10.00mil 8.00mil] + SymbolLine[15.00mil 20.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 30.00mil 35.00mil 8.00mil] + SymbolLine[30.00mil 35.00mil 35.00mil 30.00mil 8.00mil] + SymbolLine[35.00mil 30.00mil 40.00mil 35.00mil 8.00mil] + SymbolLine[35.00mil 30.00mil 35.00mil 15.00mil 8.00mil] + SymbolLine[35.00mil 20.00mil 30.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 30.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 15.00mil 20.00mil 8.00mil] + SymbolLine[40.00mil 35.00mil 50.00mil 35.00mil 8.00mil] +) +Symbol['A' 12.00mil] +( + SymbolLine[0.0000 20.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 20.00mil 7.00mil 10.00mil 8.00mil] + SymbolLine[7.00mil 10.00mil 18.00mil 10.00mil 8.00mil] + SymbolLine[18.00mil 10.00mil 25.00mil 20.00mil 8.00mil] + SymbolLine[25.00mil 20.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 25.00mil 30.00mil 8.00mil] +) +Symbol['B' 12.00mil] +( + SymbolLine[0.0000 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[25.00mil 33.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 28.00mil 25.00mil 33.00mil 8.00mil] + SymbolLine[5.00mil 28.00mil 20.00mil 28.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[25.00mil 15.00mil 25.00mil 23.00mil 8.00mil] + SymbolLine[20.00mil 28.00mil 25.00mil 23.00mil 8.00mil] +) +Symbol['C' 12.00mil] +( + SymbolLine[7.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 43.00mil 7.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 17.00mil 0.0000 43.00mil 8.00mil] + SymbolLine[0.0000 17.00mil 7.00mil 10.00mil 8.00mil] + SymbolLine[7.00mil 10.00mil 20.00mil 10.00mil 8.00mil] +) +Symbol['D' 12.00mil] +( + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[18.00mil 10.00mil 25.00mil 17.00mil 8.00mil] + SymbolLine[25.00mil 17.00mil 25.00mil 43.00mil 8.00mil] + SymbolLine[18.00mil 50.00mil 25.00mil 43.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 18.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 18.00mil 10.00mil 8.00mil] +) +Symbol['E' 12.00mil] +( + SymbolLine[0.0000 28.00mil 15.00mil 28.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] +) +Symbol['F' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 28.00mil 15.00mil 28.00mil 8.00mil] +) +Symbol['G' 12.00mil] +( + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[25.00mil 35.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 35.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 20.00mil 30.00mil 8.00mil] +) +Symbol['H' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[25.00mil 10.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 25.00mil 30.00mil 8.00mil] +) +Symbol['I' 12.00mil] +( + SymbolLine[0.0000 10.00mil 10.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['J' 12.00mil] +( + SymbolLine[7.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 15.00mil 45.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 15.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 0.0000 40.00mil 8.00mil] +) +Symbol['K' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['L' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['M' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 30.00mil 10.00mil 8.00mil] + SymbolLine[30.00mil 10.00mil 30.00mil 50.00mil 8.00mil] +) +Symbol['N' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[25.00mil 10.00mil 25.00mil 50.00mil 8.00mil] +) +Symbol['O' 12.00mil] +( + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['P' 12.00mil] +( + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[25.00mil 15.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] +) +Symbol['Q' 12.00mil] +( + SymbolLine[0.0000 15.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[15.00mil 10.00mil 20.00mil 15.00mil 8.00mil] + SymbolLine[20.00mil 15.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[10.00mil 35.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['R' 12.00mil] +( + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[25.00mil 15.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 25.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[13.00mil 30.00mil 25.00mil 50.00mil 8.00mil] +) +Symbol['S' 12.00mil] +( + SymbolLine[20.00mil 10.00mil 25.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 15.00mil 0.0000 25.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 35.00mil 8.00mil] + SymbolLine[25.00mil 35.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['T' 12.00mil] +( + SymbolLine[0.0000 10.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['U' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 10.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['V' 12.00mil] +( + SymbolLine[0.0000 10.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 20.00mil 10.00mil 8.00mil] +) +Symbol['W' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 30.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[25.00mil 50.00mil 30.00mil 30.00mil 8.00mil] + SymbolLine[30.00mil 30.00mil 30.00mil 10.00mil 8.00mil] +) +Symbol['X' 12.00mil] +( + SymbolLine[0.0000 50.00mil 25.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 25.00mil 50.00mil 8.00mil] +) +Symbol['Y' 12.00mil] +( + SymbolLine[0.0000 10.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 20.00mil 10.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['Z' 12.00mil] +( + SymbolLine[0.0000 10.00mil 25.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 25.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 25.00mil 50.00mil 8.00mil] +) +Symbol['[' 12.00mil] +( + SymbolLine[0.0000 10.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['\' 12.00mil] +( + SymbolLine[0.0000 15.00mil 30.00mil 45.00mil 8.00mil] +) +Symbol[']' 12.00mil] +( + SymbolLine[0.0000 10.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['^' 12.00mil] +( + SymbolLine[0.0000 15.00mil 5.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 10.00mil 10.00mil 15.00mil 8.00mil] +) +Symbol['_' 12.00mil] +( + SymbolLine[0.0000 50.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['a' 12.00mil] +( + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 45.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['b' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] +) +Symbol['c' 12.00mil] +( + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['d' 12.00mil] +( + SymbolLine[20.00mil 10.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] +) +Symbol['e' 12.00mil] +( + SymbolLine[5.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[0.0000 40.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[20.00mil 40.00mil 20.00mil 35.00mil 8.00mil] +) +Symbol['f' 10.00mil] +( + SymbolLine[5.00mil 15.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 15.00mil 10.00mil 10.00mil 8.00mil] + SymbolLine[10.00mil 10.00mil 15.00mil 10.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 10.00mil 30.00mil 8.00mil] +) +Symbol['g' 12.00mil] +( + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[0.0000 60.00mil 5.00mil 65.00mil 8.00mil] + SymbolLine[5.00mil 65.00mil 15.00mil 65.00mil 8.00mil] + SymbolLine[15.00mil 65.00mil 20.00mil 60.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 20.00mil 60.00mil 8.00mil] +) +Symbol['h' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['i' 10.00mil] +( + SymbolLine[0.0000 20.00mil 0.0000 21.00mil 10.00mil] + SymbolLine[0.0000 35.00mil 0.0000 50.00mil 8.00mil] +) +Symbol['j' 10.00mil] +( + SymbolLine[5.00mil 20.00mil 5.00mil 21.00mil 10.00mil] + SymbolLine[5.00mil 35.00mil 5.00mil 60.00mil 8.00mil] + SymbolLine[0.0000 65.00mil 5.00mil 60.00mil 8.00mil] +) +Symbol['k' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 10.00mil 25.00mil 8.00mil] +) +Symbol['l' 10.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['m' 12.00mil] +( + SymbolLine[5.00mil 35.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 25.00mil 30.00mil 8.00mil] + SymbolLine[25.00mil 30.00mil 30.00mil 30.00mil 8.00mil] + SymbolLine[30.00mil 30.00mil 35.00mil 35.00mil 8.00mil] + SymbolLine[35.00mil 35.00mil 35.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 35.00mil 8.00mil] +) +Symbol['n' 12.00mil] +( + SymbolLine[5.00mil 35.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 35.00mil 8.00mil] +) +Symbol['o' 12.00mil] +( + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['p' 12.00mil] +( + SymbolLine[5.00mil 35.00mil 5.00mil 65.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 35.00mil 8.00mil] + SymbolLine[25.00mil 35.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 45.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['q' 12.00mil] +( + SymbolLine[20.00mil 35.00mil 20.00mil 65.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 15.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['r' 12.00mil] +( + SymbolLine[5.00mil 35.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 35.00mil 8.00mil] +) +Symbol['s' 12.00mil] +( + SymbolLine[5.00mil 50.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 40.00mil 25.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 40.00mil 20.00mil 40.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 40.00mil 8.00mil] + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 25.00mil 35.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] +) +Symbol['t' 10.00mil] +( + SymbolLine[5.00mil 10.00mil 5.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 45.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 25.00mil 10.00mil 25.00mil 8.00mil] +) +Symbol['u' 12.00mil] +( + SymbolLine[0.0000 30.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['v' 12.00mil] +( + SymbolLine[0.0000 30.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['w' 12.00mil] +( + SymbolLine[0.0000 30.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 10.00mil 50.00mil 8.00mil] + SymbolLine[10.00mil 50.00mil 15.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 30.00mil 15.00mil 45.00mil 8.00mil] + SymbolLine[15.00mil 45.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 50.00mil 25.00mil 50.00mil 8.00mil] + SymbolLine[25.00mil 50.00mil 30.00mil 45.00mil 8.00mil] + SymbolLine[30.00mil 30.00mil 30.00mil 45.00mil 8.00mil] +) +Symbol['x' 12.00mil] +( + SymbolLine[0.0000 30.00mil 20.00mil 50.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 20.00mil 30.00mil 8.00mil] +) +Symbol['y' 12.00mil] +( + SymbolLine[0.0000 30.00mil 0.0000 45.00mil 8.00mil] + SymbolLine[0.0000 45.00mil 5.00mil 50.00mil 8.00mil] + SymbolLine[20.00mil 30.00mil 20.00mil 60.00mil 8.00mil] + SymbolLine[15.00mil 65.00mil 20.00mil 60.00mil 8.00mil] + SymbolLine[5.00mil 65.00mil 15.00mil 65.00mil 8.00mil] + SymbolLine[0.0000 60.00mil 5.00mil 65.00mil 8.00mil] + SymbolLine[5.00mil 50.00mil 15.00mil 50.00mil 8.00mil] + SymbolLine[15.00mil 50.00mil 20.00mil 45.00mil 8.00mil] +) +Symbol['z' 12.00mil] +( + SymbolLine[0.0000 30.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 20.00mil 30.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 20.00mil 50.00mil 8.00mil] +) +Symbol['{' 12.00mil] +( + SymbolLine[5.00mil 15.00mil 10.00mil 10.00mil 8.00mil] + SymbolLine[5.00mil 15.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[0.0000 30.00mil 5.00mil 35.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 5.00mil 45.00mil 8.00mil] + SymbolLine[5.00mil 45.00mil 10.00mil 50.00mil 8.00mil] +) +Symbol['|' 12.00mil] +( + SymbolLine[0.0000 10.00mil 0.0000 50.00mil 8.00mil] +) +Symbol['}' 12.00mil] +( + SymbolLine[0.0000 10.00mil 5.00mil 15.00mil 8.00mil] + SymbolLine[5.00mil 15.00mil 5.00mil 25.00mil 8.00mil] + SymbolLine[5.00mil 25.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 35.00mil 5.00mil 45.00mil 8.00mil] + SymbolLine[0.0000 50.00mil 5.00mil 45.00mil 8.00mil] +) +Symbol['~' 12.00mil] +( + SymbolLine[0.0000 35.00mil 5.00mil 30.00mil 8.00mil] + SymbolLine[5.00mil 30.00mil 10.00mil 30.00mil 8.00mil] + SymbolLine[10.00mil 30.00mil 15.00mil 35.00mil 8.00mil] + SymbolLine[15.00mil 35.00mil 20.00mil 35.00mil 8.00mil] + SymbolLine[20.00mil 35.00mil 25.00mil 30.00mil 8.00mil] +) +Attribute("PCB::grid::unit" "mil") +Attribute("PCB::grid::size" "1.00mil") +Via[3180.00mil 754.00mil 295.00mil 20.00mil 0.0000 134.00mil "" "lock"] +Via[3180.00mil 3770.00mil 295.00mil 20.00mil 0.0000 134.00mil "" "lock"] +Via[750.00mil 3770.00mil 295.00mil 20.00mil 0.0000 134.00mil "" "lock"] +Via[750.00mil 754.00mil 295.00mil 20.00mil 0.0000 134.00mil "" "lock"] +Via[2531.00mil 1511.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[1990.00mil 1510.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[1580.00mil 2295.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[1520.00mil 2505.00mil 28.00mil 12.00mil 0.0000 12.00mil "" "thermal(1X)"] +Via[1530.00mil 2455.00mil 28.00mil 12.00mil 0.0000 12.00mil "" "thermal(1X)"] +Via[1540.00mil 2405.00mil 28.00mil 12.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2120.00mil 2195.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[1720.00mil 2015.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2070.00mil 1725.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2040.00mil 2575.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[2300.00mil 2435.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[2530.00mil 2175.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[2530.00mil 2015.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[2130.00mil 1995.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[2440.00mil 2365.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2440.00mil 2005.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2240.00mil 2005.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2320.00mil 1975.00mil 30.00mil 20.00mil 0.0000 12.00mil "" ""] +Via[1994.00mil 1441.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2560.00mil 1665.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2560.00mil 1397.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[2870.00mil 1785.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[3167.00mil 1570.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[2420.00mil 3400.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[2640.00mil 3400.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[28.9563mm 3730.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[2465.00mil 2945.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[2515.00mil 3050.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[2560.00mil 3150.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[2610.00mil 3250.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[627.06mil 2887.20mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(1X)"] +Via[17.2270mm 55.3690mm 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(1X)"] +Via[1640.00mil 3600.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[2770.00mil 3600.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[640.00mil 1240.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[2240.00mil 2365.00mil 30.00mil 20.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[385.00mil 1815.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(1X)"] +Via[2640.00mil 2535.00mil 30.00mil 12.00mil 0.0000 12.00mil "" ""] +Via[1305.00mil 1425.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[3275.00mil 1425.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[3275.00mil 1600.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[2935.00mil 2590.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[2935.00mil 2775.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[2015.00mil 3675.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[2015.00mil 3500.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[1305.00mil 2725.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[1050.00mil 2725.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(1X)"] +Via[1580.00mil 2690.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(0X,1X)"] +Via[380.00mil 3215.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[380.00mil 3355.00mil 60.00mil 20.00mil 0.0000 35.00mil "" "thermal(1X)"] +Via[3840.00mil 1625.00mil 150.00mil 0.0000 0.0000 134.00mil "" ""] +Via[3840.00mil 3375.00mil 150.00mil 0.0000 0.0000 134.00mil "" ""] +Via[90.00mil 3375.00mil 150.00mil 0.0000 0.0000 134.00mil "" ""] +Via[90.00mil 1625.00mil 150.00mil 0.0000 0.0000 134.00mil "" ""] +Via[3110.00mil 1625.00mil 30.00mil 12.00mil 0.0000 12.00mil "" "thermal(0X,1X)"] +Via[1970.00mil 2655.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] +Via[2548.00mil 3651.00mil 60.00mil 20.00mil 0.0000 35.00mil "" ""] + +Element["" "HEADER16_2" "J8" "unknown" 1305.00mil 2820.00mil 165.00mil -100.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" ""] + Pin[0.0000 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "3" "3" ""] + Pin[100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "4" "4" "thermal(0X,1X)"] + Pin[0.0000 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "5" "5" ""] + Pin[100.00mil 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "6" "6" "thermal(0X,1X)"] + Pin[0.0000 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "7" "7" ""] + Pin[100.00mil 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "8" "8" "thermal(0X,1X)"] + Pin[0.0000 400.00mil 60.00mil 30.00mil 66.00mil 38.00mil "9" "9" ""] + Pin[100.00mil 400.00mil 60.00mil 30.00mil 66.00mil 38.00mil "10" "10" "thermal(0X,1X)"] + Pin[0.0000 500.00mil 60.00mil 30.00mil 66.00mil 38.00mil "11" "11" ""] + Pin[100.00mil 500.00mil 60.00mil 30.00mil 66.00mil 38.00mil "12" "12" "thermal(0X,1X)"] + Pin[0.0000 600.00mil 60.00mil 30.00mil 66.00mil 38.00mil "13" "13" ""] + Pin[100.00mil 600.00mil 60.00mil 30.00mil 66.00mil 38.00mil "14" "14" "thermal(0X,1X)"] + Pin[0.0000 700.00mil 60.00mil 30.00mil 66.00mil 38.00mil "15" "15" ""] + Pin[100.00mil 700.00mil 60.00mil 30.00mil 66.00mil 38.00mil "16" "16" "thermal(0X,1X)"] + ElementLine [-50.00mil -50.00mil -50.00mil 750.00mil 10.00mil] + ElementLine [-50.00mil 750.00mil 150.00mil 750.00mil 10.00mil] + ElementLine [150.00mil -50.00mil 150.00mil 750.00mil 10.00mil] + ElementLine [-50.00mil -50.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + + ) + +Element["" "HEADER8_2" "J11" "unknown" 3500.00mil 2150.00mil 300.00mil 40.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" ""] + Pin[0.0000 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "3" "3" ""] + Pin[100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "4" "4" "thermal(0X,1X)"] + Pin[0.0000 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "5" "5" ""] + Pin[100.00mil 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "6" "6" "thermal(0X,1X)"] + Pin[0.0000 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "7" "7" ""] + Pin[100.00mil 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "8" "8" "thermal(0X,1X)"] + ElementLine [-50.00mil -50.00mil -50.00mil 350.00mil 10.00mil] + ElementLine [-50.00mil 350.00mil 150.00mil 350.00mil 10.00mil] + ElementLine [150.00mil 350.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [150.00mil -50.00mil -50.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil 50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["" "SOT23_MOSFET" "Q1" "unknown" 83.5175mm 48.8165mm 125.82mil -122.00mil 0 100 ""] +( + Pad[0.0000 -3.00mil 0.0000 3.00mil 34.00mil 38.00mil 40.00mil "G" "1" "square,edge2"] + Pad[78.00mil -3.00mil 78.00mil 3.00mil 34.00mil 38.00mil 40.00mil "S" "2" "square,edge2"] + Pad[39.00mil -85.00mil 39.00mil -79.00mil 34.00mil 38.00mil 40.00mil "D" "3" "square"] + ElementLine [-25.00mil -110.00mil -25.00mil 29.00mil 10.00mil] + ElementLine [-25.00mil 29.00mil 103.00mil 29.00mil 10.00mil] + ElementLine [103.00mil 29.00mil 103.00mil -110.00mil 10.00mil] + ElementLine [103.00mil -110.00mil -25.00mil -110.00mil 10.00mil] + + ) + +Element["" "HEADER2_2" "J10" "unknown" 3500.00mil 1950.00mil 304.00mil -32.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square,edge2"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" "edge2"] + ElementLine [-50.00mil -50.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 150.00mil 50.00mil 10.00mil] + ElementLine [150.00mil -50.00mil 150.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil -50.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + + ) + +Element["" "HEADER2_2" "J7" "unknown" 450.00mil 850.00mil -30.00mil -220.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square,thermal(0X,1X)"] + Pin[0.0000 -100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" ""] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -150.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil -150.00mil 50.00mil -150.00mil 10.00mil] + ElementLine [-50.00mil -150.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil -50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["lock" "MOLEX8981" "J1" "unknown" 220.00mil 505.00mil 780.00mil -270.00mil 0 100 ""] +( + Pin[0.0000 0.0000 100.00mil 30.00mil 110.00mil 60.00mil "+5V" "4" "lock,edge2"] + Pin[200.00mil 0.0000 100.00mil 30.00mil 110.00mil 60.00mil "GND" "3" "lock,edge2,thermal(0X,1X)"] + Pin[400.00mil 0.0000 100.00mil 30.00mil 110.00mil 60.00mil "GND" "2" "lock,edge2,thermal(0X,1X)"] + Pin[600.00mil 0.0000 100.00mil 30.00mil 110.00mil 60.00mil "+12V" "1" "lock,edge2"] + Pin[-100.00mil -100.00mil 120.00mil 30.00mil 110.00mil 100.00mil "LeftHole" "" "lock,edge2"] + Pin[700.00mil -100.00mil 120.00mil 30.00mil 110.00mil 100.00mil "RightHole" "" "lock,edge2"] + Pin[100.00mil -400.00mil 180.00mil 30.00mil 160.00mil 157.00mil "BackLeftHole" "" "lock,edge2"] + Pin[500.00mil -400.00mil 180.00mil 30.00mil 160.00mil 157.00mil "BackRightHole" "" "lock,edge2"] + ElementLine [-160.00mil 90.00mil 760.00mil 90.00mil 10.00mil] + ElementLine [-160.00mil 90.00mil -160.00mil -500.00mil 10.00mil] + ElementLine [-160.00mil -500.00mil 760.00mil -500.00mil 10.00mil] + ElementLine [760.00mil -500.00mil 760.00mil 90.00mil 10.00mil] + + ) + +Element["" "HEADER50_2_RA" "J2" "unknown" 3702.00mil 407.00mil -154.00mil -173.00mil 0 100 ""] +( + Pin[-2400.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "edge2,thermal(0X,1X)"] + Pin[-2400.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" "edge2"] + Pin[-2300.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "3" "3" "edge2,thermal(0X,1X)"] + Pin[-2300.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "4" "4" "edge2"] + Pin[-2200.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "5" "5" "edge2,thermal(0X,1X)"] + Pin[-2200.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "6" "6" "edge2"] + Pin[-2100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "7" "7" "edge2,thermal(0X,1X)"] + Pin[-2100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "8" "8" "edge2"] + Pin[-2000.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "9" "9" "edge2,thermal(0X,1X)"] + Pin[-2000.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "10" "10" "edge2"] + Pin[-1900.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "11" "11" "edge2,thermal(0X,1X)"] + Pin[-1900.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "12" "12" "edge2"] + Pin[-1800.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "13" "13" "edge2,thermal(0X,1X)"] + Pin[-1800.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "14" "14" "edge2"] + Pin[-1700.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "15" "15" "edge2,thermal(0X,1X)"] + Pin[-1700.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "16" "16" "edge2"] + Pin[-1600.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "17" "17" "edge2,thermal(0X,1X)"] + Pin[-1600.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "18" "18" "edge2"] + Pin[-1500.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "19" "19" "edge2,thermal(0X,1X)"] + Pin[-1500.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "20" "20" "edge2,thermal(0X,1X)"] + Pin[-1400.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "21" "21" "edge2,thermal(0X,1X)"] + Pin[-1400.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "22" "22" "edge2,thermal(0X,1X)"] + Pin[-1300.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "23" "23" "edge2,thermal(0X,1X)"] + Pin[-1300.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "24" "24" "edge2,thermal(0X,1X)"] + Pin[-1200.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "25" "25" "edge2"] + Pin[-1200.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "26" "26" "edge2"] + Pin[-1100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "27" "27" "edge2,thermal(0X,1X)"] + Pin[-1100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "28" "28" "edge2,thermal(0X,1X)"] + Pin[-1000.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "29" "29" "edge2,thermal(0X,1X)"] + Pin[-1000.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "30" "30" "edge2,thermal(0X,1X)"] + Pin[-900.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "31" "31" "edge2,thermal(0X,1X)"] + Pin[-900.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "32" "32" "edge2"] + Pin[-800.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "33" "33" "edge2,thermal(0X,1X)"] + Pin[-800.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "34" "34" "edge2,thermal(0X,1X)"] + Pin[-700.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "35" "35" "edge2,thermal(0X,1X)"] + Pin[-700.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "36" "36" "edge2"] + Pin[-600.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "37" "37" "edge2,thermal(0X,1X)"] + Pin[-600.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "38" "38" "edge2"] + Pin[-500.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "39" "39" "edge2,thermal(0X,1X)"] + Pin[-500.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "40" "40" "edge2"] + Pin[-400.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "41" "41" "edge2,thermal(0X,1X)"] + Pin[-400.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "42" "42" "edge2"] + Pin[-300.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "43" "43" "edge2,thermal(0X,1X)"] + Pin[-300.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "44" "44" "edge2"] + Pin[-200.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "45" "45" "edge2,thermal(0X,1X)"] + Pin[-200.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "46" "46" "edge2"] + Pin[-100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "47" "47" "edge2,thermal(0X,1X)"] + Pin[-100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "48" "48" "edge2"] + Pin[0.0000 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "49" "49" "edge2,thermal(0X,1X)"] + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "50" "50" "square,edge2"] + ElementLine [-2450.00mil -50.00mil 50.00mil -50.00mil 10.00mil] + ElementLine [-2450.00mil -50.00mil -2450.00mil 150.00mil 10.00mil] + ElementLine [-2450.00mil 150.00mil 50.00mil 150.00mil 10.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 150.00mil 10.00mil] + ElementLine [-50.00mil -50.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -400.00mil 50.00mil -50.00mil 10.00mil] + ElementLine [-2450.00mil -400.00mil 50.00mil -400.00mil 10.00mil] + ElementLine [-2450.00mil -400.00mil -2450.00mil -50.00mil 10.00mil] + + ) + +Element["" "SO14" "U4" "unknown" 2243.00mil 1522.50mil 44.50mil -225.50mil 0 100 ""] +( + Pad[150.00mil -135.00mil 150.00mil -70.00mil 20.00mil 34.00mil 30.00mil "A0" "1" "square"] + Pad[100.00mil -135.00mil 100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y0_" "2" "square"] + Pad[50.00mil -135.00mil 50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A1" "3" "square"] + Pad[0.0000 -135.00mil 0.0000 -70.00mil 20.00mil 10.00mil 30.00mil "_Y1_" "4" "square"] + Pad[-50.00mil -135.00mil -50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A2" "5" "square"] + Pad[-100.00mil -135.00mil -100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y2_" "6" "square"] + Pad[-150.00mil -135.00mil -150.00mil -70.00mil 20.00mil 30.00mil 30.00mil "GND" "7" "square"] + Pad[-150.00mil 70.00mil -150.00mil 135.00mil 20.00mil 34.00mil 30.00mil "_Y3_" "8" "square,edge2"] + Pad[-100.00mil 70.00mil -100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A3" "9" "square,edge2"] + Pad[-50.00mil 70.00mil -50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y4_" "10" "square,edge2"] + Pad[0.0000 70.00mil 0.0000 135.00mil 20.00mil 10.00mil 30.00mil "A4" "11" "square,edge2"] + Pad[50.00mil 70.00mil 50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y5_" "12" "square,edge2"] + Pad[100.00mil 70.00mil 100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A5" "13" "square,edge2"] + Pad[150.00mil 70.00mil 150.00mil 135.00mil 20.00mil 34.00mil 30.00mil "Vcc" "14" "square,edge2"] + ElementLine [-170.00mil -155.00mil 170.00mil -155.00mil 10.00mil] + ElementLine [-170.00mil -155.00mil -170.00mil 155.00mil 10.00mil] + ElementLine [-170.00mil 155.00mil 170.00mil 155.00mil 10.00mil] + ElementLine [170.00mil -155.00mil 170.00mil -25.00mil 10.00mil] + ElementLine [170.00mil 25.00mil 170.00mil 155.00mil 10.00mil] + ElementArc [170.00mil 0.0000 25.00mil 25.00mil 270 180 10.00mil] + + ) + +Element["" "cap_0402" "C22" "100nF" 74.2165mm 95.2157mm -15.26mil 0.6924mm 0 100 ""] +( + Pad[38.72mil 0.35mil 38.72mil 0.35mil 19.69mil 24.00mil 25.69mil "1" "1" "square,edge2"] + Pad[-0.65mil 0.35mil -0.65mil 0.35mil 19.69mil 20.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.37mil -17.37mil -18.37mil 18.06mil 6.00mil] + ElementLine [-18.37mil 18.06mil 56.43mil 18.06mil 6.00mil] + ElementLine [56.43mil -17.37mil 56.43mil 18.06mil 6.00mil] + ElementLine [-18.37mil -17.37mil 56.43mil -17.37mil 6.00mil] + + ) + +Element["" "SO14" "U3" "unknown" 2820.00mil 1525.00mil -10.00mil -230.00mil 0 100 ""] +( + Pad[150.00mil -135.00mil 150.00mil -70.00mil 20.00mil 34.00mil 30.00mil "A0" "1" "square"] + Pad[100.00mil -135.00mil 100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y0_" "2" "square"] + Pad[50.00mil -135.00mil 50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A1" "3" "square"] + Pad[0.0000 -135.00mil 0.0000 -70.00mil 20.00mil 10.00mil 30.00mil "_Y1_" "4" "square"] + Pad[-50.00mil -135.00mil -50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A2" "5" "square"] + Pad[-100.00mil -135.00mil -100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y2_" "6" "square"] + Pad[-150.00mil -135.00mil -150.00mil -70.00mil 20.00mil 22.00mil 30.00mil "GND" "7" "square"] + Pad[-150.00mil 70.00mil -150.00mil 135.00mil 20.00mil 34.00mil 30.00mil "_Y3_" "8" "square,edge2"] + Pad[-100.00mil 70.00mil -100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A3" "9" "square,edge2"] + Pad[-50.00mil 70.00mil -50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y4_" "10" "square,edge2"] + Pad[0.0000 70.00mil 0.0000 135.00mil 20.00mil 10.00mil 30.00mil "A4" "11" "square,edge2"] + Pad[50.00mil 70.00mil 50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y5_" "12" "square,edge2"] + Pad[100.00mil 70.00mil 100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A5" "13" "square,edge2"] + Pad[150.00mil 70.00mil 150.00mil 135.00mil 20.00mil 38.00mil 30.00mil "Vcc" "14" "square,edge2"] + ElementLine [-170.00mil -155.00mil 170.00mil -155.00mil 10.00mil] + ElementLine [-170.00mil -155.00mil -170.00mil 155.00mil 10.00mil] + ElementLine [-170.00mil 155.00mil 170.00mil 155.00mil 10.00mil] + ElementLine [170.00mil -155.00mil 170.00mil -25.00mil 10.00mil] + ElementLine [170.00mil 25.00mil 170.00mil 155.00mil 10.00mil] + ElementArc [170.00mil 0.0000 25.00mil 25.00mil 270 180 10.00mil] + + ) + +Element["" "ARMJTAG" "J9" "unknown" 1406.00mil 2478.00mil -245.00mil -45.00mil 3 100 ""] +( + Pin[0.0000 0.0000 74.80mil 20.00mil 80.80mil 43.31mil "1" "1" "square"] + Pin[-100.00mil 0.0000 74.80mil 20.00mil 80.80mil 43.31mil "2" "2" ""] + Pin[0.0000 -100.00mil 74.80mil 20.00mil 80.80mil 43.31mil "3" "3" ""] + Pin[-100.39mil -100.39mil 74.80mil 20.00mil 80.80mil 43.31mil "4" "4" "thermal(0X,1X)"] + Pin[0.0000 -200.00mil 74.80mil 20.00mil 80.80mil 43.31mil "5" "5" ""] + Pin[-100.00mil -200.00mil 74.80mil 20.00mil 80.80mil 43.31mil "6" "6" "thermal(0X,1X)"] + Pin[0.0000 -300.00mil 74.80mil 20.00mil 80.80mil 43.31mil "7" "7" ""] + Pin[-100.00mil -300.00mil 74.80mil 20.00mil 80.80mil 43.31mil "8" "8" "thermal(0X,1X)"] + Pin[0.0000 -400.00mil 74.80mil 20.00mil 80.80mil 43.31mil "9" "9" ""] + Pin[-100.00mil -400.00mil 74.80mil 20.00mil 80.80mil 43.31mil "10" "10" "thermal(0X,1X)"] + Pin[0.0000 -500.00mil 74.80mil 20.00mil 80.80mil 43.31mil "11" "11" "thermal(0X,1X)"] + Pin[-100.00mil -500.00mil 74.80mil 20.00mil 80.80mil 43.31mil "12" "12" "thermal(0X,1X)"] + Pin[0.0000 -600.00mil 74.80mil 20.00mil 80.80mil 43.31mil "13" "13" ""] + Pin[-100.00mil -600.00mil 74.80mil 20.00mil 80.80mil 43.31mil "14" "14" "thermal(0X,1X)"] + Pin[0.0000 -700.00mil 74.80mil 20.00mil 80.80mil 43.31mil "15" "15" ""] + Pin[-100.00mil -700.00mil 74.80mil 20.00mil 80.80mil 43.31mil "16" "16" "thermal(0X,1X)"] + Pin[0.0000 -800.00mil 74.80mil 20.00mil 80.80mil 43.31mil "17" "17" ""] + Pin[-100.00mil -800.00mil 74.80mil 20.00mil 80.80mil 43.31mil "18" "18" "thermal(0X,1X)"] + Pin[0.0000 -900.00mil 74.80mil 20.00mil 80.80mil 43.31mil "19" "19" ""] + Pin[-100.00mil -900.00mil 74.80mil 20.00mil 80.80mil 43.31mil "20" "20" "thermal(0X,1X)"] + ElementLine [-229.53mil -100.39mil -230.00mil -99.92mil 10.00mil] + ElementLine [-230.00mil -99.92mil -230.00mil 200.00mil 10.00mil] + ElementLine [-230.00mil 200.00mil 130.00mil 200.00mil 10.00mil] + ElementLine [130.00mil -1100.00mil 130.00mil 200.00mil 10.00mil] + ElementLine [-229.92mil -27.9380mm -229.92mil -100.00mil 10.00mil] + ElementLine [-229.92mil -27.9380mm -230.00mil -1100.00mil 10.00mil] + ElementLine [-230.00mil -1100.00mil 130.00mil -1100.00mil 10.00mil] + ElementLine [50.00mil -550.00mil 130.00mil -550.00mil 10.00mil] + ElementLine [50.00mil -550.00mil 50.00mil -350.00mil 10.00mil] + ElementLine [50.00mil -350.00mil 130.00mil -350.00mil 10.00mil] + + ) + +Element["" "SO14" "U5" "unknown" 1742.00mil 1526.50mil -25.50mil -228.50mil 0 100 ""] +( + Pad[150.00mil -135.00mil 150.00mil -70.00mil 20.00mil 34.00mil 30.00mil "A0" "1" "square"] + Pad[100.00mil -135.00mil 100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y0_" "2" "square"] + Pad[50.00mil -135.00mil 50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A1" "3" "square"] + Pad[0.0000 -135.00mil 0.0000 -70.00mil 20.00mil 10.00mil 30.00mil "_Y1_" "4" "square"] + Pad[-50.00mil -135.00mil -50.00mil -70.00mil 20.00mil 10.00mil 30.00mil "A2" "5" "square"] + Pad[-100.00mil -135.00mil -100.00mil -70.00mil 20.00mil 10.00mil 30.00mil "_Y2_" "6" "square"] + Pad[-150.00mil -135.00mil -150.00mil -70.00mil 20.00mil 30.00mil 30.00mil "GND" "7" "square"] + Pad[-150.00mil 70.00mil -150.00mil 135.00mil 20.00mil 34.00mil 30.00mil "_Y3_" "8" "square,edge2"] + Pad[-100.00mil 70.00mil -100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A3" "9" "square,edge2"] + Pad[-50.00mil 70.00mil -50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y4_" "10" "square,edge2"] + Pad[0.0000 70.00mil 0.0000 135.00mil 20.00mil 10.00mil 30.00mil "A4" "11" "square,edge2"] + Pad[50.00mil 70.00mil 50.00mil 135.00mil 20.00mil 10.00mil 30.00mil "_Y5_" "12" "square,edge2"] + Pad[100.00mil 70.00mil 100.00mil 135.00mil 20.00mil 10.00mil 30.00mil "A5" "13" "square,edge2"] + Pad[150.00mil 70.00mil 150.00mil 135.00mil 20.00mil 34.00mil 30.00mil "Vcc" "14" "square,edge2"] + ElementLine [-170.00mil -155.00mil 170.00mil -155.00mil 10.00mil] + ElementLine [-170.00mil -155.00mil -170.00mil 155.00mil 10.00mil] + ElementLine [-170.00mil 155.00mil 170.00mil 155.00mil 10.00mil] + ElementLine [170.00mil -155.00mil 170.00mil -25.00mil 10.00mil] + ElementLine [170.00mil 25.00mil 170.00mil 155.00mil 10.00mil] + ElementArc [170.00mil 0.0000 25.00mil 25.00mil 270 180 10.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R5" "22?" 56.5508mm 71.6336mm -185.00mil -75.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 42.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 42.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "fci-10118192-0001LF" "J5" "unknown" 49.6032mm 97.3757mm 118.29mil -170.67mil 0 100 ""] +( + Pad[-0.63mil -82.71mil -0.63mil -45.31mil 15.75mil 24.00mil 21.75mil "D+" "3" "square"] + Pad[50.55mil -82.71mil 50.55mil -45.31mil 15.75mil 32.00mil 21.75mil "GND" "5" "square"] + Pad[-51.81mil -82.71mil -51.81mil -45.31mil 15.75mil 28.00mil 21.75mil "VCC" "1" "square"] + Pad[24.96mil -82.71mil 24.96mil -45.31mil 15.75mil 28.00mil 21.75mil "ID" "4" "square"] + Pad[-26.22mil -82.71mil -26.22mil -45.31mil 15.75mil 24.00mil 21.75mil "D-" "2" "square"] + Pad[-132.52mil -59.09mil -112.84mil -59.09mil 62.99mil 36.00mil 68.99mil "" "6" "square"] + Pad[111.57mil -59.09mil 3.3340mm -59.09mil 62.99mil 36.00mil 68.99mil "" "7" "square,edge2"] + Pad[-3.8161mm 39.34mil -3.8161mm 43.28mil 70.87mil 12.00mil 76.87mil "" "8" "square,edge2"] + Pad[-47.88mil 41.31mil -47.88mil 41.31mil 74.80mil 12.00mil 80.80mil "" "9" "square"] + Pad[46.61mil 41.31mil 46.61mil 41.31mil 74.80mil 12.00mil 80.80mil "" "10" "square,edge2"] + Pad[148.97mil 39.34mil 148.97mil 43.28mil 70.87mil 12.00mil 76.87mil "" "11" "square,edge2"] + ElementLine [-185.67mil 98.40mil 184.41mil 98.40mil 6.00mil] + ElementLine [-3.8161mm 84.62mil -3.8161mm 98.40mil 6.00mil] + ElementLine [-3.8161mm -21.68mil -3.8161mm -0.03mil 6.00mil] + ElementLine [150.94mil 84.62mil 150.94mil 98.40mil 6.00mil] + ElementLine [150.94mil -21.68mil 150.94mil -0.03mil 6.00mil] + ElementLine [-77.41mil -78.77mil -65.59mil -78.77mil 6.00mil] + ElementLine [62.36mil -78.77mil 76.14mil -78.77mil 6.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R4" "22?" 2186.00mil 2726.00mil -145.00mil -48.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 42.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 42.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "FTSH-105-01-L-DV-K" "J4" "unknown" 46.2366mm 59.6288mm -197.75mil -192.93mil 0 100 ""] +( + Pad[-84.56mil 205.50mil -3.56mil 205.50mil 29.00mil 28.00mil 41.00mil "10" "10" "edge2"] + Pad[-84.56mil 155.50mil -3.56mil 155.50mil 29.00mil 24.00mil 41.00mil "8" "8" "edge2"] + Pad[-84.56mil 105.50mil -3.56mil 105.50mil 29.00mil 20.00mil 41.00mil "6" "6" "edge2"] + Pad[-84.56mil 55.50mil -3.56mil 55.50mil 29.00mil 24.00mil 41.00mil "4" "4" "edge2"] + Pad[-84.56mil 5.50mil -3.56mil 5.50mil 29.00mil 20.00mil 41.00mil "2" "2" "edge2"] + Pad[-244.56mil 205.50mil -163.56mil 205.50mil 29.00mil 24.00mil 41.00mil "9" "9" ""] + Pad[-244.56mil 155.50mil -163.56mil 155.50mil 29.00mil 12.00mil 41.00mil "7" "7" ""] + Pad[-244.56mil 105.50mil -163.56mil 105.50mil 29.00mil 12.00mil 41.00mil "5" "5" ""] + Pad[-244.56mil 55.50mil -163.56mil 55.50mil 29.00mil 24.00mil 41.00mil "3" "3" ""] + Pad[-244.56mil 5.50mil -163.56mil 5.50mil 29.00mil 28.00mil 41.00mil "1" "1" ""] + ElementLine [-194.06mil 330.00mil -56.06mil 330.00mil 10.00mil] + ElementLine [-194.06mil -120.00mil -56.06mil -120.00mil 10.00mil] + ElementLine [-56.06mil -120.00mil -56.06mil -29.06mil 10.00mil] + ElementLine [-56.06mil -29.06mil -56.00mil -29.00mil 10.00mil] + ElementLine [-57.00mil 242.00mil -57.00mil 330.00mil 10.00mil] + ElementLine [-194.00mil -120.00mil -194.00mil -29.00mil 10.00mil] + ElementLine [-194.00mil 243.00mil -194.00mil 330.00mil 10.00mil] + ElementLine [-194.00mil -29.00mil -140.00mil -29.00mil 10.00mil] + ElementLine [-140.00mil -29.00mil -140.00mil 243.00mil 10.00mil] + ElementLine [-194.00mil 243.00mil -140.00mil 243.00mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "C2" "10uF" 1805.00mil 2685.00mil 52.00mil 49.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 38.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 38.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "cap_0402" "C9" "100nF" 50.0055mm 65.6679mm -7.44mil -85.70mil 0 100 ""] +( + Pad[-38.72mil -0.35mil -38.72mil -0.35mil 19.69mil 12.00mil 25.69mil "1" "1" "square"] + Pad[0.65mil -0.35mil 0.65mil -0.35mil 19.69mil 12.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [18.37mil -18.06mil 18.37mil 17.37mil 6.00mil] + ElementLine [-56.43mil -18.06mil 18.37mil -18.06mil 6.00mil] + ElementLine [-56.43mil -18.06mil -56.43mil 17.37mil 6.00mil] + ElementLine [-56.43mil 17.37mil 18.37mil 17.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C8" "1uF" 59.7065mm 69.0791mm 75.00mil -30.00mil 0 100 ""] +( + Pad[38.72mil 0.35mil 38.72mil 0.35mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[-0.65mil 0.35mil -0.65mil 0.35mil 19.69mil 36.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.37mil 18.06mil -18.37mil -17.37mil 6.00mil] + ElementLine [56.43mil 18.06mil -18.37mil 18.06mil 6.00mil] + ElementLine [56.43mil -17.37mil 56.43mil 18.06mil 6.00mil] + ElementLine [-18.37mil -17.37mil 56.43mil -17.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C20" "1uF" 60.8942mm 66.5772mm 33.74mil -13.56mil 0 100 ""] +( + Pad[-0.35mil 38.72mil -0.35mil 38.72mil 19.69mil 36.00mil 25.69mil "1" "1" "square"] + Pad[-0.35mil -0.65mil -0.35mil -0.65mil 19.69mil 52.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.06mil -18.37mil 17.37mil -18.37mil 6.00mil] + ElementLine [-18.06mil -18.37mil -18.06mil 56.43mil 6.00mil] + ElementLine [-18.06mil 56.43mil 17.37mil 56.43mil 6.00mil] + ElementLine [17.37mil -18.37mil 17.37mil 56.43mil 6.00mil] + + ) + +Element["" "cap_0402" "C21" "100nF" 69.8825mm 49.0131mm -25.00mil -80.00mil 0 100 ""] +( + Pad[38.72mil 0.35mil 38.72mil 0.35mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[-0.65mil 0.35mil -0.65mil 0.35mil 19.69mil 20.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.37mil 18.06mil -18.37mil -17.37mil 6.00mil] + ElementLine [56.43mil 18.06mil -18.37mil 18.06mil 6.00mil] + ElementLine [56.43mil -17.37mil 56.43mil 18.06mil 6.00mil] + ElementLine [-18.37mil -17.37mil 56.43mil -17.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C11" "100nF" 50.0291mm 41.8935mm -39.00mil 25.30mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 24.00mil 25.69mil "1" "1" "square"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 24.00mil 25.69mil "2" "2" "square"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C3" "100nF" 77.3341mm 41.8935mm -24.00mil 25.30mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C19" "100nF" 59.8081mm 46.0845mm 41.00mil -39.70mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C23" "100nF" 59.5879mm 66.5645mm -120.33mil -20.37mil 0 100 ""] +( + Pad[-0.35mil 38.72mil -0.35mil 38.72mil 19.69mil 36.00mil 25.69mil "1" "1" "square"] + Pad[-0.35mil -0.65mil -0.35mil -0.65mil 19.69mil 36.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.06mil -18.37mil 17.37mil -18.37mil 6.00mil] + ElementLine [-18.06mil -18.37mil -18.06mil 56.43mil 6.00mil] + ElementLine [-18.06mil 56.43mil 17.37mil 56.43mil 6.00mil] + ElementLine [17.37mil -18.37mil 17.37mil 56.43mil 6.00mil] + + ) + +Element["" "cap_0402" "C10" "100nF" 62.6021mm 41.8935mm -29.00mil 25.30mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C17" "100nF" 51.5531mm 46.8305mm -3.0066mm -54.07mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 28.00mil 25.69mil "2" "2" "square"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C28" "100nF" 68.7159mm 65.2945mm 20.30mil 59.00mil 0 100 ""] +( + Pad[-0.35mil 38.72mil -0.35mil 38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square"] + Pad[-0.35mil -0.65mil -0.35mil -0.65mil 19.69mil 12.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.06mil -18.37mil 17.37mil -18.37mil 6.00mil] + ElementLine [-18.06mil -18.37mil -18.06mil 56.43mil 6.00mil] + ElementLine [-18.06mil 56.43mil 17.37mil 56.43mil 6.00mil] + ElementLine [17.37mil -18.37mil 17.37mil 56.43mil 6.00mil] + + ) + +Element["" "diode-DO-214AA-SMB" "D2" "unknown" 195.91mil 1145.20mil 94.90mil 54.72mil 0 100 ""] +( + Pad[-5.91mil -9.84mil -5.91mil -1.97mil 90.55mil 24.00mil 100.55mil "cathode" "1" "square,edge2"] + Pad[-5.91mil -4.5499mm -5.91mil -4.3500mm 90.55mil 24.00mil 100.55mil "anode" "2" "square"] + ElementLine [-98.43mil 51.18mil 90.55mil 51.18mil 10.00mil] + ElementLine [90.55mil -236.22mil 90.55mil 51.18mil 10.00mil] + ElementLine [-98.43mil -236.22mil 90.55mil -236.22mil 10.00mil] + ElementLine [-98.43mil -236.22mil -98.43mil 51.18mil 10.00mil] + ElementLine [-98.43mil 3.94mil -59.06mil 3.94mil 10.00mil] + ElementLine [-59.06mil -3.94mil -59.06mil 3.94mil 10.00mil] + ElementLine [-90.55mil -3.94mil -59.06mil -3.94mil 10.00mil] + ElementLine [51.18mil 3.94mil 90.55mil 3.94mil 10.00mil] + ElementLine [51.18mil -3.94mil 51.18mil 3.94mil 10.00mil] + ElementLine [51.18mil -3.94mil 82.68mil -3.94mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "F1" "1.5A Hold" 146.00mil 674.00mil 83.63mil 126.81mil 0 100 ""] +( + Pad[-5.00mil 0.0000 5.00mil 0.0000 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[-5.00mil 120.00mil 5.00mil 120.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [-50.00mil -45.00mil 50.00mil -45.00mil 8.00mil] + ElementLine [-50.00mil -45.00mil -50.00mil 165.00mil 8.00mil] + ElementLine [-50.00mil 165.00mil 50.00mil 165.00mil 8.00mil] + ElementLine [50.00mil -45.00mil 50.00mil 165.00mil 8.00mil] + + ) + +Element["" "SIP10" "R2" "unknown" 2411.00mil 1187.00mil 73.00mil 63.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 46.00mil 66.00mil 28.00mil "1" "1" "square,edge2"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "2" "2" "edge2"] + Pin[200.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "3" "3" "edge2"] + Pin[300.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "4" "4" "edge2"] + Pin[400.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "5" "5" "edge2"] + Pin[500.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "6" "6" "edge2"] + Pin[600.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "7" "7" "edge2"] + Pin[700.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "8" "8" "edge2"] + Pin[800.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "9" "9" "edge2"] + Pin[900.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "10" "10" "edge2"] + ElementLine [0.0000 50.00mil 900.00mil 50.00mil 20.00mil] + ElementLine [0.0000 -50.00mil 900.00mil -50.00mil 20.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + ElementArc [0.0000 0.0000 50.00mil 50.00mil 270 180 20.00mil] + ElementArc [900.00mil 0.0000 50.00mil 50.00mil 90 180 20.00mil] + + ) + +Element["" "diode-DO-214AA-SMB" "D1" "unknown" 930.91mil 1145.90mil -28.82mil 61.00mil 0 100 ""] +( + Pad[-5.91mil -9.84mil -5.91mil -1.97mil 90.55mil 20.00mil 100.55mil "cathode" "1" "square,edge2"] + Pad[-5.91mil -4.5499mm -5.91mil -4.3500mm 90.55mil 20.00mil 100.55mil "anode" "2" "square"] + ElementLine [-98.43mil 51.18mil 90.55mil 51.18mil 10.00mil] + ElementLine [90.55mil -236.22mil 90.55mil 51.18mil 10.00mil] + ElementLine [-98.43mil -236.22mil 90.55mil -236.22mil 10.00mil] + ElementLine [-98.43mil -236.22mil -98.43mil 51.18mil 10.00mil] + ElementLine [-98.43mil 3.94mil -59.06mil 3.94mil 10.00mil] + ElementLine [-59.06mil -3.94mil -59.06mil 3.94mil 10.00mil] + ElementLine [-90.55mil -3.94mil -59.06mil -3.94mil 10.00mil] + ElementLine [51.18mil 3.94mil 90.55mil 3.94mil 10.00mil] + ElementLine [51.18mil -3.94mil 51.18mil 3.94mil 10.00mil] + ElementLine [51.18mil -3.94mil 82.68mil -3.94mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "F2" "500mA Hold" 1684.00mil 3773.00mil -91.00mil -128.00mil 0 100 ""] +( + Pad[0.0000 -5.00mil 0.0000 5.00mil 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[-120.00mil -5.00mil -120.00mil 5.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [45.00mil -50.00mil 45.00mil 50.00mil 8.00mil] + ElementLine [-165.00mil -50.00mil 45.00mil -50.00mil 8.00mil] + ElementLine [-165.00mil -50.00mil -165.00mil 50.00mil 8.00mil] + ElementLine [-165.00mil 50.00mil 45.00mil 50.00mil 8.00mil] + + ) + +Element["" "diode-DO-214AA-SMB" "D3" "unknown" 1264.80mil 94.8921mm 76.59mil -164.58mil 0 100 ""] +( + Pad[1.97mil -5.91mil 9.84mil -5.91mil 90.55mil 36.00mil 100.55mil "cathode" "1" "square"] + Pad[4.3500mm -5.91mil 4.5499mm -5.91mil 90.55mil 36.00mil 100.55mil "anode" "2" "square,edge2"] + ElementLine [-51.18mil -98.43mil -51.18mil 90.55mil 10.00mil] + ElementLine [-51.18mil 90.55mil 236.22mil 90.55mil 10.00mil] + ElementLine [236.22mil -98.43mil 236.22mil 90.55mil 10.00mil] + ElementLine [-51.18mil -98.43mil 236.22mil -98.43mil 10.00mil] + ElementLine [-3.94mil -98.43mil -3.94mil -59.06mil 10.00mil] + ElementLine [-3.94mil -59.06mil 3.94mil -59.06mil 10.00mil] + ElementLine [3.94mil -90.55mil 3.94mil -59.06mil 10.00mil] + ElementLine [-3.94mil 51.18mil -3.94mil 90.55mil 10.00mil] + ElementLine [-3.94mil 51.18mil 3.94mil 51.18mil 10.00mil] + ElementLine [3.94mil 51.18mil 3.94mil 82.68mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R3" "1600" 79.9742mm 46.0446mm -195.18mil -52.56mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[-80.00mil -7.00mil -80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [37.00mil -44.00mil 37.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil 37.00mil -44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil -117.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil 44.00mil 37.00mil 44.00mil 8.00mil] + + ) + +Element["" "Header connector, DIP pin numbering" "" "HEADER2_1" 3500.00mil 2050.00mil 210.00mil -50.00mil 3 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square,edge2"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" "edge2"] + ElementLine [-50.00mil -50.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 150.00mil 50.00mil 10.00mil] + ElementLine [150.00mil 50.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [150.00mil -50.00mil -50.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil 50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["" "cap_0402" "C26" "1uF" 71.4921mm 55.8635mm 36.63mil -60.33mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C24" "100nF" 69.8411mm 55.8475mm -13.37mil -119.07mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C27" "1uF" 71.5099mm 57.2935mm 39.07mil -14.63mil 0 100 ""] +( + Pad[-0.35mil 38.72mil -0.35mil 38.72mil 19.69mil 20.00mil 25.69mil "1" "1" "square"] + Pad[-0.35mil -0.65mil -0.35mil -0.65mil 19.69mil 20.00mil 25.69mil "2" "2" "square"] + ElementLine [-18.06mil -18.37mil 17.37mil -18.37mil 6.00mil] + ElementLine [-18.06mil -18.37mil -18.06mil 56.43mil 6.00mil] + ElementLine [-18.06mil 56.43mil 17.37mil 56.43mil 6.00mil] + ElementLine [17.37mil -18.37mil 17.37mil 56.43mil 6.00mil] + + ) + +Element["" "TQFP100_14_reflow" "U1" "unknown" 59.4241mm 56.2115mm -20.00mil -60.00mil 0 100 ""] +( + Pad[-335.00mil -236.22mil -301.10mil -236.22mil 11.02mil 30.00mil 14.02mil "P2[5]" "1" "square"] + Pad[-335.00mil -216.54mil -301.10mil -216.54mil 11.02mil 30.00mil 14.02mil "P2[6]" "2" "square"] + Pad[-335.00mil -196.85mil -301.10mil -196.85mil 11.02mil 30.00mil 14.02mil "P2[7]" "3" "square"] + Pad[-335.00mil -177.17mil -301.10mil -177.17mil 11.02mil 30.00mil 14.02mil "P12[4]" "4" "square"] + Pad[-335.00mil -157.48mil -301.10mil -157.48mil 11.02mil 30.00mil 14.02mil "P12[5]" "5" "square"] + Pad[-335.00mil -137.80mil -301.10mil -137.80mil 11.02mil 30.00mil 14.02mil "P6[4]" "6" "square"] + Pad[-335.00mil -118.11mil -301.10mil -118.11mil 11.02mil 30.00mil 14.02mil "P6[5]" "7" "square"] + Pad[-335.00mil -98.43mil -301.10mil -98.43mil 11.02mil 30.00mil 14.02mil "P6[6]" "8" "square"] + Pad[-335.00mil -2.0000mm -301.10mil -2.0000mm 11.02mil 30.00mil 14.02mil "P6[7]" "9" "square"] + Pad[-335.00mil -59.06mil -301.10mil -59.06mil 11.02mil 30.00mil 14.02mil "VSSD" "10" "square"] + Pad[-335.00mil -39.37mil -301.10mil -39.37mil 11.02mil 30.00mil 14.02mil "NC" "11" "square"] + Pad[-335.00mil -19.69mil -301.10mil -19.69mil 11.02mil 30.00mil 14.02mil "VSSD" "12" "square"] + Pad[-335.00mil 0.0000 -301.10mil 0.0000 11.02mil 30.00mil 14.02mil "VSSD" "13" "square"] + Pad[-335.00mil 19.68mil -301.10mil 19.68mil 11.02mil 30.00mil 14.02mil "VSSD" "14" "square"] + Pad[-335.00mil 39.37mil -301.10mil 39.37mil 11.02mil 30.00mil 14.02mil "_XRES_" "15" "square"] + Pad[-335.00mil 59.05mil -301.10mil 59.05mil 11.02mil 30.00mil 14.02mil "P5[0]" "16" "square"] + Pad[-335.00mil 2.0000mm -301.10mil 2.0000mm 11.02mil 30.00mil 14.02mil "P5[1]" "17" "square"] + Pad[-335.00mil 98.42mil -301.10mil 98.42mil 11.02mil 30.00mil 14.02mil "P5[2]" "18" "square"] + Pad[-335.00mil 118.11mil -301.10mil 118.11mil 11.02mil 30.00mil 14.02mil "P5[3]" "19" "square"] + Pad[-335.00mil 137.79mil -301.10mil 137.79mil 11.02mil 30.00mil 14.02mil "SWDIO,TMS,P1[0]" "20" "square"] + Pad[-335.00mil 157.48mil -301.10mil 157.48mil 11.02mil 30.00mil 14.02mil "SWDCK,TCK,P1[1]" "21" "square"] + Pad[-335.00mil 177.16mil -301.10mil 177.16mil 11.02mil 30.00mil 14.02mil "P1[2]" "22" "square"] + Pad[-335.00mil 196.85mil -301.10mil 196.85mil 11.02mil 30.00mil 14.02mil "SWV,TDO,P1[3]" "23" "square"] + Pad[-335.00mil 216.53mil -301.10mil 216.53mil 11.02mil 30.00mil 14.02mil "TDI,P1[4]" "24" "square"] + Pad[-335.00mil 236.22mil -301.10mil 236.22mil 11.02mil 30.00mil 14.02mil "NTRST,P1[5]" "25" "square"] + Pad[-236.22mil 301.10mil -236.22mil 335.00mil 11.02mil 30.00mil 14.02mil "VDDIO1" "26" "square,octagon,edge2"] + Pad[-216.54mil 301.10mil -216.54mil 335.00mil 11.02mil 30.00mil 14.02mil "P1[6]" "27" "square,octagon,edge2"] + Pad[-196.85mil 301.10mil -196.85mil 335.00mil 11.02mil 30.00mil 14.02mil "P1[7]" "28" "square,octagon,edge2"] + Pad[-177.17mil 301.10mil -177.17mil 335.00mil 11.02mil 30.00mil 14.02mil "P12[6]" "29" "square,octagon,edge2"] + Pad[-157.48mil 301.10mil -157.48mil 335.00mil 11.02mil 30.00mil 14.02mil "P12[7]" "30" "square,octagon,edge2"] + Pad[-137.80mil 301.10mil -137.80mil 335.00mil 11.02mil 30.00mil 14.02mil "P5[4]" "31" "square,octagon,edge2"] + Pad[-118.11mil 301.10mil -118.11mil 335.00mil 11.02mil 30.00mil 14.02mil "P5[5]" "32" "square,octagon,edge2"] + Pad[-98.43mil 301.10mil -98.43mil 335.00mil 11.02mil 30.00mil 14.02mil "P5[6]" "33" "square,octagon,edge2"] + Pad[-2.0000mm 301.10mil -2.0000mm 335.00mil 11.02mil 30.00mil 14.02mil "P5[7]" "34" "square,octagon,edge2"] + Pad[-59.06mil 301.10mil -59.06mil 335.00mil 11.02mil 30.00mil 14.02mil "SWDIO,USB D+" "35" "square,octagon,edge2"] + Pad[-39.37mil 301.10mil -39.37mil 335.00mil 11.02mil 30.00mil 14.02mil "SWDCK,USB D-" "36" "square,octagon,edge2"] + Pad[-19.69mil 301.10mil -19.69mil 335.00mil 11.02mil 30.00mil 14.02mil "VDDD" "37" "square,octagon,edge2"] + Pad[0.0000 301.10mil 0.0000 335.00mil 11.02mil 30.00mil 14.02mil "VSSD" "38" "square,octagon,edge2"] + Pad[19.68mil 301.10mil 19.68mil 335.00mil 11.02mil 30.00mil 14.02mil "VCCD" "39" "square,octagon,edge2"] + Pad[39.37mil 301.10mil 39.37mil 335.00mil 11.02mil 30.00mil 14.02mil "NC" "40" "square,octagon,edge2"] + Pad[59.05mil 301.10mil 59.05mil 335.00mil 11.02mil 30.00mil 14.02mil "NC" "41" "square,octagon,edge2"] + Pad[2.0000mm 301.10mil 2.0000mm 335.00mil 11.02mil 30.00mil 14.02mil "MHZ XTAL XO" "42" "square,octagon,edge2"] + Pad[98.42mil 301.10mil 98.42mil 335.00mil 11.02mil 30.00mil 14.02mil "MHZ XTAL XI" "43" "square,octagon,edge2"] + Pad[118.11mil 301.10mil 118.11mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[0]" "44" "square,octagon,edge2"] + Pad[137.79mil 301.10mil 137.79mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[1]" "45" "square,octagon,edge2"] + Pad[157.48mil 301.10mil 157.48mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[2]" "46" "square,octagon,edge2"] + Pad[177.16mil 301.10mil 177.16mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[3]" "47" "square,octagon,edge2"] + Pad[196.85mil 301.10mil 196.85mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[4]" "48" "square,octagon,edge2"] + Pad[216.53mil 301.10mil 216.53mil 335.00mil 11.02mil 30.00mil 14.02mil "P3[5]" "49" "square,octagon,edge2"] + Pad[236.22mil 301.10mil 236.22mil 335.00mil 11.02mil 42.00mil 14.02mil "VDDIO3" "50" "square,octagon,edge2"] + Pad[301.10mil 236.22mil 335.00mil 236.22mil 11.02mil 30.00mil 14.02mil "P3[6]" "51" "square,edge2"] + Pad[301.10mil 216.54mil 335.00mil 216.54mil 11.02mil 30.00mil 14.02mil "P3[7]" "52" "square,edge2"] + Pad[301.10mil 196.85mil 335.00mil 196.85mil 11.02mil 30.00mil 14.02mil "P12[0]" "53" "square,edge2"] + Pad[301.10mil 177.17mil 335.00mil 177.17mil 11.02mil 30.00mil 14.02mil "P12[1]" "54" "square,edge2"] + Pad[301.10mil 157.48mil 335.00mil 157.48mil 11.02mil 30.00mil 14.02mil "XO XTAL P15[2],KHZ" "55" "square,edge2"] + Pad[301.10mil 137.80mil 335.00mil 137.80mil 11.02mil 30.00mil 14.02mil "XI XTAL P15[3],KHZ" "56" "square,edge2"] + Pad[301.10mil 118.11mil 335.00mil 118.11mil 11.02mil 30.00mil 14.02mil "NC" "57" "square,edge2"] + Pad[301.10mil 98.43mil 335.00mil 98.43mil 11.02mil 30.00mil 14.02mil "NC" "58" "square,edge2"] + Pad[301.10mil 2.0000mm 335.00mil 2.0000mm 11.02mil 30.00mil 14.02mil "NC" "59" "square,edge2"] + Pad[301.10mil 59.06mil 335.00mil 59.06mil 11.02mil 30.00mil 14.02mil "NC" "60" "square,edge2"] + Pad[301.10mil 39.37mil 335.00mil 39.37mil 11.02mil 30.00mil 14.02mil "NC" "61" "square,edge2"] + Pad[301.10mil 19.69mil 335.00mil 19.69mil 11.02mil 30.00mil 14.02mil "NC" "62" "square,edge2"] + Pad[301.10mil 0.0000 335.00mil 0.0000 11.02mil 30.00mil 14.02mil "VCCA" "63" "square,edge2"] + Pad[301.10mil -19.68mil 335.00mil -19.68mil 11.02mil 30.00mil 14.02mil "VSSA" "64" "square,edge2"] + Pad[301.10mil -39.37mil 335.00mil -39.37mil 11.02mil 30.00mil 14.02mil "VDDA" "65" "square,edge2"] + Pad[301.10mil -59.05mil 335.00mil -59.05mil 11.02mil 30.00mil 14.02mil "VSSD" "66" "square,edge2"] + Pad[301.10mil -2.0000mm 335.00mil -2.0000mm 11.02mil 30.00mil 14.02mil "P12[2]" "67" "square,edge2"] + Pad[301.10mil -98.42mil 335.00mil -98.42mil 11.02mil 30.00mil 14.02mil "P12[3]" "68" "square,edge2"] + Pad[301.10mil -118.11mil 335.00mil -118.11mil 11.02mil 30.00mil 14.02mil "P4[0]" "69" "square,edge2"] + Pad[301.10mil -137.79mil 335.00mil -137.79mil 11.02mil 30.00mil 14.02mil "P4[1]" "70" "square,edge2"] + Pad[301.10mil -157.48mil 335.00mil -157.48mil 11.02mil 30.00mil 14.02mil "P0[0]" "71" "square,edge2"] + Pad[301.10mil -177.16mil 335.00mil -177.16mil 11.02mil 30.00mil 14.02mil "P0[1]" "72" "square,edge2"] + Pad[301.10mil -196.85mil 335.00mil -196.85mil 11.02mil 30.00mil 14.02mil "P0[2]" "73" "square,edge2"] + Pad[301.10mil -216.53mil 335.00mil -216.53mil 11.02mil 30.00mil 14.02mil "P0[3]" "74" "square,edge2"] + Pad[301.10mil -236.22mil 335.00mil -236.22mil 11.02mil 30.00mil 14.02mil "VDDIO0" "75" "square,edge2"] + Pad[236.22mil -335.00mil 236.22mil -301.10mil 11.02mil 30.00mil 14.02mil "P0[4]" "76" "square,octagon"] + Pad[216.54mil -335.00mil 216.54mil -301.10mil 11.02mil 30.00mil 14.02mil "P0[5]" "77" "square,octagon"] + Pad[196.85mil -335.00mil 196.85mil -301.10mil 11.02mil 30.00mil 14.02mil "P0[6]" "78" "square,octagon"] + Pad[177.17mil -335.00mil 177.17mil -301.10mil 11.02mil 30.00mil 14.02mil "P0[7]" "79" "square,octagon"] + Pad[157.48mil -335.00mil 157.48mil -301.10mil 11.02mil 30.00mil 14.02mil "P4[2]" "80" "square,octagon"] + Pad[137.80mil -335.00mil 137.80mil -301.10mil 11.02mil 30.00mil 14.02mil "P4[3]" "81" "square,octagon"] + Pad[118.11mil -335.00mil 118.11mil -301.10mil 11.02mil 30.00mil 14.02mil "P4[4]" "82" "square,octagon"] + Pad[98.43mil -335.00mil 98.43mil -301.10mil 11.02mil 30.00mil 14.02mil "P4[5]" "83" "square,octagon"] + Pad[2.0000mm -335.00mil 2.0000mm -301.10mil 11.02mil 30.00mil 14.02mil "P4[6]" "84" "square,octagon"] + Pad[59.06mil -335.00mil 59.06mil -301.10mil 11.02mil 30.00mil 14.02mil "P4[7]" "85" "square,octagon"] + Pad[39.37mil -335.00mil 39.37mil -301.10mil 11.02mil 30.00mil 14.02mil "VCCD" "86" "square,octagon"] + Pad[19.69mil -335.00mil 19.69mil -301.10mil 11.02mil 30.00mil 14.02mil "VSSD" "87" "square,octagon"] + Pad[0.0000 -335.00mil 0.0000 -301.10mil 11.02mil 30.00mil 14.02mil "VDDD" "88" "square,octagon"] + Pad[-19.68mil -335.00mil -19.68mil -301.10mil 11.02mil 30.00mil 14.02mil "P6[0]" "89" "square,octagon"] + Pad[-39.37mil -335.00mil -39.37mil -301.10mil 11.02mil 30.00mil 14.02mil "P6[1]" "90" "square,octagon"] + Pad[-59.05mil -335.00mil -59.05mil -301.10mil 11.02mil 30.00mil 14.02mil "P6[2]" "91" "square,octagon"] + Pad[-2.0000mm -335.00mil -2.0000mm -301.10mil 11.02mil 30.00mil 14.02mil "P6[3]" "92" "square,octagon"] + Pad[-98.42mil -335.00mil -98.42mil -301.10mil 11.02mil 30.00mil 14.02mil "P15[4]" "93" "square,octagon"] + Pad[-118.11mil -335.00mil -118.11mil -301.10mil 11.02mil 30.00mil 14.02mil "P15[5]" "94" "square,octagon"] + Pad[-137.79mil -335.00mil -137.79mil -301.10mil 11.02mil 30.00mil 14.02mil "P2[0]" "95" "square,octagon"] + Pad[-157.48mil -335.00mil -157.48mil -301.10mil 11.02mil 30.00mil 14.02mil "P2[1]" "96" "square,octagon"] + Pad[-177.16mil -335.00mil -177.16mil -301.10mil 11.02mil 30.00mil 14.02mil "P2[2]" "97" "square,octagon"] + Pad[-196.85mil -335.00mil -196.85mil -301.10mil 11.02mil 30.00mil 14.02mil "P2[3]" "98" "square,octagon"] + Pad[-216.53mil -335.00mil -216.53mil -301.10mil 11.02mil 30.00mil 14.02mil "P2[4]" "99" "square,octagon"] + Pad[-236.22mil -335.00mil -236.22mil -301.10mil 11.02mil 30.00mil 14.02mil "VDDIO2" "100" "square,octagon"] + ElementLine [-242.59mil -271.59mil 271.59mil -271.59mil 8.00mil] + ElementLine [271.59mil -271.59mil 271.59mil 271.59mil 8.00mil] + ElementLine [271.59mil 271.59mil -271.59mil 271.59mil 8.00mil] + ElementLine [-271.59mil 271.59mil -271.59mil -242.59mil 8.00mil] + ElementLine [-271.59mil -242.59mil -242.59mil -271.59mil 8.00mil] + ElementArc [-242.59mil -242.59mil 10.00mil 10.00mil 0 360 8.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "C13" "10uF" 3017.20mil 91.5147mm -82.40mil -121.88mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 38.00mil 51.00mil "1" "1" "square"] + Pad[-80.00mil -7.00mil -80.00mil 7.00mil 45.00mil 38.00mil 51.00mil "2" "2" "square"] + ElementLine [37.00mil -44.00mil 37.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil 37.00mil -44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil -117.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil 44.00mil 37.00mil 44.00mil 8.00mil] + + ) + +Element["" "DPAK" "U6" "unknown" 882.50mil 3232.50mil 94.12mil -145.60mil 0 100 ""] +( + Pad[-82.50mil -107.50mil -82.50mil -107.50mil 265.00mil 20.00mil 275.00mil "OUT" "2" "square,edge2,nopaste"] + Pad[-7.50mil -32.50mil -7.50mil -32.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-7.50mil -182.50mil -7.50mil -182.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-157.50mil -32.50mil -157.50mil -32.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-157.50mil -182.50mil -157.50mil -182.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-372.50mil -17.50mil -317.50mil -17.50mil 65.00mil 60.00mil 75.00mil "IN" "3" "square"] + Pad[-372.50mil -197.50mil -317.50mil -197.50mil 65.00mil 60.00mil 75.00mil "GND" "1" "square"] + ElementLine [-445.00mil 50.00mil 75.00mil 50.00mil 10.00mil] + ElementLine [-445.00mil -265.00mil -445.00mil 50.00mil 10.00mil] + ElementLine [-445.00mil -265.00mil 75.00mil -265.00mil 10.00mil] + ElementLine [75.00mil -265.00mil 75.00mil 50.00mil 10.00mil] + ElementLine [-325.00mil -105.00mil -285.00mil -105.00mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "C12" "10uF" 457.06mil 3352.20mil 32.00mil 59.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 38.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 38.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "DPAK" "U2" "unknown" 882.50mil 2057.50mil 90.00mil -90.00mil 0 100 ""] +( + Pad[-82.50mil -107.50mil -82.50mil -107.50mil 265.00mil 20.00mil 275.00mil "OUT" "2" "square,edge2,nopaste"] + Pad[-7.50mil -32.50mil -7.50mil -32.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-7.50mil -182.50mil -7.50mil -182.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-157.50mil -32.50mil -157.50mil -32.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-157.50mil -182.50mil -157.50mil -182.50mil 115.00mil 20.00mil 125.00mil "OUT" "2" "square,edge2"] + Pad[-372.50mil -17.50mil -317.50mil -17.50mil 65.00mil 60.00mil 75.00mil "IN" "3" "square"] + Pad[-372.50mil -197.50mil -317.50mil -197.50mil 65.00mil 68.00mil 75.00mil "GND" "1" "square"] + ElementLine [-445.00mil 50.00mil 75.00mil 50.00mil 10.00mil] + ElementLine [-445.00mil -265.00mil -445.00mil 50.00mil 10.00mil] + ElementLine [-445.00mil -265.00mil 75.00mil -265.00mil 10.00mil] + ElementLine [75.00mil -265.00mil 75.00mil 50.00mil 10.00mil] + ElementLine [-325.00mil -105.00mil -285.00mil -105.00mil 10.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "C5" "10uF" 14.9410mm 55.4960mm -194.46mil -35.76mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 38.00mil 51.00mil "1" "1" "square"] + Pad[-80.00mil -7.00mil -80.00mil 7.00mil 45.00mil 38.00mil 51.00mil "2" "2" "square"] + ElementLine [37.00mil -44.00mil 37.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil 37.00mil -44.00mil 8.00mil] + ElementLine [-117.00mil -44.00mil -117.00mil 44.00mil 8.00mil] + ElementLine [-117.00mil 44.00mil 37.00mil 44.00mil 8.00mil] + + ) + +Element["" "HEADER2_2" "J3" "unknown" 450.00mil 1050.00mil -70.00mil 70.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square"] + Pin[0.0000 -100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" ""] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -150.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil -150.00mil 50.00mil -150.00mil 10.00mil] + ElementLine [-50.00mil -150.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil -50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["" "HEADER18_2" "J12" "unknown" 3500.00mil 2650.00mil 310.00mil 45.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" ""] + Pin[0.0000 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "3" "3" ""] + Pin[100.00mil 100.00mil 60.00mil 30.00mil 66.00mil 38.00mil "4" "4" "thermal(0X,1X)"] + Pin[0.0000 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "5" "5" ""] + Pin[100.00mil 200.00mil 60.00mil 30.00mil 66.00mil 38.00mil "6" "6" "thermal(0X,1X)"] + Pin[0.0000 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "7" "7" ""] + Pin[100.00mil 300.00mil 60.00mil 30.00mil 66.00mil 38.00mil "8" "8" "thermal(0X,1X)"] + Pin[0.0000 400.00mil 60.00mil 30.00mil 66.00mil 38.00mil "9" "9" ""] + Pin[100.00mil 400.00mil 60.00mil 30.00mil 66.00mil 38.00mil "10" "10" "thermal(0X,1X)"] + Pin[0.0000 500.00mil 60.00mil 30.00mil 66.00mil 38.00mil "11" "11" ""] + Pin[100.00mil 500.00mil 60.00mil 30.00mil 66.00mil 38.00mil "12" "12" "thermal(0X,1X)"] + Pin[0.0000 600.00mil 60.00mil 30.00mil 66.00mil 38.00mil "13" "13" ""] + Pin[100.00mil 600.00mil 60.00mil 30.00mil 66.00mil 38.00mil "14" "14" "thermal(0X,1X)"] + Pin[0.0000 700.00mil 60.00mil 30.00mil 66.00mil 38.00mil "15" "15" ""] + Pin[100.00mil 700.00mil 60.00mil 30.00mil 66.00mil 38.00mil "16" "16" "thermal(0X,1X)"] + Pin[0.0000 800.00mil 60.00mil 30.00mil 66.00mil 38.00mil "17" "17" ""] + Pin[100.00mil 800.00mil 60.00mil 30.00mil 66.00mil 38.00mil "18" "18" "thermal(0X,1X)"] + ElementLine [-50.00mil -50.00mil -50.00mil 850.00mil 10.00mil] + ElementLine [-50.00mil 850.00mil 150.00mil 850.00mil 10.00mil] + ElementLine [150.00mil 850.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [150.00mil -50.00mil -50.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil 50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["" "Header connector, DIP pin numbering" "" "HEADER2_1" 3500.00mil 2550.00mil 210.00mil -50.00mil 3 100 ""] +( + Pin[0.0000 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "1" "1" "square,edge2"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 38.00mil "2" "2" "edge2"] + ElementLine [-50.00mil -50.00mil -50.00mil 50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 150.00mil 50.00mil 10.00mil] + ElementLine [150.00mil 50.00mil 150.00mil -50.00mil 10.00mil] + ElementLine [150.00mil -50.00mil -50.00mil -50.00mil 10.00mil] + ElementLine [-50.00mil 50.00mil 50.00mil 50.00mil 10.00mil] + ElementLine [50.00mil 50.00mil 50.00mil -50.00mil 10.00mil] + + ) + +Element["" "wurth-microsd" "J6" "unknown" 2605.00mil 3558.00mil 295.00mil -266.00mil 0 100 ""] +( + Pad[75.55mil 147.99mil 75.55mil 192.99mil 31.50mil 44.00mil 37.50mil "DAT2" "1" "square,edge2"] + Pad[32.24mil 3.3589mm 32.24mil 4.5019mm 31.50mil 72.00mil 37.50mil "DAT3" "2" "square,edge2"] + Pad[-11.06mil 147.99mil -11.06mil 192.99mil 31.50mil 52.00mil 37.50mil "CMD" "3" "square,edge2"] + Pad[-1.3810mm 3.9591mm -1.3810mm 5.1021mm 31.50mil 80.00mil 37.50mil "Vcc" "4" "square,edge2"] + Pad[-97.68mil 147.99mil -97.68mil 192.99mil 31.50mil 68.00mil 37.50mil "CLK" "5" "square,edge2"] + Pad[-140.98mil 3.9591mm -140.98mil 5.1021mm 31.50mil 44.00mil 37.50mil "GND" "6" "square,edge2"] + Pad[-184.29mil 147.99mil -184.29mil 192.99mil 31.50mil 44.00mil 37.50mil "DAT0" "7" "square,edge2"] + Pad[-227.60mil 147.99mil -227.60mil 192.99mil 31.50mil 44.00mil 37.50mil "DAT1" "8" "square,edge2"] + Pad[-259.09mil 262.17mil -259.09mil 281.85mil 55.12mil 12.00mil 61.12mil "GND" "9" "square,edge2"] + Pad[-196.10mil -245.71mil -180.35mil -245.71mil 55.12mil 12.00mil 61.12mil "_CD_" "10" "square"] + Pad[28.31mil -245.71mil 44.06mil -245.71mil 55.12mil 12.00mil 61.12mil "_CD_" "10" "square,edge2"] + Pad[264.53mil 305.47mil 264.53mil 325.16mil 55.12mil 12.00mil 61.12mil "GND" "9" "square,edge2"] + ElementLine [110.00mil 315.00mil 190.00mil 315.00mil 6.00mil] + ElementLine [110.00mil 265.00mil 110.00mil 315.00mil 6.00mil] + ElementLine [-195.00mil 265.00mil 110.00mil 265.00mil 6.00mil] + ElementLine [-195.00mil 265.00mil -220.00mil 290.00mil 6.00mil] + ElementLine [190.00mil 315.00mil 190.00mil 340.00mil 6.00mil] + ElementLine [190.00mil 340.00mil 225.00mil 340.00mil 6.00mil] + ElementLine [280.00mil -260.00mil 280.00mil 270.00mil 6.00mil] + ElementLine [90.00mil -260.00mil 280.00mil -260.00mil 6.00mil] + ElementLine [-140.00mil -260.00mil -10.00mil -260.00mil 6.00mil] + ElementLine [-275.00mil -260.00mil -235.00mil -260.00mil 6.00mil] + ElementLine [-275.00mil -260.00mil -275.00mil 220.00mil 6.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R6" "22?" 3290.00mil 2030.00mil -110.00mil 10.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R7" "56?" 3285.00mil 1735.00mil -35.00mil -105.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "C6" "10uF" 370.00mil 1625.00mil -25.00mil -115.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R9" "154?" 370.00mil 1720.00mil -110.00mil -30.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil 44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil -37.00mil -44.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-80-50" "R8" "120?" 530.00mil 1720.00mil 145.00mil -60.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "1" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "2" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil -44.00mil 117.00mil -44.00mil 8.00mil] + + ) + +Element["" "cap_0402" "C16" "0.1uF" 33.9001mm 27.1615mm -9.00mil -124.70mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 12.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 12.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "cap_0402" "C15" "0.1uF" 2410.00mil 1070.00mil -10.00mil -120.00mil 0 100 ""] +( + Pad[0.35mil -38.72mil 0.35mil -38.72mil 19.69mil 12.00mil 25.69mil "1" "1" "square,edge2"] + Pad[0.35mil 0.65mil 0.35mil 0.65mil 19.69mil 12.00mil 25.69mil "2" "2" "square,edge2"] + ElementLine [-17.37mil 18.37mil 18.06mil 18.37mil 6.00mil] + ElementLine [18.06mil -56.43mil 18.06mil 18.37mil 6.00mil] + ElementLine [-17.37mil -56.43mil 18.06mil -56.43mil 6.00mil] + ElementLine [-17.37mil -56.43mil -17.37mil 18.37mil 6.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "C14" "47uF" 725.00mil 2890.00mil 185.00mil -50.00mil 0 100 ""] +( + Pad[0.0000 -5.00mil 0.0000 5.00mil 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[120.00mil -5.00mil 120.00mil 5.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [-45.00mil -50.00mil -45.00mil 50.00mil 8.00mil] + ElementLine [-45.00mil 50.00mil 165.00mil 50.00mil 8.00mil] + ElementLine [165.00mil -50.00mil 165.00mil 50.00mil 8.00mil] + ElementLine [-45.00mil -50.00mil 165.00mil -50.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "C4" "47uF" 125.00mil 1315.00mil 190.00mil 30.00mil 0 100 ""] +( + Pad[0.0000 -5.00mil 0.0000 5.00mil 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[120.00mil -5.00mil 120.00mil 5.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [-45.00mil -50.00mil -45.00mil 50.00mil 8.00mil] + ElementLine [-45.00mil 50.00mil 165.00mil 50.00mil 8.00mil] + ElementLine [165.00mil 50.00mil 165.00mil -50.00mil 8.00mil] + ElementLine [165.00mil -50.00mil -45.00mil -50.00mil 8.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "C7" "47uF" 785.00mil 2185.00mil 190.00mil -25.00mil 0 100 ""] +( + Pad[0.0000 -5.00mil 0.0000 5.00mil 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[120.00mil -5.00mil 120.00mil 5.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [-45.00mil -50.00mil -45.00mil 50.00mil 8.00mil] + ElementLine [-45.00mil 50.00mil 165.00mil 50.00mil 8.00mil] + ElementLine [165.00mil -50.00mil 165.00mil 50.00mil 8.00mil] + ElementLine [-45.00mil -50.00mil 165.00mil -50.00mil 8.00mil] + + ) + +Element["" "SIP10" "R1" "unknown" 1411.00mil 1187.00mil 59.00mil 68.00mil 0 100 ""] +( + Pin[0.0000 0.0000 60.00mil 46.00mil 66.00mil 28.00mil "1" "1" "square,edge2"] + Pin[100.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "2" "2" "edge2"] + Pin[200.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "3" "3" "edge2"] + Pin[300.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "4" "4" "edge2"] + Pin[400.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "5" "5" "edge2"] + Pin[500.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "6" "6" "edge2"] + Pin[600.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "7" "7" "edge2"] + Pin[700.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "8" "8" "edge2"] + Pin[800.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "9" "9" "edge2"] + Pin[900.00mil 0.0000 60.00mil 30.00mil 66.00mil 28.00mil "10" "10" "edge2"] + ElementLine [0.0000 50.00mil 900.00mil 50.00mil 20.00mil] + ElementLine [0.0000 -50.00mil 900.00mil -50.00mil 20.00mil] + ElementLine [50.00mil -50.00mil 50.00mil 50.00mil 10.00mil] + ElementArc [0.0000 0.0000 50.00mil 50.00mil 270 180 20.00mil] + ElementArc [900.00mil 0.0000 50.00mil 50.00mil 90 180 20.00mil] + + ) + +Element["" "SMD_SIMPLE-120-60" "C1" "47uF" 1225.00mil 928.00mil -118.00mil -46.00mil 0 100 ""] +( + Pad[-5.00mil 0.0000 5.00mil 0.0000 60.00mil 30.00mil 66.00mil "1" "1" "square"] + Pad[-5.00mil 120.00mil 5.00mil 120.00mil 60.00mil 30.00mil 66.00mil "2" "2" "square"] + ElementLine [-50.00mil -45.00mil 50.00mil -45.00mil 8.00mil] + ElementLine [-50.00mil -45.00mil -50.00mil 165.00mil 8.00mil] + ElementLine [-50.00mil 165.00mil 50.00mil 165.00mil 8.00mil] + ElementLine [50.00mil -45.00mil 50.00mil 165.00mil 8.00mil] + + ) + +Element["" "SMD_DIODE-80-50" "LED1" "unknown" 3069.00mil 1922.00mil 16.00mil 50.00mil 0 100 ""] +( + Pad[0.0000 -7.00mil 0.0000 7.00mil 45.00mil 30.00mil 51.00mil "A" "1" "square"] + Pad[80.00mil -7.00mil 80.00mil 7.00mil 45.00mil 30.00mil 51.00mil "K" "2" "square"] + ElementLine [-37.00mil -44.00mil -37.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil 44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [117.00mil -44.00mil 117.00mil 44.00mil 8.00mil] + ElementLine [-37.00mil -44.00mil 117.00mil -44.00mil 8.00mil] + ElementLine [-27.00mil -44.00mil -27.00mil 44.00mil 8.00mil] + + ) +Layer(1 "component") +( + Line[2293.00mil 1521.00mil 2319.00mil 1495.00mil 6.00mil 12.00mil "clearline"] + Line[2319.00mil 1495.00mil 2319.00mil 1370.00mil 6.00mil 12.00mil "clearline"] + Line[1842.00mil 1523.00mil 1818.00mil 1547.00mil 6.00mil 12.00mil "clearline"] + Line[1818.00mil 1547.00mil 1818.00mil 1690.00mil 6.00mil 12.00mil "clearline"] + Line[2143.00mil 1417.00mil 2143.00mil 1524.00mil 6.00mil 12.00mil "clearline"] + Line[2143.00mil 1524.00mil 2118.00mil 1549.00mil 6.00mil 12.00mil "clearline"] + Line[2118.00mil 1549.00mil 2118.00mil 1685.00mil 6.00mil 12.00mil "clearline"] + Line[2118.00mil 1826.00mil 2118.00mil 1674.00mil 6.00mil 12.00mil "clearline"] + Line[2243.00mil 1523.00mil 2218.00mil 1548.00mil 6.00mil 12.00mil "clearline"] + Line[2218.00mil 1548.00mil 2218.00mil 1685.00mil 6.00mil 12.00mil "clearline"] + Line[1868.00mil 1521.00mil 1892.00mil 1497.00mil 6.00mil 12.00mil "clearline"] + Line[1892.00mil 1497.00mil 1892.00mil 1424.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 1424.00mil 1692.00mil 1469.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 1469.00mil 1667.00mil 1494.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 1629.00mil 1692.00mil 1502.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 1502.00mil 1717.00mil 1477.00mil 6.00mil 12.00mil "clearline"] + Line[1717.00mil 1477.00mil 1717.00mil 1368.00mil 6.00mil 12.00mil "clearline"] + Line[1742.00mil 1483.00mil 1717.00mil 1508.00mil 6.00mil 12.00mil "clearline"] + Line[1792.00mil 1480.00mil 1767.00mil 1505.00mil 6.00mil 12.00mil "clearline"] + Line[1767.00mil 1505.00mil 1767.00mil 1671.00mil 6.00mil 12.00mil "clearline"] + Line[1792.00mil 1517.00mil 1817.00mil 1492.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 50.7157mm 50.0807mm 50.7157mm 6.00mil 12.00mil "clearline"] + Line[50.0807mm 50.7157mm 1868.00mil 1893.00mil 6.00mil 12.00mil "clearline"] + Line[1868.00mil 1893.00mil 1868.00mil 1521.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 51.2158mm 49.9204mm 51.2158mm 6.00mil 12.00mil "clearline"] + Line[49.9204mm 51.2158mm 1842.00mil 1893.00mil 6.00mil 12.00mil "clearline"] + Line[1842.00mil 1893.00mil 1842.00mil 1629.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 51.7157mm 49.7599mm 51.7157mm 6.00mil 12.00mil "clearline"] + Line[49.7599mm 51.7157mm 1818.00mil 1895.00mil 6.00mil 12.00mil "clearline"] + Line[1818.00mil 1895.00mil 1818.00mil 1673.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 52.2158mm 49.5488mm 52.2158mm 6.00mil 12.00mil "clearline"] + Line[49.5488mm 52.2158mm 1792.00mil 1897.00mil 6.00mil 12.00mil "clearline"] + Line[1792.50mil 1897.50mil 1792.50mil 1629.50mil 6.00mil 12.00mil "clearline"] + Line[1792.50mil 1629.50mil 1792.00mil 1629.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 52.7157mm 49.3883mm 52.7157mm 6.00mil 12.00mil "clearline"] + Line[49.3883mm 52.7157mm 1767.00mil 1898.00mil 6.00mil 12.00mil "clearline"] + Line[1767.00mil 1898.00mil 1767.00mil 1653.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 53.2158mm 49.2026mm 53.2158mm 6.00mil 12.00mil "clearline"] + Line[49.2026mm 53.2158mm 1742.00mil 1900.00mil 6.00mil 12.00mil "clearline"] + Line[1742.00mil 1900.00mil 1742.00mil 1629.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 53.7157mm 49.0167mm 53.7157mm 6.00mil 12.00mil "clearline"] + Line[49.0167mm 53.7157mm 1717.00mil 1902.00mil 6.00mil 12.00mil "clearline"] + Line[1717.00mil 1902.00mil 1717.00mil 1508.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 54.2158mm 48.8818mm 54.2158mm 6.00mil 12.00mil "clearline"] + Line[48.8818mm 54.2158mm 1692.00mil 1902.00mil 6.00mil 12.00mil "clearline"] + Line[1692.50mil 1902.50mil 1692.50mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[1692.50mil 1627.50mil 1692.00mil 1627.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 57.7157mm 48.3177mm 57.7157mm 6.00mil 12.00mil "clearline"] + Line[48.3177mm 57.7157mm 1667.00mil 2037.00mil 6.00mil 12.00mil "clearline"] + Line[1667.00mil 2037.00mil 1667.00mil 1494.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 58.2158mm 48.1574mm 58.2158mm 6.00mil 12.00mil "clearline"] + Line[48.1574mm 58.2158mm 1642.00mil 2038.00mil 6.00mil 12.00mil "clearline"] + Line[1642.00mil 2038.00mil 1642.00mil 1629.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 58.7157mm 47.9969mm 58.7157mm 6.00mil 12.00mil "clearline"] + Line[47.9969mm 58.7157mm 1618.00mil 2040.00mil 6.00mil 12.00mil "clearline"] + Line[1618.00mil 2040.00mil 1618.00mil 1667.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 59.2158mm 47.7858mm 59.2158mm 6.00mil 12.00mil "clearline"] + Line[47.7858mm 59.2158mm 1592.00mil 2042.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 43.2862mm 2093.00mil 1625.00mil 6.00mil 12.00mil "clearline"] + Line[2093.00mil 1525.00mil 2093.00mil 1625.00mil 6.00mil 12.00mil "clearline"] + Line[1792.00mil 1517.00mil 1792.00mil 1629.00mil 6.00mil 12.00mil "clearline"] + Line[53.9212mm 47.9458mm 53.9212mm 46.5044mm 6.00mil 12.00mil "clearline"] + Line[53.9212mm 46.5044mm 2118.00mil 1826.00mil 6.00mil 12.00mil "clearline"] + Line[54.4210mm 47.9458mm 54.4210mm 41.2862mm 6.00mil 12.00mil "clearline"] + Line[54.4210mm 41.2862mm 2143.00mil 1625.00mil 6.00mil 12.00mil "clearline"] + Line[2193.00mil 1420.00mil 2193.00mil 1464.00mil 6.00mil 12.00mil "clearline"] + Line[2193.00mil 1464.00mil 2168.00mil 1489.00mil 6.00mil 12.00mil "clearline"] + Line[54.9211mm 47.9458mm 54.9211mm 43.7325mm 6.00mil 12.00mil "clearline"] + Line[54.9211mm 43.7325mm 2168.00mil 1716.00mil 6.00mil 12.00mil "clearline"] + Line[2168.00mil 1716.00mil 2168.00mil 1489.00mil 6.00mil 12.00mil "clearline"] + Line[55.4210mm 47.9458mm 55.4210mm 43.8422mm 6.00mil 12.00mil "clearline"] + Line[55.4210mm 43.8422mm 2193.00mil 1715.00mil 6.00mil 12.00mil "clearline"] + Line[55.9211mm 47.9458mm 55.9211mm 43.9771mm 6.00mil 12.00mil "clearline"] + Line[55.9211mm 43.9771mm 2218.00mil 1715.00mil 6.00mil 12.00mil "clearline"] + Line[2218.00mil 1715.00mil 2218.00mil 1679.00mil 6.00mil 12.00mil "clearline"] + Line[56.4210mm 47.9458mm 56.4210mm 1736.70mil 6.00mil 12.00mil "clearline"] + Line[56.4210mm 1736.70mil 2244.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[2244.00mil 1714.00mil 2244.00mil 1626.00mil 6.00mil 12.00mil "clearline"] + Line[2244.00mil 1626.00mil 2243.00mil 1625.00mil 6.00mil 12.00mil "clearline"] + Line[2293.00mil 1420.00mil 2293.00mil 1457.00mil 6.00mil 12.00mil "clearline"] + Line[2293.00mil 1457.00mil 2268.00mil 1482.00mil 6.00mil 12.00mil "clearline"] + Line[2268.00mil 1482.00mil 2268.00mil 1707.00mil 6.00mil 12.00mil "clearline"] + Line[56.9211mm 47.9458mm 56.9211mm 44.1709mm 6.00mil 12.00mil "clearline"] + Line[56.9211mm 44.1709mm 2268.00mil 1712.00mil 6.00mil 12.00mil "clearline"] + Line[2268.00mil 1712.00mil 2268.00mil 1703.00mil 6.00mil 12.00mil "clearline"] + Line[57.4210mm 47.9458mm 57.4210mm 44.3568mm 6.00mil 12.00mil "clearline"] + Line[57.4210mm 44.3568mm 2293.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[2293.00mil 1521.00mil 2293.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[2343.00mil 1497.00mil 2318.00mil 1522.00mil 6.00mil 12.00mil "clearline"] + Line[2318.00mil 1522.00mil 2318.00mil 1709.00mil 6.00mil 12.00mil "clearline"] + Line[57.9211mm 47.9458mm 57.9211mm 44.4917mm 6.00mil 12.00mil "clearline"] + Line[57.9211mm 44.4917mm 2318.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[2318.00mil 1714.00mil 2318.00mil 1705.00mil 6.00mil 12.00mil "clearline"] + Line[58.4210mm 47.9458mm 58.4210mm 44.6776mm 6.00mil 12.00mil "clearline"] + Line[58.4210mm 44.6776mm 2344.00mil 1715.00mil 6.00mil 12.00mil "clearline"] + Line[2344.00mil 1715.00mil 2344.00mil 1626.00mil 6.00mil 12.00mil "clearline"] + Line[2344.00mil 1626.00mil 2343.00mil 1625.00mil 6.00mil 12.00mil "clearline"] + Line[2393.00mil 1420.00mil 2393.00mil 1475.00mil 6.00mil 12.00mil "clearline"] + Line[2393.00mil 1475.00mil 2369.00mil 1499.00mil 6.00mil 12.00mil "clearline"] + Line[2369.00mil 1499.00mil 2369.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[58.9211mm 47.9458mm 58.9211mm 44.7871mm 6.00mil 12.00mil "clearline"] + Line[58.9211mm 44.7871mm 2369.00mil 1714.00mil 6.00mil 12.00mil "clearline"] + Line[60.9211mm 47.9458mm 60.9211mm 45.0985mm 6.00mil 12.00mil "clearline"] + Line[60.9211mm 45.0985mm 2461.00mil 1713.00mil 6.00mil 12.00mil "clearline"] + Line[2461.00mil 1713.00mil 2639.00mil 1713.00mil 6.00mil 12.00mil "clearline"] + Line[2639.00mil 1713.00mil 2670.00mil 1682.00mil 6.00mil 12.00mil "clearline"] + Line[2670.00mil 1682.00mil 2670.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[61.4210mm 47.9458mm 61.4210mm 45.4114mm 6.00mil 12.00mil "clearline"] + Line[61.4210mm 45.4114mm 2481.00mil 1725.00mil 6.00mil 12.00mil "clearline"] + Line[2481.00mil 1725.00mil 2665.00mil 1725.00mil 6.00mil 12.00mil "clearline"] + Line[2665.00mil 1725.00mil 2695.00mil 1695.00mil 6.00mil 12.00mil "clearline"] + Line[2719.00mil 1487.00mil 2719.00mil 1423.50mil 6.00mil 12.00mil "clearline"] + Line[2719.00mil 1423.50mil 2720.00mil 1422.50mil 6.00mil 12.00mil "clearline"] + Line[61.9211mm 47.9458mm 61.9211mm 45.3431mm 6.00mil 12.00mil "clearline"] + Line[61.9211mm 45.3431mm 2486.00mil 1737.00mil 6.00mil 12.00mil "clearline"] + Line[2486.00mil 1737.00mil 2678.00mil 1737.00mil 6.00mil 12.00mil "clearline"] + Line[2678.00mil 1737.00mil 2721.00mil 1694.00mil 6.00mil 12.00mil "clearline"] + Line[2721.00mil 1694.00mil 2721.00mil 1628.50mil 6.00mil 12.00mil "clearline"] + Line[2721.00mil 1628.50mil 2720.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[62.4210mm 47.9458mm 62.4210mm 45.2750mm 6.00mil 12.00mil "clearline"] + Line[62.4210mm 45.2750mm 2491.00mil 1749.00mil 6.00mil 12.00mil "clearline"] + Line[2491.00mil 1749.00mil 2690.00mil 1749.00mil 6.00mil 12.00mil "clearline"] + Line[2690.00mil 1749.00mil 2745.00mil 1694.00mil 6.00mil 12.00mil "clearline"] + Line[2745.00mil 1694.00mil 2745.00mil 1509.00mil 6.00mil 12.00mil "clearline"] + Line[2745.00mil 1509.00mil 2769.00mil 1485.00mil 6.00mil 12.00mil "clearline"] + Line[2769.00mil 1485.00mil 2769.00mil 1423.50mil 6.00mil 12.00mil "clearline"] + Line[2769.00mil 1423.50mil 2770.00mil 1422.50mil 6.00mil 12.00mil "clearline"] + Line[62.9211mm 47.9458mm 62.9211mm 45.2067mm 6.00mil 12.00mil "clearline"] + Line[62.9211mm 45.2067mm 2496.00mil 1761.00mil 6.00mil 12.00mil "clearline"] + Line[2496.00mil 1761.00mil 2703.00mil 1761.00mil 6.00mil 12.00mil "clearline"] + Line[2703.00mil 1761.00mil 2771.00mil 1693.00mil 6.00mil 12.00mil "clearline"] + Line[2771.00mil 1693.00mil 2771.00mil 1628.50mil 6.00mil 12.00mil "clearline"] + Line[2771.00mil 1628.50mil 2770.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[2820.00mil 1485.00mil 2795.00mil 1510.00mil 6.00mil 12.00mil "clearline"] + Line[2795.00mil 1510.00mil 2795.00mil 1680.00mil 6.00mil 12.00mil "clearline"] + Line[2715.00mil 1773.00mil 2795.00mil 1693.00mil 6.00mil 12.00mil "clearline"] + Line[2795.00mil 1693.00mil 2795.00mil 1679.00mil 6.00mil 12.00mil "clearline"] + Line[63.4210mm 47.9458mm 63.4210mm 45.3164mm 6.00mil 12.00mil "clearline"] + Line[63.4210mm 45.3164mm 2508.00mil 1773.00mil 6.00mil 12.00mil "clearline"] + Line[2508.00mil 1773.00mil 2715.00mil 1773.00mil 6.00mil 12.00mil "clearline"] + Line[63.9211mm 47.9458mm 63.9211mm 45.5275mm 6.00mil 12.00mil "clearline"] + Line[63.9211mm 45.5275mm 2524.00mil 1785.00mil 6.00mil 12.00mil "clearline"] + Line[2524.00mil 1785.00mil 2729.00mil 1785.00mil 6.00mil 12.00mil "clearline"] + Line[2729.00mil 1785.00mil 2821.00mil 1693.00mil 6.00mil 12.00mil "clearline"] + Line[2821.00mil 1693.00mil 2821.00mil 1628.50mil 6.00mil 12.00mil "clearline"] + Line[2821.00mil 1628.50mil 2820.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[2870.00mil 1422.50mil 2870.00mil 1486.00mil 6.00mil 12.00mil "clearline"] + Line[2870.00mil 1486.00mil 2845.00mil 1511.00mil 6.00mil 12.00mil "clearline"] + Line[2845.00mil 1511.00mil 2845.00mil 1676.00mil 6.00mil 12.00mil "clearline"] + Line[64.4210mm 47.9458mm 64.4210mm 45.8658mm 6.00mil 12.00mil "clearline"] + Line[64.4210mm 45.8658mm 2545.00mil 1797.00mil 6.00mil 12.00mil "clearline"] + Line[2545.00mil 1797.00mil 2740.00mil 1797.00mil 6.00mil 12.00mil "clearline"] + Line[2740.00mil 1797.00mil 2845.00mil 1692.00mil 6.00mil 12.00mil "clearline"] + Line[2845.00mil 1692.00mil 2845.00mil 1672.00mil 6.00mil 12.00mil "clearline"] + Line[64.9211mm 47.9458mm 64.9211mm 46.2293mm 6.00mil 12.00mil "clearline"] + Line[64.9211mm 46.2293mm 2567.00mil 1809.00mil 6.00mil 12.00mil "clearline"] + Line[2567.00mil 1809.00mil 2754.00mil 1809.00mil 6.00mil 12.00mil "clearline"] + Line[2754.00mil 1809.00mil 2871.00mil 1692.00mil 6.00mil 12.00mil "clearline"] + Line[2871.00mil 1692.00mil 2871.00mil 1628.50mil 6.00mil 12.00mil "clearline"] + Line[2871.00mil 1628.50mil 2870.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[2920.00mil 1422.50mil 2920.00mil 1484.00mil 6.00mil 12.00mil "clearline"] + Line[2920.00mil 1484.00mil 2894.00mil 1510.00mil 6.00mil 12.00mil "clearline"] + Line[2894.00mil 1510.00mil 2894.00mil 1682.00mil 6.00mil 12.00mil "clearline"] + Line[65.4210mm 47.9458mm 65.4210mm 46.4914mm 6.00mil 12.00mil "clearline"] + Line[65.4210mm 46.4914mm 2585.00mil 1821.00mil 6.00mil 12.00mil "clearline"] + Line[2585.00mil 1821.00mil 2764.00mil 1821.00mil 6.00mil 12.00mil "clearline"] + Line[2764.00mil 1821.00mil 2894.00mil 1691.00mil 6.00mil 12.00mil "clearline"] + Line[2894.00mil 1691.00mil 2894.00mil 1678.00mil 6.00mil 12.00mil "clearline"] + Line[2665.00mil 50.7159mm 71.5851mm 50.7159mm 6.00mil 12.00mil "clearline"] + Line[71.5851mm 50.7159mm 2922.00mil 1893.00mil 6.00mil 12.00mil "clearline"] + Line[2922.00mil 1893.00mil 2922.00mil 1629.50mil 6.00mil 12.00mil "clearline"] + Line[2922.00mil 1629.50mil 2920.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[2970.00mil 1422.50mil 2970.00mil 1485.00mil 6.00mil 12.00mil "clearline"] + Line[2970.00mil 1485.00mil 2945.00mil 1510.00mil 6.00mil 12.00mil "clearline"] + Line[2945.00mil 1510.00mil 2945.00mil 1680.00mil 6.00mil 12.00mil "clearline"] + Line[2665.00mil 51.2158mm 71.6440mm 51.2158mm 6.00mil 12.00mil "clearline"] + Line[71.6440mm 51.2158mm 2945.00mil 1892.00mil 6.00mil 12.00mil "clearline"] + Line[2945.00mil 1892.00mil 2945.00mil 1669.00mil 6.00mil 12.00mil "clearline"] + Line[2668.00mil 1512.00mil 2668.00mil 1625.50mil 6.00mil 12.00mil "clearline"] + Line[2668.00mil 1625.50mil 2670.00mil 1627.50mil 6.00mil 12.00mil "clearline"] + Line[70.3389mm 41.3195mm 70.3389mm 38.3477mm 6.00mil 12.00mil "clearline"] + Line[70.3389mm 38.3477mm 2795.00mil 1484.00mil 6.00mil 12.00mil "clearline"] + Line[2820.00mil 1485.00mil 2820.00mil 1325.00mil 6.00mil 12.00mil "clearline"] + Line[2870.00mil 1627.50mil 2870.00mil 1508.00mil 6.00mil 12.00mil "clearline"] + Line[2870.00mil 1508.00mil 2895.00mil 1483.00mil 6.00mil 12.00mil "clearline"] + Line[2193.00mil 1715.00mil 2193.00mil 1507.00mil 6.00mil 12.00mil "clearline"] + Line[2193.00mil 1507.00mil 2218.00mil 1482.00mil 6.00mil 12.00mil "clearline"] + Line[1428.00mil 2379.00mil 1407.00mil 2379.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 59.7157mm 45.1703mm 59.7157mm 6.00mil 12.00mil "clearline"] + Line[51.1510mm 2370.70mil 48.6740mm 2370.70mil 6.00mil 12.00mil "clearline"] + Line[48.6740mm 2370.70mil 1882.00mil 2405.00mil 6.00mil 12.00mil "clearline"] + Line[1882.00mil 2405.00mil 45.1660mm 2405.00mil 6.00mil 12.00mil "clearline"] + Line[45.1660mm 2405.00mil 45.1175mm 61.0385mm 6.00mil 12.00mil "clearline"] + Line[51.1510mm 61.2158mm 48.9186mm 61.2158mm 6.00mil 12.00mil "clearline"] + Line[48.9186mm 61.2158mm 1882.00mil 2454.00mil 6.00mil 12.00mil "clearline"] + Line[1882.00mil 2454.00mil 45.1406mm 2454.00mil 6.00mil 12.00mil "clearline"] + Line[45.1406mm 2454.00mil 45.1175mm 62.3085mm 6.00mil 12.00mil "clearline"] + Line[51.1510mm 61.7156mm 49.0029mm 61.7156mm 6.00mil 12.00mil "clearline"] + Line[49.0029mm 61.7156mm 1856.00mil 2503.00mil 6.00mil 12.00mil "clearline"] + Line[1856.00mil 2503.00mil 45.1198mm 2503.00mil 6.00mil 12.00mil "clearline"] + Line[45.1198mm 2503.00mil 45.1175mm 63.5785mm 6.00mil 12.00mil "clearline"] + Line[2069.00mil 2485.00mil 2095.00mil 2459.00mil 6.00mil 12.00mil "clearline"] + Line[2069.00mil 2485.00mil 1924.00mil 2485.00mil 6.00mil 12.00mil "clearline"] + Line[1924.00mil 2485.00mil 1857.00mil 2552.00mil 6.00mil 12.00mil "clearline"] + Line[1857.00mil 2552.00mil 45.1452mm 2552.00mil 6.00mil 12.00mil "clearline"] + Line[45.1452mm 2552.00mil 45.1175mm 64.8485mm 6.00mil 12.00mil "clearline"] + Line[2095.00mil 2459.00mil 2095.00mil 2262.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 57.2158mm 52.9740mm 57.2158mm 6.00mil 12.00mil "clearline"] + Line[52.9740mm 57.2158mm 2095.00mil 2262.00mil 6.00mil 12.00mil "clearline"] + Line[1780.00mil 2503.00mil 1718.00mil 2503.00mil 6.00mil 12.00mil "clearline"] + Line[1718.00mil 2503.00mil 1693.00mil 2478.00mil 6.00mil 12.00mil "clearline"] + Line[1693.00mil 2478.00mil 1533.00mil 2478.00mil 6.00mil 12.00mil "clearline"] + Line[1407.00mil 2277.00mil 1406.00mil 2278.00mil 6.00mil 12.00mil "clearline"] + Line[51.1510mm 62.2158mm 49.1378mm 62.2158mm 6.00mil 12.00mil "clearline"] + Line[49.1378mm 62.2158mm 1856.00mil 2528.00mil 6.00mil 12.00mil "clearline"] + Line[1856.00mil 2528.00mil 1505.00mil 2528.00mil 6.00mil 12.00mil "clearline"] + Line[1505.00mil 2528.00mil 1491.00mil 2514.00mil 6.00mil 12.00mil "clearline"] + Line[1491.00mil 2514.00mil 1491.00mil 2389.00mil 6.00mil 12.00mil "clearline"] + Line[1491.00mil 2389.00mil 1480.00mil 2378.00mil 6.00mil 12.00mil "clearline"] + Line[1480.00mil 2378.00mil 1412.00mil 2378.00mil 6.00mil 12.00mil "clearline"] + Line[1412.00mil 2378.00mil 1411.00mil 2379.00mil 6.00mil 12.00mil "clearline"] + Line[45.1175mm 62.3085mm 43.6141mm 62.3085mm 6.00mil 12.00mil "clearline"] + Line[43.6141mm 62.3085mm 1692.00mil 2428.00mil 6.00mil 12.00mil "clearline"] + Line[1534.00mil 2478.00mil 1514.00mil 2478.00mil 6.00mil 12.00mil "clearline"] + Line[1514.00mil 2478.00mil 1503.00mil 2467.00mil 6.00mil 12.00mil "clearline"] + Line[1503.00mil 2467.00mil 1503.00mil 2287.00mil 6.00mil 12.00mil "clearline"] + Line[1503.00mil 2287.00mil 1493.00mil 2277.00mil 6.00mil 12.00mil "clearline"] + Line[1493.00mil 2277.00mil 1407.00mil 2277.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 2428.00mil 1526.00mil 2428.00mil 6.00mil 12.00mil "clearline"] + Line[1526.00mil 2428.00mil 1515.00mil 2417.00mil 6.00mil 12.00mil "clearline"] + Line[1515.00mil 2417.00mil 1515.00mil 2271.00mil 6.00mil 12.00mil "clearline"] + Line[1777.00mil 2405.00mil 1714.00mil 2405.00mil 6.00mil 12.00mil "clearline"] + Line[1714.00mil 2405.00mil 1691.00mil 2382.00mil 6.00mil 12.00mil "clearline"] + Line[1360.00mil 2028.00mil 1356.00mil 2032.00mil 6.00mil 12.00mil "clearline"] + Line[1356.00mil 2032.00mil 1356.00mil 2128.00mil 6.00mil 12.00mil "clearline"] + Line[1356.00mil 2128.00mil 1406.00mil 2178.00mil 6.00mil 12.00mil "clearline"] + Line[1360.00mil 2028.00mil 1489.00mil 2028.00mil 6.00mil 12.00mil "clearline"] + Line[1489.00mil 2028.00mil 1703.00mil 2242.00mil 6.00mil 12.00mil "clearline"] + Line[1643.00mil 1469.00mil 1642.00mil 1372.00mil 6.00mil 12.00mil "clearline"] + Line[1515.00mil 2271.00mil 1472.00mil 2228.00mil 6.00mil 12.00mil "clearline"] + Line[1472.00mil 2228.00mil 1255.00mil 2228.00mil 6.00mil 12.00mil "clearline"] + Line[1255.00mil 2228.00mil 1243.00mil 2216.00mil 6.00mil 12.00mil "clearline"] + Line[1243.00mil 2216.00mil 1243.00mil 1939.00mil 6.00mil 12.00mil "clearline"] + Line[1243.00mil 1939.00mil 1255.00mil 1927.00mil 6.00mil 12.00mil "clearline"] + Line[1255.00mil 1927.00mil 1357.00mil 1927.00mil 6.00mil 12.00mil "clearline"] + Line[1357.00mil 1927.00mil 1406.00mil 1878.00mil 6.00mil 12.00mil "clearline"] + Line[45.1175mm 64.8485mm 43.8889mm 64.8485mm 6.00mil 12.00mil "clearline"] + Line[43.8889mm 64.8485mm 1692.00mil 2589.00mil 6.00mil 12.00mil "clearline"] + Line[1692.00mil 2589.00mil 1232.00mil 2589.00mil 6.00mil 12.00mil "clearline"] + Line[1232.00mil 2589.00mil 1217.00mil 2574.00mil 6.00mil 12.00mil "clearline"] + Line[1217.00mil 2574.00mil 1217.00mil 1843.00mil 6.00mil 12.00mil "clearline"] + Line[1217.00mil 1843.00mil 1233.00mil 1827.00mil 6.00mil 12.00mil "clearline"] + Line[1233.00mil 1827.00mil 1357.00mil 1827.00mil 6.00mil 12.00mil "clearline"] + Line[1357.00mil 1827.00mil 1406.00mil 1778.00mil 6.00mil 12.00mil "clearline"] + Line[1407.00mil 2078.00mil 1445.00mil 2078.00mil 6.00mil 12.00mil "clearline"] + Line[1445.00mil 2078.00mil 1691.00mil 2324.00mil 6.00mil 12.00mil "clearline"] + Line[1691.50mil 2382.50mil 1691.50mil 2324.50mil 6.00mil 12.00mil "clearline"] + Line[45.1703mm 59.7157mm 45.1703mm 58.8609mm 6.00mil 12.00mil "clearline"] + Line[45.1703mm 58.8609mm 1696.00mil 2235.00mil 6.00mil 12.00mil "clearline"] + Line[1592.00mil 2042.00mil 1592.00mil 1528.00mil 6.00mil 12.00mil "clearline"] + Line[1792.50mil 1479.50mil 1792.50mil 1424.50mil 6.00mil 12.00mil "clearline"] + Line[1792.50mil 1424.50mil 1792.00mil 1424.00mil 6.00mil 12.00mil "clearline"] + Line[2093.00mil 1529.00mil 2093.00mil 1508.00mil 6.00mil 12.00mil "clearline"] + Line[2093.00mil 1508.00mil 2119.00mil 1482.00mil 6.00mil 12.00mil "clearline"] + Line[1643.00mil 1469.00mil 1643.00mil 1502.00mil 6.00mil 12.00mil "clearline"] + Line[1643.00mil 1502.00mil 1618.00mil 1527.00mil 6.00mil 12.00mil "clearline"] + Line[1618.00mil 1682.00mil 1618.00mil 1548.00mil 6.00mil 12.00mil "clearline"] + Line[1618.00mil 1549.00mil 1618.00mil 1527.00mil 6.00mil 12.00mil "clearline"] + Line[1592.00mil 1516.00mil 1617.00mil 1491.00mil 6.00mil 12.00mil "clearline"] + Line[1617.00mil 1491.00mil 1617.00mil 1471.00mil 6.00mil 12.00mil "clearline"] + Line[1592.00mil 1531.00mil 1592.00mil 1516.00mil 6.00mil 12.00mil "clearline"] + Line[2719.00mil 1484.00mil 2719.00mil 1511.00mil 6.00mil 12.00mil "clearline"] + Line[2719.00mil 1511.00mil 2695.00mil 1535.00mil 6.00mil 12.00mil "clearline"] + Line[2695.50mil 1534.50mil 2695.50mil 1694.50mil 6.00mil 12.00mil "clearline"] + Line[2668.00mil 1516.00mil 2695.00mil 1489.00mil 6.00mil 12.00mil "clearline"] + Line[2695.00mil 1489.00mil 2695.00mil 1280.00mil 6.00mil 12.00mil "clearline"] + Line[2531.00mil 1511.00mil 2507.00mil 1511.00mil 10.00mil 20.00mil "clearline"] + Line[2507.00mil 1511.00mil 2393.00mil 1625.00mil 10.00mil 20.00mil "clearline"] + Line[1892.00mil 1629.00mil 1892.00mil 1608.00mil 10.00mil 20.00mil "clearline"] + Line[1892.00mil 1608.00mil 1990.00mil 1510.00mil 10.00mil 20.00mil "clearline"] + Line[58.4210mm 66.8538mm 2301.50mil 2633.50mil 10.00mil 20.00mil ""] + Line[2226.00mil 71.6440mm 56.5508mm 71.6336mm 10.00mil 12.00mil ""] + Line[2226.00mil 2915.00mil 2226.00mil 2916.00mil 10.00mil 20.00mil "clearline"] + Line[1617.00mil 1476.00mil 1617.00mil 1359.00mil 6.00mil 12.00mil "clearline"] + Line[1643.00mil 1353.00mil 1643.00mil 1411.00mil 6.00mil 12.00mil "clearline"] + Line[1643.00mil 1411.00mil 41.7172mm 35.8544mm 6.00mil 12.00mil "clearline"] + Line[1717.00mil 1345.00mil 1717.00mil 1378.00mil 6.00mil 12.00mil "clearline"] + Line[2119.00mil 1482.00mil 2119.00mil 1331.00mil 6.00mil 12.00mil "clearline"] + Line[2343.00mil 1420.00mil 2343.00mil 1355.00mil 6.00mil 12.00mil "clearline"] + Line[2343.00mil 1355.00mil 2343.50mil 1354.50mil 6.00mil 12.00mil "clearline"] + Line[2610.00mil 1186.00mil 2610.00mil 1195.00mil 6.00mil 12.00mil "clearline"] + Line[2920.00mil 1422.00mil 2920.00mil 1362.00mil 6.00mil 12.00mil "clearline"] + Line[2343.00mil 1497.00mil 2343.00mil 1413.00mil 6.00mil 12.00mil "clearline"] + Line[2665.00mil 51.7159mm 74.4235mm 51.7159mm 10.00mil 20.00mil "clearline"] + Line[1580.00mil 2295.00mil 1580.00mil 58.8470mm 10.00mil 20.00mil "clearline"] + Line[1580.00mil 58.8470mm 41.0535mm 59.7685mm 10.00mil 24.00mil "clearline"] + Line[1520.00mil 2505.00mil 41.0050mm 2505.00mil 10.00mil 20.00mil "clearline"] + Line[41.0050mm 2505.00mil 41.0535mm 63.5785mm 10.00mil 20.00mil "clearline"] + Line[41.0535mm 62.3085mm 38.9105mm 62.3085mm 10.00mil 20.00mil "clearline"] + Line[38.9105mm 62.3085mm 1530.00mil 2455.00mil 10.00mil 20.00mil "clearline"] + Line[41.0535mm 61.0385mm 39.1645mm 61.0385mm 10.00mil 20.00mil ""] + Line[39.1645mm 61.0385mm 1540.00mil 2405.00mil 10.00mil 20.00mil ""] + Line[41.0535mm 64.8485mm 39.1645mm 64.8485mm 10.00mil 20.00mil ""] + Line[39.1645mm 64.8485mm 1540.00mil 2555.00mil 10.00mil 20.00mil ""] + Line[1415.00mil 2478.00mil 1306.00mil 2478.00mil 25.00mil 20.00mil "clearline"] + Line[1303.00mil 1575.00mil 1306.00mil 1578.00mil 25.00mil 20.00mil "clearline"] + Line[51.1510mm 54.7157mm 49.2973mm 54.7157mm 10.00mil 20.00mil ""] + Line[49.2973mm 54.7157mm 1940.00mil 2155.00mil 10.00mil 20.00mil ""] + Line[51.0327mm 54.7157mm 53.3187mm 54.7157mm 10.00mil 20.00mil ""] + Line[53.3187mm 54.7157mm 2100.00mil 2155.00mil 10.00mil 20.00mil ""] + Line[49.3133mm 55.7157mm 1940.00mil 2195.00mil 10.00mil 20.00mil ""] + Line[52.7947mm 55.7157mm 2080.00mil 2195.00mil 10.00mil 20.00mil ""] + Line[51.1510mm 56.2158mm 49.5752mm 56.2158mm 10.00mil 20.00mil ""] + Line[49.5752mm 56.2158mm 1950.00mil 2215.00mil 10.00mil 20.00mil ""] + Line[2020.00mil 56.2158mm 53.0408mm 56.2158mm 10.00mil 20.00mil ""] + Line[53.0408mm 56.2158mm 2090.00mil 2215.00mil 10.00mil 20.00mil ""] + Line[1957.90mil 2232.90mil 1950.00mil 2225.00mil 10.00mil 20.00mil ""] + Line[2072.10mil 2232.90mil 2080.00mil 2225.00mil 10.00mil 20.00mil ""] + Line[53.9209mm 62.7921mm 2130.00mil 2465.00mil 10.00mil 20.00mil ""] + Line[58.4210mm 66.8538mm 2301.00mil 2633.00mil 10.00mil 20.00mil "clearline"] + Line[63.4210mm 64.4858mm 63.4210mm 71.0720mm 10.00mil 20.00mil "clearline"] + Line[63.9209mm 68.5401mm 63.9209mm 64.4858mm 10.00mil 20.00mil "clearline"] + Line[64.9209mm 67.5879mm 64.9209mm 64.4858mm 10.00mil 20.00mil "clearline"] + Line[54.4210mm 63.0540mm 2150.00mil 2475.00mil 10.00mil 20.00mil ""] + Line[60.9209mm 64.4858mm 60.9209mm 62.6501mm 10.00mil 20.00mil ""] + Line[60.9209mm 62.6501mm 2400.00mil 2465.00mil 10.00mil 20.00mil ""] + Line[61.9209mm 62.4121mm 2440.00mil 2455.00mil 10.00mil 20.00mil ""] + Line[62.4210mm 64.4858mm 62.4210mm 62.6740mm 10.00mil 20.00mil ""] + Line[62.4210mm 62.6740mm 2460.00mil 2465.00mil 10.00mil 20.00mil ""] + Line[65.8551mm 57.7159mm 2590.00mil 2275.00mil 10.00mil 20.00mil ""] + Line[65.4548mm 58.2158mm 2570.00mil 2285.00mil 10.00mil 20.00mil ""] + Line[65.3712mm 59.2158mm 2570.00mil 2335.00mil 10.00mil 20.00mil ""] + Line[2359.10mil 47.9458mm 2359.10mil 1944.10mil 10.00mil 20.00mil ""] + Line[2359.10mil 1944.10mil 2360.00mil 1945.00mil 10.00mil 20.00mil ""] + Line[2040.00mil 2575.00mil 2067.00mil 2575.00mil 10.00mil 20.00mil "clearline"] + Line[2067.00mil 2575.00mil 53.4210mm 64.4858mm 10.00mil 20.00mil "clearline"] + Line[59.9209mm 56.5381mm 2360.00mil 2225.00mil 10.00mil 20.00mil "clearline"] + Line[60.4210mm 47.9458mm 60.4210mm 56.0149mm 10.00mil 20.00mil "clearline"] + Line[60.4210mm 56.0149mm 59.9209mm 2225.00mil 10.00mil 20.00mil "clearline"] + Line[61.9209mm 62.4121mm 61.9209mm 65.8579mm 10.00mil 20.00mil ""] + Line[61.9209mm 65.8579mm 2440.00mil 2595.00mil 10.00mil 20.00mil ""] + Line[58.4210mm 64.4858mm 58.4210mm 66.8538mm 10.00mil 20.00mil "clearline"] + Line[64.2912mm 55.2158mm 2530.00mil 2175.00mil 10.00mil 20.00mil "clearline"] + Line[2665.00mil 1977.00mil 2568.00mil 1977.00mil 10.00mil 20.00mil "clearline"] + Line[2568.00mil 1977.00mil 2530.00mil 2015.00mil 10.00mil 20.00mil "clearline"] + Line[53.4210mm 47.9458mm 53.4210mm 49.9920mm 10.00mil 20.00mil "clearline"] + Line[53.4210mm 49.9920mm 2130.00mil 1995.00mil 10.00mil 20.00mil "clearline"] + Line[59.4210mm 47.9458mm 59.4210mm 49.6720mm 10.00mil 20.00mil "clearline"] + Line[59.4210mm 49.6720mm 2320.00mil 1975.00mil 10.00mil 20.00mil "clearline"] + Line[2093.00mil 1348.00mil 2090.00mil 1345.00mil 10.00mil 20.00mil ""] + Line[1590.00mil 1365.00mil 1590.00mil 1422.00mil 10.00mil 20.00mil ""] + Line[1590.00mil 1422.00mil 1592.00mil 1424.00mil 10.00mil 20.00mil ""] + Line[2670.00mil 1422.50mil 2670.00mil 1345.00mil 10.00mil 20.00mil ""] + Line[69.1731mm 58.7159mm 2730.00mil 2305.00mil 10.00mil 20.00mil ""] + Line[67.6572mm 59.2158mm 69.1812mm 59.2158mm 10.00mil 20.00mil ""] + Line[69.1812mm 59.2158mm 2730.00mil 2325.00mil 10.00mil 20.00mil ""] + Line[3167.00mil 1570.00mil 3027.50mil 1570.00mil 10.00mil 20.00mil "clearline"] + Line[3027.50mil 1570.00mil 75.7237mm 41.0528mm 10.00mil 20.00mil "clearline"] + Line[2970.00mil 1627.50mil 3027.50mil 1570.00mil 10.00mil 20.00mil "clearline"] + Line[2243.00mil 1420.00mil 2243.00mil 1522.50mil 6.00mil 12.00mil "clearline"] + Line[2218.00mil 1365.00mil 2218.00mil 1482.00mil 6.00mil 12.00mil "clearline"] + Line[2226.00mil 2919.00mil 2226.00mil 71.6440mm 10.00mil 20.00mil "clearline"] + Line[58.2399mm 32.9750mm 56.9399mm 34.2750mm 6.00mil 12.00mil "clearline"] + Line[56.9399mm 34.2750mm 56.9399mm 36.0357mm 6.00mil 12.00mil "clearline"] + Line[56.9399mm 36.0357mm 2243.00mil 1420.00mil 6.00mil 12.00mil "clearline"] + Line[63.4210mm 71.0410mm 63.4210mm 79.0730mm 10.00mil 12.00mil "clearline"] + Line[1970.00mil 1645.00mil 1909.00mil 1645.00mil 10.00mil 12.00mil "clearline"] + Line[1909.00mil 1645.00mil 1892.00mil 1628.00mil 10.00mil 12.00mil "clearline"] + Line[1970.00mil 40.9100mm 1970.00mil 1590.00mil 10.00mil 12.00mil ""] + Line[3037.00mil 1382.00mil 3205.00mil 1382.00mil 10.00mil 12.00mil ""] + Line[76.7390mm 36.2514mm 3021.00mil 1427.00mil 25.00mil 20.00mil ""] + Line[51.1510mm 1977.00mil 1982.00mil 1977.00mil 6.00mil 12.00mil "clearline"] + Line[1982.00mil 1977.00mil 1955.00mil 1950.00mil 6.00mil 12.00mil "clearline"] + Line[1955.00mil 1950.00mil 1955.00mil 1763.00mil 6.00mil 12.00mil "clearline"] + Line[1955.00mil 1763.00mil 2016.50mil 1701.50mil 6.00mil 12.00mil "clearline"] + Line[53.4210mm 47.9250mm 52.6400mm 47.9250mm 10.00mil 12.00mil "clearline"] + Line[52.6400mm 47.9250mm 2030.00mil 46.8470mm 10.00mil 12.00mil "clearline"] + Line[2030.00mil 1805.00mil 2030.00mil 1775.00mil 10.00mil 12.00mil ""] + Line[2465.00mil 1650.00mil 2418.00mil 1650.00mil 10.00mil 12.00mil "clearline"] + Line[2418.00mil 1650.00mil 2393.00mil 1625.00mil 10.00mil 12.00mil "clearline"] + Line[2465.00mil 40.9100mm 2465.00mil 1590.00mil 10.00mil 12.00mil ""] + Line[2465.00mil 1590.00mil 2470.00mil 1585.00mil 10.00mil 12.00mil ""] + Line[77.3341mm 41.8935mm 75.9930mm 41.8935mm 10.00mil 12.00mil "clearline"] + Line[75.9930mm 41.8935mm 2970.00mil 1627.50mil 10.00mil 12.00mil "clearline"] + Line[3045.00mil 40.9100mm 78.2480mm 40.9100mm 10.00mil 12.00mil ""] + Line[69.8660mm 1930.00mil 2712.00mil 1930.00mil 10.00mil 12.00mil "clearline"] + Line[2712.00mil 1930.00mil 2665.00mil 1977.00mil 10.00mil 12.00mil "clearline"] + Line[2790.00mil 1930.00mil 2825.00mil 1930.00mil 10.00mil 12.00mil ""] + Line[1930.00mil 2585.00mil 1930.00mil 2615.00mil 10.00mil 12.00mil ""] + Line[50.0220mm 2585.00mil 2030.00mil 2585.00mil 10.00mil 12.00mil "clearline"] + Line[2030.00mil 2585.00mil 2040.00mil 2575.00mil 10.00mil 12.00mil "clearline"] + Line[59.4210mm 46.4970mm 2355.00mil 1815.00mil 10.00mil 24.00mil "clearline"] + Line[2359.10mil 1880.90mil 2359.10mil 1845.90mil 10.00mil 12.00mil ""] + Line[2359.10mil 1845.90mil 2365.00mil 1840.00mil 10.00mil 12.00mil ""] + Line[2355.00mil 45.1010mm 60.4360mm 45.1010mm 10.00mil 12.00mil ""] + Line[60.4360mm 45.1010mm 2380.00mil 1775.00mil 10.00mil 12.00mil ""] + Line[57.9209mm 64.4858mm 57.9209mm 68.8759mm 10.00mil 12.00mil "clearline"] + Line[57.9209mm 68.8759mm 2266.00mil 2726.00mil 10.00mil 12.00mil ""] + Line[58.4210mm 66.8010mm 58.4210mm 67.9460mm 10.00mil 12.00mil "clearline"] + Line[2320.00mil 71.2884mm 58.5828mm 71.6336mm 10.00mil 12.00mil "clearline"] + Line[2186.00mil 2726.00mil 2186.00mil 2746.00mil 10.00mil 12.00mil "clearline"] + Line[2186.00mil 2746.00mil 2210.00mil 2770.00mil 10.00mil 12.00mil "clearline"] + Line[2210.00mil 2770.00mil 2257.00mil 2770.00mil 10.00mil 12.00mil "clearline"] + Line[2257.00mil 2770.00mil 2267.00mil 2780.00mil 10.00mil 12.00mil "clearline"] + Line[58.9209mm 65.8899mm 59.5790mm 2620.00mil 10.00mil 12.00mil "clearline"] + Line[58.4210mm 67.8170mm 58.4210mm 68.2000mm 10.00mil 12.00mil "clearline"] + Line[58.4210mm 68.2000mm 2320.00mil 2705.00mil 10.00mil 12.00mil "clearline"] + Line[2320.00mil 2705.00mil 2320.00mil 71.2056mm 10.00mil 12.00mil "clearline"] + Line[2320.00mil 71.2056mm 58.9694mm 2805.00mil 10.00mil 12.00mil "clearline"] + Line[59.9209mm 56.5381mm 59.9209mm 65.7629mm 10.00mil 12.00mil "clearline"] + Line[59.4210mm 64.4858mm 59.4210mm 62.7530mm 10.00mil 12.00mil ""] + Line[59.4210mm 62.7530mm 2340.00mil 2470.00mil 10.00mil 12.00mil ""] + Line[58.9209mm 2595.00mil 58.9209mm 67.9379mm 10.00mil 12.00mil "clearline"] + Line[58.9209mm 64.4858mm 58.9209mm 62.9849mm 10.00mil 12.00mil "clearline"] + Line[58.9209mm 62.9849mm 2300.00mil 2460.00mil 10.00mil 12.00mil "clearline"] + Line[2300.00mil 2460.00mil 2300.00mil 2435.00mil 10.00mil 12.00mil "clearline"] + Line[58.9209mm 64.2691mm 58.9209mm 66.0471mm 10.00mil 12.00mil "clearline"] + Line[59.9209mm 2590.00mil 2360.00mil 2590.00mil 10.00mil 12.00mil "clearline"] + Line[60.8853mm 2620.50mil 2390.50mil 2620.50mil 10.00mil 12.00mil "clearline"] + Line[2360.00mil 2590.00mil 2390.50mil 2620.50mil 10.00mil 12.00mil "clearline"] + Line[58.9209mm 67.9521mm 58.9351mm 67.9521mm 10.00mil 12.00mil ""] + Line[58.9351mm 67.9521mm 2345.00mil 2700.00mil 10.00mil 28.00mil "clearline"] + Line[2345.00mil 2700.00mil 2345.00mil 2715.00mil 10.00mil 12.00mil "clearline"] + Line[2345.00mil 2715.00mil 2350.00mil 2720.00mil 10.00mil 12.00mil "clearline"] + Line[60.6900mm 2720.00mil 2425.00mil 2720.00mil 10.00mil 12.00mil ""] + Line[59.5790mm 67.5480mm 59.5790mm 67.7070mm 10.00mil 12.00mil ""] + Line[59.5790mm 67.7070mm 2365.00mil 2685.00mil 10.00mil 12.00mil ""] + Line[60.8853mm 67.5607mm 61.5917mm 67.5607mm 10.00mil 12.00mil ""] + Line[61.5917mm 67.5607mm 2425.00mil 2660.00mil 10.00mil 12.00mil ""] + Line[2665.00mil 56.7159mm 66.3679mm 56.7159mm 10.00mil 12.00mil ""] + Line[66.3679mm 56.7159mm 2610.00mil 2230.00mil 10.00mil 12.00mil ""] + Line[67.4982mm 57.2158mm 69.0222mm 57.2158mm 10.00mil 12.00mil ""] + Line[2093.00mil 1420.00mil 2093.00mil 1348.00mil 10.00mil 12.00mil ""] + Line[2093.00mil 1348.00mil 2092.50mil 1347.50mil 10.00mil 12.00mil ""] + Line[2610.50mil 1186.50mil 2610.50mil 1178.50mil 6.00mil 12.00mil "clearline"] + Line[2491.00mil 1442.00mil 2558.00mil 1442.00mil 25.00mil 20.00mil ""] + Line[2558.00mil 1442.00mil 2560.00mil 1440.00mil 25.00mil 20.00mil ""] + Line[3311.00mil 1194.00mil 3311.00mil 1254.00mil 6.00mil 12.00mil "clearline"] + Line[3311.00mil 1254.00mil 3220.00mil 1345.00mil 6.00mil 12.00mil "clearline"] + Line[3220.00mil 1345.00mil 2937.00mil 1345.00mil 6.00mil 12.00mil "clearline"] + Line[2937.00mil 1345.00mil 2920.00mil 1362.00mil 6.00mil 12.00mil "clearline"] + Line[3211.00mil 1244.00mil 3130.00mil 1325.00mil 6.00mil 12.00mil "clearline"] + Line[3130.00mil 1325.00mil 2910.00mil 1325.00mil 6.00mil 12.00mil "clearline"] + Line[2910.00mil 1325.00mil 2895.00mil 1340.00mil 6.00mil 12.00mil "clearline"] + Line[2895.00mil 1483.00mil 2895.00mil 1340.00mil 6.00mil 12.00mil "clearline"] + Line[3111.00mil 1254.00mil 3060.00mil 1305.00mil 6.00mil 12.00mil "clearline"] + Line[3060.00mil 1305.00mil 2840.00mil 1305.00mil 6.00mil 12.00mil "clearline"] + Line[2840.00mil 1305.00mil 2820.00mil 1325.00mil 6.00mil 12.00mil "clearline"] + Line[3011.00mil 1264.00mil 2990.00mil 1285.00mil 6.00mil 12.00mil "clearline"] + Line[2990.00mil 1285.00mil 2815.00mil 1285.00mil 6.00mil 12.00mil "clearline"] + Line[2815.00mil 1285.00mil 2795.00mil 1305.00mil 6.00mil 12.00mil "clearline"] + Line[2795.00mil 1484.00mil 2795.00mil 1305.00mil 6.00mil 12.00mil "clearline"] + Line[2911.00mil 1186.00mil 2911.00mil 1254.00mil 6.00mil 12.00mil "clearline"] + Line[2911.00mil 1254.00mil 2895.00mil 1270.00mil 6.00mil 12.00mil "clearline"] + Line[2895.00mil 1270.00mil 69.6150mm 1270.00mil 6.00mil 12.00mil "clearline"] + Line[2720.00mil 1422.50mil 2720.00mil 32.7850mm 6.00mil 12.00mil "clearline"] + Line[69.6150mm 1270.00mil 2720.00mil 32.7850mm 6.00mil 12.00mil "clearline"] + Line[2811.00mil 1189.00mil 2811.00mil 1224.00mil 6.00mil 12.00mil "clearline"] + Line[2811.00mil 1224.00mil 2790.00mil 1245.00mil 6.00mil 12.00mil "clearline"] + Line[2790.00mil 1245.00mil 2730.00mil 1245.00mil 6.00mil 12.00mil "clearline"] + Line[2730.00mil 1245.00mil 2695.00mil 1280.00mil 6.00mil 12.00mil "clearline"] + Line[2710.00mil 1188.00mil 2710.00mil 1238.00mil 6.00mil 12.00mil "clearline"] + Line[2710.00mil 1238.00mil 2629.00mil 1319.00mil 6.00mil 12.00mil "clearline"] + Line[2629.00mil 1319.00mil 2379.00mil 1319.00mil 6.00mil 12.00mil "clearline"] + Line[2379.00mil 1319.00mil 2374.00mil 1324.00mil 6.00mil 12.00mil "clearline"] + Line[2373.50mil 1324.50mil 2343.00mil 1355.00mil 6.00mil 12.00mil "clearline"] + Line[2610.00mil 1188.00mil 2610.00mil 1283.00mil 6.00mil 12.00mil "clearline"] + Line[2610.00mil 1283.00mil 2592.00mil 1301.00mil 6.00mil 12.00mil "clearline"] + Line[2592.00mil 1301.00mil 2347.00mil 1301.00mil 6.00mil 12.00mil "clearline"] + Line[2347.00mil 1301.00mil 2319.00mil 1329.00mil 6.00mil 12.00mil "clearline"] + Line[2319.00mil 1373.00mil 2319.00mil 1329.00mil 6.00mil 12.00mil "clearline"] + Line[2511.00mil 1187.00mil 2511.00mil 1265.00mil 6.00mil 12.00mil "clearline"] + Line[2511.00mil 1265.00mil 2493.00mil 1283.00mil 6.00mil 12.00mil "clearline"] + Line[2493.00mil 1283.00mil 58.6268mm 1283.00mil 6.00mil 12.00mil "clearline"] + Line[58.6268mm 1283.00mil 2289.00mil 33.0744mm 6.00mil 12.00mil "clearline"] + Line[2218.00mil 1375.00mil 2218.00mil 1333.00mil 6.00mil 12.00mil "clearline"] + Line[1932.50mil 1268.50mil 1842.00mil 1359.00mil 6.00mil 12.00mil "clearline"] + Line[1842.00mil 1523.00mil 1842.00mil 1359.00mil 6.00mil 12.00mil "clearline"] + Line[1842.00mil 1359.00mil 1843.00mil 1358.00mil 6.00mil 12.00mil "clearline"] + Line[1817.00mil 1492.00mil 1817.00mil 1354.00mil 6.00mil 12.00mil "clearline"] + Line[2710.00mil 1186.00mil 2711.00mil 1187.00mil 6.00mil 12.00mil "clearline"] + Line[3011.00mil 1187.00mil 3011.00mil 1264.00mil 6.00mil 12.00mil "clearline"] + Line[3111.00mil 1187.00mil 3111.00mil 1254.00mil 6.00mil 12.00mil "clearline"] + Line[3211.00mil 1187.00mil 3211.00mil 1244.00mil 6.00mil 12.00mil "clearline"] + Line[2665.00mil 59.7159mm 66.1411mm 59.7159mm 10.00mil 12.00mil ""] + Line[66.1411mm 59.7159mm 2600.00mil 2355.00mil 10.00mil 12.00mil ""] + Line[2665.00mil 55.7159mm 66.0771mm 55.7159mm 10.00mil 12.00mil ""] + Line[66.0771mm 55.7159mm 2600.00mil 2195.00mil 10.00mil 12.00mil ""] + Line[60.4210mm 64.4858mm 60.4210mm 63.1500mm 10.00mil 12.00mil ""] + Line[60.4210mm 63.1500mm 2380.00mil 2485.00mil 10.00mil 12.00mil ""] + Line[51.1510mm 2232.90mil 2072.10mil 2232.90mil 10.00mil 12.00mil ""] + Line[51.1510mm 55.7157mm 52.7947mm 55.7157mm 10.00mil 12.00mil ""] + Line[3311.00mil 1187.00mil 3655.00mil 575.00mil 10.00mil 12.00mil "clearline"] + Line[3655.00mil 575.00mil 3655.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[3655.00mil 455.00mil 3700.00mil 410.00mil 10.00mil 12.00mil "clearline"] + Line[3555.00mil 460.00mil 3605.00mil 405.00mil 10.00mil 12.00mil "clearline"] + Line[3455.00mil 460.00mil 3505.00mil 405.00mil 10.00mil 12.00mil "clearline"] + Line[3355.00mil 460.00mil 3405.00mil 405.00mil 10.00mil 12.00mil "clearline"] + Line[3305.00mil 405.00mil 3255.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[3255.00mil 460.00mil 3255.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[3355.00mil 460.00mil 3355.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[3320.00mil 850.00mil 2911.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3375.00mil 824.65mil 86.2030mm 18.3850mm 10.00mil 12.00mil "clearline"] + Line[3355.00mil 565.00mil 86.2030mm 18.3850mm 10.00mil 12.00mil "clearline"] + Line[3375.00mil 824.65mil 3011.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3200.00mil 410.00mil 3155.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[3155.00mil 460.00mil 3155.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[3155.00mil 565.00mil 3030.00mil 665.00mil 10.00mil 12.00mil "clearline"] + Line[3030.00mil 665.00mil 2811.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3005.00mil 405.00mil 2955.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[2955.00mil 460.00mil 2955.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[2955.00mil 565.00mil 2611.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3105.00mil 410.00mil 3055.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[3055.00mil 460.00mil 3055.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[3055.00mil 565.00mil 2710.00mil 1195.00mil 10.00mil 12.00mil "clearline"] + Line[2802.00mil 407.00mil 2750.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[2750.00mil 460.00mil 2750.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[2750.00mil 565.00mil 2511.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3345.00mil 791.67mil 84.8502mm 705.00mil 10.00mil 12.00mil "clearline"] + Line[3320.00mil 850.00mil 3345.00mil 791.67mil 10.00mil 12.00mil "clearline"] + Line[3255.00mil 565.00mil 84.8495mm 704.47mil 10.00mil 12.00mil "clearline"] + Line[3510.00mil 759.10mil 3555.00mil 570.00mil 10.00mil 12.00mil "clearline"] + Line[3510.00mil 759.10mil 3211.00mil 1187.00mil 10.00mil 12.00mil "clearline"] + Line[3555.00mil 460.00mil 3555.00mil 570.00mil 10.00mil 12.00mil "clearline"] + Line[3421.60mil 815.00mil 3455.00mil 575.00mil 10.00mil 12.00mil "clearline"] + Line[3455.00mil 460.00mil 3455.00mil 575.00mil 10.00mil 12.00mil "clearline"] + Line[3111.00mil 1186.00mil 3421.60mil 815.00mil 10.00mil 12.00mil "clearline"] + Line[2100.00mil 405.00mil 2150.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[2150.00mil 455.00mil 2150.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[2000.00mil 410.00mil 2050.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[2050.00mil 455.00mil 2050.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1900.00mil 405.00mil 1950.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[1950.00mil 455.00mil 1950.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1800.00mil 405.00mil 1850.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[1850.00mil 455.00mil 1850.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1705.00mil 405.00mil 1755.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[1755.00mil 455.00mil 1755.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1600.00mil 410.00mil 1655.00mil 455.00mil 10.00mil 12.00mil "clearline"] + Line[1655.00mil 455.00mil 1655.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1505.00mil 405.00mil 1555.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[1555.00mil 460.00mil 1555.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1400.00mil 405.00mil 1455.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[1455.00mil 460.00mil 1455.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1300.00mil 405.00mil 1350.00mil 460.00mil 10.00mil 12.00mil "clearline"] + Line[1350.00mil 460.00mil 1350.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[48.9372mm 95.7499mm 48.9372mm 93.7346mm 10.00mil 12.00mil "clearline"] + Line[48.9372mm 93.7346mm 1930.00mil 3687.00mil 10.00mil 12.00mil "clearline"] + Line[1930.00mil 3687.00mil 1930.00mil 3651.00mil 10.00mil 12.00mil "clearline"] + Line[49.5872mm 95.7499mm 49.5872mm 93.7832mm 10.00mil 12.00mil "clearline"] + Line[49.5872mm 93.7832mm 1946.00mil 3686.00mil 10.00mil 12.00mil "clearline"] + Line[1946.00mil 3686.00mil 1946.00mil 3656.00mil 10.00mil 12.00mil "clearline"] + Line[1930.00mil 3652.00mil 1930.00mil 3215.00mil 10.00mil 12.00mil "clearline"] + Line[1930.00mil 3215.00mil 2226.00mil 2919.00mil 10.00mil 12.00mil "clearline"] + Line[2267.00mil 2780.00mil 2267.00mil 2900.00mil 10.00mil 12.00mil "clearline"] + Line[63.4210mm 3094.00mil 63.4210mm 80.0890mm 10.00mil 12.00mil "clearline"] + Line[63.4210mm 79.8350mm 63.4210mm 89.3290mm 10.00mil 12.00mil "clearline"] + Line[63.6859mm 95.2116mm 63.4210mm 89.3290mm 10.00mil 12.00mil "clearline"] + Line[61.3862mm 84.6402mm 61.3862mm 86.2782mm 10.00mil 12.00mil "clearline"] + Line[61.3862mm 86.2782mm 2420.00mil 3400.00mil 10.00mil 12.00mil "clearline"] + Line[2640.00mil 3400.00mil 2640.00mil 84.6704mm 10.00mil 12.00mil "clearline"] + Line[2640.00mil 84.6704mm 67.0860mm 84.6402mm 10.00mil 12.00mil "clearline"] + Line[1885.00mil 3690.00mil 1767.00mil 3690.00mil 25.00mil 20.00mil "clearline"] + Line[1767.00mil 3690.00mil 1684.00mil 3773.00mil 25.00mil 20.00mil "clearline"] + Line[1564.00mil 3773.00mil 1483.00mil 3773.00mil 25.00mil 20.00mil "clearline"] + Line[1483.00mil 3773.00mil 1440.00mil 3730.00mil 25.00mil 20.00mil "clearline"] + Line[28.9563mm 3730.00mil 32.2760mm 3730.00mil 25.00mil 20.00mil "clearline"] + Line[1900.00mil 3770.00mil 1900.00mil 3700.00mil 10.00mil 12.00mil "clearline"] + Line[1900.00mil 3700.00mil 1890.00mil 3690.00mil 10.00mil 12.00mil "clearline"] + Line[57.4241mm 2531.10mil 57.4241mm 67.6201mm 6.00mil 12.00mil "clearline"] + Line[57.4241mm 67.6201mm 2254.00mil 2669.00mil 6.00mil 12.00mil "clearline"] + Line[2254.00mil 2669.00mil 2146.00mil 2669.00mil 6.00mil 12.00mil "clearline"] + Line[2241.10mil 2531.10mil 2241.10mil 2650.90mil 6.00mil 12.00mil "clearline"] + Line[2241.10mil 2650.90mil 2235.00mil 2657.00mil 6.00mil 12.00mil "clearline"] + Line[56.4241mm 2531.10mil 56.4241mm 67.0453mm 6.00mil 12.00mil "clearline"] + Line[56.4241mm 67.0453mm 2216.00mil 2645.00mil 6.00mil 12.00mil "clearline"] + Line[2216.00mil 2645.00mil 2148.00mil 2645.00mil 6.00mil 12.00mil "clearline"] + Line[55.9239mm 2531.10mil 55.9239mm 66.7581mm 6.00mil 12.00mil "clearline"] + Line[55.9239mm 66.7581mm 2197.00mil 2633.00mil 6.00mil 12.00mil "clearline"] + Line[2197.00mil 2633.00mil 2149.00mil 2633.00mil 6.00mil 12.00mil "clearline"] + Line[55.4241mm 2531.10mil 55.4241mm 66.4451mm 6.00mil 12.00mil "clearline"] + Line[55.4241mm 66.4451mm 2177.00mil 2621.00mil 6.00mil 12.00mil "clearline"] + Line[2177.00mil 2621.00mil 2149.00mil 2621.00mil 6.00mil 12.00mil "clearline"] + Line[54.9239mm 2531.10mil 54.9239mm 66.1325mm 6.00mil 12.00mil "clearline"] + Line[54.9239mm 66.1325mm 2157.00mil 2609.00mil 6.00mil 12.00mil "clearline"] + Line[2157.00mil 2609.00mil 2148.00mil 2609.00mil 6.00mil 12.00mil "clearline"] + Line[1809.00mil 3006.00mil 1809.00mil 3367.00mil 6.00mil 12.00mil "clearline"] + Line[1809.00mil 3367.00mil 1705.00mil 3471.00mil 6.00mil 12.00mil "clearline"] + Line[1705.00mil 3471.00mil 1354.00mil 3471.00mil 6.00mil 12.00mil "clearline"] + Line[1354.00mil 3471.00mil 1305.00mil 3520.00mil 6.00mil 12.00mil "clearline"] + Line[2235.00mil 2657.00mil 2141.00mil 2657.00mil 6.00mil 12.00mil "clearline"] + Line[2141.00mil 2657.00mil 1797.00mil 3001.00mil 6.00mil 12.00mil "clearline"] + Line[1797.00mil 3001.00mil 1797.00mil 3291.00mil 6.00mil 12.00mil "clearline"] + Line[1797.00mil 3291.00mil 1718.00mil 3370.00mil 6.00mil 12.00mil "clearline"] + Line[1718.00mil 3370.00mil 1355.00mil 3370.00mil 6.00mil 12.00mil "clearline"] + Line[1355.00mil 3370.00mil 1305.00mil 3420.00mil 6.00mil 12.00mil "clearline"] + Line[2149.00mil 2645.00mil 2136.00mil 2645.00mil 6.00mil 12.00mil "clearline"] + Line[2136.00mil 2645.00mil 1785.00mil 2996.00mil 6.00mil 12.00mil "clearline"] + Line[1785.00mil 2996.00mil 1785.00mil 3210.00mil 6.00mil 12.00mil "clearline"] + Line[1785.00mil 3210.00mil 1727.00mil 3268.00mil 6.00mil 12.00mil "clearline"] + Line[1727.00mil 3268.00mil 1357.00mil 3268.00mil 6.00mil 12.00mil "clearline"] + Line[1357.00mil 3268.00mil 1305.00mil 3320.00mil 6.00mil 12.00mil "clearline"] + Line[2151.00mil 2633.00mil 2131.00mil 2633.00mil 6.00mil 12.00mil "clearline"] + Line[2131.00mil 2633.00mil 1773.00mil 2991.00mil 6.00mil 12.00mil "clearline"] + Line[1773.00mil 2991.00mil 1773.00mil 3127.00mil 6.00mil 12.00mil "clearline"] + Line[1773.00mil 3127.00mil 1733.00mil 3167.00mil 6.00mil 12.00mil "clearline"] + Line[1733.00mil 3167.00mil 1358.00mil 3167.00mil 6.00mil 12.00mil "clearline"] + Line[1358.00mil 3167.00mil 1305.00mil 3220.00mil 6.00mil 12.00mil "clearline"] + Line[2150.00mil 2621.00mil 2126.00mil 2621.00mil 6.00mil 12.00mil "clearline"] + Line[2126.00mil 2621.00mil 1761.00mil 2986.00mil 6.00mil 12.00mil "clearline"] + Line[1761.00mil 2986.00mil 1761.00mil 3027.00mil 6.00mil 12.00mil "clearline"] + Line[1761.00mil 3027.00mil 1720.00mil 3068.00mil 6.00mil 12.00mil "clearline"] + Line[1720.00mil 3068.00mil 1357.00mil 3068.00mil 6.00mil 12.00mil "clearline"] + Line[1357.00mil 3068.00mil 1305.00mil 3120.00mil 6.00mil 12.00mil "clearline"] + Line[2149.00mil 2609.00mil 2120.00mil 2609.00mil 6.00mil 12.00mil "clearline"] + Line[2120.00mil 2609.00mil 1759.00mil 2970.00mil 6.00mil 12.00mil "clearline"] + Line[1759.00mil 2970.00mil 1355.00mil 2970.00mil 6.00mil 12.00mil "clearline"] + Line[1355.00mil 2970.00mil 1305.00mil 3020.00mil 6.00mil 12.00mil "clearline"] + Line[54.4241mm 2531.10mil 54.4241mm 65.8195mm 6.00mil 12.00mil "clearline"] + Line[54.4241mm 2586.00mil 54.4241mm 65.8195mm 6.00mil 12.00mil "clearline"] + Line[54.4241mm 65.8195mm 2137.00mil 2597.00mil 6.00mil 12.00mil "clearline"] + Line[2137.00mil 2597.00mil 2114.00mil 2597.00mil 6.00mil 12.00mil "clearline"] + Line[2114.00mil 2597.00mil 1842.00mil 2869.00mil 6.00mil 12.00mil "clearline"] + Line[1842.00mil 2869.00mil 1356.00mil 2869.00mil 6.00mil 12.00mil "clearline"] + Line[1356.00mil 2869.00mil 1305.00mil 2920.00mil 6.00mil 12.00mil "clearline"] + Line[53.9239mm 2531.10mil 53.9239mm 65.3037mm 6.00mil 12.00mil "clearline"] + Line[53.9239mm 65.3037mm 1952.00mil 2742.00mil 6.00mil 12.00mil "clearline"] + Line[1952.00mil 2742.00mil 1383.00mil 2742.00mil 6.00mil 12.00mil "clearline"] + Line[1383.00mil 2742.00mil 1305.00mil 2820.00mil 6.00mil 12.00mil "clearline"] + Line[3149.00mil 1923.00mil 3149.00mil 46.3390mm 10.00mil 20.00mil "clearline"] + Line[3149.00mil 46.3390mm 79.9996mm 46.3240mm 10.00mil 20.00mil "clearline"] + Line[74.3951mm 51.7159mm 75.0809mm 51.7159mm 10.00mil 12.00mil "clearline"] + Line[75.0809mm 51.7159mm 3069.00mil 1923.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 52.7116mm 81.9216mm 52.7116mm 10.00mil 12.00mil "clearline"] + Line[81.9216mm 52.7116mm 3305.00mil 2155.00mil 10.00mil 12.00mil "clearline"] + Line[3305.00mil 2155.00mil 3495.00mil 2155.00mil 10.00mil 12.00mil "clearline"] + Line[3495.00mil 2155.00mil 3500.00mil 2150.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 53.2115mm 81.4055mm 53.2115mm 10.00mil 12.00mil "clearline"] + Line[81.4055mm 53.2115mm 3360.00mil 2250.00mil 10.00mil 12.00mil "clearline"] + Line[3360.00mil 2250.00mil 3500.00mil 2250.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 53.7116mm 79.8736mm 53.7116mm 10.00mil 12.00mil "clearline"] + Line[79.8736mm 53.7116mm 3380.00mil 2350.00mil 10.00mil 12.00mil "clearline"] + Line[3380.00mil 2350.00mil 3500.00mil 2350.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 54.2115mm 78.9765mm 54.2115mm 10.00mil 12.00mil "clearline"] + Line[78.9765mm 54.2115mm 3425.00mil 2450.00mil 10.00mil 12.00mil "clearline"] + Line[3425.00mil 2450.00mil 3500.00mil 2450.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 2154.00mil 2744.00mil 2154.00mil 10.00mil 12.00mil "clearline"] + Line[2744.00mil 2154.00mil 2750.00mil 2160.00mil 10.00mil 12.00mil "clearline"] + Line[68.4195mm 55.2115mm 2720.00mil 2200.00mil 10.00mil 12.00mil "clearline"] + Line[69.8340mm 2200.00mil 2750.00mil 55.8640mm 10.00mil 12.00mil "clearline"] + Line[2720.00mil 2200.00mil 2815.00mil 2200.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 56.2115mm 68.6575mm 56.2115mm 10.00mil 12.00mil "clearline"] + Line[68.6575mm 56.2115mm 2745.00mil 2255.00mil 10.00mil 12.00mil "clearline"] + Line[2745.00mil 2255.00mil 2815.00mil 2255.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 60.7116mm 81.2856mm 60.7116mm 10.00mil 12.00mil "clearline"] + Line[81.2856mm 60.7116mm 3360.00mil 2550.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 2409.90mil 3159.90mil 2409.90mil 10.00mil 12.00mil "clearline"] + Line[3159.90mil 2409.90mil 3400.00mil 2650.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 61.7116mm 78.2216mm 61.7116mm 10.00mil 12.00mil "clearline"] + Line[78.2216mm 61.7116mm 3400.00mil 2750.00mil 10.00mil 12.00mil "clearline"] + Line[67.5025mm 62.2115mm 76.1815mm 62.2115mm 10.00mil 12.00mil "clearline"] + Line[76.1815mm 62.2115mm 3400.00mil 2850.00mil 10.00mil 12.00mil "clearline"] + Line[67.0860mm 84.6402mm 67.0860mm 69.7530mm 10.00mil 12.00mil "clearline"] + Line[67.0860mm 69.7530mm 64.9209mm 67.5879mm 10.00mil 12.00mil "clearline"] + Line[66.9859mm 94.8116mm 66.9859mm 87.5599mm 10.00mil 12.00mil "clearline"] + Line[66.9859mm 87.5599mm 2590.00mil 3400.00mil 10.00mil 12.00mil "clearline"] + Line[2590.00mil 3400.00mil 2590.00mil 70.9610mm 10.00mil 12.00mil "clearline"] + Line[2590.00mil 70.9610mm 64.4210mm 2740.00mil 10.00mil 12.00mil "clearline"] + Line[64.4210mm 64.4858mm 64.4210mm 2740.00mil 10.00mil 12.00mil "clearline"] + Line[65.8581mm 3735.00mil 65.8581mm 88.5911mm 10.00mil 12.00mil "clearline"] + Line[65.8581mm 88.5911mm 2545.00mil 3440.00mil 10.00mil 12.00mil "clearline"] + Line[2545.00mil 3440.00mil 2545.00mil 72.3102mm 10.00mil 12.00mil "clearline"] + Line[2545.00mil 72.3102mm 63.9209mm 71.5881mm 10.00mil 12.00mil "clearline"] + Line[63.9209mm 68.4929mm 63.9209mm 71.5881mm 10.00mil 12.00mil "clearline"] + Line[61.4860mm 95.2116mm 61.4860mm 89.0450mm 10.00mil 12.00mil "clearline"] + Line[62.9239mm 2531.10mil 62.9239mm 71.4980mm 10.00mil 12.00mil "clearline"] + Line[62.9239mm 71.4421mm 62.9239mm 73.8551mm 10.00mil 12.00mil "clearline"] + Line[62.9239mm 73.8551mm 2435.00mil 2950.00mil 10.00mil 12.00mil "clearline"] + Line[61.4860mm 3505.00mil 2470.00mil 87.7750mm 10.00mil 12.00mil "clearline"] + Line[2470.00mil 87.7750mm 2470.00mil 3455.00mil 10.00mil 12.00mil "clearline"] + Line[62.7560mm 3455.00mil 62.7560mm 83.5840mm 10.00mil 12.00mil "clearline"] + Line[2465.00mil 2945.00mil 2465.00mil 2920.00mil 10.00mil 12.00mil "clearline"] + Line[2515.00mil 3050.00mil 63.8500mm 3050.00mil 10.00mil 12.00mil "clearline"] + Line[63.8500mm 3050.00mil 63.4210mm 77.0410mm 10.00mil 12.00mil "clearline"] + Line[2560.00mil 3150.00mil 2545.00mil 3135.00mil 10.00mil 12.00mil "clearline"] + Line[2610.00mil 3250.00mil 2605.00mil 3250.00mil 10.00mil 12.00mil "clearline"] + Line[2605.00mil 3250.00mil 2590.00mil 3235.00mil 10.00mil 12.00mil "clearline"] + Line[535.30mil 3217.20mil 537.50mil 3215.00mil 25.00mil 20.00mil "clearline"] + Line[667.06mil 3272.20mil 667.06mil 2982.20mil 25.00mil 20.00mil ""] + Line[667.06mil 2982.20mil 937.06mil 2982.20mil 25.00mil 20.00mil ""] + Line[937.06mil 2982.20mil 937.06mil 3262.20mil 25.00mil 20.00mil ""] + Line[937.06mil 3262.20mil 667.06mil 3262.20mil 25.00mil 20.00mil ""] + Line[537.06mil 3352.20mil 537.06mil 3217.20mil 25.00mil 20.00mil "clearline"] + Line[622.06mil 2892.20mil 627.06mil 2887.20mil 25.00mil 20.00mil "clearline"] + Line[537.50mil 3035.00mil 537.50mil 75.6097mm 25.00mil 20.00mil "clearline"] + Line[537.50mil 75.6097mm 624.56mil 2889.70mil 25.00mil 20.00mil "clearline"] + Line[624.56mil 2889.70mil 719.56mil 2889.70mil 25.00mil 20.00mil "clearline"] + Line[2560.00mil 3830.00mil 2550.00mil 3820.00mil 25.00mil 20.00mil "clearline"] + Line[2550.00mil 3820.00mil 2550.00mil 3757.00mil 25.00mil 20.00mil "clearline"] + Line[23.9580mm 45.9710mm 23.9580mm 53.0830mm 25.00mil 20.00mil ""] + Line[16.8460mm 45.9710mm 23.9580mm 45.9710mm 25.00mil 20.00mil ""] + Line[16.8460mm 45.9710mm 16.8460mm 53.0830mm 25.00mil 20.00mil ""] + Line[16.8460mm 53.0830mm 23.9580mm 53.0830mm 25.00mil 20.00mil ""] + Line[17.3540mm 55.4960mm 19.7670mm 55.4960mm 25.00mil 20.00mil "clearline"] + Line[17.3540mm 55.4960mm 17.2270mm 55.3690mm 25.00mil 20.00mil "clearline"] + Line[15.0680mm 55.3690mm 17.2270mm 55.3690mm 25.00mil 20.00mil "clearline"] + Line[15.0680mm 55.3690mm 14.9410mm 55.4960mm 25.00mil 20.00mil "clearline"] + Line[12.9090mm 51.9400mm 12.9090mm 55.4960mm 25.00mil 20.00mil "clearline"] + Line[12.9090mm 51.9400mm 12.7820mm 51.8130mm 25.00mil 20.00mil "clearline"] + Line[1640.00mil 3600.00mil 1200.00mil 3600.00mil 40.00mil 20.00mil "clearline"] + Line[3170.00mil 1570.00mil 3170.00mil 1640.00mil 10.00mil 12.00mil "clearline"] + Line[3170.00mil 1640.00mil 3070.00mil 1740.00mil 10.00mil 12.00mil "clearline"] + Line[3070.00mil 1740.00mil 3070.00mil 46.0088mm 10.00mil 12.00mil "clearline"] + Line[3070.00mil 46.0088mm 77.9422mm 46.0446mm 10.00mil 12.00mil "clearline"] + Line[2560.00mil 3830.00mil 2730.00mil 3830.00mil 25.00mil 20.00mil "clearline"] + Line[2730.00mil 3830.00mil 2770.00mil 3790.00mil 25.00mil 20.00mil "clearline"] + Line[2770.00mil 3600.00mil 2770.00mil 3780.00mil 40.00mil 20.00mil "clearline"] + Line[74.2165mm 95.2157mm 70.5777mm 95.2157mm 25.00mil 20.00mil "clearline"] + Line[70.5777mm 95.2157mm 2770.00mil 3740.00mil 25.00mil 20.00mil "clearline"] + Line[67.5025mm 52.2115mm 82.8947mm 52.2115mm 10.00mil 12.00mil "clearline"] + Line[82.8947mm 52.2115mm 83.6712mm 2025.00mil 10.00mil 12.00mil "clearline"] + Line[3365.00mil 2025.00mil 3365.00mil 1995.00mil 10.00mil 12.00mil "clearline"] + Line[3365.00mil 1995.00mil 3340.00mil 1970.00mil 10.00mil 12.00mil "clearline"] + Line[83.5175mm 48.8165mm 83.5175mm 49.7355mm 10.00mil 12.00mil "clearline"] + Line[83.5175mm 49.7355mm 3300.00mil 1970.00mil 10.00mil 12.00mil "clearline"] + Line[3300.00mil 1970.00mil 3340.00mil 1970.00mil 10.00mil 12.00mil "clearline"] + Line[2505.00mil 410.00mil 2505.00mil 415.00mil 10.00mil 12.00mil "clearline"] + Line[2480.00mil 325.00mil 1165.00mil 325.00mil 40.00mil 20.00mil "clearline"] + Line[1165.00mil 325.00mil 1110.00mil 380.00mil 40.00mil 20.00mil "clearline"] + Line[1110.00mil 685.00mil 1110.00mil 380.00mil 40.00mil 20.00mil "clearline"] + Line[1110.00mil 380.00mil 1115.00mil 375.00mil 40.00mil 20.00mil "clearline"] + Line[925.00mil 1140.00mil 1025.00mil 1140.00mil 40.00mil 20.00mil "clearline"] + Line[1025.00mil 1140.00mil 1110.00mil 1055.00mil 40.00mil 20.00mil "clearline"] + Line[1110.00mil 1055.00mil 1110.00mil 610.00mil 40.00mil 20.00mil "clearline"] + Line[295.00mil 1430.00mil 295.00mil 2000.00mil 40.00mil 20.00mil "clearline"] + Line[295.00mil 2000.00mil 335.00mil 2040.00mil 40.00mil 20.00mil "clearline"] + Line[295.00mil 1435.00mil 295.00mil 1430.00mil 40.00mil 20.00mil "clearline"] + Line[295.00mil 1430.00mil 400.00mil 1325.00mil 40.00mil 20.00mil "clearline"] + Line[400.00mil 1325.00mil 990.00mil 1325.00mil 40.00mil 20.00mil "clearline"] + Line[990.00mil 1325.00mil 1040.00mil 1275.00mil 40.00mil 20.00mil "clearline"] + Line[1040.00mil 1275.00mil 1040.00mil 1125.00mil 40.00mil 20.00mil "clearline"] + Line[1040.00mil 1125.00mil 1045.00mil 1120.00mil 40.00mil 20.00mil "clearline"] + Line[340.00mil 2045.00mil 500.00mil 2045.00mil 25.00mil 20.00mil "clearline"] + Line[500.00mil 2045.00mil 504.18mil 51.8368mm 25.00mil 20.00mil "clearline"] + Line[190.00mil 28.9380mm 190.00mil 1145.00mil 40.00mil 20.00mil "clearline"] + Line[190.00mil 1145.00mil 285.00mil 1240.00mil 40.00mil 20.00mil "clearline"] + Line[285.00mil 1240.00mil 640.00mil 1240.00mil 40.00mil 20.00mil "clearline"] + Line[220.00mil 510.00mil 210.00mil 510.00mil 40.00mil 20.00mil "clearline"] + Line[210.00mil 510.00mil 145.00mil 575.00mil 40.00mil 20.00mil "clearline"] + Line[145.00mil 575.00mil 145.00mil 673.00mil 40.00mil 20.00mil "clearline"] + Line[145.00mil 673.00mil 146.00mil 674.00mil 40.00mil 20.00mil "clearline"] + Line[190.00mil 970.00mil 190.00mil 838.00mil 40.00mil 20.00mil "clearline"] + Line[190.00mil 838.00mil 146.00mil 794.00mil 40.00mil 20.00mil "clearline"] + Line[450.00mil 950.00mil 205.00mil 950.00mil 40.00mil 20.00mil "clearline"] + Line[205.00mil 950.00mil 190.00mil 965.00mil 40.00mil 20.00mil "clearline"] + Line[146.00mil 674.00mil 374.00mil 674.00mil 40.00mil 20.00mil "clearline"] + Line[374.00mil 674.00mil 450.00mil 750.00mil 40.00mil 20.00mil "clearline"] + Line[925.00mil 24.6560mm 17.6350mm 24.6560mm 40.00mil 20.00mil "clearline"] + Line[17.6350mm 24.6560mm 615.00mil 1050.00mil 40.00mil 20.00mil "clearline"] + Line[615.00mil 1050.00mil 450.00mil 1050.00mil 40.00mil 20.00mil "clearline"] + Line[3730.00mil 2520.00mil 3730.00mil 1990.00mil 40.00mil 20.00mil "clearline"] + Line[3730.00mil 1990.00mil 3690.00mil 1950.00mil 40.00mil 20.00mil "clearline"] + Line[3690.00mil 1950.00mil 3600.00mil 1950.00mil 40.00mil 20.00mil "clearline"] + Line[59.4210mm 1900.00mil 59.4210mm 46.4970mm 10.00mil 20.00mil "clearline"] + Line[68.4195mm 55.2115mm 64.2955mm 55.2115mm 10.00mil 12.00mil "clearline"] + Line[64.2955mm 55.2115mm 2530.00mil 2175.00mil 10.00mil 12.00mil "clearline"] + Line[2665.00mil 2154.00mil 2606.00mil 2154.00mil 10.00mil 12.00mil ""] + Line[51.3456mm 60.7113mm 50.1703mm 60.7113mm 10.00mil 12.00mil ""] + Line[50.1703mm 60.7113mm 1975.00mil 2390.00mil 10.00mil 12.00mil ""] + Line[41.0535mm 61.0385mm 43.0299mm 61.0385mm 6.00mil 12.00mil ""] + Line[43.0299mm 61.0385mm 1720.00mil 2429.00mil 6.00mil 12.00mil ""] + Line[1720.00mil 2429.00mil 1853.00mil 2429.00mil 6.00mil 12.00mil ""] + Line[3495.00mil 2945.00mil 3390.00mil 2840.00mil 10.00mil 12.00mil "clearline"] + Line[3500.00mil 2850.00mil 3385.00mil 2735.00mil 10.00mil 12.00mil "clearline"] + Line[3500.00mil 2750.00mil 3390.00mil 2640.00mil 10.00mil 12.00mil "clearline"] + Line[3500.00mil 2650.00mil 3460.00mil 2650.00mil 10.00mil 12.00mil ""] + Line[3460.00mil 2650.00mil 3360.00mil 2550.00mil 10.00mil 12.00mil "clearline"] + Line[3600.00mil 2650.00mil 3700.00mil 2650.00mil 40.00mil 20.00mil "clearline"] + Line[3700.00mil 2650.00mil 3730.00mil 2620.00mil 40.00mil 20.00mil "clearline"] + Line[3730.00mil 2620.00mil 3730.00mil 2470.00mil 40.00mil 20.00mil "clearline"] + Line[3500.00mil 3450.00mil 2758.90mil 3450.00mil 10.00mil 12.00mil "clearline"] + Line[2758.90mil 3450.00mil 67.0860mm 84.6402mm 10.00mil 12.00mil "clearline"] + Line[62.5861mm 95.4118mm 62.5861mm 97.4847mm 25.00mil 20.00mil ""] + Line[62.5861mm 97.4847mm 2464.00mil 3838.00mil 25.00mil 20.00mil ""] + Line[72.8861mm 98.8903mm 72.8861mm 97.2939mm 25.00mil 20.00mil ""] + Line[72.8861mm 97.2939mm 2871.00mil 3829.00mil 25.00mil 20.00mil ""] + Line[75.2000mm 3749.00mil 2988.00mil 3749.00mil 25.00mil 20.00mil ""] + Line[2988.00mil 3749.00mil 2991.00mil 3746.00mil 25.00mil 20.00mil ""] + Line[50.8871mm 95.7499mm 50.8871mm 93.7659mm 10.00mil 12.00mil ""] + Line[50.8871mm 93.7659mm 2006.00mil 3689.00mil 10.00mil 12.00mil ""] + Line[628.00mil 3353.00mil 629.00mil 3352.00mil 25.00mil 20.00mil ""] + Line[1200.00mil 3600.00mil 1122.00mil 3600.00mil 40.00mil 20.00mil ""] + Line[1122.00mil 3600.00mil 1121.00mil 3599.00mil 40.00mil 20.00mil ""] + Line[62.7560mm 83.6750mm 62.7560mm 82.9490mm 10.00mil 12.00mil "clearline"] + Line[62.7560mm 82.9490mm 2435.00mil 3230.00mil 10.00mil 12.00mil "clearline"] + Line[2435.00mil 3230.00mil 2435.00mil 2950.00mil 10.00mil 12.00mil "clearline"] + Line[59.5861mm 97.2823mm 57.9123mm 97.2823mm 40.00mil 20.00mil ""] + Line[62.5861mm 94.9038mm 62.5861mm 92.4311mm 25.00mil 20.00mil ""] + Line[60.6900mm 2720.00mil 60.6900mm 68.8180mm 10.00mil 12.00mil "clearline"] + Line[60.6900mm 68.8180mm 2362.50mil 2682.50mil 10.00mil 12.00mil ""] + Line[2752.50mil 2162.50mil 2847.50mil 2162.50mil 10.00mil 12.00mil ""] + Line[2815.00mil 58.2770mm 70.6280mm 58.2770mm 10.00mil 12.00mil ""] + Line[2665.00mil 57.7159mm 66.2249mm 57.7159mm 10.00mil 12.00mil ""] + Line[67.7408mm 58.2158mm 68.7842mm 58.2158mm 10.00mil 12.00mil ""] + Line[67.5025mm 58.7116mm 66.1294mm 58.7116mm 10.00mil 12.00mil ""] + Line[2665.00mil 58.2158mm 66.0898mm 58.2158mm 10.00mil 12.00mil ""] + Line[2665.00mil 57.2158mm 65.8472mm 57.2158mm 10.00mil 12.00mil ""] + Line[60.9209mm 64.2229mm 60.9209mm 65.3659mm 10.00mil 12.00mil ""] + Line[2685.00mil 2535.00mil 2705.00mil 2555.00mil 10.00mil 12.00mil "clearline"] + Line[2705.00mil 2555.00mil 2705.00mil 2570.00mil 10.00mil 12.00mil "clearline"] + Line[2685.00mil 2535.00mil 65.5231mm 2535.00mil 10.00mil 12.00mil "clearline"] + Line[65.5231mm 2535.00mil 65.4240mm 2531.10mil 10.00mil 12.00mil "clearline"] + Line[2705.00mil 66.2780mm 2705.00mil 2640.00mil 10.00mil 12.00mil ""] + Line[3286.00mil 1735.00mil 3286.00mil 45.6900mm 10.00mil 12.00mil "clearline"] + Line[3286.00mil 45.6900mm 84.5081mm 46.7337mm 10.00mil 12.00mil "clearline"] + Line[85.2642mm 1735.00mil 3445.00mil 1735.00mil 10.00mil 12.00mil "clearline"] + Line[3445.00mil 1735.00mil 3500.00mil 1790.00mil 10.00mil 12.00mil "clearline"] + Line[3500.00mil 1790.00mil 3500.00mil 1950.00mil 10.00mil 12.00mil "clearline"] + Line[85.4987mm 48.8165mm 86.6925mm 48.8165mm 10.00mil 12.00mil ""] + Line[1160.00mil 1340.00mil 1135.00mil 1365.00mil 25.00mil 20.00mil "clearline"] + Line[1135.00mil 1365.00mil 1135.00mil 1400.00mil 25.00mil 20.00mil ""] + Line[1050.00mil 2725.00mil 1305.00mil 2725.00mil 40.00mil 20.00mil "clearline"] + Line[380.00mil 3355.00mil 454.26mil 3355.00mil 25.00mil 20.00mil "clearline"] + Line[454.26mil 3355.00mil 457.06mil 3352.20mil 25.00mil 20.00mil "clearline"] + Line[380.00mil 3215.00mil 537.50mil 3215.00mil 25.00mil 20.00mil "clearline"] + Line[1946.00mil 3222.00mil 2267.00mil 2901.00mil 10.00mil 12.00mil "clearline"] + Line[2267.00mil 2901.00mil 2267.00mil 2895.00mil 10.00mil 12.00mil "clearline"] + Line[1946.00mil 3222.00mil 1946.00mil 3662.00mil 10.00mil 12.00mil "clearline"] + Line[1045.00mil 2720.00mil 1050.00mil 2725.00mil 25.00mil 20.00mil "clearline"] + Line[450.00mil 1720.00mil 530.00mil 1720.00mil 25.00mil 20.00mil "clearline"] + Line[525.00mil 1720.00mil 525.00mil 1847.50mil 25.00mil 20.00mil "clearline"] + Line[525.00mil 1847.50mil 537.50mil 1860.00mil 25.00mil 20.00mil "clearline"] + Line[455.00mil 1720.00mil 455.00mil 1630.00mil 25.00mil 20.00mil "clearline"] + Line[455.00mil 1630.00mil 450.00mil 1625.00mil 25.00mil 20.00mil "clearline"] + Line[370.00mil 1625.00mil 370.00mil 1800.00mil 25.00mil 20.00mil "clearline"] + Line[370.00mil 1800.00mil 385.00mil 1815.00mil 25.00mil 20.00mil "clearline"] + Line[610.00mil 1720.00mil 685.00mil 1720.00mil 25.00mil 20.00mil ""] + Line[685.00mil 1720.00mil 690.00mil 1715.00mil 25.00mil 20.00mil ""] + Line[2146.00mil 2669.00mil 1809.00mil 3006.00mil 6.00mil 12.00mil "clearline"] + Line[2411.00mil 1187.00mil 2411.00mil 27.2110mm 10.00mil 12.00mil "clearline"] + Line[2411.00mil 27.2110mm 61.2229mm 27.1945mm 10.00mil 12.00mil "clearline"] + Line[61.2229mm 26.1945mm 61.2229mm 995.35mil 10.00mil 12.00mil ""] + Line[61.2229mm 995.35mil 2410.00mil 995.00mil 10.00mil 12.00mil ""] + Line[1335.00mil 26.1780mm 1335.00mil 985.00mil 10.00mil 12.00mil ""] + Line[1335.00mil 1070.00mil 1335.00mil 1186.00mil 10.00mil 12.00mil "clearline"] + Line[125.00mil 1315.00mil 60.00mil 1315.00mil 25.00mil 20.00mil ""] + Line[245.00mil 1315.00mil 245.00mil 1200.00mil 25.00mil 20.00mil "clearline"] + Line[2770.00mil 3600.00mil 74.5302mm 3600.00mil 25.00mil 20.00mil "clearline"] + Line[74.5302mm 3600.00mil 2937.20mil 91.5147mm 25.00mil 20.00mil "clearline"] + Line[3017.20mil 91.5147mm 78.4113mm 91.5147mm 25.00mil 20.00mil ""] + Line[78.4113mm 91.5147mm 3090.00mil 3600.00mil 25.00mil 20.00mil ""] + Line[905.00mil 2185.00mil 1005.00mil 2185.00mil 25.00mil 20.00mil ""] + Line[845.00mil 2890.00mil 925.00mil 2890.00mil 25.00mil 20.00mil ""] + Line[1885.00mil 2685.00mil 1940.00mil 2685.00mil 25.00mil 20.00mil "clearline"] + Line[1940.00mil 2685.00mil 1970.00mil 2655.00mil 25.00mil 20.00mil "clearline"] + Line[1805.00mil 2685.00mil 1740.00mil 2685.00mil 25.00mil 20.00mil ""] + Line[1312.00mil 1188.00mil 1300.00mil 1200.00mil 25.00mil 20.00mil "clearline"] + Line[64.7860mm 94.9038mm 64.7860mm 92.8022mm 25.00mil 20.00mil "clearline"] + Line[64.7860mm 92.8022mm 2548.00mil 3651.00mil 25.00mil 20.00mil "clearline"] + Line[1225.00mil 1048.00mil 1117.00mil 1048.00mil 25.00mil 20.00mil "clearline"] + Line[1117.00mil 1048.00mil 1113.00mil 1052.00mil 25.00mil 20.00mil "clearline"] + Line[1225.00mil 928.00mil 1225.00mil 857.00mil 25.00mil 20.00mil ""] + Line[2311.00mil 1187.00mil 2150.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[2211.00mil 1187.00mil 2050.00mil 566.00mil 10.00mil 12.00mil "clearline"] + Line[2111.00mil 1187.00mil 1950.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[2011.00mil 1187.00mil 46.9866mm 564.00mil 10.00mil 12.00mil "clearline"] + Line[1911.00mil 1187.00mil 1755.00mil 565.00mil 10.00mil 12.00mil "clearline"] + Line[1811.00mil 1187.00mil 42.0338mm 564.00mil 10.00mil 12.00mil "clearline"] + Line[1711.00mil 1187.00mil 39.4938mm 564.00mil 10.00mil 12.00mil "clearline"] + Line[1611.00mil 1187.00mil 36.9533mm 14.3219mm 10.00mil 12.00mil "clearline"] + Line[1313.00mil 1187.00mil 1150.00mil 1350.00mil 25.00mil 20.00mil "clearline"] + Line[2311.00mil 1187.00mil 2218.00mil 1333.00mil 6.00mil 12.00mil "clearline"] + Line[2143.00mil 1420.00mil 2143.00mil 1333.00mil 6.00mil 12.00mil "clearline"] + Line[2143.00mil 1333.00mil 2211.00mil 1187.00mil 6.00mil 12.00mil "clearline"] + Line[2111.00mil 1187.00mil 2119.00mil 1335.00mil 6.00mil 12.00mil "clearline"] + Line[2011.00mil 1187.00mil 2011.00mil 1190.00mil 6.00mil 12.00mil "clearline"] + Line[2011.00mil 1190.00mil 1842.00mil 1359.00mil 6.00mil 12.00mil "clearline"] + Line[1910.50mil 1185.00mil 1817.00mil 1354.00mil 6.00mil 12.00mil "clearline"] + Line[1742.00mil 1483.00mil 1742.00mil 1346.00mil 6.00mil 12.00mil "clearline"] + Line[46.0058mm 1188.00mil 1742.00mil 1346.00mil 6.00mil 12.00mil "clearline"] + Line[1711.20mil 1187.80mil 1717.00mil 1347.00mil 6.00mil 12.00mil "clearline"] + Line[1611.00mil 1187.00mil 1643.00mil 1354.00mil 6.00mil 12.00mil "clearline"] + Line[1411.00mil 1187.00mil 1313.00mil 1187.00mil 25.00mil 20.00mil "clearline"] + Line[1511.00mil 1187.00mil 34.2864mm 564.00mil 10.00mil 12.00mil "clearline"] + Line[1511.00mil 1187.00mil 1617.00mil 1359.00mil 6.00mil 12.00mil "clearline"] + Line[2502.00mil 407.00mil 2502.00mil 347.00mil 40.00mil 20.00mil "clearline"] + Line[2502.00mil 347.00mil 2480.00mil 325.00mil 40.00mil 20.00mil "clearline"] + Polygon("clearpoly,fullpoly") + ( + [60.00mil 1450.00mil] [20.00mil 1450.00mil] [20.00mil 1800.00mil] [60.00mil 1800.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [60.00mil 1800.00mil] [20.00mil 1800.00mil] [20.00mil 1560.00mil] [60.00mil 1560.00mil] + ) + Polygon("clearpoly,lock,fullpoly") + ( + [3650.00mil 1450.00mil] [3900.00mil 1450.00mil] [3900.00mil 1800.00mil] [3650.00mil 1800.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [50.00mil 3200.00mil] [250.00mil 3200.00mil] [250.00mil 3550.00mil] [50.00mil 3550.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [60.00mil 3550.00mil] [20.00mil 3550.00mil] [20.00mil 3200.00mil] [60.00mil 3200.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3900.00mil 3200.00mil] [3650.00mil 3200.00mil] [3650.00mil 3550.00mil] [3900.00mil 3550.00mil] + ) + Polygon("clearpoly") + ( + [1230.00mil 2575.00mil] [51.1510mm 2575.00mil] [51.1510mm 52.2158mm] [1230.00mil 52.2158mm] + ) + Polygon("clearpoly") + ( + [1680.00mil 1915.00mil] [2050.00mil 1915.00mil] [2050.00mil 2285.00mil] [1680.00mil 2285.00mil] + ) + Polygon("clearpoly") + ( + [1970.00mil 2595.00mil] [2160.00mil 2595.00mil] [2160.00mil 2445.00mil] [1970.00mil 2445.00mil] + ) + Polygon("clearpoly") + ( + [2110.00mil 1295.00mil] [1850.00mil 1295.00mil] [1850.00mil 1995.00mil] [2110.00mil 1995.00mil] + ) + Polygon("clearpoly") + ( + [2690.00mil 1705.00mil] [2311.00mil 1705.00mil] [2311.00mil 1187.00mil] [2690.00mil 1187.00mil] + ) + Polygon("clearpoly") + ( + [59.4210mm 47.9458mm] [2460.00mil 47.9458mm] [2460.00mil 1645.00mil] [59.4210mm 1645.00mil] + ) + Polygon("clearpoly") + ( + [2310.00mil 1355.00mil] [2511.00mil 1355.00mil] [2511.00mil 1187.00mil] [2310.00mil 1187.00mil] + ) + Polygon("clearpoly") + ( + [2460.00mil 1215.00mil] [2290.00mil 1215.00mil] [2290.00mil 1365.00mil] [2460.00mil 1365.00mil] + ) + Polygon("clearpoly") + ( + [2730.00mil 1515.00mil] [2800.00mil 1515.00mil] [2800.00mil 1125.00mil] [2730.00mil 1125.00mil] + ) + Polygon("clearpoly") + ( + [1630.00mil 1575.00mil] [1730.00mil 1575.00mil] [1730.00mil 1285.00mil] [1630.00mil 1285.00mil] + ) + Polygon("clearpoly") + ( + [1690.00mil 1575.00mil] [1840.00mil 1575.00mil] [1840.00mil 1275.00mil] [1690.00mil 1275.00mil] + ) + Polygon("clearpoly") + ( + [2110.00mil 1575.00mil] [2190.00mil 1575.00mil] [2190.00mil 1285.00mil] [2110.00mil 1285.00mil] + ) + Polygon("clearpoly") + ( + [2190.00mil 1555.00mil] [2290.00mil 1555.00mil] [2290.00mil 1315.00mil] [2190.00mil 1315.00mil] + ) + Polygon("clearpoly") + ( + [2240.00mil 1495.00mil] [2160.00mil 1495.00mil] [2160.00mil 1605.00mil] [2240.00mil 1605.00mil] + ) + Polygon("clearpoly") + ( + [2243.00mil 1625.00mil] [2360.00mil 1625.00mil] [2360.00mil 1345.00mil] [2243.00mil 1345.00mil] + ) + Polygon("clearpoly") + ( + [2170.00mil 1345.00mil] [2230.00mil 1345.00mil] [2230.00mil 1375.00mil] [2170.00mil 1375.00mil] + ) + Polygon("clearpoly") + ( + [1255.00mil 2135.00mil] [1885.00mil 2135.00mil] [1885.00mil 2370.00mil] [1255.00mil 2370.00mil] + ) + Polygon("clearpoly") + ( + [1920.00mil 2340.00mil] [1406.00mil 2340.00mil] [1406.00mil 1978.00mil] [1920.00mil 1978.00mil] + ) + Polygon("clearpoly") + ( + [1880.00mil 2345.00mil] [1585.00mil 2345.00mil] [1585.00mil 2120.00mil] [1880.00mil 2120.00mil] + ) + Polygon("clearpoly") + ( + [1775.00mil 2330.00mil] [1406.00mil 2330.00mil] [1406.00mil 1978.00mil] [1775.00mil 1978.00mil] + ) + Polygon("clearpoly") + ( + [1430.00mil 2015.00mil] [45.1175mm 2015.00mil] [45.1175mm 59.7685mm] [1430.00mil 59.7685mm] + ) + Polygon("clearpoly") + ( + [1695.00mil 2330.00mil] [51.1510mm 2330.00mil] [51.1510mm 61.2158mm] [1695.00mil 61.2158mm] + ) + Polygon("clearpoly") + ( + [1665.00mil 2385.00mil] [51.1510mm 2385.00mil] [51.1510mm 62.2158mm] [1665.00mil 62.2158mm] + ) + Polygon("clearpoly") + ( + [1895.00mil 2355.00mil] [51.1510mm 2355.00mil] [51.1510mm 60.7157mm] [1895.00mil 60.7157mm] + ) + Polygon("clearpoly") + ( + [1660.00mil 2425.00mil] [1975.00mil 2425.00mil] [1975.00mil 2505.00mil] [1660.00mil 2505.00mil] + ) + Polygon("clearpoly") + ( + [1665.00mil 2475.00mil] [1840.00mil 2475.00mil] [1840.00mil 2540.00mil] [1665.00mil 2540.00mil] + ) + Polygon("clearpoly") + ( + [1555.00mil 2580.00mil] [45.1175mm 2580.00mil] [45.1175mm 63.5785mm] [1555.00mil 63.5785mm] + ) + Polygon("clearpoly") + ( + [2909.00mil 1578.00mil] [3202.00mil 1578.00mil] [3202.00mil 1276.00mil] + ) + Polygon("clearpoly") + ( + [2951.00mil 1758.00mil] [3187.00mil 1758.00mil] [3187.00mil 1497.00mil] [2951.00mil 1497.00mil] + ) + Polygon("clearpoly") + ( + [3135.00mil 1577.00mil] [2948.00mil 1577.00mil] [2948.00mil 1758.00mil] [3135.00mil 1758.00mil] + ) + Polygon("clearpoly") + ( + [2960.00mil 1760.00mil] [3135.00mil 1585.00mil] [3025.00mil 1585.00mil] [2990.00mil 1620.00mil] [2990.00mil 1685.00mil] + [2960.00mil 1685.00mil] + ) + Polygon("clearpoly") + ( + [2955.00mil 1770.00mil] [3060.00mil 1665.00mil] [2955.00mil 1665.00mil] + ) + Polygon("clearpoly") + ( + [3130.00mil 1585.00mil] [3065.00mil 1585.00mil] [3065.00mil 1650.00mil] + ) + Polygon("clearpoly") + ( + [3070.00mil 1585.00mil] [3020.00mil 1585.00mil] [2985.00mil 1620.00mil] [2985.00mil 1640.00mil] [3025.00mil 1640.00mil] + [3070.00mil 1595.00mil] + ) + Polygon("clearpoly") + ( + [3140.00mil 1275.00mil] [3280.00mil 1275.00mil] [3280.00mil 1545.00mil] [3140.00mil 1545.00mil] + ) + Polygon("clearpoly") + ( + [3311.00mil 1187.00mil] [3311.00mil 1254.00mil] [3220.00mil 1345.00mil] [2940.00mil 1345.00mil] [2905.00mil 1380.00mil] + [2905.00mil 1335.00mil] [2905.00mil 1325.00mil] [3130.00mil 1325.00mil] [3270.00mil 1185.00mil] [3311.00mil 1185.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1730.00mil 1340.00mil] [1645.00mil 1340.00mil] [1645.00mil 1135.00mil] [1730.00mil 1135.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1915.00mil 1305.00mil] [2105.00mil 1305.00mil] [2105.00mil 1130.00mil] [1915.00mil 1130.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2145.00mil 1350.00mil] [2030.00mil 1350.00mil] [2030.00mil 1150.00mil] [2145.00mil 1150.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2133.50mil 1324.50mil] [2290.00mil 1324.50mil] [2290.00mil 1130.00mil] [2133.50mil 1130.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2170.00mil 1310.00mil] [2250.00mil 1310.00mil] [2250.00mil 1370.00mil] [2170.00mil 1370.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2220.00mil 1370.00mil] [2315.00mil 1370.00mil] [2315.00mil 1215.00mil] [2220.00mil 1215.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2265.00mil 1350.00mil] [2350.00mil 1350.00mil] [2350.00mil 1285.00mil] [2265.00mil 1285.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2611.00mil 1187.00mil] [2495.00mil 1187.00mil] [2495.00mil 1295.00mil] [2611.00mil 1295.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2660.00mil 1200.00mil] [2590.00mil 1200.00mil] [2590.00mil 1315.00mil] [2660.00mil 1315.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3010.00mil 1220.00mil] [2890.00mil 1220.00mil] [2890.00mil 1285.00mil] [3010.00mil 1285.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3115.00mil 1225.00mil] [2795.00mil 1225.00mil] [2795.00mil 1315.00mil] [3115.00mil 1315.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3215.00mil 1220.00mil] [2785.00mil 1220.00mil] [2785.00mil 1370.00mil] [3215.00mil 1370.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2885.00mil 1350.00mil] [2795.00mil 1350.00mil] [2795.00mil 1625.00mil] [2885.00mil 1625.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1930.00mil 1130.00mil] [1990.00mil 1130.00mil] [1990.00mil 1161.00mil] [1930.00mil 1161.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1997.00mil 1133.00mil] [1986.00mil 1133.00mil] [1986.00mil 1141.00mil] [1997.00mil 1141.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1728.00mil 1134.00mil] [1788.00mil 1134.00mil] [1788.00mil 1166.00mil] [1728.00mil 1166.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [68.5150mm 1315.00mil] [2719.00mil 1315.00mil] [2719.00mil 1511.00mil] [68.5150mm 1511.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2670.00mil 1495.00mil] [2690.00mil 1495.00mil] [2690.00mil 1705.00mil] [2670.00mil 1705.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2640.00mil 1725.00mil] [2690.00mil 1725.00mil] [2690.00mil 1685.00mil] [2640.00mil 1685.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2700.00mil 1705.00mil] [2770.00mil 1705.00mil] [2770.00mil 1422.50mil] [2700.00mil 1422.50mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2745.00mil 1694.00mil] [2790.00mil 1694.00mil] [2790.00mil 1465.00mil] [2745.00mil 1465.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2771.00mil 1693.00mil] [2745.00mil 1693.00mil] [2745.00mil 1465.00mil] [2771.00mil 1465.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2850.00mil 1685.00mil] [2880.00mil 1685.00mil] [2880.00mil 1475.00mil] [2850.00mil 1475.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2871.00mil 1692.00mil] [2900.00mil 1692.00mil] [2900.00mil 1495.00mil] [2871.00mil 1495.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2120.00mil 1145.00mil] [2195.00mil 1145.00mil] [2195.00mil 1130.00mil] [2120.00mil 1130.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [25.00mil 3900.00mil] [1225.00mil 3900.00mil] [1225.00mil 3575.00mil] [25.00mil 3575.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [275.00mil 3600.00mil] [1225.00mil 3600.00mil] [1225.00mil 2700.00mil] [275.00mil 2700.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [300.00mil 2700.00mil] [25.00mil 2700.00mil] [25.00mil 3175.00mil] [300.00mil 3175.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [25.00mil 2675.00mil] [1150.00mil 2675.00mil] [1150.00mil 1825.00mil] [25.00mil 1825.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1150.00mil 1850.00mil] [275.00mil 1850.00mil] [275.00mil 1375.00mil] [1150.00mil 1375.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [325.00mil 1375.00mil] [25.00mil 1375.00mil] [25.00mil 1425.00mil] [325.00mil 1425.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2000.00mil 1875.00mil] [2680.00mil 1875.00mil] [2680.00mil 2555.00mil] [2000.00mil 2555.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2680.00mil 1870.00mil] [2290.00mil 1870.00mil] [2290.00mil 2560.00mil] [2680.00mil 2560.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3900.00mil 3900.00mil] [3600.00mil 3900.00mil] [3600.00mil 3575.00mil] [3900.00mil 3575.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3900.00mil 3175.00mil] [3600.00mil 3175.00mil] [3600.00mil 1825.00mil] [3900.00mil 1825.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3625.00mil 1850.00mil] [2575.00mil 1850.00mil] [2575.00mil 1300.00mil] [3625.00mil 1300.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3900.00mil 1325.00mil] [3575.00mil 1325.00mil] [3575.00mil 1425.00mil] [3900.00mil 1425.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1600.00mil 1325.00mil] [1175.00mil 1325.00mil] [1175.00mil 2675.00mil] [1600.00mil 2675.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3613.00mil 2619.00mil] [3746.00mil 2619.00mil] [3746.00mil 1925.00mil] [3613.00mil 1925.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [61.4860mm 95.2116mm] [2492.00mil 95.2116mm] [2492.00mil 2800.00mil] [61.4860mm 2800.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [63.6859mm 95.2116mm] [2662.00mil 95.2116mm] [2662.00mil 2691.00mil] [63.6859mm 2691.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2544.00mil 2799.00mil] [2486.00mil 2799.00mil] [2486.00mil 3058.00mil] [2544.00mil 3058.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [65.8861mm 95.2116mm] [2663.00mil 95.2116mm] [2663.00mil 3377.00mil] [65.8861mm 3377.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2615.00mil 3496.00mil] [2515.00mil 3496.00mil] [2515.00mil 2681.00mil] [2615.00mil 2681.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2512.00mil 2723.00mil] [2594.00mil 2723.00mil] [2594.00mil 3477.00mil] [2512.00mil 3477.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2610.00mil 3480.00mil] [2560.00mil 3480.00mil] [2560.00mil 3150.00mil] [2610.00mil 3150.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2592.00mil 3313.00mil] [2658.00mil 3313.00mil] [2658.00mil 2724.00mil] [2592.00mil 2724.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1250.00mil 3900.00mil] [2900.00mil 3900.00mil] [2900.00mil 2250.00mil] [1250.00mil 2250.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2100.00mil 1960.00mil] [1950.00mil 1960.00mil] [1950.00mil 1650.00mil] [2100.00mil 1650.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2720.00mil 1275.00mil] [3330.00mil 1275.00mil] [3330.00mil 640.00mil] [2720.00mil 640.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3625.00mil 3900.00mil] [2450.00mil 3900.00mil] [2450.00mil 1750.00mil] [3625.00mil 1750.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2980.00mil 1225.00mil] [2945.00mil 1225.00mil] [2945.00mil 1115.00mil] [2980.00mil 1115.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2970.00mil 1155.00mil] [3105.00mil 1155.00mil] [3105.00mil 1085.00mil] [2970.00mil 1085.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3050.00mil 1090.00mil] [3195.00mil 1090.00mil] [3195.00mil 990.00mil] [3050.00mil 990.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3165.00mil 1000.00mil] [3255.00mil 1000.00mil] [3255.00mil 930.00mil] [3165.00mil 930.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3235.00mil 940.00mil] [3290.00mil 940.00mil] [3290.00mil 890.00mil] [3235.00mil 890.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [995.00mil 1355.00mil] [1295.00mil 1355.00mil] [1295.00mil 1030.00mil] [995.00mil 1030.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1445.00mil 2100.00mil] [1690.00mil 2100.00mil] [1690.00mil 2325.00mil] [1445.00mil 2325.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1520.00mil 2310.00mil] [43.0299mm 2310.00mil] [43.0299mm 61.0385mm] [1520.00mil 61.0385mm] + ) + Polygon("clearpoly,fullpoly") + ( + [50.00mil 1450.00mil] [250.00mil 1450.00mil] [250.00mil 1800.00mil] [50.00mil 1800.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [25.00mil 25.00mil] [3900.00mil 25.00mil] [3900.00mil 1350.00mil] [25.00mil 1350.00mil] + ) +) +Layer(2 "solder") +( + Line[2420.00mil 3400.00mil 2640.00mil 3400.00mil 10.00mil 12.00mil "clearline"] + Line[3495.00mil 2945.00mil 3500.00mil 2950.00mil 10.00mil 12.00mil "clearline"] + Line[2350.00mil 1050.00mil 2400.00mil 1100.00mil 40.00mil 20.00mil "clearline"] + Line[2400.00mil 1100.00mil 2400.00mil 1176.00mil 40.00mil 20.00mil "clearline"] + Line[2400.00mil 1176.00mil 2411.00mil 1187.00mil 40.00mil 20.00mil "clearline"] + Line[28.9563mm 3730.00mil 28.9563mm 39.1163mm 40.00mil 20.00mil "clearline"] + Line[28.9563mm 39.1163mm 900.00mil 1300.00mil 40.00mil 20.00mil "clearline"] + Line[1580.00mil 2295.00mil 1580.00mil 2620.00mil 25.00mil 20.00mil "clearline"] + Line[1580.00mil 2620.00mil 1575.00mil 2625.00mil 25.00mil 20.00mil "clearline"] + Line[1405.00mil 2820.00mil 1405.00mil 2680.00mil 25.00mil 20.00mil "clearline"] + Line[1405.00mil 2680.00mil 1350.00mil 2625.00mil 25.00mil 20.00mil "clearline"] + Line[28.9563mm 2625.00mil 1850.00mil 2625.00mil 40.00mil 20.00mil "clearline"] + Line[1406.00mil 2478.00mil 1406.00mil 2594.00mil 25.00mil 20.00mil "clearline"] + Line[1406.00mil 2594.00mil 1362.50mil 2637.50mil 25.00mil 20.00mil "clearline"] + Line[3107.00mil 1510.00mil 3167.00mil 1570.00mil 40.00mil 20.00mil "clearline"] + Line[3107.00mil 1510.00mil 1510.00mil 1510.00mil 40.00mil 20.00mil "clearline"] + Line[1510.00mil 1510.00mil 1500.00mil 1500.00mil 40.00mil 20.00mil "clearline"] + Line[1500.00mil 1500.00mil 1100.00mil 1500.00mil 40.00mil 20.00mil "clearline"] + Line[3060.00mil 1510.00mil 3310.00mil 1510.00mil 40.00mil 20.00mil "clearline"] + Line[3310.00mil 1510.00mil 3730.00mil 1930.00mil 40.00mil 20.00mil "clearline"] + Line[3730.00mil 1930.00mil 3730.00mil 2120.00mil 40.00mil 20.00mil "clearline"] + Line[3730.00mil 2120.00mil 3700.00mil 2150.00mil 40.00mil 20.00mil "clearline"] + Line[3700.00mil 2150.00mil 3600.00mil 2150.00mil 40.00mil 20.00mil "clearline"] + Line[640.00mil 1240.00mil 840.00mil 1240.00mil 40.00mil 20.00mil "clearline"] + Line[840.00mil 1240.00mil 897.50mil 1297.50mil 40.00mil 20.00mil "clearline"] + Line[2770.00mil 3600.00mil 1640.00mil 3600.00mil 40.00mil 20.00mil "clearline"] + Line[1855.00mil 2625.00mil 1920.00mil 2625.00mil 25.00mil 20.00mil "clearline"] + Line[1920.00mil 2625.00mil 2530.00mil 2015.00mil 25.00mil 20.00mil "clearline"] + Line[2040.00mil 2575.00mil 2005.00mil 2540.00mil 25.00mil 20.00mil "clearline"] + Line[2300.00mil 2435.00mil 2110.00mil 2435.00mil 25.00mil 20.00mil "clearline"] + Line[2320.00mil 1975.00mil 2320.00mil 2225.00mil 25.00mil 20.00mil "clearline"] + Line[2130.00mil 1995.00mil 2130.00mil 2020.00mil 25.00mil 20.00mil "clearline"] + Line[2130.00mil 2020.00mil 2327.50mil 2217.50mil 25.00mil 20.00mil "clearline"] + Line[2530.00mil 2175.00mil 2370.00mil 2175.00mil 25.00mil 20.00mil "clearline"] + Line[3600.00mil 2650.00mil 3600.00mil 2665.00mil 25.00mil 20.00mil ""] + Line[3550.00mil 2700.00mil 3600.00mil 2650.00mil 25.00mil 20.00mil "clearline"] + Line[3550.00mil 2700.00mil 3420.00mil 2700.00mil 25.00mil 20.00mil "clearline"] + Line[3420.00mil 2700.00mil 2575.00mil 2700.00mil 40.00mil 20.00mil "clearline"] + Line[2575.00mil 2700.00mil 2572.50mil 2702.50mil 40.00mil 20.00mil "clearline"] + Line[2572.50mil 2702.50mil 2542.50mil 2702.50mil 40.00mil 20.00mil "clearline"] + Line[2542.50mil 2702.50mil 1645.00mil 3600.00mil 40.00mil 20.00mil "clearline"] + Line[3500.00mil 3350.00mil 3015.00mil 3350.00mil 10.00mil 12.00mil "clearline"] + Line[3015.00mil 3350.00mil 2915.00mil 3250.00mil 10.00mil 12.00mil "clearline"] + Line[2610.00mil 3250.00mil 2915.00mil 3250.00mil 10.00mil 12.00mil "clearline"] + Line[2560.00mil 3150.00mil 2990.00mil 3150.00mil 10.00mil 12.00mil "clearline"] + Line[2990.00mil 3150.00mil 3090.00mil 3250.00mil 10.00mil 12.00mil "clearline"] + Line[3090.00mil 3250.00mil 3500.00mil 3250.00mil 10.00mil 12.00mil "clearline"] + Line[2515.00mil 3050.00mil 3055.00mil 3050.00mil 10.00mil 12.00mil "clearline"] + Line[3055.00mil 3050.00mil 3155.00mil 3150.00mil 10.00mil 12.00mil "clearline"] + Line[3155.00mil 3150.00mil 3500.00mil 3150.00mil 10.00mil 12.00mil "clearline"] + Line[2465.00mil 2945.00mil 3105.00mil 2945.00mil 10.00mil 12.00mil "clearline"] + Line[3105.00mil 2945.00mil 3210.00mil 3050.00mil 10.00mil 12.00mil "clearline"] + Line[3210.00mil 3050.00mil 3500.00mil 3050.00mil 10.00mil 12.00mil "clearline"] + Line[28.9512mm 3217.20mil 28.9563mm 3217.00mil 40.00mil 20.00mil ""] + Line[2640.00mil 2535.00mil 2640.00mil 2700.00mil 25.00mil 20.00mil "clearline"] + Line[380.00mil 3215.00mil 28.9563mm 3215.00mil 40.00mil 20.00mil "clearline"] + Line[1140.00mil 2535.00mil 28.9563mm 64.3887mm 25.00mil 20.00mil "clearline"] + Line[1970.00mil 2655.00mil 1930.00mil 2615.00mil 25.00mil 20.00mil ""] + Line[2548.00mil 3651.00mil 2548.00mil 3606.00mil 25.00mil 20.00mil "clearline"] + Line[2548.00mil 3606.00mil 2542.00mil 3600.00mil 25.00mil 20.00mil "clearline"] + Line[1411.00mil 1187.00mil 1411.00mil 1100.00mil 40.00mil 20.00mil "clearline"] + Line[1411.00mil 1100.00mil 1461.00mil 1050.00mil 40.00mil 20.00mil "clearline"] + Line[1461.00mil 1050.00mil 2350.00mil 1050.00mil 40.00mil 20.00mil "clearline"] + Polygon("clearpoly,fullpoly") + ( + [25.00mil 1450.00mil] [250.00mil 1450.00mil] [250.00mil 1800.00mil] [25.00mil 1800.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3650.00mil 3550.00mil] [3900.00mil 3550.00mil] [3900.00mil 3200.00mil] [3650.00mil 3200.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [20.00mil 3550.00mil] [250.00mil 3550.00mil] [250.00mil 3200.00mil] [20.00mil 3200.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [25.00mil 25.00mil] [25.00mil 1425.00mil] [275.00mil 1425.00mil] [275.00mil 1825.00mil] [25.00mil 1825.00mil] + [25.00mil 3175.00mil] [275.00mil 3175.00mil] [275.00mil 3575.00mil] [25.00mil 3575.00mil] [25.00mil 3900.00mil] + [3900.00mil 3900.00mil] [3900.00mil 3575.00mil] [3625.00mil 3575.00mil] [3625.00mil 3175.00mil] [3900.00mil 3175.00mil] + [3900.00mil 1825.00mil] [3625.00mil 1825.00mil] [3625.00mil 1425.00mil] [3900.00mil 1425.00mil] [3900.00mil 25.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [3900.00mil 1450.00mil] [3650.00mil 1450.00mil] [3650.00mil 1800.00mil] [3900.00mil 1800.00mil] + ) +) +Layer(3 "GND+power") +( +) +Layer(4 "SCSI") +( +) +Layer(5 "outline") +( + Line[0.0000 0.0000 3930.00mil 0.0000 6.00mil 12.00mil ""] + Line[0.0000 3935.00mil 3930.00mil 3935.00mil 6.00mil 12.00mil ""] + Line[0.0000 0.0000 0.0000 3935.00mil 6.00mil 12.00mil ""] + Line[3930.00mil 0.0000 3930.00mil 3935.00mil 6.00mil 12.00mil "clearline"] +) +Layer(6 "signal2") +( + Line[1965.00mil 12.00mil 1965.00mil 53.00mil 6.00mil 12.00mil ""] + Line[3750.00mil 300.00mil 3750.00mil 190.00mil 10.00mil 12.00mil ""] +) +Layer(7 "signal3") +( +) +Layer(8 "signal4") +( +) +Layer(9 "silk") +( + Line[3910.00mil 3550.00mil 3650.00mil 3550.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 3550.00mil 3650.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 3200.00mil 3910.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[3910.00mil 1800.00mil 3650.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 1800.00mil 3650.00mil 1450.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 1450.00mil 3910.00mil 1450.00mil 10.00mil 12.00mil ""] + Line[20.00mil 1450.00mil 250.00mil 1450.00mil 10.00mil 12.00mil ""] + Line[250.00mil 1450.00mil 250.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[250.00mil 1800.00mil 20.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[20.00mil 3550.00mil 250.00mil 3550.00mil 10.00mil 12.00mil ""] + Line[250.00mil 3550.00mil 250.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[250.00mil 3200.00mil 20.00mil 3200.00mil 10.00mil 12.00mil ""] +) +Layer(10 "silk") +( + Line[3910.00mil 1450.00mil 3650.00mil 1450.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 1450.00mil 3650.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 1800.00mil 3910.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[3910.00mil 3200.00mil 3650.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[3650.00mil 3200.00mil 3650.00mil 3550.00mil 10.00mil 12.00mil ""] + Line[3910.00mil 3550.00mil 3650.00mil 3550.00mil 10.00mil 12.00mil ""] + Line[20.00mil 1450.00mil 250.00mil 1450.00mil 10.00mil 12.00mil ""] + Line[250.00mil 1450.00mil 250.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[250.00mil 1800.00mil 20.00mil 1800.00mil 10.00mil 12.00mil ""] + Line[20.00mil 3550.00mil 250.00mil 3550.00mil 10.00mil 12.00mil ""] + Line[250.00mil 3550.00mil 250.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[250.00mil 3200.00mil 20.00mil 3200.00mil 10.00mil 12.00mil ""] + Line[3070.00mil 1956.00mil 3070.00mil 1990.00mil 10.00mil 20.00mil "clearline"] + Line[3070.00mil 1890.00mil 3070.00mil 1869.00mil 10.00mil 20.00mil "clearline"] + Line[3625.00mil 1900.00mil 3835.00mil 1900.00mil 10.00mil 12.00mil "clearline"] + Line[3635.00mil 2000.00mil 3835.00mil 2000.00mil 10.00mil 12.00mil "clearline"] + Line[3645.00mil 2100.00mil 3835.00mil 2100.00mil 10.00mil 12.00mil "clearline"] + Line[3645.00mil 2500.00mil 3835.00mil 2500.00mil 10.00mil 12.00mil "clearline"] + Line[3650.00mil 2600.00mil 3830.00mil 2600.00mil 10.00mil 12.00mil ""] + Line[350.00mil 900.00mil 350.00mil 1190.00mil 10.00mil 12.00mil "clearline"] + Line[350.00mil 1190.00mil 720.00mil 1190.00mil 10.00mil 12.00mil "clearline"] + Line[720.00mil 1190.00mil 720.00mil 980.00mil 10.00mil 12.00mil "clearline"] + Line[720.00mil 980.00mil 640.00mil 900.00mil 10.00mil 12.00mil "clearline"] + Line[640.00mil 900.00mil 350.00mil 900.00mil 10.00mil 12.00mil "clearline"] + Line[3665.00mil 2215.00mil 3690.00mil 2215.00mil 10.00mil 12.00mil "clearline"] + Line[3690.00mil 2215.00mil 3690.00mil 2475.00mil 10.00mil 12.00mil "clearline"] + Line[3690.00mil 2475.00mil 3665.00mil 2475.00mil 10.00mil 12.00mil "clearline"] + Line[3665.00mil 2715.00mil 3690.00mil 2715.00mil 10.00mil 12.00mil "clearline"] + Line[3690.00mil 2715.00mil 3690.00mil 3185.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2210.00mil 3415.00mil 2470.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2470.00mil 3435.00mil 2470.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2225.00mil 3415.00mil 2120.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2120.00mil 3435.00mil 2120.00mil 10.00mil 12.00mil "clearline"] + Line[3435.00mil 2610.00mil 3415.00mil 2610.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2610.00mil 3415.00mil 2980.00mil 10.00mil 12.00mil "clearline"] + Line[3415.00mil 2980.00mil 3435.00mil 2980.00mil 10.00mil 12.00mil "clearline"] + Line[1475.00mil 2885.00mil 1500.00mil 2885.00mil 10.00mil 12.00mil "clearline"] + Line[1500.00mil 2885.00mil 1500.00mil 3555.00mil 10.00mil 12.00mil "clearline"] + Line[1500.00mil 3555.00mil 1475.00mil 3555.00mil 10.00mil 12.00mil "clearline"] + Line[1235.00mil 2775.00mil 1215.00mil 2775.00mil 10.00mil 12.00mil "clearline"] + Line[1215.00mil 2775.00mil 1215.00mil 3555.00mil 10.00mil 12.00mil "clearline"] + Line[1215.00mil 3555.00mil 1240.00mil 3555.00mil 10.00mil 12.00mil "clearline"] + Line[170.00mil 2420.00mil 170.00mil 2740.00mil 6.00mil 12.00mil "clearline"] + Line[170.00mil 2740.00mil 1000.00mil 2740.00mil 6.00mil 12.00mil "clearline"] + Line[1000.00mil 2740.00mil 1000.00mil 2420.00mil 6.00mil 12.00mil "clearline"] + Line[1000.00mil 2420.00mil 170.00mil 2420.00mil 6.00mil 12.00mil "clearline"] + Text[1695.00mil 2155.00mil 0 100 "JTAG/SWD" "clearline"] + Text[1160.00mil 2135.00mil 3 100 "ARM JTAG" "clearline"] + Text[1700.00mil 2095.00mil 0 100 "CORTEX" "clearline"] + Text[1473.00mil 1100.00mil 0 120 "1" "clearline"] + Text[3675.00mil 1920.00mil 0 100 "LED" "clearline"] + Text[3670.00mil 2020.00mil 0 100 "Blank" "clearline"] + Text[3675.00mil 2625.00mil 0 100 "+3.3V" "clearline"] + Text[3675.00mil 2120.00mil 0 100 "+5V" "clearline"] + Text[520.00mil 660.00mil 0 100 "5V" "clearline"] + Text[520.00mil 810.00mil 0 100 "GND" "clearline"] + Text[450.00mil 1120.00mil 0 100 "TERMPWR" "clearline"] + Text[3670.00mil 2520.00mil 0 100 "Blank" "clearline"] + Text[3705.00mil 2320.00mil 0 100 "GND" "clearline"] + Text[3710.00mil 2995.00mil 0 100 "GND" "clearline"] + Text[3425.00mil 2125.00mil 0 100 "1" "clearline"] + Text[3425.00mil 2625.00mil 0 100 "1" "clearline"] + Text[3200.00mil 2265.00mil 0 100 "5V GPIO" "clearline"] + Text[3150.00mil 2760.00mil 0 100 "3.3V GPIO" "clearline"] + Text[3305.00mil 3020.00mil 0 100 "MISO" "clearline"] + Text[3320.00mil 3120.00mil 0 100 "SCK" "clearline"] + Text[3305.00mil 3215.00mil 0 100 "MOSI" "clearline"] + Text[3340.00mil 3320.00mil 0 100 "CS" "clearline"] + Text[3340.00mil 3415.00mil 0 100 "CD" "clearline"] + Text[1845.00mil 2530.00mil 0 60 "XRES" "clearline"] + Text[1845.00mil 2435.00mil 0 60 "SWV" "clearline"] + Text[1845.00mil 2385.00mil 0 60 "SWDCK" "clearline"] + Text[1845.00mil 2335.00mil 0 60 "SWDIO" "clearline"] + Text[1515.00mil 3190.00mil 0 100 "GND" "clearline"] + Text[1475.00mil 2790.00mil 0 100 "+5V" "clearline"] + Text[995.00mil 3295.00mil 0 100 "5V GPIO" "clearline"] + Text[1225.00mil 2785.00mil 0 100 "1" "clearline"] + Text[204.00mil 2550.00mil 0 120 "Michael McMaster" "clearline"] + Text[210.00mil 2634.00mil 0 120 "michael@codesrc.com" "clearline"] + Text[2220.00mil 2240.00mil 0 120 "PSoC 5lp" "clearline"] + Text[1670.00mil 1490.00mil 0 120 "7406" "clearline"] + Text[2170.00mil 1490.00mil 0 120 "7406" "clearline"] + Text[2750.00mil 1490.00mil 0 120 "7406" "clearline"] + Text[970.00mil 1890.00mil 0 120 "2.85V" "clearline"] + Text[975.00mil 3010.00mil 0 120 "3.3V" "clearline"] + Text[520.00mil 720.00mil 0 120 "IN" "clearline"] + Text[670.00mil 1710.00mil 0 100 "120ohm" "clearline"] + Text[430.00mil 1510.00mil 0 100 "10uF" "clearline"] + Text[160.00mil 1740.00mil 0 100 "154ohm" "clearline"] + Text[3345.00mil 1630.00mil 0 100 "56ohm" "clearline"] + Text[3190.00mil 2095.00mil 0 100 "22ohm" "clearline"] + Text[2925.00mil 1810.00mil 0 100 "1.6K" "clearline"] + Text[1995.00mil 2810.00mil 0 100 "22ohm" "clearline"] + Text[199.00mil 2430.00mil 0 200 "SCSI2SD V4.2" "clearline"] + Text[310.00mil 1285.00mil 0 100 "47uF" "clearline"] + Text[960.00mil 2482.00mil 0 100 "c" "clearline"] + Text[335.00mil 2217.00mil 0 100 "10uF" "clearline"] + Text[474.00mil 3473.00mil 0 100 "10uF" "clearline"] + Text[3044.00mil 3486.00mil 0 100 "10uF" "clearline"] + Text[1143.00mil 814.00mil 0 100 "47uF" "clearline"] + Text[959.00mil 2226.00mil 0 100 "47uF" "clearline"] + Text[959.00mil 2226.00mil 0 100 "47uF" "clearline"] + Text[911.00mil 2894.00mil 0 100 "47uF" "clearline"] + Text[911.00mil 2894.00mil 0 100 "47uF" "clearline"] + Polygon("clearpoly") + ( + [1374.00mil 1083.00mil] [1449.00mil 1083.00mil] [1449.00mil 1133.00mil] [1374.00mil 1133.00mil] + ) + Polygon("clearpoly") + ( + [2383.00mil 1095.00mil] [2458.00mil 1095.00mil] [2458.00mil 1145.00mil] [2383.00mil 1145.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [2380.00mil 1235.00mil] [2460.00mil 1235.00mil] [2460.00mil 1275.00mil] [2380.00mil 1275.00mil] + ) + Polygon("clearpoly,fullpoly") + ( + [1375.00mil 1243.00mil] [1450.00mil 1243.00mil] [1450.00mil 1283.00mil] [1375.00mil 1283.00mil] + ) +) +NetList() +( + Net("3.3V" "(unknown)") + ( + Connect("C13-2") + Connect("C14-2") + Connect("C22-2") + Connect("C28-2") + Connect("J6-4") + Connect("J10-2") + Connect("J12-2") + Connect("U1-50") + Connect("U6-2") + ) + Net("5V" "(unknown)") + ( + Connect("C2-2") + Connect("C3-2") + Connect("C4-2") + Connect("C8-2") + Connect("C9-2") + Connect("C10-2") + Connect("C11-2") + Connect("C12-2") + Connect("C17-2") + Connect("C19-2") + Connect("C21-2") + Connect("C23-2") + Connect("C24-2") + Connect("C26-2") + Connect("D2-1") + Connect("D3-1") + Connect("J4-1") + Connect("J8-2") + Connect("J9-1") + Connect("J9-2") + Connect("J11-2") + Connect("R3-2") + Connect("U1-26") + Connect("U1-37") + Connect("U1-65") + Connect("U1-75") + Connect("U1-88") + Connect("U1-100") + Connect("U3-14") + Connect("U4-14") + Connect("U5-14") + Connect("U6-3") + ) + Net("\\_ACK\\_" "(unknown)") + ( + Connect("J2-38") + Connect("R2-4") + Connect("U1-91") + Connect("U4-2") + ) + Net("\\_ATN\\_" "(unknown)") + ( + Connect("J2-32") + Connect("R2-2") + Connect("U1-95") + Connect("U4-4") + ) + Net("\\_BSY\\_" "(unknown)") + ( + Connect("J2-36") + Connect("R2-3") + Connect("U1-92") + Connect("U4-12") + ) + Net("\\_C/D\\_" "(unknown)") + ( + Connect("J2-46") + Connect("R2-8") + Connect("U1-80") + Connect("U3-4") + ) + Net("\\_DB0\\_" "(unknown)") + ( + Connect("J2-2") + Connect("R1-2") + Connect("U1-19") + Connect("U5-8") + ) + Net("\\_DB1\\_" "(unknown)") + ( + Connect("J2-4") + Connect("R1-3") + Connect("U1-18") + Connect("U5-6") + ) + Net("\\_DB2\\_" "(unknown)") + ( + Connect("J2-6") + Connect("R1-4") + Connect("U1-9") + Connect("U5-10") + ) + Net("\\_DB3\\_" "(unknown)") + ( + Connect("J2-8") + Connect("R1-5") + Connect("U1-8") + Connect("U5-4") + ) + Net("\\_DB4\\_" "(unknown)") + ( + Connect("J2-10") + Connect("R1-6") + Connect("U1-5") + Connect("U5-12") + ) + Net("\\_DB5\\_" "(unknown)") + ( + Connect("J2-12") + Connect("R1-7") + Connect("U1-4") + Connect("U5-2") + ) + Net("\\_DB6\\_" "(unknown)") + ( + Connect("J2-14") + Connect("R1-8") + Connect("U1-1") + Connect("U4-8") + ) + Net("\\_DB7\\_" "(unknown)") + ( + Connect("J2-16") + Connect("R1-9") + Connect("U1-99") + Connect("U4-6") + ) + Net("\\_DBP\\_" "(unknown)") + ( + Connect("J2-18") + Connect("R1-10") + Connect("U1-96") + Connect("U4-10") + ) + Net("\\_I/O\\_" "(unknown)") + ( + Connect("J2-50") + Connect("R2-10") + Connect("U1-76") + Connect("U3-2") + ) + Net("\\_MSG\\_" "(unknown)") + ( + Connect("J2-42") + Connect("R2-6") + Connect("U1-84") + Connect("U3-6") + ) + Net("\\_REQ\\_" "(unknown)") + ( + Connect("J2-48") + Connect("R2-9") + Connect("U1-77") + Connect("U3-12") + ) + Net("\\_RST\\_" "(unknown)") + ( + Connect("J2-40") + Connect("R2-5") + Connect("U1-85") + Connect("U3-8") + ) + Net("\\_SD_CD\\_" "(unknown)") + ( + Connect("J6-10") + Connect("J12-17") + Connect("U1-49") + ) + Net("\\_SD_CS\\_" "(unknown)") + ( + Connect("J6-2") + Connect("J12-15") + Connect("U1-48") + ) + Net("\\_SEL\\_" "(unknown)") + ( + Connect("J2-44") + Connect("R2-7") + Connect("U1-81") + Connect("U3-10") + ) + Net("ACK" "(unknown)") + ( + Connect("U1-89") + Connect("U4-1") + ) + Net("ATN" "(unknown)") + ( + Connect("U1-93") + Connect("U4-3") + ) + Net("BSY" "(unknown)") + ( + Connect("U1-90") + Connect("U4-13") + ) + Net("C/D" "(unknown)") + ( + Connect("U1-78") + Connect("U3-3") + ) + Net("DB0" "(unknown)") + ( + Connect("U1-17") + Connect("U5-9") + ) + Net("DB1" "(unknown)") + ( + Connect("U1-16") + Connect("U5-5") + ) + Net("DB2" "(unknown)") + ( + Connect("U1-7") + Connect("U5-11") + ) + Net("DB3" "(unknown)") + ( + Connect("U1-6") + Connect("U5-3") + ) + Net("DB4" "(unknown)") + ( + Connect("U1-3") + Connect("U5-13") + ) + Net("DB5" "(unknown)") + ( + Connect("U1-2") + Connect("U5-1") + ) + Net("DB6" "(unknown)") + ( + Connect("U1-98") + Connect("U4-9") + ) + Net("DB7" "(unknown)") + ( + Connect("U1-97") + Connect("U4-5") + ) + Net("DBP" "(unknown)") + ( + Connect("U1-94") + Connect("U4-11") + ) + Net("drive_5V" "(unknown)") + ( + Connect("D2-2") + Connect("F1-2") + Connect("J3-2") + ) + Net("GND" "(unknown)") + ( + Connect("C1-1") + Connect("C2-1") + Connect("C3-1") + Connect("C4-1") + Connect("C5-1") + Connect("C6-1") + Connect("C7-1") + Connect("C8-1") + Connect("C9-1") + Connect("C10-1") + Connect("C11-1") + Connect("C12-1") + Connect("C13-1") + Connect("C14-1") + Connect("C15-1") + Connect("C16-1") + Connect("C17-1") + Connect("C19-1") + Connect("C20-1") + Connect("C21-1") + Connect("C22-1") + Connect("C23-1") + Connect("C24-1") + Connect("C26-1") + Connect("C27-1") + Connect("C28-1") + Connect("J1-2") + Connect("J1-3") + Connect("J2-1") + Connect("J2-3") + Connect("J2-5") + Connect("J2-7") + Connect("J2-9") + Connect("J2-11") + Connect("J2-13") + Connect("J2-15") + Connect("J2-17") + Connect("J2-19") + Connect("J2-20") + Connect("J2-21") + Connect("J2-22") + Connect("J2-23") + Connect("J2-24") + Connect("J2-27") + Connect("J2-28") + Connect("J2-29") + Connect("J2-30") + Connect("J2-31") + Connect("J2-33") + Connect("J2-34") + Connect("J2-35") + Connect("J2-37") + Connect("J2-39") + Connect("J2-41") + Connect("J2-43") + Connect("J2-45") + Connect("J2-47") + Connect("J2-49") + Connect("J4-3") + Connect("J4-5") + Connect("J4-7") + Connect("J4-9") + Connect("J5-5") + Connect("J6-6") + Connect("J6-9") + Connect("J7-1") + Connect("J8-4") + Connect("J8-6") + Connect("J8-8") + Connect("J8-10") + Connect("J8-12") + Connect("J8-14") + Connect("J8-16") + Connect("J9-4") + Connect("J9-6") + Connect("J9-8") + Connect("J9-10") + Connect("J9-11") + Connect("J9-12") + Connect("J9-14") + Connect("J9-16") + Connect("J9-18") + Connect("J9-20") + Connect("J11-4") + Connect("J11-6") + Connect("J11-8") + Connect("J12-4") + Connect("J12-6") + Connect("J12-8") + Connect("J12-10") + Connect("J12-12") + Connect("J12-14") + Connect("J12-16") + Connect("J12-18") + Connect("Q1-S") + Connect("R9-1") + Connect("U1-10") + Connect("U1-12") + Connect("U1-13") + Connect("U1-14") + Connect("U1-22") + Connect("U1-38") + Connect("U1-40") + Connect("U1-41") + Connect("U1-43") + Connect("U1-44") + Connect("U1-56") + Connect("U1-57") + Connect("U1-58") + Connect("U1-59") + Connect("U1-60") + Connect("U1-61") + Connect("U1-62") + Connect("U1-64") + Connect("U1-66") + Connect("U1-87") + Connect("U3-7") + Connect("U4-7") + Connect("U5-7") + Connect("U6-1") + ) + Net("I/O" "(unknown)") + ( + Connect("U1-73") + Connect("U3-1") + ) + Net("MSG" "(unknown)") + ( + Connect("U1-82") + Connect("U3-5") + ) + Net("REQ" "(unknown)") + ( + Connect("U1-74") + Connect("U3-13") + ) + Net("RST" "(unknown)") + ( + Connect("U1-83") + Connect("U3-9") + ) + Net("SD_MISO" "(unknown)") + ( + Connect("J6-7") + Connect("J12-9") + Connect("U1-45") + ) + Net("SD_MOSI" "(unknown)") + ( + Connect("J6-3") + Connect("J12-13") + Connect("U1-47") + ) + Net("SD_SCK" "(unknown)") + ( + Connect("J6-5") + Connect("J12-11") + Connect("U1-46") + ) + Net("SEL" "(unknown)") + ( + Connect("U1-79") + Connect("U3-11") + ) + Net("unnamed_net1" "(unknown)") + ( + Connect("J4-2") + Connect("J9-7") + Connect("U1-20") + ) + Net("unnamed_net2" "(unknown)") + ( + Connect("J4-4") + Connect("J9-9") + Connect("U1-21") + ) + Net("unnamed_net3" "(unknown)") + ( + Connect("J4-10") + Connect("J9-15") + Connect("U1-15") + ) + Net("unnamed_net4" "(unknown)") + ( + Connect("J4-8") + Connect("J9-5") + Connect("U1-24") + ) + Net("unnamed_net5" "(unknown)") + ( + Connect("J4-6") + Connect("J9-13") + Connect("U1-23") + ) + Net("unnamed_net6" "(unknown)") + ( + Connect("LED1-2") + Connect("R3-1") + ) + Net("unnamed_net7" "(unknown)") + ( + Connect("C27-2") + Connect("U1-63") + ) + Net("unnamed_net8" "(unknown)") + ( + Connect("C20-2") + Connect("U1-39") + Connect("U1-86") + ) + Net("unnamed_net9" "(unknown)") + ( + Connect("U1-11") + ) + Net("unnamed_net10" "(unknown)") + ( + Connect("J9-3") + Connect("U1-25") + ) + Net("unnamed_net11" "(unknown)") + ( + Connect("J8-1") + Connect("U1-27") + ) + Net("unnamed_net12" "(unknown)") + ( + Connect("J8-3") + Connect("U1-28") + ) + Net("unnamed_net13" "(unknown)") + ( + Connect("J8-5") + Connect("U1-29") + ) + Net("unnamed_net14" "(unknown)") + ( + Connect("J8-7") + Connect("U1-30") + ) + Net("unnamed_net15" "(unknown)") + ( + Connect("J8-9") + Connect("U1-31") + ) + Net("unnamed_net16" "(unknown)") + ( + Connect("J8-11") + Connect("U1-32") + ) + Net("unnamed_net17" "(unknown)") + ( + Connect("J8-13") + Connect("U1-33") + ) + Net("unnamed_net18" "(unknown)") + ( + Connect("J8-15") + Connect("U1-34") + ) + Net("unnamed_net19" "(unknown)") + ( + Connect("R4-2") + Connect("U1-35") + ) + Net("unnamed_net20" "(unknown)") + ( + Connect("R5-2") + Connect("U1-36") + ) + Net("unnamed_net21" "(unknown)") + ( + Connect("U1-42") + ) + Net("unnamed_net22" "(unknown)") + ( + Connect("LED1-1") + Connect("U1-72") + ) + Net("unnamed_net23" "(unknown)") + ( + Connect("R6-1") + Connect("U1-71") + ) + Net("unnamed_net24" "(unknown)") + ( + Connect("J11-1") + Connect("U1-70") + ) + Net("unnamed_net25" "(unknown)") + ( + Connect("J11-3") + Connect("U1-69") + ) + Net("unnamed_net26" "(unknown)") + ( + Connect("J11-5") + Connect("U1-68") + ) + Net("unnamed_net27" "(unknown)") + ( + Connect("J11-7") + Connect("U1-67") + ) + Net("unnamed_net28" "(unknown)") + ( + Connect("U1-55") + ) + Net("unnamed_net29" "(unknown)") + ( + Connect("J12-1") + Connect("U1-54") + ) + Net("unnamed_net30" "(unknown)") + ( + Connect("J12-3") + Connect("U1-53") + ) + Net("unnamed_net31" "(unknown)") + ( + Connect("J12-5") + Connect("U1-52") + ) + Net("unnamed_net32" "(unknown)") + ( + Connect("J12-7") + Connect("U1-51") + ) + Net("unnamed_net33" "(unknown)") + ( + Connect("C1-2") + Connect("C5-2") + Connect("D1-1") + Connect("J2-26") + Connect("U2-3") + ) + Net("unnamed_net34" "(unknown)") + ( + Connect("C6-2") + Connect("R8-1") + Connect("R9-2") + Connect("U2-1") + ) + Net("unnamed_net35" "(unknown)") + ( + Connect("C7-2") + Connect("C15-2") + Connect("C16-2") + Connect("R1-1") + Connect("R2-1") + Connect("R8-2") + Connect("U2-2") + ) + Net("unnamed_net36" "(unknown)") + ( + Connect("F2-1") + Connect("J5-1") + ) + Net("unnamed_net37" "(unknown)") + ( + Connect("D3-2") + Connect("F2-2") + ) + Net("unnamed_net38" "(unknown)") + ( + Connect("J5-4") + ) + Net("unnamed_net39" "(unknown)") + ( + Connect("J5-3") + Connect("R4-1") + ) + Net("unnamed_net40" "(unknown)") + ( + Connect("J5-2") + Connect("R5-1") + ) + Net("unnamed_net41" "(unknown)") + ( + Connect("J6-1") + ) + Net("unnamed_net42" "(unknown)") + ( + Connect("J6-8") + ) + Net("unnamed_net43" "(unknown)") + ( + Connect("J9-17") + ) + Net("unnamed_net44" "(unknown)") + ( + Connect("J9-19") + ) + Net("unnamed_net45" "(unknown)") + ( + Connect("J1-1") + ) + Net("unnamed_net46" "(unknown)") + ( + Connect("F1-1") + Connect("J1-4") + Connect("J7-2") + ) + Net("unnamed_net47" "(unknown)") + ( + Connect("J2-25") + ) + Net("unnamed_net48" "(unknown)") + ( + Connect("D1-2") + Connect("J3-1") + ) + Net("unnamed_net49" "(unknown)") + ( + Connect("J10-1") + Connect("R7-2") + ) + Net("unnamed_net50" "(unknown)") + ( + Connect("Q1-D") + Connect("R7-1") + ) + Net("unnamed_net51" "(unknown)") + ( + Connect("Q1-G") + Connect("R6-2") + ) +) diff --git a/qa/tests/eeschema/CMakeLists.txt b/qa/tests/eeschema/CMakeLists.txt index e2bf81ff8c..1163dec767 100644 --- a/qa/tests/eeschema/CMakeLists.txt +++ b/qa/tests/eeschema/CMakeLists.txt @@ -52,6 +52,7 @@ set( QA_EESCHEMA_SRCS sch_io/altium/test_altium_parser_sch.cpp sch_io/pads/test_pads_sch_parser.cpp sch_io/pads/test_pads_sch_import.cpp + sch_io/geda/test_geda_sch_import.cpp erc/test_erc_four_way.cpp erc/test_erc_label_not_connected.cpp diff --git a/qa/tests/eeschema/sch_io/geda/test_geda_sch_import.cpp b/qa/tests/eeschema/sch_io/geda/test_geda_sch_import.cpp new file mode 100644 index 0000000000..ac2a21d6a4 --- /dev/null +++ b/qa/tests/eeschema/sch_io/geda/test_geda_sch_import.cpp @@ -0,0 +1,2241 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright The 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 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +struct GEDA_SCH_IMPORT_FIXTURE +{ + GEDA_SCH_IMPORT_FIXTURE() : + m_schematic( new SCHEMATIC( nullptr ) ) + { + m_manager.LoadProject( "" ); + m_schematic->SetProject( &m_manager.Prj() ); + m_schematic->CurrentSheet().clear(); + m_schematic->CurrentSheet().push_back( &m_schematic->Root() ); + } + + ~GEDA_SCH_IMPORT_FIXTURE() + { + m_schematic.reset(); + } + + SCH_SHEET* LoadGedaSchematic( const std::string& aRelPath ) + { + std::string dataPath = KI_TEST::GetEeschemaTestDataDir() + aRelPath; + return m_plugin.LoadSchematicFile( dataPath, m_schematic.get() ); + } + + SCH_SHEET* LoadGedaSchematicWithProperties( const std::string& aRelPath, + const std::map& aProps ) + { + std::string dataPath = KI_TEST::GetEeschemaTestDataDir() + aRelPath; + return m_plugin.LoadSchematicFile( dataPath, m_schematic.get(), nullptr, &aProps ); + } + + SCH_IO_GEDA m_plugin; + std::unique_ptr m_schematic; + SETTINGS_MANAGER m_manager; +}; + + +BOOST_FIXTURE_TEST_SUITE( GedaSchImport, GEDA_SCH_IMPORT_FIXTURE ) + + +// ============================================================================ +// File discrimination tests +// ============================================================================ + +BOOST_AUTO_TEST_CASE( CanReadSchematicFile ) +{ + std::string goodPath = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/minimal_test.sch"; + BOOST_CHECK( m_plugin.CanReadSchematicFile( goodPath ) ); +} + + +BOOST_AUTO_TEST_CASE( RejectsNonSchExtension ) +{ + std::string txtPath = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/minimal_test.txt"; + BOOST_CHECK( !m_plugin.CanReadSchematicFile( txtPath ) ); +} + + +BOOST_AUTO_TEST_CASE( RejectsNonGedaSchFiles ) +{ + std::string legacyPath = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/legacy_kicad.sch"; + BOOST_CHECK( !m_plugin.CanReadSchematicFile( legacyPath ) ); + + std::string randomPath = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/random.sch"; + BOOST_CHECK( !m_plugin.CanReadSchematicFile( randomPath ) ); +} + + +// ============================================================================ +// Minimal schematic tests (no external symbol libraries needed) +// ============================================================================ + +BOOST_AUTO_TEST_CASE( MinimalSchematicLoad ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbolCount++; + } + + BOOST_CHECK_EQUAL( symbolCount, 2 ); +} + + +BOOST_AUTO_TEST_CASE( MinimalSchematicSymbolAttributes ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + bool foundR1 = false; + bool foundC1 = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( ref == wxT( "R1" ) ) + { + foundR1 = true; + BOOST_CHECK_EQUAL( sym->GetField( FIELD_T::VALUE )->GetText(), wxT( "10k" ) ); + } + + if( ref == wxT( "C1" ) ) + { + foundC1 = true; + BOOST_CHECK_EQUAL( sym->GetField( FIELD_T::VALUE )->GetText(), wxT( "100nF" ) ); + } + } + + BOOST_CHECK_MESSAGE( foundR1, "R1 symbol not found" ); + BOOST_CHECK_MESSAGE( foundC1, "C1 symbol not found" ); +} + + +BOOST_AUTO_TEST_CASE( MinimalSchematicWires ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + } + + BOOST_CHECK_EQUAL( wireCount, 4 ); +} + + +BOOST_AUTO_TEST_CASE( MinimalSchematicNetLabels ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int labelCount = 0; + bool foundInput = false; + bool foundMid = false; + bool foundGnd = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LABEL_T ) + { + labelCount++; + SCH_LABEL* label = static_cast( item ); + + if( label->GetText() == wxT( "INPUT" ) ) + foundInput = true; + else if( label->GetText() == wxT( "MID" ) ) + foundMid = true; + else if( label->GetText() == wxT( "GND" ) ) + foundGnd = true; + } + } + + BOOST_CHECK_EQUAL( labelCount, 3 ); + BOOST_CHECK_MESSAGE( foundInput, "INPUT label not found" ); + BOOST_CHECK_MESSAGE( foundMid, "MID label not found" ); + BOOST_CHECK_MESSAGE( foundGnd, "GND label not found" ); +} + + +BOOST_AUTO_TEST_CASE( MinimalSchematicJunctions ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int junctionCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_JUNCTION_T ) + junctionCount++; + } + + // Without gEDA symbol libraries installed, fallback symbols have no pins, + // so no point reaches the 3-endpoint junction threshold from wires alone. + BOOST_CHECK_EQUAL( junctionCount, 0 ); +} + + +// ============================================================================ +// Real-world AYAB schematic tests (uses gafrc for custom symbol discovery) +// ============================================================================ + +BOOST_AUTO_TEST_CASE( AyabSchematicLoad ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbolCount++; + else if( item->Type() == SCH_LINE_T + && static_cast( item )->GetLayer() == LAYER_WIRE ) + wireCount++; + } + + // 133 C lines in file, 1 is title-D.sym (skipped), 5 are nc-* (mapped to no-connect) = 127 symbols + BOOST_CHECK_EQUAL( symbolCount, 127 ); + // 355 N lines in the schematic + BOOST_CHECK_EQUAL( wireCount, 355 ); +} + + +BOOST_AUTO_TEST_CASE( AyabSymbolAttributes ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::map expectedValues = { + { wxT( "U1" ), wxT( "METROMINI" ) }, + { wxT( "U4" ), wxT( "" ) }, // ULN2803A has no value= attr + { wxT( "U2" ), wxT( "" ) }, // PCF8574T has no value= attr + { wxT( "R1" ), wxT( "5k" ) }, + { wxT( "R2" ), wxT( "62" ) }, + { wxT( "R3" ), wxT( "320" ) }, + { wxT( "C1" ), wxT( "1 uF" ) }, + { wxT( "C2" ), wxT( "0.1 uF" ) }, + { wxT( "C3" ), wxT( "22 uF 16V" ) }, + { wxT( "D1" ), wxT( "" ) }, // diode has device= but no value= + { wxT( "L1" ), wxT( "AT-1224-TWT-5V-2-R" ) }, + { wxT( "Q1" ), wxT( "" ) }, + { wxT( "S1" ), wxT( "" ) }, + { wxT( "RN1" ), wxT( "1k" ) }, + { wxT( "J1" ), wxT( "" ) }, + }; + + std::set foundRefs; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( expectedValues.count( ref ) ) + { + foundRefs.insert( ref ); + wxString expectedVal = expectedValues[ref]; + + if( !expectedVal.IsEmpty() ) + { + BOOST_CHECK_MESSAGE( + sym->GetField( FIELD_T::VALUE )->GetText() == expectedVal, + ref + " value mismatch: expected '" + expectedVal + "' got '" + + sym->GetField( FIELD_T::VALUE )->GetText() + "'" ); + } + } + } + + for( const auto& [ref, val] : expectedValues ) + { + BOOST_CHECK_MESSAGE( foundRefs.count( ref ), ref + " symbol not found" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabFootprintAttributes ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::map expectedFootprints = { + { wxT( "U1" ), wxT( "MetroMini" ) }, + { wxT( "R1" ), wxT( "0805_reflow_solder_2" ) }, + { wxT( "C2" ), wxT( "0603_reflow_solder" ) }, + { wxT( "D1" ), wxT( "DO214AA_HSMB" ) }, + { wxT( "S1" ), wxT( "TYCO_FSMJSM" ) }, + { wxT( "L1" ), wxT( "buzzer.fp" ) }, + { wxT( "Q1" ), wxT( "SOT23_3" ) }, + { wxT( "RN1" ), wxT( "ResArray_1206x4_YC164" ) }, + }; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + auto it = expectedFootprints.find( ref ); + + if( it != expectedFootprints.end() ) + { + BOOST_CHECK_MESSAGE( + sym->GetField( FIELD_T::FOOTPRINT )->GetText() == it->second, + ref + " footprint mismatch: expected '" + it->second + "' got '" + + sym->GetField( FIELD_T::FOOTPRINT )->GetText() + "'" ); + } + } +} + + +BOOST_AUTO_TEST_CASE( AyabCustomSymbolsLoaded ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // These custom symbols from gschem-symbols/ should be loaded with actual pin + // definitions (not fallback rectangles which have 0 pins). + std::map expectedPinCounts = { + { wxT( "U1" ), 28 }, // MetroMini.sym has 28 pins + { wxT( "D3" ), 2 }, // led-small.sym has 2 pins + { wxT( "D1" ), 2 }, // diode-3a.sym has 2 pins + { wxT( "S1" ), 4 }, // switch-tact_sq.sym has 4 pins + { wxT( "Q1" ), 3 }, // trans_BEC_NPN.sym has 3 pins + { wxT( "J1" ), 3 }, // connector3-1B.sym has 3 pins + }; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + auto it = expectedPinCounts.find( ref ); + + if( it != expectedPinCounts.end() ) + { + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( + pinCount == it->second, + ref + " pin count mismatch: expected " + std::to_string( it->second ) + + " got " + std::to_string( pinCount ) + + " (symbol may not have loaded from gschem-symbols/)" ); + } + } +} + + +BOOST_AUTO_TEST_CASE( AyabStdlibSymbolsLoaded ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // Standard symbols from our stdlib/ stubs should also have pins + std::map expectedPinCounts = { + { wxT( "R1" ), 2 }, // resistor-1.sym has 2 pins + { wxT( "C1" ), 2 }, // capacitor-1.sym has 2 pins + { wxT( "C3" ), 2 }, // capacitor-2.sym has 2 pins + }; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + auto it = expectedPinCounts.find( ref ); + + if( it != expectedPinCounts.end() ) + { + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( + pinCount == it->second, + ref + " pin count mismatch: expected " + std::to_string( it->second ) + + " got " + std::to_string( pinCount ) + + " (stdlib stub may not have been found via gafrc)" ); + } + } +} + + +BOOST_AUTO_TEST_CASE( ProjectSymbolOverridesSystem ) +{ + // gEDA uses last-found-wins for symbol resolution. Project-local directories + // are scanned after system directories, so a local resistor-1.sym with 3 pins + // should override the builtin 2-pin version. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/priority_test/priority_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( pinCount == 3, + "Expected 3-pin local override, got " + std::to_string( pinCount ) + + " pins (project symbol should override system)" ); + return; + } + + BOOST_FAIL( "Symbol not found" ); +} + + +BOOST_AUTO_TEST_CASE( AyabGlobalLabelsFromNetAttributes ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // net= attributes on output-1/input-1 symbols create global labels. + // Power symbols (generic-power.sym, gnd-1.sym) use power pins instead. + // 9V is only on generic-power.sym instances so appears as power, not label. + std::set expectedNets = { + wxT( "5V" ), wxT( "GND" ), wxT( "SDA" ), wxT( "SCL" ), + wxT( "RST" ), wxT( "BUZZ" ), wxT( "D5" ), wxT( "D6" ), wxT( "AREF" ), + wxT( "ENCA" ), wxT( "ENCB" ), wxT( "ENCC" ), wxT( "EOLR" ), wxT( "EOLL" ), + }; + + std::set foundNets; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_GLOBAL_LABEL_T ) + { + SCH_GLOBALLABEL* label = static_cast( item ); + foundNets.insert( label->GetText() ); + } + } + + for( const wxString& net : expectedNets ) + { + BOOST_CHECK_MESSAGE( foundNets.count( net ), + "Global label for net '" + net + "' not found" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabGlobalLabelCounts ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::map labelCounts; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_GLOBAL_LABEL_T ) + { + SCH_GLOBALLABEL* label = static_cast( item ); + labelCounts[label->GetText()]++; + } + } + + // Each net= attribute on a non-power symbol produces one global label. + // Power symbol instances (generic-power.sym) use power pins, not labels. + BOOST_CHECK_EQUAL( labelCounts[wxT( "5V" )], 7 ); + BOOST_CHECK_EQUAL( labelCounts[wxT( "SCL" )], 5 ); + BOOST_CHECK_EQUAL( labelCounts[wxT( "SDA" )], 5 ); + BOOST_CHECK_EQUAL( labelCounts[wxT( "BUZZ" )], 2 ); + BOOST_CHECK_EQUAL( labelCounts[wxT( "RST" )], 2 ); + BOOST_CHECK_EQUAL( labelCounts[wxT( "GND" )], 1 ); +} + + +BOOST_AUTO_TEST_CASE( AyabPowerSymbols ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // gEDA power symbols (gnd-1.sym, generic-power.sym) should be imported + // as KiCad power symbols with #PWR references and net name as value. + std::map powerCounts; + int totalPower = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + const LIB_SYMBOL* libSym = sym->GetLibSymbolRef().get(); + + if( !libSym || !libSym->IsPower() ) + continue; + + totalPower++; + wxString valText = sym->GetField( FIELD_T::VALUE )->GetText(); + powerCounts[valText]++; + + wxString refText = sym->GetField( FIELD_T::REFERENCE )->GetText(); + BOOST_CHECK_MESSAGE( refText.StartsWith( wxT( "#PWR" ) ), + "Power symbol ref should start with #PWR, got: " + refText ); + BOOST_CHECK( !sym->GetField( FIELD_T::REFERENCE )->IsVisible() ); + BOOST_CHECK( sym->GetField( FIELD_T::VALUE )->IsVisible() ); + } + + // 17 gnd-1.sym instances + 11 generic-power.sym instances = 28 power symbols + BOOST_CHECK_EQUAL( totalPower, 28 ); + BOOST_CHECK_EQUAL( powerCounts[wxT( "GND" )], 17 ); + BOOST_CHECK_EQUAL( powerCounts[wxT( "5V" )], 7 ); + BOOST_CHECK_EQUAL( powerCounts[wxT( "9V" )], 4 ); +} + + +BOOST_AUTO_TEST_CASE( AyabJunctionsPlaced ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int junctionCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_JUNCTION_T ) + junctionCount++; + } + + // The ayab schematic has T-junctions where wire endpoints touch the + // interior of other wire segments. + BOOST_CHECK_GT( junctionCount, 0 ); +} + + +BOOST_AUTO_TEST_CASE( AyabAllRefdesUnique ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::map refCounts; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( !ref.IsEmpty() ) + refCounts[ref]++; + } + + // Every assigned refdes should appear exactly once + for( const auto& [ref, count] : refCounts ) + { + BOOST_CHECK_MESSAGE( count == 1, + "Refdes '" + ref + "' appears " + std::to_string( count ) + + " times (expected 1)" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabWireEndpointsInPositiveSpace ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() != LAYER_WIRE ) + continue; + + VECTOR2I start = line->GetStartPoint(); + VECTOR2I end = line->GetEndPoint(); + + // After Y-flip, all coordinates should be in positive space + BOOST_CHECK_MESSAGE( start.x >= 0 && start.y >= 0, + "Wire start in negative space: (" + + std::to_string( start.x ) + ", " + + std::to_string( start.y ) + ")" ); + BOOST_CHECK_MESSAGE( end.x >= 0 && end.y >= 0, + "Wire end in negative space: (" + + std::to_string( end.x ) + ", " + + std::to_string( end.y ) + ")" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabSymbolPositionsInPositiveSpace ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + VECTOR2I pos = sym->GetPosition(); + + BOOST_CHECK_MESSAGE( pos.x >= 0 && pos.y >= 0, + "Symbol at negative position: (" + + std::to_string( pos.x ) + ", " + + std::to_string( pos.y ) + ")" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabComponentOrientations ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int rotatedCount = 0; + int mirroredCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + int orient = sym->GetOrientation(); + + if( orient & ( SYM_ORIENT_90 | SYM_ORIENT_180 | SYM_ORIENT_270 ) ) + rotatedCount++; + + if( orient & SYM_MIRROR_Y ) + mirroredCount++; + } + + // The ayab schematic has 48 rotated and 38 mirrored components in gEDA source. + // Verify the importer preserves orientation diversity. + BOOST_CHECK_MESSAGE( rotatedCount > 0, + "Expected rotated components but found none" ); + BOOST_CHECK_MESSAGE( mirroredCount > 0, + "Expected mirrored components but found none" ); +} + + +BOOST_AUTO_TEST_CASE( AyabTextAnnotations ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int textCount = 0; + bool foundTitle = false; + bool foundAuthor = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_TEXT_T ) + continue; + + textCount++; + SCH_TEXT* text = static_cast( item ); + + if( text->GetText().Contains( wxT( "AYAB Interface" ) ) ) + foundTitle = true; + + if( text->GetText().Contains( wxT( "Windell" ) ) ) + foundAuthor = true; + } + + // 13 standalone T lines in ayab_rs.sch (titles, notes, annotations) + BOOST_CHECK_EQUAL( textCount, 13 ); + BOOST_CHECK_MESSAGE( foundTitle, "Title text 'AYAB Interface' not found" ); + BOOST_CHECK_MESSAGE( foundAuthor, "Author text containing 'Windell' not found" ); +} + + +BOOST_AUTO_TEST_CASE( AyabWireConnectivity ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // Count wire endpoint coincidences. Connected wires share endpoints, + // so counting shared points measures connectivity. + std::map, int> endpointCounts; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() != LAYER_WIRE ) + continue; + + VECTOR2I start = line->GetStartPoint(); + VECTOR2I end = line->GetEndPoint(); + endpointCounts[{start.x, start.y}]++; + endpointCounts[{end.x, end.y}]++; + } + + int sharedPoints = 0; + + for( const auto& [pos, count] : endpointCounts ) + { + if( count >= 2 ) + sharedPoints++; + } + + // In a well-connected schematic, many wire endpoints overlap. + // The ayab schematic has 101 such shared points (from 355 wires). + BOOST_CHECK_MESSAGE( sharedPoints > 50, + "Expected at least 50 shared wire endpoints for connectivity, got " + + std::to_string( sharedPoints ) ); +} + + +BOOST_AUTO_TEST_CASE( AyabGlobalLabelPositionsPositive ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_GLOBAL_LABEL_T ) + continue; + + SCH_GLOBALLABEL* label = static_cast( item ); + VECTOR2I pos = label->GetPosition(); + + BOOST_CHECK_MESSAGE( pos.x >= 0 && pos.y >= 0, + "Global label '" + label->GetText() + + "' at negative position: (" + + std::to_string( pos.x ) + ", " + + std::to_string( pos.y ) + ")" ); + } +} + + +BOOST_AUTO_TEST_CASE( AyabTotalGlobalLabelCount ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int totalLabels = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_GLOBAL_LABEL_T ) + totalLabels++; + } + + // 45 non-power net= attributes produce global labels. + // 11 power symbol net= attributes (generic-power.sym) use power pins instead. + BOOST_CHECK_EQUAL( totalLabels, 45 ); +} + + +BOOST_AUTO_TEST_CASE( RealWorldSchematicLoad ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/powermeter.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbolCount++; + else if( item->Type() == SCH_LINE_T + && static_cast( item )->GetLayer() == LAYER_WIRE ) + wireCount++; + } + + BOOST_CHECK( symbolCount > 5 ); + BOOST_CHECK( wireCount > 10 ); +} + + +// ============================================================================ +// Phase 1 feature tests +// ============================================================================ + +BOOST_AUTO_TEST_CASE( CommentLinesIgnored ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/comments_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbolCount++; + else if( item->Type() == SCH_LINE_T + && static_cast( item )->GetLayer() == LAYER_WIRE ) + wireCount++; + } + + BOOST_CHECK_EQUAL( symbolCount, 1 ); + BOOST_CHECK_EQUAL( wireCount, 1 ); +} + + +BOOST_AUTO_TEST_CASE( OldFormatGraphicsParse ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/old_format_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int noteLineCount = 0; + int wireCount = 0; + int shapeCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_NOTES ) + noteLineCount++; + else if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + else if( item->Type() == SCH_SHAPE_T ) + { + shapeCount++; + } + } + + // Old format file has L, B, V, A graphic objects and one N wire + BOOST_CHECK_EQUAL( noteLineCount, 1 ); + BOOST_CHECK_EQUAL( wireCount, 1 ); + BOOST_CHECK_EQUAL( shapeCount, 3 ); +} + + +BOOST_AUTO_TEST_CASE( OldFormatBusPinParse ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/old_bus_pin_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int busCount = 0; + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_BUS ) + busCount++; + else if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + + BOOST_CHECK_EQUAL( busCount, 1 ); + // N line + P line (pin becomes wire stub in schematic context) + BOOST_CHECK_EQUAL( wireCount, 2 ); +} + + +BOOST_AUTO_TEST_CASE( OldFormatTextParse ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/old_text_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int textCount = 0; + bool foundHello = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_TEXT_T ) + { + textCount++; + SCH_TEXT* text = static_cast( item ); + + if( text->GetText() == wxT( "Hello World" ) ) + foundHello = true; + } + } + + BOOST_CHECK_EQUAL( textCount, 1 ); + BOOST_CHECK_MESSAGE( foundHello, "Text 'Hello World' not found in old-format file" ); +} + + +BOOST_AUTO_TEST_CASE( VeryOldFormatTextParse ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/very_old_text_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int textCount = 0; + bool foundOldText = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_TEXT_T ) + { + textCount++; + SCH_TEXT* text = static_cast( item ); + + if( text->GetText() == wxT( "Old Text" ) ) + foundOldText = true; + } + } + + BOOST_CHECK_EQUAL( textCount, 1 ); + BOOST_CHECK_MESSAGE( foundOldText, "Text 'Old Text' not found in very-old-format file" ); +} + + +BOOST_AUTO_TEST_CASE( BusLayerCorrect ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/bus_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int busCount = 0; + int wireCount = 0; + int noteCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_LINE_T ) + continue; + + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_BUS ) + busCount++; + else if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + else if( line->GetLayer() == LAYER_NOTES ) + noteCount++; + } + + BOOST_CHECK_EQUAL( busCount, 2 ); + BOOST_CHECK_EQUAL( wireCount, 1 ); + BOOST_CHECK_EQUAL( noteCount, 0 ); +} + + +BOOST_AUTO_TEST_CASE( NoConnectFromNcSymbol ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/graphical_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + int ncCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbolCount++; + else if( item->Type() == SCH_NO_CONNECT_T ) + ncCount++; + } + + // R1 is a normal symbol, nc-right-1 becomes SCH_NO_CONNECT + BOOST_CHECK_EQUAL( symbolCount, 1 ); + BOOST_CHECK_EQUAL( ncCount, 1 ); +} + + +BOOST_AUTO_TEST_CASE( AyabNoConnectsCreated ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int ncCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_NO_CONNECT_T ) + ncCount++; + } + + // 5 nc-* symbols in ayab_rs.sch should map to SCH_NO_CONNECT + BOOST_CHECK_EQUAL( ncCount, 5 ); +} + + +BOOST_AUTO_TEST_CASE( NoConnectAtPinPosition ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/graphical_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // nc-right-1.sym at (44000, 44000) with angle=0, mirror=0 has its pin + // connection point at local (0, 100). The SCH_NO_CONNECT should be placed + // at gEDA (44000, 44100), not at the component origin (44000, 44000). + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_NO_CONNECT_T ) + continue; + + SCH_NO_CONNECT* nc = static_cast( item ); + VECTOR2I pos = nc->GetPosition(); + + // The NC must NOT be at the component origin. If pin offset was applied + // correctly, the Y coordinate will differ from the origin. + BOOST_CHECK_MESSAGE( pos.x != 0 && pos.y != 0, + "NC position should be non-zero after coordinate transform" ); + } +} + + +BOOST_AUTO_TEST_CASE( DocumentationToDatasheet ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/documentation_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + bool foundDatasheet = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + SCH_FIELD* dsField = sym->GetField( FIELD_T::DATASHEET ); + + if( dsField && dsField->GetText() == wxT( "http://www.example.com/datasheet.pdf" ) ) + foundDatasheet = true; + } + + BOOST_CHECK_MESSAGE( foundDatasheet, + "DATASHEET field with documentation URL not found" ); +} + + +BOOST_AUTO_TEST_CASE( AyabDescriptionFieldVisibility ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // D3 (led-small.sym) has description="9V Power" with visibility=1, showNV=1 + // (show value only). The DESCRIPTION field should be visible. + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( ref != wxT( "D3" ) ) + continue; + + SCH_FIELD* descField = sym->GetField( FIELD_T::DESCRIPTION ); + BOOST_REQUIRE( descField ); + BOOST_CHECK( descField->GetText() == wxT( "9V Power" ) ); + BOOST_CHECK( descField->IsVisible() ); + return; + } + + BOOST_FAIL( "D3 symbol not found" ); +} + + +BOOST_AUTO_TEST_CASE( AyabBusLayerFixed ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int notesLineCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_NOTES ) + notesLineCount++; + } + } + + // The ayab schematic has 13 visible T annotations but no non-text + // LAYER_NOTES lines -- former bus lines should now be LAYER_BUS. + BOOST_CHECK_EQUAL( notesLineCount, 0 ); +} + + +// ============================================================================ +// Phase 2: Text overbar conversion +// ============================================================================ + +BOOST_AUTO_TEST_CASE( TextOverbarConversion ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/overbar_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::vector textContents; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_TEXT_T ) + { + SCH_TEXT* text = static_cast( item ); + textContents.push_back( text->GetText() ); + } + } + + // We expect 6 text items from the test file + BOOST_REQUIRE_GE( textContents.size(), 6u ); + + bool foundFullOverbar = false; + bool foundTrailingOverbar = false; + bool foundPartialOverbar = false; + bool foundBackslash = false; + bool foundNoOverbar = false; + bool foundMultiOverbar = false; + + for( const wxString& txt : textContents ) + { + if( txt == wxT( "~{ACTIVE}" ) ) + foundFullOverbar = true; + + if( txt == wxT( "DATA~{LOW}" ) ) + foundTrailingOverbar = true; + + if( txt == wxT( "ACTIVE ~{HIGH}" ) ) + foundPartialOverbar = true; + + if( txt == wxT( "\\backslash" ) ) + foundBackslash = true; + + if( txt == wxT( "No overbar here" ) ) + foundNoOverbar = true; + + if( txt == wxT( "~{CS} and ~{WR}" ) ) + foundMultiOverbar = true; + } + + BOOST_CHECK_MESSAGE( foundFullOverbar, + "Full overbar \\_ACTIVE\\_ -> ~{ACTIVE} not found" ); + BOOST_CHECK_MESSAGE( foundTrailingOverbar, + "Trailing overbar DATA\\_LOW\\_ -> DATA~{LOW} not found" ); + BOOST_CHECK_MESSAGE( foundPartialOverbar, + "Partial overbar ACTIVE \\_HIGH\\_ -> ACTIVE ~{HIGH} not found" ); + BOOST_CHECK_MESSAGE( foundBackslash, + "Escaped backslash \\\\\\\\ -> \\ not found" ); + BOOST_CHECK_MESSAGE( foundNoOverbar, + "Plain text 'No overbar here' not found" ); + BOOST_CHECK_MESSAGE( foundMultiOverbar, + "Multiple overbars \\_CS\\_ and \\_WR\\_ -> ~{CS} and ~{WR} not found" ); +} + + +// ============================================================================ +// Phase 2: Bezier curve subdivision +// ============================================================================ + +BOOST_AUTO_TEST_CASE( BezierCurveSubdivision ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/bezier_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int bezierCount = 0; + int lineCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SHAPE_T ) + { + SCH_SHAPE* shape = static_cast( item ); + + if( shape->GetShape() == SHAPE_T::BEZIER ) + bezierCount++; + } + else if( item->Type() == SCH_LINE_T ) + { + lineCount++; + } + } + + // First path: M + C = 1 native bezier shape + // Second path: M + C + L = 1 native bezier shape + 1 line segment + BOOST_CHECK_EQUAL( bezierCount, 2 ); + BOOST_CHECK_EQUAL( lineCount, 1 ); +} + + +// ============================================================================ +// Phase 2: Embedded picture import +// ============================================================================ + +BOOST_AUTO_TEST_CASE( EmbeddedPictureImport ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/picture_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int bitmapCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_BITMAP_T ) + bitmapCount++; + } + + BOOST_CHECK_EQUAL( bitmapCount, 1 ); +} + + +// ============================================================================ +// Correctness audit fixes +// ============================================================================ + + +BOOST_AUTO_TEST_CASE( TextSizeScaling ) +{ + // gEDA text size is in points where 1 point = 10 mils. + // size=10 -> 100 mils -> 100*254 = 25400 IU + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/text_size_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::vector texts; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_TEXT_T ) + texts.push_back( static_cast( item ) ); + } + + BOOST_REQUIRE_GE( texts.size(), 2u ); + + bool foundSize10 = false; + bool foundSize20 = false; + + for( SCH_TEXT* t : texts ) + { + int h = t->GetTextSize().y; + + if( h == 10 * 10 * 254 ) + foundSize10 = true; + else if( h == 20 * 10 * 254 ) + foundSize20 = true; + } + + BOOST_CHECK_MESSAGE( foundSize10, "Expected text with size=10 (25400 IU)" ); + BOOST_CHECK_MESSAGE( foundSize20, "Expected text with size=20 (50800 IU)" ); +} + + +BOOST_AUTO_TEST_CASE( TextAngleNormalization ) +{ + // Non-orthogonal angles should be snapped to the nearest 90-degree increment + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/text_angle_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::set angles; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_TEXT_T ) + { + SCH_TEXT* t = static_cast( item ); + angles.insert( t->GetTextAngle().AsTenthsOfADegree() ); + } + } + + // 45->90, 135->90, 200->180, 315->0, 90->90 + // So we should see angles 0, 90, 180 in tenths: 0, 900, 1800 + BOOST_CHECK( angles.count( 900 ) > 0 ); // 90 degrees + BOOST_CHECK( angles.count( 0 ) > 0 ); // 0 degrees (315 snaps to 0) + BOOST_CHECK( angles.count( 1800 ) > 0 ); // 180 degrees (200 snaps to 180) +} + + +BOOST_AUTO_TEST_CASE( RelativePathCommands ) +{ + // Lowercase SVG path commands (l) should produce relative offsets, + // yielding the same endpoint as equivalent absolute (L) commands + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/relative_path_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int lineCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_NOTES ) + { + lineCount++; + VECTOR2I start = line->GetStartPoint(); + VECTOR2I end = line->GetEndPoint(); + int dx = std::abs( end.x - start.x ); + + // Both paths draw a horizontal 500-mil segment = 500*254 = 127000 IU + BOOST_CHECK_EQUAL( dx, 500 * 254 ); + } + } + } + + BOOST_CHECK_EQUAL( lineCount, 2 ); +} + + +BOOST_AUTO_TEST_CASE( EmbeddedPrefixStripped ) +{ + // Components with EMBEDDED prefix should have the prefix stripped from the basename + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/embedded_prefix_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int symbolCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + { + SCH_SYMBOL* sym = static_cast( item ); + wxString name = sym->GetLibId().GetLibItemName(); + + // The EMBEDDED prefix should have been stripped + BOOST_CHECK_MESSAGE( !name.StartsWith( wxT( "EMBEDDED" ) ), + "Symbol name should not have EMBEDDED prefix: " + name ); + symbolCount++; + } + } + + BOOST_CHECK_EQUAL( symbolCount, 1 ); +} + + +// ============================================================================ +// Phase 3: Lepton-EDA library path discovery +// ============================================================================ + +BOOST_AUTO_TEST_CASE( LeptonConfLibraryDiscovery ) +{ + // The lepton_conf_test.sch references lepton_resistor.sym, which lives + // in lepton-symbols/ adjacent to the .sch file. A lepton.conf in the + // same directory has [libs] component-library=lepton-symbols, so the + // importer should discover and load the symbol with 2 pins. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/lepton_conf_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + bool foundR1 = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( ref == wxT( "R1" ) ) + { + foundR1 = true; + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( pinCount == 2, + "R1 pin count mismatch: expected 2 got " + + std::to_string( pinCount ) + + " (lepton.conf library discovery may have failed)" ); + BOOST_CHECK_EQUAL( sym->GetField( FIELD_T::VALUE )->GetText(), wxT( "4.7k" ) ); + } + } + + BOOST_CHECK_MESSAGE( foundR1, "R1 symbol not found" ); +} + + +// ============================================================================ +// Phase 3: gschemrc library discovery +// ============================================================================ + +BOOST_AUTO_TEST_CASE( GschemrcLibraryDiscovery ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/gschemrc_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( ref == wxT( "R1" ) ) + { + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( pinCount == 2, + "R1 pin count mismatch: expected 2 got " + + std::to_string( pinCount ) + + " (gschemrc library discovery may have failed)" ); + return; + } + } + + BOOST_FAIL( "R1 symbol not found" ); +} + + +// ============================================================================ +// Phase 3: Bus ripper direction support +// ============================================================================ + +BOOST_AUTO_TEST_CASE( BusRipperCreation ) +{ + // bus_ripper_test.sch has a vertical bus with ripper_dir=1 and two horizontal + // nets whose endpoints touch the bus. The importer should create + // SCH_BUS_WIRE_ENTRY objects at each intersection. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/bus_ripper_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int busEntryCount = 0; + int busCount = 0; + int wireCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_BUS_WIRE_ENTRY_T ) + { + busEntryCount++; + + SCH_BUS_WIRE_ENTRY* entry = static_cast( item ); + VECTOR2I size = entry->GetSize(); + + // The wire goes left from the bus, so the entry x-size should point left (negative) + BOOST_CHECK_MESSAGE( size.x < 0, + "Bus entry x-size should be negative (wire goes left)" ); + } + else if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_BUS ) + busCount++; + else if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + } + + BOOST_CHECK_EQUAL( busCount, 1 ); + BOOST_CHECK_EQUAL( wireCount, 2 ); + BOOST_CHECK_EQUAL( busEntryCount, 2 ); +} + + +// ============================================================================ +// Phase 4: Symversion mismatch warning +// ============================================================================ + +BOOST_AUTO_TEST_CASE( SymversionMismatchWarning ) +{ + // symversion_test.sch has a component with symversion=1.0 but the + // corresponding symver_resistor.sym has symversion=2.0. The importer + // should emit a warning about the major version mismatch. + WX_STRING_REPORTER reporter; + m_plugin.SetReporter( &reporter ); + + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/symversion_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + wxString messages = reporter.GetMessages(); + + BOOST_CHECK_MESSAGE( messages.Contains( wxT( "version mismatch" ) ), + "Expected symversion mismatch warning in reporter output, got: " + + messages ); + BOOST_CHECK_MESSAGE( messages.Contains( wxT( "R1" ) ), + "Expected R1 reference in warning message, got: " + messages ); +} + + +BOOST_AUTO_TEST_CASE( FuzzyMatchSuggestion ) +{ + WX_STRING_REPORTER reporter; + m_plugin.SetReporter( &reporter ); + + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/fuzzy_match_test.sch" ); + + BOOST_REQUIRE( sheet ); + + wxString messages = reporter.GetMessages(); + + BOOST_CHECK_MESSAGE( messages.Contains( wxT( "Did you mean" ) ), + "Expected fuzzy match suggestion in reporter output, got: " + + messages ); + BOOST_CHECK_MESSAGE( messages.Contains( wxT( "resistor-1.sym" ) ), + "Expected 'resistor-1.sym' as suggestion, got: " + messages ); +} + + +// ============================================================================ +// Phase 3: Hierarchical sheet import +// ============================================================================ + +BOOST_AUTO_TEST_CASE( HierarchicalSheetCreation ) +{ + // hierarchy_test.sch has a component with source=hierarchy_sub.sch, + // which should create an SCH_SHEET that references the sub-schematic. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/hierarchy_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int sheetCount = 0; + int wireCount = 0; + bool foundS1 = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SHEET_T ) + { + sheetCount++; + SCH_SHEET* subSheet = static_cast( item ); + wxString name = subSheet->GetField( FIELD_T::SHEET_NAME )->GetText(); + + if( name == wxT( "S1" ) ) + { + foundS1 = true; + + // The sheet should reference hierarchy_sub.sch + wxString filename = subSheet->GetField( FIELD_T::SHEET_FILENAME )->GetText(); + BOOST_CHECK_EQUAL( filename, wxT( "hierarchy_sub.sch" ) ); + + // The sub-schematic should have been loaded into the sheet's screen + SCH_SCREEN* subScreen = subSheet->GetScreen(); + BOOST_REQUIRE_MESSAGE( subScreen, "Sub-sheet screen should not be null" ); + + int subWireCount = 0; + + for( SCH_ITEM* subItem : subScreen->Items() ) + { + if( subItem->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( subItem ); + + if( line->GetLayer() == LAYER_WIRE ) + subWireCount++; + } + } + + BOOST_CHECK_MESSAGE( subWireCount > 0, + "Sub-schematic should contain wires" ); + } + } + else if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + } + + // The source= component should have become a sheet, not a symbol + BOOST_CHECK_EQUAL( sheetCount, 1 ); + BOOST_CHECK_MESSAGE( foundS1, "Sheet S1 not found" ); + BOOST_CHECK_EQUAL( wireCount, 1 ); +} + + +BOOST_AUTO_TEST_CASE( HierarchicalSheetMissingSource ) +{ + // A component with source= pointing to a nonexistent file should + // create a sheet but with an empty screen (no crash). + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/hierarchy_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); +} + + +// ============================================================================ +// Multi-slot pin remapping +// ============================================================================ + +BOOST_AUTO_TEST_CASE( MultiSlotPinRemapping ) +{ + // multislot_test.sch has two instances of 7400-1.sym, one with slot=1 + // (slotdef=1:1,2,3) and one with slot=2 (slotdef=2:4,5,6). After + // remapping, slot 1's private copy should have pins 1,2,3 and slot 2's + // private copy should have pins 4,5,6. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/multislot_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + std::vector symbols; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_SYMBOL_T ) + symbols.push_back( static_cast( item ) ); + } + + BOOST_REQUIRE_EQUAL( symbols.size(), 2u ); + + // Sort by position to get a deterministic order (slot=1 is at x=40000, slot=2 at x=44000) + std::sort( symbols.begin(), symbols.end(), + []( const SCH_SYMBOL* a, const SCH_SYMBOL* b ) + { + return a->GetPosition().x < b->GetPosition().x; + } ); + + // Slot 1 should have pins 1, 2, 3 + std::set slot1Pins; + + for( SCH_PIN* pin : symbols[0]->GetLibPins() ) + slot1Pins.insert( pin->GetNumber() ); + + BOOST_CHECK_MESSAGE( slot1Pins.count( wxT( "1" ) ), "Slot 1 missing pin 1" ); + BOOST_CHECK_MESSAGE( slot1Pins.count( wxT( "2" ) ), "Slot 1 missing pin 2" ); + BOOST_CHECK_MESSAGE( slot1Pins.count( wxT( "3" ) ), "Slot 1 missing pin 3" ); + BOOST_CHECK_MESSAGE( !slot1Pins.count( wxT( "4" ) ), "Slot 1 should not have pin 4" ); + + // Slot 2 should have pins 4, 5, 6 + std::set slot2Pins; + + for( SCH_PIN* pin : symbols[1]->GetLibPins() ) + slot2Pins.insert( pin->GetNumber() ); + + BOOST_CHECK_MESSAGE( slot2Pins.count( wxT( "4" ) ), "Slot 2 missing pin 4" ); + BOOST_CHECK_MESSAGE( slot2Pins.count( wxT( "5" ) ), "Slot 2 missing pin 5" ); + BOOST_CHECK_MESSAGE( slot2Pins.count( wxT( "6" ) ), "Slot 2 missing pin 6" ); + BOOST_CHECK_MESSAGE( !slot2Pins.count( wxT( "1" ) ), "Slot 2 should not have pin 1" ); +} + + +// ============================================================================ +// Graphical attribute exclusion +// ============================================================================ + +BOOST_AUTO_TEST_CASE( GraphicalAttributeExclusion ) +{ + // graphical_attr_test.sch has R1 (normal) and R2 (graphical=1). + // R2 should be excluded from BOM, board, and simulation. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/graphical_attr_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + bool foundR1 = false; + bool foundR2 = false; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + wxString ref = sym->GetField( FIELD_T::REFERENCE )->GetText(); + + if( ref == wxT( "R1" ) ) + { + foundR1 = true; + BOOST_CHECK( !sym->GetExcludedFromBOM() ); + BOOST_CHECK( !sym->GetExcludedFromBoard() ); + BOOST_CHECK( !sym->GetExcludedFromSim() ); + } + + if( ref == wxT( "R2" ) ) + { + foundR2 = true; + BOOST_CHECK( sym->GetExcludedFromBOM() ); + BOOST_CHECK( sym->GetExcludedFromBoard() ); + BOOST_CHECK( sym->GetExcludedFromSim() ); + } + } + + BOOST_CHECK_MESSAGE( foundR1, "R1 symbol not found" ); + BOOST_CHECK_MESSAGE( foundR2, "R2 symbol not found" ); +} + + +// ============================================================================ +// Phase 3: Multi-page schematic support +// ============================================================================ + +BOOST_AUTO_TEST_CASE( MultiPageSchematicImport ) +{ + // When LoadSchematicFile receives an "additional_schematics" property, + // it should create sub-sheets on the root screen for each additional page. + std::string page2Path = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/multipage_page2.sch"; + + std::map props; + props["additional_schematics"] = page2Path; + + SCH_SHEET* sheet = LoadGedaSchematicWithProperties( "/io/geda/multipage_page1.sch", props ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int wireCount = 0; + int sheetCount = 0; + SCH_SHEET* subSheet = nullptr; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( item ); + + if( line->GetLayer() == LAYER_WIRE ) + wireCount++; + } + else if( item->Type() == SCH_SHEET_T ) + { + sheetCount++; + subSheet = static_cast( item ); + } + } + + // Page 1 has one wire + BOOST_CHECK_EQUAL( wireCount, 1 ); + + // One sub-sheet should have been created for page 2 + BOOST_CHECK_EQUAL( sheetCount, 1 ); + + BOOST_REQUIRE( subSheet ); + BOOST_CHECK_EQUAL( subSheet->GetField( FIELD_T::SHEET_NAME )->GetText(), wxT( "Page 2" ) ); + BOOST_CHECK_EQUAL( subSheet->GetField( FIELD_T::SHEET_FILENAME )->GetText(), + wxT( "multipage_page2.sch" ) ); + + // The sub-sheet should have a loaded screen with wires from page 2 + SCH_SCREEN* subScreen = subSheet->GetScreen(); + BOOST_REQUIRE_MESSAGE( subScreen, "Sub-sheet screen should not be null" ); + + int subWireCount = 0; + + for( SCH_ITEM* subItem : subScreen->Items() ) + { + if( subItem->Type() == SCH_LINE_T ) + { + SCH_LINE* line = static_cast( subItem ); + + if( line->GetLayer() == LAYER_WIRE ) + subWireCount++; + } + } + + BOOST_CHECK_MESSAGE( subWireCount > 0, "Sub-sheet should contain wires from page 2" ); +} + + +BOOST_AUTO_TEST_CASE( BuiltinSymbolsLoad ) +{ + std::vector builtinNames = { + wxT( "resistor-1.sym" ), wxT( "resistor-2.sym" ), + wxT( "capacitor-1.sym" ), wxT( "capacitor-2.sym" ), + wxT( "gnd-1.sym" ), wxT( "gnd-2.sym" ), + wxT( "generic-power.sym" ), + wxT( "input-1.sym" ), wxT( "output-1.sym" ), + wxT( "nc-right-1.sym" ), wxT( "nc-left-1.sym" ), + wxT( "terminal-1.sym" ), + wxT( "vcc-1.sym" ), wxT( "vcc-2.sym" ), + wxT( "vdd-1.sym" ), wxT( "vss-1.sym" ), + wxT( "vee-1.sym" ), + wxT( "5V-plus-1.sym" ), wxT( "3.3V-plus-1.sym" ), + wxT( "12V-plus-1.sym" ), + wxT( "diode-1.sym" ), wxT( "zener-1.sym" ), + wxT( "schottky-1.sym" ), wxT( "led-1.sym" ), + wxT( "npn-1.sym" ), wxT( "pnp-1.sym" ), + wxT( "nmos-1.sym" ), wxT( "pmos-1.sym" ), + wxT( "opamp-1.sym" ), wxT( "inductor-1.sym" ), + wxT( "7400-1.sym" ), wxT( "7402-1.sym" ), + wxT( "7404-1.sym" ), wxT( "7408-1.sym" ), + wxT( "7432-1.sym" ), wxT( "7486-1.sym" ), + wxT( "busripper-1.sym" ), wxT( "busripper-2.sym" ), + wxT( "title-B.sym" ), + }; + + const auto& symbols = SCH_IO_GEDA::getBuiltinSymbols(); + + for( const wxString& name : builtinNames ) + { + BOOST_CHECK_MESSAGE( symbols.find( name ) != symbols.end(), + "Builtin symbol should exist: " + name ); + + if( symbols.find( name ) != symbols.end() ) + { + const wxString& content = symbols.at( name ); + BOOST_CHECK_MESSAGE( content.StartsWith( wxT( "v " ) ), + "Builtin symbol should start with version line: " + name ); + } + } + + BOOST_CHECK_GE( symbols.size(), builtinNames.size() ); +} + + +BOOST_AUTO_TEST_CASE( TJunctionDetection ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/tjunction_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + int junctionCount = 0; + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() == SCH_JUNCTION_T ) + junctionCount++; + } + + // Two T-junctions: vertical wires meet the interior of horizontal wires + BOOST_CHECK_EQUAL( junctionCount, 2 ); +} + + +BOOST_AUTO_TEST_CASE( PinOrientationCorrect ) +{ + // Load a schematic using 7400-1.sym to verify pin orientation. + // 7400-1.sym has: + // Pin 1 (A): P 0 200 200 200 1 0 0 whichend=0 → conn=(0,200) body=(200,200) + // Pin 2 (B): P 0 0 200 0 1 0 0 whichend=0 → conn=(0,0) body=(200,0) + // Pin 3 (Y): P 500 100 300 100 1 0 0 whichend=0 → conn=(500,100) body=(300,100) + // + // Pin 1: body is to the right of connection → PIN_RIGHT + // Pin 2: body is to the right of connection → PIN_RIGHT + // Pin 3: body is to the left of connection → PIN_LEFT + const auto& builtins = SCH_IO_GEDA::getBuiltinSymbols(); + auto it = builtins.find( wxT( "7400-1.sym" ) ); + + BOOST_REQUIRE( it != builtins.end() ); + + SCH_IO_GEDA io; + + // Parse the builtin symbol to get pin orientations + wxString tempPath = wxFileName::CreateTempFileName( wxT( "geda_pin_test_" ) ); + BOOST_REQUIRE( !tempPath.IsEmpty() ); + + { + wxFile temp( tempPath, wxFile::write ); + BOOST_REQUIRE( temp.IsOpened() ); + temp.Write( it->second ); + } + + SCH_IO_GEDA loader; + std::unique_ptr sym; + + // Use a known .sym file from test data instead + wxString symPath = KI_TEST::GetEeschemaTestDataDir() + wxT( "/io/geda/7400-1.sym" ); + wxTextFile file; + + BOOST_REQUIRE( file.Open( symPath ) ); + + wxRemoveFile( tempPath ); + + // Verify the pins have correct orientation via the symbol loaded from test data + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/minimal_test.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + // Find R1 (resistor-1.sym) which has a horizontal pin layout. + // resistor-1.sym is a horizontal resistor: pin 1 at x=0, pin 2 at x=900 + // Pin 1: conn=(0,200) body=(200,200) → PIN_RIGHT (body extends right from conn) + // Pin 2: conn=(900,200) body=(700,200) → PIN_LEFT (body extends left from conn) + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym2 = static_cast( item ); + + if( sym2->GetField( FIELD_T::REFERENCE )->GetText() != wxT( "R1" ) ) + continue; + + const LIB_SYMBOL* libSym = sym2->GetLibSymbolRef().get(); + + BOOST_REQUIRE( libSym ); + + std::vector pins = libSym->GetPins(); + + BOOST_REQUIRE_GE( pins.size(), 2u ); + + // Check that we have both left and right pins (not all the same direction) + bool hasRight = false; + bool hasLeft = false; + + for( SCH_PIN* pin : pins ) + { + if( pin->GetOrientation() == PIN_ORIENTATION::PIN_RIGHT ) + hasRight = true; + + if( pin->GetOrientation() == PIN_ORIENTATION::PIN_LEFT ) + hasLeft = true; + } + + BOOST_CHECK_MESSAGE( hasRight && hasLeft, + "Resistor should have both PIN_RIGHT and PIN_LEFT pins" ); + break; + } +} + + +BOOST_AUTO_TEST_CASE( PageSizeAndContentPlacement ) +{ + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/ayab/ayab_rs.sch" ); + + BOOST_REQUIRE( sheet ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + PAGE_INFO pageInfo = screen->GetPageSettings(); + VECTOR2I pageSizeIU = pageInfo.GetSizeIU( schIUScale.IU_PER_MILS ); + + int pageWidthMils = schIUScale.IUToMils( pageSizeIU.x ); + int pageHeightMils = schIUScale.IUToMils( pageSizeIU.y ); + + // The ayab schematic uses a D-size title block (~34x22 inches). + // Page dimensions should be close to D-size, not astronomically large. + BOOST_CHECK_LT( pageWidthMils, 40000 ); + BOOST_CHECK_LT( pageHeightMils, 30000 ); + BOOST_CHECK_GT( pageWidthMils, 20000 ); + BOOST_CHECK_GT( pageHeightMils, 15000 ); + + // Compute actual content bounding box + BOX2I bbox; + + for( SCH_ITEM* item : screen->Items() ) + bbox.Merge( item->GetBoundingBox() ); + + BOOST_REQUIRE( bbox.GetWidth() > 0 ); + BOOST_REQUIRE( bbox.GetHeight() > 0 ); + + // Content should be within the page boundaries + int margin = schIUScale.MilsToIU( 500 ); + + BOOST_CHECK_GE( bbox.GetOrigin().x, -margin ); + BOOST_CHECK_GE( bbox.GetOrigin().y, -margin ); + BOOST_CHECK_LE( bbox.GetEnd().x, pageSizeIU.x + margin ); + BOOST_CHECK_LE( bbox.GetEnd().y, pageSizeIU.y + margin ); +} + + +// ============================================================================ +// Properties-based search paths +// ============================================================================ + +BOOST_AUTO_TEST_CASE( PowerDetectionWithProjectOverride ) +{ + // When a project provides its own gnd-1.sym without a net= attribute, + // the importer should still detect it as a power symbol by inheriting + // the builtin's net= attribute. + SCH_SHEET* sheet = LoadGedaSchematic( "/io/geda/power_override_test/power_override_test.sch" ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + bool foundPower = false; + + for( SCH_ITEM* item : sheet->GetScreen()->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + LIB_SYMBOL* libSym = sym->GetLibSymbolRef().get(); + + if( !libSym ) + continue; + + if( libSym->IsGlobalPower() ) + { + foundPower = true; + BOOST_CHECK_EQUAL( sym->GetField( FIELD_T::VALUE )->GetText(), wxString( wxT( "GND" ) ) ); + BOOST_CHECK( !sym->GetField( FIELD_T::REFERENCE )->IsVisible() ); + } + } + + BOOST_CHECK_MESSAGE( foundPower, + "gnd-1.sym without net= attribute should still be detected as power " + "symbol when builtin has net=GND:1" ); +} + + +BOOST_AUTO_TEST_CASE( PropertiesSearchPaths ) +{ + std::string extraDir = KI_TEST::GetEeschemaTestDataDir() + "/io/geda/extra-syms"; + + std::map props; + props["sym_search_paths"] = extraDir; + + SCH_SHEET* sheet = LoadGedaSchematicWithProperties( "/io/geda/props_test.sch", props ); + + BOOST_REQUIRE( sheet ); + BOOST_REQUIRE( sheet->GetScreen() ); + + SCH_SCREEN* screen = sheet->GetScreen(); + + for( SCH_ITEM* item : screen->Items() ) + { + if( item->Type() != SCH_SYMBOL_T ) + continue; + + SCH_SYMBOL* sym = static_cast( item ); + int pinCount = static_cast( sym->GetLibPins().size() ); + + BOOST_CHECK_MESSAGE( pinCount == 2, + "Expected 2-pin symbol from extra-syms, got " + + std::to_string( pinCount ) ); + return; + } + + BOOST_FAIL( "Symbol not found" ); +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/qa/tests/pcbnew/CMakeLists.txt b/qa/tests/pcbnew/CMakeLists.txt index 6a4b7d23c9..48e1698807 100644 --- a/qa/tests/pcbnew/CMakeLists.txt +++ b/qa/tests/pcbnew/CMakeLists.txt @@ -107,6 +107,7 @@ set( QA_PCBNEW_SRCS pcb_io/pads/test_pads_arc_structures.cpp pcb_io/pads/test_pads_part_structures.cpp pcb_io/pads/test_pads_keepout.cpp + pcb_io/geda/test_geda_pcb_import.cpp pcb_io/kicad_sexpr/test_kicad_sexpr.cpp diff --git a/qa/tests/pcbnew/pcb_io/geda/test_geda_pcb_import.cpp b/qa/tests/pcbnew/pcb_io/geda/test_geda_pcb_import.cpp new file mode 100644 index 0000000000..5fb76ffaac --- /dev/null +++ b/qa/tests/pcbnew/pcb_io/geda/test_geda_pcb_import.cpp @@ -0,0 +1,376 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright The 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 +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + + +struct GEDA_PCB_IMPORT_FIXTURE +{ + GEDA_PCB_IMPORT_FIXTURE() {} + + PCB_IO_GEDA m_plugin; +}; + + +BOOST_FIXTURE_TEST_SUITE( GedaPcbImport, GEDA_PCB_IMPORT_FIXTURE ) + + +BOOST_AUTO_TEST_CASE( CanReadBoard ) +{ + std::string goodPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + BOOST_CHECK( m_plugin.CanReadBoard( goodPath ) ); +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardLoad ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // The minimal test board has 2 elements (R1, C1) + BOOST_CHECK_EQUAL( board->Footprints().size(), 2 ); + + // Check that reference designators were imported + bool foundR1 = false; + bool foundC1 = false; + + for( FOOTPRINT* fp : board->Footprints() ) + { + if( fp->GetReference() == wxT( "R1" ) ) + foundR1 = true; + + if( fp->GetReference() == wxT( "C1" ) ) + foundC1 = true; + } + + BOOST_CHECK_MESSAGE( foundR1, "R1 footprint not found" ); + BOOST_CHECK_MESSAGE( foundC1, "C1 footprint not found" ); +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardPads ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // Both R1 and C1 should have 2 pads each + for( FOOTPRINT* fp : board->Footprints() ) + { + BOOST_CHECK_MESSAGE( fp->Pads().size() == 2, + wxString::Format( "%s should have 2 pads, has %zu", + fp->GetReference(), + fp->Pads().size() ) ); + } +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardNetlist ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // The minimal test board defines nets in a NetList section. + // Verify that at least some nets were imported. + BOOST_CHECK( board->GetNetCount() > 1 ); +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardTracks ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // The minimal test has traces on the copper layer + BOOST_CHECK( board->Tracks().size() > 0 ); +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardVias ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // Count vias among the tracks + int viaCount = 0; + + for( PCB_TRACK* track : board->Tracks() ) + { + if( track->Type() == PCB_VIA_T ) + viaCount++; + } + + BOOST_CHECK( viaCount > 0 ); +} + + +BOOST_AUTO_TEST_CASE( MinimalBoardCopperLayers ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // Should have at least 2 copper layers + BOOST_CHECK( board->GetCopperLayerCount() >= 2 ); +} + + +BOOST_AUTO_TEST_CASE( CachedLibraryFootprints ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + std::vector cached = m_plugin.GetImportedCachedLibraryFootprints(); + BOOST_CHECK_EQUAL( cached.size(), board->Footprints().size() ); + + for( FOOTPRINT* fp : cached ) + delete fp; +} + + +BOOST_AUTO_TEST_CASE( RealWorldBoardLoad ) +{ + // Test with a real-world gEDA board file + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/powermeter.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + BOOST_CHECK( board->Footprints().size() > 0 ); + BOOST_CHECK( board->Tracks().size() > 0 ); +} + + +// ============================================================================ +// File discrimination tests +// ============================================================================ + +BOOST_AUTO_TEST_CASE( RejectsNonGedaPcbFile ) +{ + std::string badPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/non_geda.pcb"; + BOOST_CHECK( !m_plugin.CanReadBoard( badPath ) ); +} + + +BOOST_AUTO_TEST_CASE( RejectsNonPcbExtension ) +{ + std::string txtPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/minimal_test.pcb"; + wxFileName fn( txtPath ); + fn.SetExt( wxT( "txt" ) ); + BOOST_CHECK( !m_plugin.CanReadBoard( fn.GetFullPath() ) ); +} + + +// ============================================================================ +// Element onsolder flag (bottom-side components) +// ============================================================================ + +BOOST_AUTO_TEST_CASE( OnsolderElementFlippedToBack ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/onsolder_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + BOOST_CHECK_EQUAL( board->Footprints().size(), 2 ); + + FOOTPRINT* r1 = nullptr; + FOOTPRINT* c1 = nullptr; + + for( FOOTPRINT* fp : board->Footprints() ) + { + if( fp->GetReference() == wxT( "R1" ) ) + r1 = fp; + else if( fp->GetReference() == wxT( "C1" ) ) + c1 = fp; + } + + BOOST_REQUIRE_MESSAGE( r1, "R1 footprint not found" ); + BOOST_REQUIRE_MESSAGE( c1, "C1 footprint not found" ); + + // R1 has no onsolder flag, should be on front + BOOST_CHECK_MESSAGE( !r1->IsFlipped(), "R1 should be on the front side" ); + + // C1 has onsolder flag, should be flipped to back + BOOST_CHECK_MESSAGE( c1->IsFlipped(), "C1 (onsolder) should be flipped to the back side" ); +} + + +// ============================================================================ +// Multi-layer board with through-hole components +// ============================================================================ + +BOOST_AUTO_TEST_CASE( MultilayerBoardCopperCount ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/multilayer_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + // Groups("1,c:2,s:3:4") defines 4 copper layers + BOOST_CHECK_EQUAL( board->GetCopperLayerCount(), 4 ); +} + + +BOOST_AUTO_TEST_CASE( MultilayerBoardThroughHolePins ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/multilayer_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + for( FOOTPRINT* fp : board->Footprints() ) + { + if( fp->GetReference() != wxT( "U1" ) ) + continue; + + BOOST_CHECK_EQUAL( fp->Pads().size(), 8 ); + + for( PAD* pad : fp->Pads() ) + { + BOOST_CHECK_MESSAGE( pad->GetAttribute() == PAD_ATTRIB::PTH, + "DIP8 pad " + pad->GetNumber() + " should be PTH" ); + } + + return; + } + + BOOST_FAIL( "U1 footprint not found" ); +} + + +BOOST_AUTO_TEST_CASE( MultilayerBoardNetAssignment ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/multilayer_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + bool foundGND = false; + bool foundVCC = false; + + for( int i = 0; i < board->GetNetCount(); i++ ) + { + NETINFO_ITEM* net = board->GetNetInfo().GetNetItem( i ); + + if( !net ) + continue; + + if( net->GetNetname() == wxT( "GND" ) ) + foundGND = true; + + if( net->GetNetname() == wxT( "VCC" ) ) + foundVCC = true; + } + + BOOST_CHECK_MESSAGE( foundGND, "Net GND not found" ); + BOOST_CHECK_MESSAGE( foundVCC, "Net VCC not found" ); +} + + +BOOST_AUTO_TEST_CASE( MultilayerBoardVias ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/multilayer_test.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + + int viaCount = 0; + int trackCount = 0; + + for( PCB_TRACK* track : board->Tracks() ) + { + if( track->Type() == PCB_VIA_T ) + viaCount++; + else + trackCount++; + } + + BOOST_CHECK_EQUAL( viaCount, 1 ); + BOOST_CHECK_EQUAL( trackCount, 4 ); +} + + +// ============================================================================ +// Real-world boards +// ============================================================================ + +BOOST_AUTO_TEST_CASE( GoodfetBoardLoad ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/goodfet50.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + BOOST_CHECK( board->Footprints().size() > 5 ); + BOOST_CHECK( board->Tracks().size() > 10 ); +} + + +BOOST_AUTO_TEST_CASE( Scsi2sdBoardLoad ) +{ + std::string dataPath = KI_TEST::GetPcbnewTestDataDir() + "/io/geda/scsi2sd.pcb"; + + std::unique_ptr board( m_plugin.LoadBoard( dataPath, nullptr ) ); + + BOOST_REQUIRE( board ); + BOOST_CHECK( board->Footprints().size() > 10 ); + BOOST_CHECK( board->Tracks().size() > 50 ); +} + + +BOOST_AUTO_TEST_SUITE_END()