diff --git a/src/autotest/autotest.pro b/src/autotest/autotest.pro index fcccc83..1da6d6d 100644 --- a/src/autotest/autotest.pro +++ b/src/autotest/autotest.pro @@ -6,6 +6,7 @@ DESTDIR = "$$PWD/../../bin" CONFIG += optimize_full c++11 CONFIG += qt console warn_on depend_includepath testcase CONFIG -= app_bundle +CONFIG += c++11 LIBS += -L"$$PWD/../../bin" LIBS += -lkicad -lpdf_extract diff --git a/src/autotest/bq76920_pins.lib b/src/autotest/bq76920_pins.lib new file mode 100644 index 0000000..bcde0e7 --- /dev/null +++ b/src/autotest/bq76920_pins.lib @@ -0,0 +1,358 @@ +EESchema-LIBRARY Version 2.3 Date: 09/01/2019 23:45:26 +#encoding utf-8 +# +# p.6_pack0 +# +DEF p.6_pack0 U 0 20 Y Y 1 F N +F0 "U" -400 -850 50 H V L CNN +F1 "p.6_pack0" 400 850 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 800 400 -800 0 0 10 N +X DSG 1 -600 700 200 R 50 50 1 1 I +X CHG 2 -600 600 200 R 50 50 1 1 I +X VSS 3 -600 500 200 R 50 50 1 1 I +X SDA 4 -600 400 200 R 50 50 1 1 I +X SCL 5 -600 300 200 R 50 50 1 1 I +X TS1 6 -600 200 200 R 50 50 1 1 I +X 20-TSSOP 7 -600 100 200 R 50 50 1 1 I +X REGOUT 8 -600 0 200 R 50 50 1 1 I +X REGSRC 9 -600 -100 200 R 50 50 1 1 I +X BAT 10 -600 -200 200 R 50 50 1 1 I +X NC 11 -600 -300 200 R 50 50 1 1 I +X NC 12 -600 -400 200 R 50 50 1 1 I +X TS2 13 -600 -500 200 R 50 50 1 1 I +X CAP2 14 -600 -600 200 R 50 50 1 1 I +X VC10x 15 -600 -700 200 R 50 50 1 1 I +X VC10 16 600 -700 200 L 50 50 1 1 I +X VC9 17 600 -600 200 L 50 50 1 1 I +X VC8 18 600 -500 200 L 50 50 1 1 I +X VC7 19 600 -400 200 L 50 50 1 1 I +X VC6 20 600 -300 200 L 50 50 1 1 I +X VC5B 21 600 -200 200 L 50 50 1 1 I +X VC5 22 600 -100 200 L 50 50 1 1 I +X VC4 23 600 0 200 L 50 50 1 1 I +X VC3 24 600 100 200 L 50 50 1 1 I +X VC2 25 600 200 200 L 50 50 1 1 I +X VC1 26 600 300 200 L 50 50 1 1 I +X VC0 27 600 400 200 L 50 50 1 1 I +X SRP 28 600 500 200 L 50 50 1 1 I +X SRN 29 600 600 200 L 50 50 1 1 I +X ALERT 30 600 700 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.6_pack1 +# +DEF p.6_pack1 U 0 20 Y Y 1 F N +F0 "U" -400 -650 50 H V L CNN +F1 "p.6_pack1" 400 650 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 600 400 -600 0 0 10 N +X DSG 1 -600 500 200 R 50 50 1 1 I +X CHG 2 -600 400 200 R 50 50 1 1 I +X VSS 3 -600 300 200 R 50 50 1 1 I +X SDA 4 -600 200 200 R 50 50 1 1 I +X SCL 5 -600 100 200 R 50 50 1 1 I +X TS1 6 -600 0 200 R 50 50 1 1 I +X CAP1 7 -600 -100 200 R 50 50 1 1 I +X REGOUT 8 -600 -200 200 R 50 50 1 1 I +X REGSRC 9 -600 -300 200 R 50 50 1 1 I +X VC5x 10 -600 -400 200 R 50 50 1 1 I +X NC 11 600 -400 200 L 50 50 1 1 I +X VC5 12 600 -300 200 L 50 50 1 1 I +X VC4 13 600 -200 200 L 50 50 1 1 I +X VC3 14 600 -100 200 L 50 50 1 1 I +X VC2 15 600 0 200 L 50 50 1 1 I +X VC1 16 600 100 200 L 50 50 1 1 I +X VC0 17 600 200 200 L 50 50 1 1 I +X SRP 18 600 300 200 L 50 50 1 1 I +X SRN 19 600 400 200 L 50 50 1 1 I +X ALERT 20 600 500 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.6_pack2 +# +DEF p.6_pack2 U 0 20 Y Y 1 F N +F0 "U" -400 -1250 50 H V L CNN +F1 "p.6_pack2" 400 1250 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 1200 400 -1200 0 0 10 N +X DSG 1 -600 1100 200 R 50 50 1 1 I +X CHG 2 -600 1000 200 R 50 50 1 1 I +X VSS 3 -600 900 200 R 50 50 1 1 I +X SDA 4 -600 800 200 R 50 50 1 1 I +X SCL 5 -600 700 200 R 50 50 1 1 I +X TS1 6 -600 600 200 R 50 50 1 1 I +X CAP1 7 -600 500 200 R 50 50 1 1 I +X REGOUT 8 -600 400 200 R 50 50 1 1 I +X REGSRC 9 -600 300 200 R 50 50 1 1 I +X VC5x 10 -600 200 200 R 50 50 1 1 I +X NC 11 -600 100 200 R 50 50 1 1 I +X NC 12 -600 0 200 R 50 50 1 1 I +X TS2 13 -600 -100 200 R 50 50 1 1 I +X CAP2 14 -600 -200 200 R 50 50 1 1 I +X BAT 15 -600 -300 200 R 50 50 1 1 I +X NC 16 -600 -400 200 R 50 50 1 1 I +X NC 17 -600 -500 200 R 50 50 1 1 I +X TS3 18 -600 -600 200 R 50 50 1 1 I +X CAP3 19 -600 -700 200 R 50 50 1 1 I +X BAT 20 -600 -800 200 R 50 50 1 1 I +X NC 21 -600 -900 200 R 50 50 1 1 I +X NC 22 -600 -1000 200 R 50 50 1 1 I +X NC 23 600 -1000 200 L 50 50 1 1 I +X VC15 24 600 -900 200 L 50 50 1 1 I +X VC14 25 600 -800 200 L 50 50 1 1 I +X VC13 26 600 -700 200 L 50 50 1 1 I +X VC12 27 600 -600 200 L 50 50 1 1 I +X VC11 28 600 -500 200 L 50 50 1 1 I +X VC10B 29 600 -400 200 L 50 50 1 1 I +X VC10 30 600 -300 200 L 50 50 1 1 I +X VC9 31 600 -200 200 L 50 50 1 1 I +X VC8 32 600 -100 200 L 50 50 1 1 I +X VC7 33 600 0 200 L 50 50 1 1 I +X VC6 34 600 100 200 L 50 50 1 1 I +X VC5B 35 600 200 200 L 50 50 1 1 I +X VC5 36 600 300 200 L 50 50 1 1 I +X VC4 37 600 400 200 L 50 50 1 1 I +X VC3 38 600 500 200 L 50 50 1 1 I +X VC2 39 600 600 200 L 50 50 1 1 I +X VC1 40 600 700 200 L 50 50 1 1 I +X VC0 41 600 800 200 L 50 50 1 1 I +X SRP 42 600 900 200 L 50 50 1 1 I +X SRN 43 600 1000 200 L 50 50 1 1 I +X ALERT 44 600 1100 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.7_pack0 +# +DEF p.7_pack0 U 0 20 Y Y 1 F N +F0 "U" -400 -650 50 H V L CNN +F1 "p.7_pack0" 400 650 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 600 400 -600 0 0 10 N +X DSG 1 -600 500 200 R 50 50 1 1 I +X CHG 2 -600 400 200 R 50 50 1 1 I +X VSS 3 -600 300 200 R 50 50 1 1 I +X SDA 4 -600 200 200 R 50 50 1 1 I +X SCL 5 -600 100 200 R 50 50 1 1 I +X TS1 6 -600 0 200 R 50 50 1 1 I +X 20-TSSOP 7 -600 -100 200 R 50 50 1 1 I +X REGOUT 8 -600 -200 200 R 50 50 1 1 I +X REGSRC 9 -600 -300 200 R 50 50 1 1 I +X BAT 10 -600 -400 200 R 50 50 1 1 I +X NC 11 600 -400 200 L 50 50 1 1 I +X VC5 12 600 -300 200 L 50 50 1 1 I +X VC4 13 600 -200 200 L 50 50 1 1 I +X VC3 14 600 -100 200 L 50 50 1 1 I +X VC2 15 600 0 200 L 50 50 1 1 I +X VC1 16 600 100 200 L 50 50 1 1 I +X VC0 17 600 200 200 L 50 50 1 1 I +X SRP 18 600 300 200 L 50 50 1 1 I +X SRN 19 600 400 200 L 50 50 1 1 I +X ALERT 20 600 500 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.7_pack1 +# +DEF p.7_pack1 U 0 20 Y Y 1 F N +F0 "U" -400 -650 50 H V L CNN +F1 "p.7_pack1" 400 650 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 600 400 -600 0 0 10 N +X DSG 1 -600 500 200 R 50 50 1 1 O +X CHG 2 -600 400 200 R 50 50 1 1 O +X VSS 3 -600 300 200 R 50 50 1 1 I +X SDA 4 -600 200 200 R 50 50 1 1 B +X SCL 5 -600 100 200 R 50 50 1 1 I +X TS1 6 -600 0 200 R 50 50 1 1 I +X CAP1 7 -600 -100 200 R 50 50 1 1 O +X REGOUT 8 -600 -200 200 R 50 50 1 1 P +X REGSRC 9 -600 -300 200 R 50 50 1 1 I +X BAT 10 -600 -400 200 R 50 50 1 1 P +X NC 11 600 -400 200 L 50 50 1 1 I +X VC5 12 600 -300 200 L 50 50 1 1 I +X VC4 13 600 -200 200 L 50 50 1 1 I +X VC3 14 600 -100 200 L 50 50 1 1 I +X VC2 15 600 0 200 L 50 50 1 1 I +X VC1 16 600 100 200 L 50 50 1 1 I +X VC0 17 600 200 200 L 50 50 1 1 I +X SRP 18 600 300 200 L 50 50 1 1 I +X SRN 19 600 400 200 L 50 50 1 1 I +X ALERT 20 600 500 200 L 50 50 1 1 B +ENDDRAW +ENDDEF +# +# p.8_pack0 +# +DEF p.8_pack0 U 0 20 Y Y 1 F N +F0 "U" -400 -850 50 H V L CNN +F1 "p.8_pack0" 400 850 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 800 400 -800 0 0 10 N +X DSG 1 -600 700 200 R 50 50 1 1 I +X CHG 2 -600 600 200 R 50 50 1 1 I +X VSS 3 -600 500 200 R 50 50 1 1 I +X SDA 4 -600 400 200 R 50 50 1 1 I +X SCL 5 -600 300 200 R 50 50 1 1 I +X TS1 6 -600 200 200 R 50 50 1 1 I +X CAP1 7 -600 100 200 R 50 50 1 1 I +X REGOUT 8 -600 0 200 R 50 50 1 1 I +X REGSRC 9 -600 -100 200 R 50 50 1 1 I +X VC5x 10 -600 -200 200 R 50 50 1 1 I +X NC 11 -600 -300 200 R 50 50 1 1 I +X NC 12 -600 -400 200 R 50 50 1 1 I +X TS2 13 -600 -500 200 R 50 50 1 1 I +X CAP2 14 -600 -600 200 R 50 50 1 1 I +X BAT 15 -600 -700 200 R 50 50 1 1 I +X VC10 16 600 -700 200 L 50 50 1 1 I +X VC9 17 600 -600 200 L 50 50 1 1 I +X VC8 18 600 -500 200 L 50 50 1 1 I +X VC7 19 600 -400 200 L 50 50 1 1 I +X VC6 20 600 -300 200 L 50 50 1 1 I +X VC5B 21 600 -200 200 L 50 50 1 1 I +X VC5 22 600 -100 200 L 50 50 1 1 I +X VC4 23 600 0 200 L 50 50 1 1 I +X VC3 24 600 100 200 L 50 50 1 1 I +X VC2 25 600 200 200 L 50 50 1 1 I +X VC1 26 600 300 200 L 50 50 1 1 I +X VC0 27 600 400 200 L 50 50 1 1 I +X SRP 28 600 500 200 L 50 50 1 1 I +X SRN 29 600 600 200 L 50 50 1 1 I +X ALERT 30 600 700 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.8_pack1 +# +DEF p.8_pack1 U 0 20 Y Y 1 F N +F0 "U" -1400 -750 50 H V L CNN +F1 "p.8_pack1" 1400 750 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -1400 700 1400 -700 0 0 10 N +X DSG 1 -1600 600 200 R 50 50 1 1 O +X CHG 2 -1600 500 200 R 50 50 1 1 O +X VSS 3 -1600 400 200 R 50 50 1 1 I +X SDA 4 -1600 300 200 R 50 50 1 1 B +X SCL 5 -1600 200 200 R 50 50 1 1 I +X TS1 6 -1600 100 200 R 50 50 1 1 I +X CAP1 7 -1600 0 200 R 50 50 1 1 O +X Copyright©2013–2016,TexasInstrumentsIncorporated 8 -1600 -100 200 R 50 50 1 1 I +X REGSRC 9 -1600 -200 200 R 50 50 1 1 I +X VC5X 10 -1600 -300 200 R 50 50 1 1 P +X NC 11 -1600 -400 200 R 50 50 1 1 I +X NC 12 -1600 -500 200 R 50 50 1 1 I +X TS2 13 1600 -500 200 L 50 50 1 1 I +X CAP2 14 1600 -400 200 L 50 50 1 1 O +X BAT 15 1600 -300 200 L 50 50 1 1 P +X VC10 16 1600 -200 200 L 50 50 1 1 I +X VC9 17 1600 -100 200 L 50 50 1 1 I +X VC8 18 1600 0 200 L 50 50 1 1 I +X VC7 19 1600 100 200 L 50 50 1 1 I +X VC6 20 1600 200 200 L 50 50 1 1 I +X VC5B 21 1600 300 200 L 50 50 1 1 I +X VC5 22 1600 400 200 L 50 50 1 1 I +X VC4 23 1600 500 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.10_pack0 +# +DEF p.10_pack0 U 0 20 Y Y 1 F N +F0 "U" -400 -1250 50 H V L CNN +F1 "p.10_pack0" 400 1250 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -400 1200 400 -1200 0 0 10 N +X DSG 1 -600 1100 200 R 50 50 1 1 I +X CHG 2 -600 1000 200 R 50 50 1 1 I +X VSS 3 -600 900 200 R 50 50 1 1 I +X SDA 4 -600 800 200 R 50 50 1 1 I +X SCL 5 -600 700 200 R 50 50 1 1 I +X TS1 6 -600 600 200 R 50 50 1 1 I +X CAP1 7 -600 500 200 R 50 50 1 1 I +X REGOUT 8 -600 400 200 R 50 50 1 1 I +X REGSRC 9 -600 300 200 R 50 50 1 1 I +X VC5x 10 -600 200 200 R 50 50 1 1 I +X NC 11 -600 100 200 R 50 50 1 1 I +X NC 12 -600 0 200 R 50 50 1 1 I +X TS2 13 -600 -100 200 R 50 50 1 1 I +X CAP2 14 -600 -200 200 R 50 50 1 1 I +X VC10x 15 -600 -300 200 R 50 50 1 1 I +X NC 16 -600 -400 200 R 50 50 1 1 I +X NC 17 -600 -500 200 R 50 50 1 1 I +X TS3 18 -600 -600 200 R 50 50 1 1 I +X CAP3 19 -600 -700 200 R 50 50 1 1 I +X BAT 20 -600 -800 200 R 50 50 1 1 I +X NC 21 -600 -900 200 R 50 50 1 1 I +X NC 22 -600 -1000 200 R 50 50 1 1 I +X NC 23 600 -1000 200 L 50 50 1 1 I +X VC15 24 600 -900 200 L 50 50 1 1 I +X VC14 25 600 -800 200 L 50 50 1 1 I +X VC13 26 600 -700 200 L 50 50 1 1 I +X VC12 27 600 -600 200 L 50 50 1 1 I +X VC11 28 600 -500 200 L 50 50 1 1 I +X VC10B 29 600 -400 200 L 50 50 1 1 I +X VC10 30 600 -300 200 L 50 50 1 1 I +X VC9 31 600 -200 200 L 50 50 1 1 I +X VC8 32 600 -100 200 L 50 50 1 1 I +X VC7 33 600 0 200 L 50 50 1 1 I +X VC6 34 600 100 200 L 50 50 1 1 I +X VC5B 35 600 200 200 L 50 50 1 1 I +X VC5 36 600 300 200 L 50 50 1 1 I +X VC4 37 600 400 200 L 50 50 1 1 I +X VC3 38 600 500 200 L 50 50 1 1 I +X VC2 39 600 600 200 L 50 50 1 1 I +X VC1 40 600 700 200 L 50 50 1 1 I +X VC0 41 600 800 200 L 50 50 1 1 I +X SRP 42 600 900 200 L 50 50 1 1 I +X SRN 43 600 1000 200 L 50 50 1 1 I +X ALERT 44 600 1100 200 L 50 50 1 1 I +ENDDRAW +ENDDEF +# +# p.10_pack1 +# +DEF p.10_pack1 U 0 20 Y Y 1 F N +F0 "U" -1400 -550 50 H V L CNN +F1 "p.10_pack1" 1400 550 50 H V R CNN +F2 "" 0 0 50 H I L CNN +F3 "" 0 0 50 H I L CNN +DRAW +S -1400 500 1400 -500 0 0 10 N +X DSG 1 -1600 400 200 R 50 50 1 1 O +X CHG 2 -1600 300 200 R 50 50 1 1 O +X VSS 3 -1600 200 200 R 50 50 1 1 I +X SDA 4 -1600 100 200 R 50 50 1 1 B +X SCL 5 -1600 0 200 R 50 50 1 1 I +X TS1 6 -1600 -100 200 R 50 50 1 1 I +X CAP1 7 -1600 -200 200 R 50 50 1 1 O +X REGOUT 8 -1600 -300 200 R 50 50 1 1 P +X REGSRC 9 1600 -300 200 L 50 50 1 1 I +X Copyright©2013–2016,TexasInstrumentsIncorporated 10 1600 -200 200 L 50 50 1 1 I +X NC 11 1600 -100 200 L 50 50 1 1 I +X NC 12 1600 0 200 L 50 50 1 1 I +X TS2 13 1600 100 200 L 50 50 1 1 I +X CAP2 14 1600 200 200 L 50 50 1 1 O +X VC10X 15 1600 300 200 L 50 50 1 1 P +ENDDRAW +ENDDEF +# +#End Library diff --git a/src/autotest/bq76920_pins.pdf b/src/autotest/bq76920_pins.pdf new file mode 100644 index 0000000..8e612e6 Binary files /dev/null and b/src/autotest/bq76920_pins.pdf differ diff --git a/src/autotest/tst_pdf_extract.cpp b/src/autotest/tst_pdf_extract.cpp index 82fea4f..b5a6e11 100644 --- a/src/autotest/tst_pdf_extract.cpp +++ b/src/autotest/tst_pdf_extract.cpp @@ -9,7 +9,7 @@ class PdfExtract : public QObject { Q_OBJECT - void comparePdfTolib(const QString &fileName); + void comparePdfTolib(const QString &fileName, bool checkDirections = false); private slots: void init(); @@ -20,13 +20,14 @@ private slots: void test_ucc27212a_q1(); void test_ATtiny24(); void test_IFX9201SG(); + void test_bq76920(); void test_ticc(); protected: Datasheet dt; }; -void PdfExtract::comparePdfTolib(const QString &fileName) +void PdfExtract::comparePdfTolib(const QString &fileName, bool checkDirections) { //dt.setDebugEnabled(true); QVERIFY(dt.open(QString("../src/autotest/%1.pdf").arg(fileName))); @@ -51,6 +52,8 @@ void PdfExtract::comparePdfTolib(const QString &fileName) Pin *pin2 = comp2->pins()[p]; QCOMPARE(pin1->name(), pin2->name()); QCOMPARE(pin1->padName(), pin2->padName()); + if (checkDirections) + QCOMPARE(pin1->electricalType(), pin2->electricalType()); } } } @@ -90,6 +93,11 @@ void PdfExtract::test_IFX9201SG() comparePdfTolib("IFX9201SG_pins"); } +void PdfExtract::test_bq76920() +{ + comparePdfTolib("bq76920_pins", true); +} + void PdfExtract::test_ticc() { comparePdfTolib("ticc_pins"); diff --git a/src/kicad/kicad.pro b/src/kicad/kicad.pro index 435fc5f..47ff662 100644 --- a/src/kicad/kicad.pro +++ b/src/kicad/kicad.pro @@ -15,6 +15,8 @@ DESTDIR = "$$PWD/../../bin" DEFINES += KICAD_EXPORT_LIB +CONFIG += c++11 + SOURCES += \ $$PWD/model/kicad.cpp \ $$PWD/model/lib.cpp \ diff --git a/src/pdf_extract/datasheet.cpp b/src/pdf_extract/datasheet.cpp index 889a1cd..54ed5f9 100644 --- a/src/pdf_extract/datasheet.cpp +++ b/src/pdf_extract/datasheet.cpp @@ -298,6 +298,37 @@ QRectF Datasheet::toGlobalPos(const QRectF &rect, Poppler::Page *page, int pageN return rect; } +// use lowercase letters in when extending the map! +QMap Datasheet::_pinDirectionToElectricalPinTypeMap = { + {QStringLiteral("nc"), Pin::NotConnected}, + {QStringLiteral("n/c"), Pin::NotConnected}, + {QStringLiteral("oe"), Pin::OpenEmitter}, + {QStringLiteral("open-emitter"), Pin::OpenEmitter}, + {QStringLiteral("oc"), Pin::OpenCollector}, + {QStringLiteral("open-collector"), Pin::OpenCollector}, + {QStringLiteral("od"), Pin::OpenCollector}, + {QStringLiteral("open-drain"), Pin::OpenCollector}, + {QStringLiteral("tris"), Pin::Tristate}, + {QStringLiteral("sup"), Pin::PowerIn}, + {QStringLiteral("p"), Pin::Passive}, + {QStringLiteral("pas"), Pin::Passive}, + {QStringLiteral("passive"), Pin::Passive}, + {QStringLiteral("io"), Pin::Bidir}, + {QStringLiteral("i/o"), Pin::Bidir}, + {QStringLiteral("i"), Pin::Input}, + {QStringLiteral("in"), Pin::Input}, + {QStringLiteral("o"), Pin::Output}, + {QStringLiteral("out"), Pin::Output}, + + // direction names from Qualcomm docs + {QStringLiteral("ai"), Pin::Input}, + {QStringLiteral("ao"), Pin::Output}, + {QStringLiteral("b"), Pin::Bidir}, + {QStringLiteral("di"), Pin::Input}, + {QStringLiteral("do"), Pin::Output}, + {QStringLiteral("z"), Pin::Tristate}, +}; + QList Datasheet::extractPins(int numPage) { QList pins; @@ -441,7 +472,7 @@ QList Datasheet::extractPins(int numPage) DatasheetPin *pin = new DatasheetPin(); qreal dist = 999999999999; QPointF center = number->pos.center(); - DatasheetBox *assocLabel = NULL; + DatasheetBox *pinNameLabel = nullptr; for (int i = 0; i < _labels.count(); i++) { @@ -460,31 +491,73 @@ QList Datasheet::extractPins(int numPage) if (newdist < dist) { dist = newdist; - assocLabel = label; + pinNameLabel = label; } } - if (assocLabel) + if (pinNameLabel) { - assocLabel->associated = true; + pinNameLabel->associated = true; number->associated = true; pin->pin = number->text.toInt(); pin->numPos = number->pos; pin->numberBox = number; - pin->name = assocLabel->text; + pin->name = pinNameLabel->text; pin->name.remove(QRegExp("\\([0-9]+\\)")); pin->name.remove(QRegExp(" +")); - pin->nameBox = assocLabel; + pin->nameBox = pinNameLabel; pin->page = number->page; - pin->pos = number->pos.united(assocLabel->pos); + pin->pos = number->pos.united(pinNameLabel->pos); pins.push_back(pin); } } + for (DatasheetPin *pin : pins) { + qreal dist = 999999999999; + qreal nameX = pin->nameBox->pos.center().x(); + DatasheetBox *directionLabel = nullptr; + DatasheetBox *pinNameLabel = pin->nameBox; + DatasheetBox *pinNumberLabel = pin->numberBox; + // loop over the labels to see if there is a pin direction label + // in the following columns + for (DatasheetBox *label : _labels) { + if (label->page != pinNumberLabel->page) + continue; + + if (!DatasheetBox::isAlign(*label, *pinNameLabel) || !DatasheetBox::isAlign(*label, *pinNumberLabel)) + continue; + + if (label == pinNameLabel) + continue; + + if (label == pinNumberLabel) + continue; + + // look for the horizontally closest text to the pin name + qreal newdist = fabs(label->pos.x() - nameX); + if (newdist < dist) + { + dist = newdist; + if (label->associated) + continue; + + if (!_pinDirectionToElectricalPinTypeMap.contains(label->text.toLower())) + continue; + + directionLabel = label; + } + } + + if (directionLabel) { + directionLabel->associated = true; + pin->electricalType = _pinDirectionToElectricalPinTypeMap.value(directionLabel->text.toLower()); + } + } + delete page; return pins; } diff --git a/src/pdf_extract/datasheet.h b/src/pdf_extract/datasheet.h index 2a3ddff..7341b9c 100644 --- a/src/pdf_extract/datasheet.h +++ b/src/pdf_extract/datasheet.h @@ -23,6 +23,7 @@ #include #include +#include #include "datasheetpackage.h" #include "datasheetbox.h" @@ -84,6 +85,7 @@ class DATASHEET_EXTRACTOR_EXPORT Datasheet : public QObject QList _packages; bool _debug; bool _force; + static QMap _pinDirectionToElectricalPinTypeMap; }; #endif // DATASHEET_H diff --git a/src/pdf_extract/datasheetpackage.cpp b/src/pdf_extract/datasheetpackage.cpp index 24239a0..6b4a152 100644 --- a/src/pdf_extract/datasheetpackage.cpp +++ b/src/pdf_extract/datasheetpackage.cpp @@ -43,6 +43,7 @@ Component *DatasheetPackage::toComponent() const { Pin *pin = new Pin(); pin->setName(dpin->name); + pin->setElectricalType(dpin->electricalType); pin->setPadName(QString::number(dpin->pin)); comp->addPin(pin); } diff --git a/src/pdf_extract/datasheetpin.h b/src/pdf_extract/datasheetpin.h index 4f2d87c..b0d9ef6 100644 --- a/src/pdf_extract/datasheetpin.h +++ b/src/pdf_extract/datasheetpin.h @@ -22,6 +22,7 @@ #include "pdf_extract_common.h" #include "datasheetbox.h" +#include "../kicad/model/pin.h" #include #include @@ -39,6 +40,7 @@ class DATASHEET_EXTRACTOR_EXPORT DatasheetPin QRectF pos; int page; QRectF numPos; + Pin::ElectricalType electricalType = Pin::Input; DatasheetBox *numberBox; DatasheetBox *nameBox; diff --git a/src/uConfig.pro b/src/uConfig.pro index 3d828f8..eb518e7 100644 --- a/src/uConfig.pro +++ b/src/uConfig.pro @@ -1,6 +1,8 @@ TEMPLATE = subdirs CONFIG += ordered +CONFIG += c++11 + SUBDIRS += \ kicad \ pdf_extract \