qa: added missing files

This commit is contained in:
Tomasz Wlostowski 2020-10-07 17:49:27 +02:00
parent d24e0ea7a0
commit 1d34845683
10 changed files with 1413 additions and 0 deletions

137
qa/drc_proto/drc_proto.cpp Normal file
View File

@ -0,0 +1,137 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019-2020 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 <string>
#include <common.h>
#include <profile.h>
#include <wx/cmdline.h>
#include <property_mgr.h>
#include <pcbnew_utils/board_file_utils.h>
#include <pcbnew/drc/drc_engine.h>
#include <pcbnew/class_board.h>
#include <pcbnew/drc/drc_rule_parser.h>
#include <pcbnew/drc/drc_test_provider.h>
#include <pcbnew/pcb_expr_evaluator.h>
#include <kicad_string.h>
#include <connectivity/connectivity_data.h>
#include <connectivity/connectivity_algo.h>
#include <reporter.h>
#include <widgets/progress_reporter.h>
#include <project.h>
#include <settings/settings_manager.h>
#include <wildcards_and_files_ext.h>
#include <pgm_base.h>
#include <kiway.h>
#include <kiface_ids.h>
#include "drc_proto.h"
PROJECT_CONTEXT loadKicadProject( wxString filename, OPT<wxString> rulesFilePath )
{
PROJECT_CONTEXT rv;
auto &manager = Pgm().GetSettingsManager();
wxFileName pro( filename );
wxFileName brdName ( filename );
wxFileName schName ( filename );
wxFileName ruleFileName ( filename );
pro.SetExt( ProjectFileExtension );
brdName.SetExt( KiCadPcbFileExtension );
schName.SetExt( KiCadSchematicFileExtension );
ruleFileName.SetExt( DesignRulesFileExtension );
brdName.MakeAbsolute();
schName.MakeAbsolute();
ruleFileName.MakeAbsolute();
pro.MakeAbsolute();
manager.LoadProject( pro.GetFullPath() );
rv.project = &manager.Prj();
rv.board.reset( KI_TEST::ReadBoardFromFileOrStream( (const char *) brdName.GetFullPath() ).release() );
rv.board->SetProject( rv.project );
if( rulesFilePath )
rv.rulesFilePath = *rulesFilePath;
else
rv.rulesFilePath = ruleFileName.GetFullPath();
if( wxFileExists( schName.GetFullPath() ) )
{
//printf("Generating SCH netlist for '%s'\n", (const char*) schName.GetFullPath() );
//rv.netlist.reset( new NETLIST );
//generateSchematicNetlist( schName.GetFullPath(), *rv.netlist.get() );
}
return rv;
}
int runDRCProto( PROJECT_CONTEXT project, std::shared_ptr<KIGFX::VIEW_OVERLAY> aDebugOverlay )
{
std::shared_ptr<DRC_ENGINE> drcEngine( new DRC_ENGINE );
CONSOLE_LOG consoleLog;
project.board->GetDesignSettings().m_DRCEngine = drcEngine;
drcEngine->SetBoard( project.board.get() );
drcEngine->SetDesignSettings( &project.board->GetDesignSettings() );
drcEngine->SetLogReporter( new CONSOLE_MSG_REPORTER ( &consoleLog ) );
drcEngine->SetProgressReporter( new CONSOLE_PROGRESS_REPORTER ( &consoleLog ) );
drcEngine->SetViolationHandler(
[&]( const std::shared_ptr<DRC_ITEM>& aItem, wxPoint aPos )
{
// fixme
} );
drcEngine->InitEngine( project.rulesFilePath );
drcEngine->SetDebugOverlay( aDebugOverlay );
for( auto provider : drcEngine->GetTestProviders() )
{
//if( provider->GetName() == "diff_pair_coupling" )
// provider->Enable(true);
//else
// provider->Enable(false);
}
drcEngine->RunTests();
return 0;
}

173
qa/drc_proto/drc_proto.h Normal file
View File

@ -0,0 +1,173 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __DRC_PROTO_H
#define __DRC_PROTO_H
#include <string>
#include <common.h>
#include <widgets/progress_reporter.h>
#include <reporter.h>
#include <core/optional.h>
#include <netlist_reader/pcb_netlist.h>
#include <netlist_reader/netlist_reader.h>
class BOARD;
class CONSOLE_LOG
{
public:
enum COLOR {
RED = 0,
GREEN,
DEFAULT
};
CONSOLE_LOG() {};
void PrintProgress( const wxString& aMessage )
{
if( m_lastLineIsProgressBar )
eraseLastLine();
printf("%s", (const char *) aMessage.c_str() );
fflush(stdout);
m_lastLineIsProgressBar = true;
}
void Print( const wxString& aMessage )
{
if( m_lastLineIsProgressBar )
eraseLastLine();
printf("%s", (const char *) aMessage.c_str() );
fflush(stdout);
m_lastLineIsProgressBar = false;
}
void SetColor( COLOR color )
{
std::map<COLOR, wxString> colorMap =
{
{ RED, "\033[0;31m" },
{ GREEN, "\033[0;32m" },
{ DEFAULT, "\033[0;37m" }
};
printf( "%s", (const char*) colorMap[ color ].c_str() );
fflush(stdout);
}
private:
void eraseLastLine()
{
printf("\r\033[K");
fflush(stdout);
}
bool m_lastLineIsProgressBar = false;
std::mutex m_lock;
};
class CONSOLE_PROGRESS_REPORTER : public PROGRESS_REPORTER
{
public:
CONSOLE_PROGRESS_REPORTER( CONSOLE_LOG* log ) :
PROGRESS_REPORTER( 0 ),
m_log( log ) {};
~CONSOLE_PROGRESS_REPORTER() {};
virtual void SetCurrentProgress( double aProgress ) override
{
PROGRESS_REPORTER::SetCurrentProgress( aProgress );
updateUI();
}
private:
virtual bool updateUI() override
{
m_log->SetColor( CONSOLE_LOG::GREEN );
m_log->PrintProgress( wxString::Format( " | %s : %.02f%%", m_rptMessage, (double) m_progress / (double) m_maxProgress * 100.0 ) );
return true;
}
CONSOLE_LOG* m_log;
};
class CONSOLE_MSG_REPORTER : public REPORTER
{
public:
CONSOLE_MSG_REPORTER( CONSOLE_LOG *log ) :
m_log(log)
{};
~CONSOLE_MSG_REPORTER() {};
virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override
{
switch( aSeverity )
{
case RPT_SEVERITY_ERROR:
m_log->SetColor( CONSOLE_LOG::RED );
m_log->Print("ERROR | ");
break;
default:
m_log->SetColor( CONSOLE_LOG::DEFAULT );
m_log->Print(" | ");
}
m_log->SetColor( CONSOLE_LOG::DEFAULT );
m_log->Print( aText + "\n" );
return *this;
}
virtual bool HasMessage() const override
{
return true;
}
private:
CONSOLE_LOG* m_log;
};
struct PROJECT_CONTEXT {
PROJECT* project;
wxString rulesFilePath;
std::shared_ptr<BOARD> board;
std::shared_ptr<NETLIST> netlist;
};
PROJECT_CONTEXT loadKicadProject( wxString filename, OPT<wxString> rulesFilePath );
int runDRCProto( PROJECT_CONTEXT project, std::shared_ptr<KIGFX::VIEW_OVERLAY> aDebugOverlay = nullptr);
#endif

View File

@ -0,0 +1,11 @@
(version 20200610)
(rule "pad2pad_clearance_back"
(condition "A.type == 'Pad' && B.type == 'Pad' && (A.onlayer('B.Cu'))" )
(constraint clearance (min "1mm") )
)
(rule "default"
(constraint clearance (min "0.2mm") )
)

View File

@ -0,0 +1,59 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"hidden_nets": [],
"high_contrast_mode": 0,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30
],
"visible_layers": "0ffff_80000007"
},
"meta": {
"filename": "board.kicad_prl",
"version": 1
}
}

View File

@ -0,0 +1,179 @@
{
"board": {
"design_settings": {
"defaults": {
"board_outline_line_width": 0.2032,
"copper_line_width": 0.30479999999999996,
"copper_text_italic": false,
"copper_text_size_h": 1.524,
"copper_text_size_v": 1.524,
"copper_text_thickness": 0.2032,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 1,
"dimension_units": 0,
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.09999999999999999,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 3.2,
"height": 7.0,
"width": 7.0
},
"silk_line_width": 0.30479999999999996,
"silk_text_italic": false,
"silk_text_size_h": 1.27,
"silk_text_size_v": 1.27,
"silk_text_thickness": 0.2032,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.39999999999999997
}
},
"diff_pair_dimensions": [
{
"gap": 0.25,
"via_gap": 0.25,
"width": 0.2
}
],
"drc_exclusions": [],
"meta": {
"version": 0
},
"rule_severities": {
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"drill_too_small": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"keepout": "error",
"malformed_courtyard": "error",
"microvia_drill_too_small": "error",
"microvia_too_small": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_annulus": "error",
"via_dangling": "warning",
"via_hole_larger_than_pad": "error",
"via_too_small": "error",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_copper_edge_clearance": 0.01,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.508,
"min_microvia_drill": 0.127,
"min_through_hole_diameter": 0.508,
"min_track_width": 0.2032,
"min_via_annulus": 0.049999999999999996,
"min_via_diameter": 0.889,
"solder_mask_clearance": 0.254,
"solder_mask_min_width": 0.0,
"solder_paste_clearance": 0.0,
"solder_paste_margin_ratio": 0.0
},
"track_widths": [
0.2032
],
"via_dimensions": [
{
"diameter": 0.889,
"drill": 0.635
}
],
"zones_use_no_outline": false
},
"layer_presets": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "board.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"clearance": 0.2032,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"microvia_diameter": 0.508,
"microvia_drill": 0.127,
"name": "Default",
"track_width": 0.2032,
"via_diameter": 0.889,
"via_drill": 0.635
},
{
"clearance": 0.2286,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"microvia_diameter": 0.508,
"microvia_drill": 0.127,
"name": "pwr",
"nets": [],
"track_width": 0.2286,
"via_diameter": 0.889,
"via_drill": 0.635
}
],
"meta": {
"version": 0
},
"net_colors": null
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vmrl": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"legacy_lib_dir": "",
"legacy_lib_list": []
},
"sheets": [],
"text_variables": {}
}

View File

@ -0,0 +1,20 @@
(version 20200610)
(rule "default"
( constraint edge_clearance (min "0.5mm") )
( constraint silk_pad_clearance (min "0.5mm") )
( constraint silk_silk_clearance (min "0.5mm") )
( constraint diff_pair_width )
( constraint diff_pair_gap )
( constraint diff_pair_via_gap )
( constraint diff_pair_matched_length )
( constraint max_skew )
)

View File

@ -0,0 +1,310 @@
(kicad_pcb (version 20200724) (host pcbnew "(5.99.0-2470-gb06c158764-dirty)")
(general
(thickness 1.6002)
(drawings 7)
(tracks 28)
(modules 6)
(nets 5)
)
(paper "A3")
(title_block
(title "KiCad demo")
(date "2015-10-14")
(rev "1.A")
)
(layers
(0 "Composant" signal)
(1 "GND_layer" signal)
(2 "VCC_layer" signal)
(31 "Cuivre" signal)
(32 "B.Adhes" user)
(33 "F.Adhes" user)
(34 "B.Paste" user)
(35 "F.Paste" user)
(36 "B.SilkS" user)
(37 "F.SilkS" user)
(38 "B.Mask" user)
(39 "F.Mask" user)
(40 "Dwgs.User" user)
(41 "Cmts.User" user)
(42 "Eco1.User" user)
(43 "Eco2.User" user)
(44 "Edge.Cuts" user)
(45 "Margin" user)
(46 "B.CrtYd" user)
(47 "F.CrtYd" user)
)
(setup
(aux_axis_origin 40.9 173.1)
(pcbplotparams
(layerselection 0x010fc_80000007)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(svguseinch false)
(svgprecision 6)
(excludeedgelayer false)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin true)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(sketchpadsonfab false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 0)
(scaleselection 1)
(outputdirectory "plots")
)
)
(net 0 "")
(net 1 "Net1")
(net 2 "Net2")
(net 3 "Net3")
(net 4 "Net4")
(module "lib_smd:SM1206" (layer "Composant") (tedit 5F1AFF3A) (tstamp 00000000-0000-0000-0000-00005402cf81)
(at 60.66 26.51 90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760f80")
(attr smd)
(fp_text reference "R10" (at 0 0 270) (layer "F.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp da150652-2846-4482-abb7-c0153df1f1a8)
)
(fp_text value "1K" (at 0 0 270) (layer "F.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 26e96a7d-01f3-41ea-bd97-088bbd1adcfe)
)
(fp_line (start -2.54 1.143) (end -0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp 0a6ed827-a1ce-421c-ad38-d3ad8173b150))
(fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp 2c5feb20-7cc1-4bde-a850-7bb547935d76))
(fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp 2d82e9f5-8a6a-4092-a430-eba549476e82))
(fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp 2fb22259-68fc-4e9c-9acd-32e139163ab4))
(fp_line (start 2.54 1.143) (end 0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp adcd8f67-5bbf-4fc5-b2cb-d0930aba6332))
(fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp ec40258a-ce28-4182-a8a4-90e0beaa79f4))
(pad "1" thru_hole rect (at -1.651 0 90) (size 1.524 2.032) (drill 1) (layers *.Cu *.Mask)
(net 2 "Net2") (tstamp d85d64ec-0c45-4808-b66c-a6e95250cd7d))
(pad "2" smd rect (at 1.651 0 90) (size 1.524 2.032) (layers "Composant" "F.Paste" "F.Mask")
(net 4 "Net4") (tstamp b1cfb053-add6-4c39-a602-ee8cec92ed6d))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(module "lib_smd:SM1206" (layer "Composant") (tedit 54019107) (tstamp 00000000-0000-0000-0000-00005402cf8c)
(at 57.26 50.29 -90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760fbc")
(attr smd)
(fp_text reference "R11" (at 0 0 90) (layer "F.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 32be642b-937a-4421-8813-4374c03e1d6b)
)
(fp_text value "1K" (at 0 0 90) (layer "F.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 1816928c-17d7-48ce-bee8-1741317d10ac)
)
(fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp 2b9557e5-e0b3-423c-86ee-54738cae7bd2))
(fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp 31d6a4c9-c879-4883-9ae6-151f2ee7b0f1))
(fp_line (start -2.54 1.143) (end -0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp 64afb3d7-59d9-480f-8afe-2fad3014a2c2))
(fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp 8efd779d-1807-4503-80d0-0ebe2419b838))
(fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp a15f31b1-286c-4230-833f-ecb13c2a63b7))
(fp_line (start 2.54 1.143) (end 0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp c4588b05-d768-4848-92eb-0ce90965459b))
(pad "1" smd rect (at -1.651 0 270) (size 1.524 2.032) (layers "Composant" "F.Paste" "F.Mask")
(net 3 "Net3") (tstamp aa67310d-5884-4d05-8dcf-bf41060498ff))
(pad "2" smd rect (at 1.651 0 270) (size 1.524 2.032) (layers "Composant" "F.Paste" "F.Mask")
(net 1 "Net1") (tstamp 11cb9d3f-10e3-41e4-b53f-517fc40917f8))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(module "lib_smd:SM1206" (layer "Composant") (tedit 5F1AFF3A) (tstamp 62f63c2d-5de7-4136-94e8-8bc3f03545b5)
(at 53.56 43.68 90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760f80")
(attr smd)
(fp_text reference "R10" (at 0 0 270) (layer "F.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp c97d29fa-3f85-4a3a-95c1-1cbc45fb9e1e)
)
(fp_text value "1K" (at 0 0 270) (layer "F.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 50091b90-a4f6-4cfc-b220-05ab2fec5964)
)
(fp_line (start 0.889 -1.143) (end 2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp 4d5698b8-7842-481b-a7bd-33b032fd3a13))
(fp_line (start -2.54 1.143) (end -0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp 6003f482-46ce-4725-9a26-272441c23cbb))
(fp_line (start 2.54 -1.143) (end 2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp 63a8aa6b-e16e-41fa-838b-ee00c835b4eb))
(fp_line (start -0.889 -1.143) (end -2.54 -1.143) (layer "F.SilkS") (width 0.127) (tstamp 72181855-ec9b-4540-b21a-8ae1df278ae4))
(fp_line (start -2.54 -1.143) (end -2.54 1.143) (layer "F.SilkS") (width 0.127) (tstamp a8fdd33d-4066-49a5-ad54-1c695bc743c0))
(fp_line (start 2.54 1.143) (end 0.889 1.143) (layer "F.SilkS") (width 0.127) (tstamp eaf060d2-a6fa-45b6-a910-72c92e1bd176))
(pad "1" thru_hole rect (at -1.651 0 90) (size 1.524 2.032) (drill 1) (layers *.Cu *.Mask)
(net 2 "Net2") (tstamp d85d64ec-0c45-4808-b66c-a6e95250cd7d))
(pad "2" smd rect (at 1.651 0 90) (size 1.524 2.032) (layers "Composant" "F.Paste" "F.Mask")
(net 4 "Net4") (tstamp b1cfb053-add6-4c39-a602-ee8cec92ed6d))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(module "lib_smd:SM1206" (layer "Cuivre") (tedit 5F1AFEB3) (tstamp 6839e320-e6b8-495a-b2b3-9c17db9c24c2)
(at 77.29 47.42 -90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760fbc")
(attr smd)
(fp_text reference "R11" (at 0 0 -90) (layer "B.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp 6c9d5d75-5381-4e16-be31-56c62e953955)
)
(fp_text value "1K" (at 0 0 -90) (layer "B.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp cfc24072-932d-476a-8799-bc855bcd6f94)
)
(fp_text user "${REFERENCE}" (at 0 0 -90) (layer "B.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp 98aaf6f4-aeff-490d-b426-ed3ea79e409e)
)
(fp_text user "${VALUE}" (at 0 0 -90) (layer "B.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp a7ff2e67-23da-4026-aa9c-8fbbcd438cd7)
)
(fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 243c1190-748e-40da-b135-52c103061a9a))
(fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 5ad8dcc3-639a-4ff4-b812-cadfbd3c45eb))
(fp_line (start 0.889 1.143) (end 2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp 966d9104-e5b2-4af0-8380-c0cc1b472081))
(fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 9fe32d4e-cd36-4621-86dc-04b40ea28488))
(fp_line (start -0.889 1.143) (end -2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp bbef550f-3d7b-40c5-a369-a92fdb131d09))
(fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp c4f75699-5c60-43be-9273-447f7e937019))
(pad "1" thru_hole rect (at -1.651 0 270) (size 1.524 2.032) (drill 1) (layers *.Cu *.Mask)
(net 3 "Net3") (tstamp aa67310d-5884-4d05-8dcf-bf41060498ff))
(pad "2" smd rect (at 1.651 0 270) (size 1.524 2.032) (layers "Cuivre" "B.Paste" "B.Mask")
(net 1 "Net1") (tstamp 11cb9d3f-10e3-41e4-b53f-517fc40917f8))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(module "lib_smd:SM1206" (layer "Cuivre") (tedit 54019107) (tstamp 7878478d-dbff-4e07-9acb-bbb7715fff75)
(at 74.75 42.046 -90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760f80")
(attr smd)
(fp_text reference "R10" (at 0 0 -270) (layer "B.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp d9a9766d-8462-45d0-84af-44eb0b8b676f)
)
(fp_text value "1K" (at 0 0 -270) (layer "B.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp 9379d568-7c3d-4b0f-af91-d304a27665b2)
)
(fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 01d8d962-fa7d-487b-a13f-d91a1785d8fe))
(fp_line (start 0.889 1.143) (end 2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp 47f13511-dbc0-4eaf-958d-38f9d6411b11))
(fp_line (start -0.889 1.143) (end -2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp 9c5ebfe9-a9a1-4c67-af77-8473bbc20a8b))
(fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp a0decc16-4599-4964-b22c-a8a9d1c62b3e))
(fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp c2160f97-eccd-4065-9e35-a39ec0935a8c))
(fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp d98fa1cd-3e0c-4d59-96a9-182045b4db05))
(pad "1" smd rect (at -1.651 0 270) (size 1.524 2.032) (layers "Cuivre" "B.Paste" "B.Mask")
(net 2 "Net2") (tstamp d85d64ec-0c45-4808-b66c-a6e95250cd7d))
(pad "2" smd rect (at 1.651 0 270) (size 1.524 2.032) (layers "Cuivre" "B.Paste" "B.Mask")
(net 4 "Net4") (tstamp b1cfb053-add6-4c39-a602-ee8cec92ed6d))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(module "lib_smd:SM1206" (layer "Cuivre") (tedit 5F1AFEB3) (tstamp cf6d41b6-be24-4142-a50b-7bf0419214d3)
(at 77.31 42.02 90)
(path "/00000000-0000-0000-0000-00004bf0367f/00000000-0000-0000-0000-000022760fbc")
(attr smd)
(fp_text reference "R11" (at 0 0 -90) (layer "B.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp bd7c394f-e3f3-4c3b-9fc1-b2dbd95bcba2)
)
(fp_text value "1K" (at 0 0 -90) (layer "B.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp 5db512ad-3a40-4e1b-95c7-676959a6f69e)
)
(fp_text user "${REFERENCE}" (at -0.08 3.02 -90) (layer "B.SilkS")
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp a4c51c66-f116-4f86-8760-bf1bfbdfca4e)
)
(fp_text user "${VALUE}" (at -0.08 3.02 -90) (layer "B.SilkS") hide
(effects (font (size 0.762 0.762) (thickness 0.127)) (justify mirror))
(tstamp ee9d8cf5-f63a-45f5-aeeb-574c34bd7676)
)
(fp_line (start 2.54 1.143) (end 2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 1c3b4780-a468-4611-98e3-08b03761e1a9))
(fp_line (start -2.54 -1.143) (end -0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 2f28c98b-3003-41fb-bf3c-c8060c15ddb3))
(fp_line (start -0.889 1.143) (end -2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp 39d92047-85c9-48de-8284-5b1ca983b249))
(fp_line (start -2.54 1.143) (end -2.54 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 59330c43-31b9-48e2-89d7-5502209ecf10))
(fp_line (start 2.54 -1.143) (end 0.889 -1.143) (layer "B.SilkS") (width 0.127) (tstamp 65a55daf-02a0-4605-9ca9-60f0378ab577))
(fp_line (start 0.889 1.143) (end 2.54 1.143) (layer "B.SilkS") (width 0.127) (tstamp c996da25-315b-4992-9a2d-fb11e18eefb1))
(pad "1" thru_hole rect (at -1.651 0 90) (size 1.524 2.032) (drill 1) (layers *.Cu *.Mask)
(net 3 "Net3") (tstamp aa67310d-5884-4d05-8dcf-bf41060498ff))
(pad "2" smd rect (at 1.651 0 90) (size 1.524 2.032) (layers "Cuivre" "B.Paste" "B.Mask")
(net 1 "Net1") (tstamp 11cb9d3f-10e3-41e4-b53f-517fc40917f8))
(model "SMD_Packages.3dshapes/SMD-1206.wrl"
(at (xyz 0 0 0))
(scale (xyz 0.17 0.16 0.16))
(rotate (xyz 0 0 0))
)
)
(gr_line (start 56.68 23.92) (end 78.67 29.48) (layer "Edge.Cuts") (width 0.2032) (tstamp 474b8fab-d96d-474a-8c61-c7e2227329f8))
(gr_line (start 78.59 29.47) (end 86.44 39.17) (layer "Edge.Cuts") (width 0.2032) (tstamp 5840e644-6b66-44f1-845b-59fe9e9bb901))
(gr_line (start 75.97 61.76) (end 47.64 56.73) (layer "Edge.Cuts") (width 0.2032) (tstamp 676cd0a0-0234-4236-888b-4a7984fb9c70))
(gr_line (start 47.64 56.73) (end 45.28 39.94) (layer "Edge.Cuts") (width 0.2032) (tstamp 67c6ebce-4603-490b-a1e3-1a9ac74324f1))
(gr_line (start 86.44 39.17) (end 75.97 61.76) (layer "Edge.Cuts") (width 0.2032) (tstamp d2f503b1-ed74-4d31-a991-bd9656ff581e))
(gr_line (start 45.28 39.94) (end 56.68 23.92) (layer "Edge.Cuts") (width 0.2032) (tstamp f8679be3-5fc7-4d34-9446-82eee2eee5bf))
(gr_text "Dupa" (at 69.51 27.22) (layer "F.SilkS") (tstamp 1c39f03d-97a7-46d9-9bed-38e617c3b619)
(effects (font (size 1.524 1.524) (thickness 0.2032)) (justify mirror))
)
(segment (start 61.7 47.13) (end 61.7 46.24) (width 0.2032) (layer "Composant") (net 1) (tstamp 2911a49d-d9ac-4dad-8965-d7abcbd48932))
(segment (start 62.67077 45.26923) (end 65.01834 45.26923) (width 0.2032) (layer "Composant") (net 1) (tstamp 5223ac82-4207-4e56-8f80-fc8163229ff2))
(segment (start 61.7 46.24) (end 62.67077 45.26923) (width 0.2032) (layer "Composant") (net 1) (tstamp 78574693-36f7-41c3-8372-1beb483f4919))
(segment (start 57.26 51.941) (end 57.26 51.57) (width 0.2032) (layer "Composant") (net 1) (tstamp 8a8d348d-69c0-4919-a6e5-75f8709b0d4b))
(segment (start 65.01834 45.26923) (end 64.87 45.26923) (width 0.2032) (layer "Composant") (net 1) (tstamp f3f895af-921c-4405-9d2c-a994ff46a36e))
(segment (start 57.26 51.57) (end 61.7 47.13) (width 0.2032) (layer "Composant") (net 1) (tstamp f694334e-a9e7-4d5c-a90b-b15a26d06084))
(segment (start 77.31 39.77) (end 84.88 32.2) (width 0.2032) (layer "Cuivre") (net 1) (tstamp 054c3a3d-6273-48aa-b503-07ff4f30ed20))
(segment (start 77.31 40.369) (end 77.31 40.03) (width 0.2032) (layer "Cuivre") (net 1) (tstamp 44d2121f-742d-41b0-b6c7-957e6c8e6fa4))
(segment (start 84.88 32.2) (end 84.88 32.19) (width 0.2032) (layer "Cuivre") (net 1) (tstamp 6693b7e0-4787-4a5c-bdfa-1148a6c61bcd))
(segment (start 77.31 40.369) (end 77.31 39.77) (width 0.2032) (layer "Cuivre") (net 1) (tstamp a4ee6832-cebc-44f0-9404-95c1a8125935))
(segment (start 65.95641 44.45641) (end 66.48 44.98) (width 0.2032) (layer "Composant") (net 2) (tstamp 14bb23f7-15be-43d6-82ba-05802d6e870c))
(segment (start 74.11 44.98) (end 74.75 44.34) (width 0.2032) (layer "Composant") (net 2) (tstamp 33b71764-2dee-43d4-862d-4ce8ab506b73))
(segment (start 74.75 44.34) (end 74.75 40.395) (width 0.2032) (layer "Composant") (net 2) (tstamp 34677ff2-0a86-43cc-8da2-df756ebaf399))
(segment (start 66.48 44.98) (end 74.11 44.98) (width 0.2032) (layer "Composant") (net 2) (tstamp 58870eeb-1ee8-4365-81f6-644d10260a70))
(segment (start 60.40359 44.45641) (end 60.89166 44.45641) (width 0.2032) (layer "Composant") (net 2) (tstamp 8e2d1065-302e-482f-81b6-3d31d0643e24))
(segment (start 59.523 45.337) (end 60.40359 44.45641) (width 0.2032) (layer "Composant") (net 2) (tstamp c954b2e0-51d2-4950-8f2a-7143adff5865))
(segment (start 57.26 45.337) (end 59.523 45.337) (width 0.2032) (layer "Composant") (net 2) (tstamp ef9660dc-199b-4386-8c7f-92cec3d85773))
(segment (start 60.89166 44.45641) (end 65.95641 44.45641) (width 0.2032) (layer "Composant") (net 2) (tstamp efec1be9-cdeb-40da-a27f-a503d55d30a2))
(via (at 74.75 40.395) (size 0.889) (drill 0.635) (layers "Composant" "Cuivre") (net 2) (tstamp 2ee707fc-c4c2-436b-9f8a-082000400e64))
(segment (start 57.26 48.639) (end 61.03618 44.86282) (width 0.2032) (layer "Composant") (net 3) (tstamp 18e8fb07-1048-4440-81bf-85c3063dee17))
(segment (start 61.03618 44.86282) (end 64.85 44.86282) (width 0.2032) (layer "Composant") (net 3) (tstamp eac47d05-6561-4d3b-88a5-073ca5967b09))
(segment (start 67.26 44.05) (end 67.56 43.75) (width 0.2032) (layer "Composant") (net 4) (tstamp 3b16deb7-8d8e-44b8-b5c1-b34386add5b7))
(segment (start 65.86 44.05) (end 67.26 44.05) (width 0.2032) (layer "Composant") (net 4) (tstamp 4f87807d-8760-44de-8181-8c3a080a5a75))
(segment (start 59.045 42.035) (end 61.06 44.05) (width 0.2032) (layer "Composant") (net 4) (tstamp 6d7d1289-6535-423f-a199-f228105c6d91))
(segment (start 57.26 42.035) (end 59.045 42.035) (width 0.2032) (layer "Composant") (net 4) (tstamp 75276ab2-082f-49bf-89bf-cb2785abb992))
(segment (start 61.06 44.05) (end 65.86 44.05) (width 0.2032) (layer "Composant") (net 4) (tstamp 84f97f24-934c-4869-a0a5-9b902def1b2b))
(segment (start 67.56 43.75) (end 72.99 43.75) (width 0.2032) (layer "Composant") (net 4) (tstamp ae29a614-f3a7-4e3a-8466-54ac0eb68621))
(via (at 72.99 43.75) (size 0.889) (drill 0.635) (layers "Composant" "Cuivre") (net 4) (tstamp 3a8e56c3-5066-45b4-9519-5a33d6834af0))
)

View File

@ -0,0 +1,66 @@
{
"board": {
"active_layer": 31,
"active_layer_preset": "",
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 1.0
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30
],
"visible_layers": "0ffff_80000007"
},
"meta": {
"filename": "board.kicad_prl",
"version": 2
}
}

View File

@ -0,0 +1,186 @@
{
"board": {
"design_settings": {
"defaults": {
"board_outline_line_width": 0.2032,
"copper_line_width": 0.30479999999999996,
"copper_text_italic": false,
"copper_text_size_h": 1.524,
"copper_text_size_v": 1.524,
"copper_text_thickness": 0.2032,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 1,
"dimension_units": 0,
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.09999999999999999,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 1.0,
"height": 2.032,
"width": 1.524
},
"silk_line_width": 0.30479999999999996,
"silk_text_italic": false,
"silk_text_size_h": 1.27,
"silk_text_size_v": 1.27,
"silk_text_thickness": 0.2032,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.39999999999999997
}
},
"diff_pair_dimensions": [
{
"gap": 0.25,
"via_gap": 0.25,
"width": 0.2
}
],
"drc_exclusions": [],
"meta": {
"version": 0
},
"rule_severities": {
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"drill_too_small": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"keepout": "error",
"malformed_courtyard": "error",
"microvia_drill_too_small": "error",
"microvia_too_small": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_annulus": "error",
"via_dangling": "warning",
"via_hole_larger_than_pad": "error",
"via_too_small": "error",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_copper_edge_clearance": 0.01,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.508,
"min_microvia_drill": 0.127,
"min_through_hole_diameter": 0.508,
"min_track_width": 0.2032,
"min_via_annulus": 0.049999999999999996,
"min_via_diameter": 0.889,
"solder_mask_clearance": 0.254,
"solder_mask_min_width": 0.0,
"solder_paste_clearance": 0.0,
"solder_paste_margin_ratio": 0.0
},
"track_widths": [
0.2032
],
"via_dimensions": [
{
"diameter": 0.889,
"drill": 0.635
}
],
"zones_use_no_outline": false
},
"layer_presets": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "board.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 6.0,
"clearance": 0.2032,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.508,
"microvia_drill": 0.127,
"name": "Default",
"track_width": 0.2032,
"via_diameter": 0.889,
"via_drill": 0.635,
"wire_width": 6.0
},
{
"bus_width": 6.0,
"clearance": 0.2286,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.508,
"microvia_drill": 0.127,
"name": "pwr",
"nets": [],
"track_width": 0.2286,
"via_diameter": 0.889,
"via_drill": 0.635,
"wire_width": 6.0
}
],
"meta": {
"version": 0
},
"net_colors": null
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "./",
"specctra_dsn": "",
"step": "",
"vmrl": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"legacy_lib_dir": "",
"legacy_lib_list": []
},
"sheets": [],
"text_variables": {}
}

View File

@ -0,0 +1,272 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.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
*/
/*
This is a program launcher for a single KIFACE DSO. It only mimics a KIWAY,
not actually implements one, since only a single DSO is supported by it.
It is compiled multiple times, once for each standalone program and as such
gets different compiler command line supplied #defines from CMake.
*/
#include <typeinfo>
#include <macros.h>
#include <fctsys.h>
#include <wx/filename.h>
#include <wx/stdpaths.h>
#include <wx/snglinst.h>
#include <wx/html/htmlwin.h>
#include <pgm_base.h>
#include <kiface_i.h>
#include <kiway.h>
#include <pgm_base.h>
#include <kiway_player.h>
#include <confirm.h>
#include <settings/settings_manager.h>
#include <qa_utils/utility_registry.h>
static struct IFACE : public KIFACE_I
{
// Of course all are overloads, implementations of the KIFACE.
IFACE( const char* aName, KIWAY::FACE_T aType ) :
KIFACE_I( aName, aType )
{}
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override
{
return true;
}
void OnKifaceEnd() override {}
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
{
assert( false );
return nullptr;
}
/**
* Function IfaceOrAddress
* return a pointer to the requested object. The safest way to use this
* is to retrieve a pointer to a static instance of an interface, similar to
* how the KIFACE interface is exported. But if you know what you are doing
* use it to retrieve anything you want.
*
* @param aDataId identifies which object you want the address of.
*
* @return void* - and must be cast into the know type.
*/
void* IfaceOrAddress( int aDataId ) override
{
return NULL;
}
}
kiface( "pcb_test_frame", KIWAY::FACE_PCB );
KIWAY Kiway( &Pgm(), KFCTL_STANDALONE );
static struct PGM_TEST_FRAME : public PGM_BASE
{
bool OnPgmInit();
void OnPgmExit()
{
printf("Destroy\n");
Kiway.OnKiwayEnd();
// Destroy everything in PGM_BASE, especially wxSingleInstanceCheckerImpl
// earlier than wxApp and earlier than static destruction would.
PGM_BASE::Destroy();
}
void MacOpenFile( const wxString& aFileName ) override
{
wxFileName filename( aFileName );
if( filename.FileExists() )
{
#if 0
// this pulls in EDA_DRAW_FRAME type info, which we don't want in
// the single_top link image.
KIWAY_PLAYER* frame = dynamic_cast<KIWAY_PLAYER*>( App().GetTopWindow() );
#else
KIWAY_PLAYER* frame = (KIWAY_PLAYER*) App().GetTopWindow();
#endif
if( frame )
frame->OpenProjectFiles( std::vector<wxString>( 1, aFileName ) );
}
}
}
program;
PGM_BASE& Pgm()
{
return program;
}
// Similar to PGM_BASE& Pgm(), but return nullptr when a *.ki_face
// is run from a python script, mot from a Kicad application
PGM_BASE* PgmOrNull()
{
return &program;
}
KIFACE_I& Kiface()
{
return kiface;
}
/**
* Struct APP_SINGLE_TOP
* implements a bare naked wxApp (so that we don't become dependent on
* functionality in a wxApp derivative that we cannot deliver under wxPython).
*/
struct APP_TEST : public wxApp
{
APP_TEST()
{}
bool OnInit() override
{
try
{
if( !program.OnPgmInit() )
{
program.OnPgmExit();
return false;
}
KI_TEST::COMBINED_UTILITY c_util;
auto app = wxApp::GetInstance();
auto ret = c_util.HandleCommandLine( app->argc, app->argv );
if( ret != KI_TEST::RET_CODES::OK)
return false;
return true;
}
catch( const std::exception& e )
{
wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
GetChars( FROM_UTF8( typeid(e).name() )),
GetChars( FROM_UTF8( e.what() ) ) );
}
catch( const IO_ERROR& ioe )
{
wxLogError( GetChars( ioe.What() ) );
}
catch(...)
{
wxLogError( wxT( "Unhandled exception of unknown type" ) );
}
program.OnPgmExit();
return false;
}
int OnExit() override
{
program.OnPgmExit();
return wxApp::OnExit();
}
int OnRun() override
{
int ret = -1;
try
{
ret = wxApp::OnRun();
}
catch( const std::exception& e )
{
wxLogError( wxT( "Unhandled exception class: %s what: %s" ),
GetChars( FROM_UTF8( typeid(e).name() )),
GetChars( FROM_UTF8( e.what() ) ) );
}
catch( const IO_ERROR& ioe )
{
wxLogError( GetChars( ioe.What() ) );
}
catch(...)
{
wxLogError( wxT( "Unhandled exception of unknown type" ) );
}
program.OnPgmExit();
return ret;
}
};
bool PGM_TEST_FRAME::OnPgmInit()
{
if( !InitPgm() )
return false;
return true;
}
void SetTopFrame ( wxFrame* aFrame )
{
Pgm().App().SetTopWindow( aFrame ); // wxApp gets a face.
aFrame->Show();
}
IMPLEMENT_APP_NO_MAIN(APP_TEST);
#ifndef TEST_APP_NO_MAIN
int main( int argc, char** argv )
{
wxInitialize( argc, argv );
Pgm().InitPgm();
auto ret = wxEntry( argc, argv );
// This causes some glib warnings on GTK3 (http://trac.wxwidgets.org/ticket/18274)
// but without it, Valgrind notices a lot of leaks from WX
wxUninitialize();
return ret;
}
#endif