This commit is contained in:
Kai Jan Kriegel 2023-04-15 02:34:26 +02:00
parent 2b9a0c3247
commit 95060d3db9
137 changed files with 14669 additions and 3860 deletions

6
.gitmodules vendored Normal file
View File

@ -0,0 +1,6 @@
[submodule "Hardware/FabReader1.5/kicad-libraries"]
path = Hardware/FabReader1.5/kicad-libraries
url = https://github.com/espressif/kicad-libraries.git
[submodule "Hardware/FabReader1.5/Library/espressif"]
path = Hardware/FabReader1.5/Library/espressif
url = https://github.com/espressif/kicad-libraries.git

View File

@ -0,0 +1,825 @@
(kicad_pcb (version 20221018) (generator pcbnew)
(general
(thickness 1.6)
)
(paper "A4")
(layers
(0 "F.Cu" signal)
(31 "B.Cu" signal)
(32 "B.Adhes" user "B.Adhesive")
(33 "F.Adhes" user "F.Adhesive")
(34 "B.Paste" user)
(35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen")
(37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user)
(39 "F.Mask" user)
(40 "Dwgs.User" user "User.Drawings")
(41 "Cmts.User" user "User.Comments")
(42 "Eco1.User" user "User.Eco1")
(43 "Eco2.User" user "User.Eco2")
(44 "Edge.Cuts" user)
(45 "Margin" user)
(46 "B.CrtYd" user "B.Courtyard")
(47 "F.CrtYd" user "F.Courtyard")
(48 "B.Fab" user)
(49 "F.Fab" user)
(50 "User.1" user)
(51 "User.2" user)
(52 "User.3" user)
(53 "User.4" user)
(54 "User.5" user)
(55 "User.6" user)
(56 "User.7" user)
(57 "User.8" user)
(58 "User.9" user)
)
(setup
(pad_to_mask_clearance 0)
(pcbplotparams
(layerselection 0x00010fc_ffffffff)
(plot_on_all_layers_selection 0x0000000_00000000)
(disableapertmacros false)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(dashed_line_dash_ratio 12.000000)
(dashed_line_gap_ratio 3.000000)
(svgprecision 4)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(dxfpolygonmode true)
(dxfimperialunits true)
(dxfusepcbnewfont true)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(sketchpadsonfab false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(scaleselection 1)
(outputdirectory "")
)
)
(net 0 "")
(net 1 "unconnected-(A101-NC-Pad1)")
(net 2 "unconnected-(A101-IOREF-Pad2)")
(net 3 "unconnected-(A101-~{RESET}-Pad3)")
(net 4 "+3V3")
(net 5 "GND")
(net 6 "unconnected-(A101-VIN-Pad8)")
(net 7 "NFC_IRQ")
(net 8 "unconnected-(A101-A1-Pad10)")
(net 9 "unconnected-(A101-A2-Pad11)")
(net 10 "unconnected-(A101-A3-Pad12)")
(net 11 "unconnected-(A101-SDA{slash}A4-Pad13)")
(net 12 "unconnected-(A101-SCL{slash}A5-Pad14)")
(net 13 "unconnected-(A101-D0{slash}RX-Pad15)")
(net 14 "unconnected-(A101-D1{slash}TX-Pad16)")
(net 15 "unconnected-(A101-D2-Pad17)")
(net 16 "unconnected-(A101-D3-Pad18)")
(net 17 "unconnected-(A101-D4-Pad19)")
(net 18 "unconnected-(A101-D5-Pad20)")
(net 19 "unconnected-(A101-D6-Pad21)")
(net 20 "unconnected-(A101-D7-Pad22)")
(net 21 "unconnected-(A101-D8-Pad23)")
(net 22 "unconnected-(A101-D9-Pad24)")
(net 23 "NFC_SS_N")
(net 24 "MOSI")
(net 25 "MISO")
(net 26 "SLCK")
(net 27 "unconnected-(A101-GND-Pad29)")
(net 28 "unconnected-(A101-AREF-Pad30)")
(net 29 "unconnected-(A101-SDA{slash}A4-Pad31)")
(net 30 "unconnected-(A101-SCL{slash}A5-Pad32)")
(net 31 "unconnected-(U101-3V3-Pad2)")
(net 32 "unconnected-(U101-CHIP_PU-Pad3)")
(net 33 "SCLK")
(net 34 "unconnected-(U101-GPIO16{slash}ADC2_CH5{slash}32K_N-Pad9)")
(net 35 "unconnected-(U101-GPIO17{slash}ADC2_CH6-Pad10)")
(net 36 "unconnected-(U101-GPIO18{slash}ADC2_CH7-Pad11)")
(net 37 "unconnected-(U101-GPIO8{slash}ADC1_CH7-Pad12)")
(net 38 "unconnected-(U101-GPIO3{slash}ADC1_CH2-Pad13)")
(net 39 "unconnected-(U101-GPIO46-Pad14)")
(net 40 "unconnected-(U101-GPIO9{slash}ADC1_CH8-Pad15)")
(net 41 "unconnected-(U101-GPIO10{slash}ADC1_CH9-Pad16)")
(net 42 "unconnected-(U101-GPIO11{slash}ADC2_CH0-Pad17)")
(net 43 "unconnected-(U101-GPIO12{slash}ADC2_CH1-Pad18)")
(net 44 "unconnected-(U101-GPIO13{slash}ADC2_CH2-Pad19)")
(net 45 "unconnected-(U101-GPIO14{slash}ADC2_CH3-Pad20)")
(net 46 "unconnected-(U101-5V-Pad21)")
(net 47 "unconnected-(U101-GND-Pad22)")
(net 48 "unconnected-(U101-GND-Pad23)")
(net 49 "unconnected-(U101-GND-Pad24)")
(net 50 "unconnected-(U101-GPIO19{slash}USB_D--Pad25)")
(net 51 "unconnected-(U101-GPIO20{slash}USB_D+-Pad26)")
(net 52 "unconnected-(U101-GPIO21-Pad27)")
(net 53 "unconnected-(U101-GPIO47-Pad28)")
(net 54 "unconnected-(U101-GPIO48-Pad29)")
(net 55 "unconnected-(U101-GPIO45-Pad30)")
(net 56 "unconnected-(U101-GPIO0-Pad31)")
(net 57 "unconnected-(U101-GPIO35-Pad32)")
(net 58 "unconnected-(U101-GPIO36-Pad33)")
(net 59 "unconnected-(U101-GPIO37-Pad34)")
(net 60 "DISP_SS_N")
(net 61 "DISP_DC")
(net 62 "DISP_RST")
(net 63 "DISP_BUSY_N")
(net 64 "unconnected-(U101-GPIO42{slash}MTMS-Pad39)")
(net 65 "unconnected-(U101-GPIO2{slash}ADC1_CH1-Pad40)")
(net 66 "unconnected-(U101-GPIO1{slash}ADC1_CH0-Pad41)")
(net 67 "unconnected-(U101-GPIO44{slash}U0RXD-Pad42)")
(net 68 "unconnected-(U101-GPIO43{slash}U0TXD-Pad43)")
(net 69 "DISP_CS_N")
(footprint "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" (layer "F.Cu")
(tstamp c24ce1e4-29a8-4dca-b1a4-eed4a27bb3ef)
(at 124.45 81.75 -90)
(descr "Through hole straight pin header, 1x08, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x08 2.54mm single row")
(property "Sheetfile" "FabReader1.5.kicad_sch")
(property "Sheetname" "")
(property "ki_description" "Generic connector, single row, 01x08, script generated")
(property "ki_keywords" "connector")
(path "/1b08339d-3a72-4809-8c9c-8377740dc375")
(attr through_hole)
(fp_text reference "J101" (at 0 -2.33 90) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp e96d8545-626d-47a4-8e80-f78d8179c719)
)
(fp_text value "Conn_01x08_Pin" (at 0 20.11 90) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 19251175-3c4a-4f24-bd4a-cf77324ca7f4)
)
(fp_text user "${REFERENCE}" (at 0 8.89) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 705cd682-6af6-4d8b-acf4-d024fba1bfc3)
)
(fp_line (start -1.33 -1.33) (end 0 -1.33)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6332fd91-a852-4ddf-9816-0cd2cef99152))
(fp_line (start -1.33 0) (end -1.33 -1.33)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7fda776c-24c3-465d-a2f2-1ae4e6d0876f))
(fp_line (start -1.33 1.27) (end -1.33 19.11)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 32d98a69-adcc-4806-94ec-d457f4d8638f))
(fp_line (start -1.33 1.27) (end 1.33 1.27)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5f6681b8-d391-46ef-b803-93ac491919da))
(fp_line (start -1.33 19.11) (end 1.33 19.11)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ffddf2d8-6f62-4e3b-b960-33acb8daf0fa))
(fp_line (start 1.33 1.27) (end 1.33 19.11)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e5080e41-a2c7-4b6b-b2b4-9e906070f551))
(fp_line (start -1.8 -1.8) (end -1.8 19.55)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6c5c73fe-95d2-490b-9153-f0f3b61806a8))
(fp_line (start -1.8 19.55) (end 1.8 19.55)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 70bc937e-0b13-40c4-a99e-e63065141220))
(fp_line (start 1.8 -1.8) (end -1.8 -1.8)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 315b739b-48e2-4987-a929-4d1800f33885))
(fp_line (start 1.8 19.55) (end 1.8 -1.8)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1f197270-7a62-4a4b-9f80-336bbe9e0a48))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27)
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp b18221b9-d243-404a-a5a5-87ac93582b1c))
(fp_line (start -1.27 19.05) (end -1.27 -0.635)
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6c2c28bc-f012-4ec5-b2e6-e7f386539b5c))
(fp_line (start -0.635 -1.27) (end 1.27 -1.27)
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 60fa9191-f06c-469f-a6c0-2f6451e780d6))
(fp_line (start 1.27 -1.27) (end 1.27 19.05)
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 262288c6-171e-45fb-a442-aec8b6590245))
(fp_line (start 1.27 19.05) (end -1.27 19.05)
(stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ffcdd726-f38a-491e-a840-32d0cbbd0709))
(pad "1" thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 63 "DISP_BUSY_N") (pinfunction "Pin_1") (pintype "passive") (tstamp 2b8cd8b4-86eb-46b9-b616-194420b6a0bb))
(pad "2" thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 62 "DISP_RST") (pinfunction "Pin_2") (pintype "passive") (tstamp 45594ade-8b44-42f8-ae68-0a612936cc6b))
(pad "3" thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 61 "DISP_DC") (pinfunction "Pin_3") (pintype "passive") (tstamp 7f6f6e59-9434-4407-b52d-52a357c0eda3))
(pad "4" thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 69 "DISP_CS_N") (pinfunction "Pin_4") (pintype "passive") (tstamp f2bf72d2-e579-4366-9971-fae12dc5aecb))
(pad "5" thru_hole oval (at 0 10.16 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 33 "SCLK") (pinfunction "Pin_5") (pintype "passive") (tstamp 9f3f4794-fa0b-4f7e-8772-86411c6293ef))
(pad "6" thru_hole oval (at 0 12.7 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 24 "MOSI") (pinfunction "Pin_6") (pintype "passive") (tstamp 2a01fb4c-2e99-40e8-a866-94167e37171c))
(pad "7" thru_hole oval (at 0 15.24 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 5 "GND") (pinfunction "Pin_7") (pintype "passive") (tstamp a8c130f1-f98b-4172-8727-bd6508f50154))
(pad "8" thru_hole oval (at 0 17.78 270) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask")
(net 4 "+3V3") (pinfunction "Pin_8") (pintype "passive") (tstamp 62020073-f8d1-4a02-a721-5e7b21a9592d))
(model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x08_P2.54mm_Vertical.wrl"
(offset (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(footprint "Espressif:ESP32-S3-DevKitC" (layer "F.Cu")
(tstamp f1f5d3b0-af4b-4454-8a44-1eb639926ce7)
(at 99.3579 72.43 90)
(descr "ESP32-S3 general-purpose development board, based on ESP32-S3-WROOM-1 or ESP32-S3-WROOM-1U,It has all the ESP32-S3 pins exposed and is easy to connect and use.")
(tags "ESP32-S3")
(property "Sheetfile" "FabReader1.5.kicad_sch")
(property "Sheetname" "")
(property "ki_description" "ESP32-S3-DevKitC")
(path "/909ab781-801f-471f-885c-d4cd8f32f686")
(attr through_hole)
(fp_text reference "U101" (at 12.7 -2.1 90) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp de004ae2-bf19-49f8-b756-783fe991910f)
)
(fp_text value "ESP32-S3-DevKitC" (at 11.42632 29.46128) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp d320f3df-50b8-4547-b0e4-ff77b652ede6)
)
(fp_text user "GPIO13" (at 1.27 45.72 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 04394d8b-72bb-41f3-b632-dc6d3bb42b67)
)
(fp_text user "GPIO48" (at 21.59 38.1 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 0c18521e-8f87-4ca7-b8d4-1750c2a6f565)
)
(fp_text user "GPIO16" (at 1.27 20.32 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 146abe8a-758c-4ccc-91b5-a4038bdc30e0)
)
(fp_text user "GPIO2" (at 21.59 10.16 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 1902b6b9-6aee-411c-87f8-e18c15c2a3f9)
)
(fp_text user "GPIO4" (at 1.27 7.62 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 201b1d7e-7cb2-4bcc-b7ae-cf80451e80eb)
)
(fp_text user "3V3" (at 1.27 2.54 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 21065de7-759a-4310-87ba-407903875241)
)
(fp_text user "EN/RESET" (at 8.88632 5.07728 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 2a349457-7c37-49d6-9dad-7ecb47f13bbd)
)
(fp_text user "GPIO12" (at 1.27 43.18 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 2ab39729-9a3f-4df6-a8a9-d59a85bc7e92)
)
(fp_text user "GPIO20" (at 21.59 45.72 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 3fffd393-93ce-49bc-b93d-246c0c9d438c)
)
(fp_text user "GPIO40/MTDO" (at 21.59 17.78 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 40e69db2-1a64-4679-b8ae-08f51ecce364)
)
(fp_text user "GPIO37" (at 21.59 25.4 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 4657fae3-0daa-4544-95c0-48c3dba1f02d)
)
(fp_text user "GPIO6" (at 1.27 12.7 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 4f1b6fca-f5f5-4680-92ea-9e7c278eb700)
)
(fp_text user "GPIO46" (at 1.27 33.02 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 534e53af-a9bf-46e5-bfa2-23f5cb72d332)
)
(fp_text user "GPIO39/MTCK" (at 21.59 20.32 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 58ef421a-9316-4cea-9913-367102c2e066)
)
(fp_text user "GPIO18" (at 1.27 25.4 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 5ccf322b-ee2f-4c3a-9350-0a6a598890d1)
)
(fp_text user "GPIO8" (at 1.27 27.94 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 65ce5cd7-f875-43ce-bef5-0cda869a3604)
)
(fp_text user "GPIO10" (at 1.27 38.1 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 662fa032-7e81-482a-b401-6b2ce483e0b5)
)
(fp_text user "GND" (at 21.59 0 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 6dbe4dc3-cfbd-4804-95a8-cf2a44591aaf)
)
(fp_text user "GPIO17" (at 1.27 22.86 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 6dfb32a6-b3ab-4980-a63e-b3f1e7d56151)
)
(fp_text user "GND" (at 1.52032 53.33728 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 739c3b30-3b6e-4bc1-a481-68a4c82989de)
)
(fp_text user "GPIO35" (at 21.59 30.48 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 7be9a432-292d-47ce-b527-85681a79ad7c)
)
(fp_text user "GPIO14" (at 1.27 48.26 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 872335e7-4dcd-4b13-a817-c5ecea040ca7)
)
(fp_text user "GPIO9" (at 1.27 35.56 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 88d5a85d-db33-4214-84a6-3d4a5f13bb79)
)
(fp_text user "GPIO5" (at 1.27 10.16 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 8d3bc27d-190e-479e-8979-f536d467544c)
)
(fp_text user "GPIO15" (at 1.27 17.78 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 99661758-7e4f-4174-b914-d3978097e23c)
)
(fp_text user "GPIO43/U0TXD" (at 21.59 2.54 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp 9b938fea-4c4d-487d-af0e-df511d277525)
)
(fp_text user "3V3" (at 1.27 0 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp 9c84bd45-343a-42db-807d-25d4ebf1d312)
)
(fp_text user "GPIO36" (at 21.59 27.94 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp a8298d17-4b21-49fa-a166-3cc6a9e9ebd0)
)
(fp_text user "GPIO7" (at 1.27 15.24 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp acae28bc-f892-497a-83e7-830891cb6c5e)
)
(fp_text user "GPIO42/MTMS" (at 21.59 12.7 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp b8275eac-579b-49fb-8fba-3f76ce4510b9)
)
(fp_text user "GND" (at 21.59 50.8 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp bc6430a0-f3e9-4384-bd50-fff570617bc6)
)
(fp_text user "GND" (at 21.59 53.34 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp bc9f2e8e-f74d-4239-95f3-2e940cb9cbc6)
)
(fp_text user "GPIO0" (at 21.59 33.02 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp c36b75c4-1473-43f7-9134-03d54eecab27)
)
(fp_text user "5V" (at 1.52032 50.79728 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp d1ba406c-8019-4e2e-a601-655ca68b3a3b)
)
(fp_text user "GPIO47" (at 21.59 40.64 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp db87c118-3ef3-4502-9627-a44dd93c1e92)
)
(fp_text user "GPIO21" (at 21.59 43.18 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp dfe8e411-51ba-44e0-9c26-ced59eac9c49)
)
(fp_text user "GPIO1" (at 21.59 7.62 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp e120c1bc-d0f4-4d93-b67c-22ad7a834475)
)
(fp_text user "GPIO38" (at 21.59 22.86 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp eacff7bb-4bd2-4264-b45b-045a4d35eb9e)
)
(fp_text user "GPIO44/U0RXD" (at 21.59 5.08 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp ec81e333-6c76-460d-8a75-980eecea85de)
)
(fp_text user "GPIO45" (at 21.59 35.56 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp efa4e20c-1091-4483-8954-9040e7030d27)
)
(fp_text user "GPIO3" (at 1.27 30.48 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp f05bdc54-770f-45ef-9ffe-2e17538d01c0)
)
(fp_text user "GPIO19" (at 21.59 48.26 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp f1f6ae14-beff-456a-879f-203be434c375)
)
(fp_text user "GPIO11" (at 1.27 40.64 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify left))
(tstamp faa5cda0-dfa7-48d6-bf58-5dfc145b6746)
)
(fp_text user "GPIO41/MTDI" (at 21.59 15.24 90 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify right))
(tstamp fd4a362d-a543-4f08-9964-989b3e983511)
)
(fp_text user "REF**" (at -0.00368 -0.00272 90) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 040a0e99-214f-4713-a87e-0149e2808cdf)
)
(fp_line (start -1.5 62.79728) (end 24.359999 62.79728)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 293bf5d6-d921-4569-90cb-5b7c38d0537b))
(fp_line (start -1.499999 -1.1) (end -1.5 62.79728)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ab73bdf2-d2ec-4b7b-a88e-f93b7e1a2ce1))
(fp_line (start 2.46012 -7.01312) (end 20.44332 -7.01312)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp d25ed1c4-672d-4bb4-ae7d-e5dfb1bd8c08))
(fp_line (start 2.46012 -1.12032) (end 2.46012 -7.01312)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5a67d15f-4b5b-42ac-b2a1-fd37dd272cc4))
(fp_line (start 20.44332 -7.01312) (end 20.44332 -1.12032)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0e3fb334-b0c8-4b84-b130-574f8617a19e))
(fp_line (start 24.359999 62.79728) (end 24.36 -1.1)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 068414f1-a937-470d-a54e-57543ddc1cc1))
(fp_line (start 24.36 -1.1) (end -1.499999 -1.1)
(stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 06569907-9f75-45b0-9351-0d1181b5a887))
(fp_line (start -1.25 -0.85) (end 24.11 -0.85)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 14804da3-505b-4a1d-8b74-2ee18f0201dd))
(fp_line (start -1.25 62.54728) (end -1.25 -0.85)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d232ee07-86b0-4dbd-846b-134e0e1a8a2e))
(fp_line (start 24.11 -0.85) (end 24.11 62.54728)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 7caeb416-59b0-4009-9017-c56b136aee8f))
(fp_line (start 24.11 62.54728) (end -1.25 62.54728)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 27243339-6cab-47a1-84c1-4d41bd5490b7))
(pad "1" thru_hole rect (at 0 0) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 4 "+3V3") (pinfunction "3V3") (pintype "power_in") (tstamp 3983f0ec-d49f-427b-8a73-4a322c192fc0))
(pad "2" thru_hole oval (at 0 2.54) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 31 "unconnected-(U101-3V3-Pad2)") (pinfunction "3V3") (pintype "power_in") (tstamp 6ab4f172-b197-4250-934b-de82d96436aa))
(pad "3" thru_hole oval (at 0 5.08) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 32 "unconnected-(U101-CHIP_PU-Pad3)") (pinfunction "CHIP_PU") (pintype "input") (tstamp 9b681110-b0d4-4bfd-8dc1-a326a987770f))
(pad "4" thru_hole oval (at 0 7.62) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 23 "NFC_SS_N") (pinfunction "GPIO4/ADC1_CH3") (pintype "bidirectional") (tstamp 48bd2580-c09a-45a6-a268-6ab00ff2132a))
(pad "5" thru_hole oval (at 0 10.16) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 33 "SCLK") (pinfunction "GPIO5/ADC1_CH4") (pintype "bidirectional") (tstamp 8d3906e6-a085-4e0a-9b86-83a322070c22))
(pad "6" thru_hole oval (at 0 12.7) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 24 "MOSI") (pinfunction "GPIO6/ADC1_CH5") (pintype "bidirectional") (tstamp fca6b445-85f2-4cae-8e18-015ba5ed40e7))
(pad "7" thru_hole oval (at 0 15.24) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 25 "MISO") (pinfunction "GPIO7/ADC1_CH6") (pintype "bidirectional") (tstamp a4c0f518-4056-4a84-b6f0-f5f22f31fd09))
(pad "8" thru_hole oval (at 0 17.78) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 7 "NFC_IRQ") (pinfunction "GPIO15/ADC2_CH4/32K_P") (pintype "bidirectional") (tstamp c22d3b1a-af78-458a-b72f-4f9b11b572fa))
(pad "9" thru_hole oval (at 0 20.32) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 34 "unconnected-(U101-GPIO16{slash}ADC2_CH5{slash}32K_N-Pad9)") (pinfunction "GPIO16/ADC2_CH5/32K_N") (pintype "bidirectional") (tstamp a03ffd42-a2ad-46dc-a825-3ec10885aa55))
(pad "10" thru_hole oval (at 0 22.86) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 35 "unconnected-(U101-GPIO17{slash}ADC2_CH6-Pad10)") (pinfunction "GPIO17/ADC2_CH6") (pintype "bidirectional") (tstamp 6bb1c7d1-3d68-4f76-a9e7-8eb3d2a074b6))
(pad "11" thru_hole oval (at 0 25.4) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 36 "unconnected-(U101-GPIO18{slash}ADC2_CH7-Pad11)") (pinfunction "GPIO18/ADC2_CH7") (pintype "bidirectional") (tstamp 34e3b6cb-a736-4a5b-a666-2558e3d90ab8))
(pad "12" thru_hole oval (at 0 27.94) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 37 "unconnected-(U101-GPIO8{slash}ADC1_CH7-Pad12)") (pinfunction "GPIO8/ADC1_CH7") (pintype "bidirectional") (tstamp 53fe93b8-2e87-42ed-bd52-aa3272436e83))
(pad "13" thru_hole oval (at 0 30.48) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 38 "unconnected-(U101-GPIO3{slash}ADC1_CH2-Pad13)") (pinfunction "GPIO3/ADC1_CH2") (pintype "bidirectional") (tstamp 548c01f7-0a08-43f7-9f7c-6a2202eb0010))
(pad "14" thru_hole oval (at 0 33.02) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 39 "unconnected-(U101-GPIO46-Pad14)") (pinfunction "GPIO46") (pintype "bidirectional") (tstamp 80af1227-06c3-4afb-8174-01a0885d663c))
(pad "15" thru_hole oval (at 0 35.56) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 40 "unconnected-(U101-GPIO9{slash}ADC1_CH8-Pad15)") (pinfunction "GPIO9/ADC1_CH8") (pintype "bidirectional") (tstamp 69739b71-6548-4eef-a27d-a94bf13181d0))
(pad "16" thru_hole oval (at 0 38.1) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 41 "unconnected-(U101-GPIO10{slash}ADC1_CH9-Pad16)") (pinfunction "GPIO10/ADC1_CH9") (pintype "bidirectional") (tstamp 938afc70-cca4-41cc-b8f1-bd01ba40abed))
(pad "17" thru_hole oval (at 0 40.64) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 42 "unconnected-(U101-GPIO11{slash}ADC2_CH0-Pad17)") (pinfunction "GPIO11/ADC2_CH0") (pintype "bidirectional") (tstamp 66a11d4f-8519-43c1-b317-fff013e69ee8))
(pad "18" thru_hole oval (at 0 43.18) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 43 "unconnected-(U101-GPIO12{slash}ADC2_CH1-Pad18)") (pinfunction "GPIO12/ADC2_CH1") (pintype "bidirectional") (tstamp bce910e3-f0fd-415d-ba27-7d37b7706667))
(pad "19" thru_hole oval (at 0 45.72) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 44 "unconnected-(U101-GPIO13{slash}ADC2_CH2-Pad19)") (pinfunction "GPIO13/ADC2_CH2") (pintype "bidirectional") (tstamp d5b062e8-c0df-4dc0-8e12-ee46bdb5a468))
(pad "20" thru_hole oval (at -0.00368 48.25728) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 45 "unconnected-(U101-GPIO14{slash}ADC2_CH3-Pad20)") (pinfunction "GPIO14/ADC2_CH3") (pintype "bidirectional") (tstamp a3ce15bf-d058-471d-b820-d395a36295af))
(pad "21" thru_hole oval (at -0.00368 50.79728) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 46 "unconnected-(U101-5V-Pad21)") (pinfunction "5V") (pintype "power_in") (tstamp e7734c99-601e-4684-9d5f-5e75a406cbde))
(pad "22" thru_hole oval (at -0.00368 53.33728) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 47 "unconnected-(U101-GND-Pad22)") (pinfunction "GND") (pintype "power_in") (tstamp 3e7c69bf-4c2b-4e97-b6db-cb2d23f4b825))
(pad "23" thru_hole oval (at 22.86 53.34) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 48 "unconnected-(U101-GND-Pad23)") (pinfunction "GND") (pintype "power_in") (tstamp 5780e459-2907-45c6-be93-97bb365f24a7))
(pad "24" thru_hole oval (at 22.86 50.8) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 49 "unconnected-(U101-GND-Pad24)") (pinfunction "GND") (pintype "power_in") (tstamp d4810fed-4369-404a-ae44-c68185cad385))
(pad "25" thru_hole oval (at 22.86 48.26) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 50 "unconnected-(U101-GPIO19{slash}USB_D--Pad25)") (pinfunction "GPIO19/USB_D-") (pintype "bidirectional") (tstamp 80a848ec-f83c-4eee-99a4-710d6a4d9e43))
(pad "26" thru_hole oval (at 22.86 45.72) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 51 "unconnected-(U101-GPIO20{slash}USB_D+-Pad26)") (pinfunction "GPIO20/USB_D+") (pintype "bidirectional") (tstamp c6f0fe9f-ae3e-4ec4-81c1-f9fd89835ed1))
(pad "27" thru_hole oval (at 22.86 43.18) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 52 "unconnected-(U101-GPIO21-Pad27)") (pinfunction "GPIO21") (pintype "bidirectional") (tstamp 620c74c6-9fb9-4b7f-aa2b-b2aab27f47a3))
(pad "28" thru_hole oval (at 22.86 40.64) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 53 "unconnected-(U101-GPIO47-Pad28)") (pinfunction "GPIO47") (pintype "bidirectional") (tstamp 2c29c72f-5558-4d4e-909b-ac9cd9fc5f59))
(pad "29" thru_hole oval (at 22.86 38.1) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 54 "unconnected-(U101-GPIO48-Pad29)") (pinfunction "GPIO48") (pintype "bidirectional") (tstamp faf254bf-4566-45e2-865d-fd08d5796b24))
(pad "30" thru_hole oval (at 22.86 35.56) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 55 "unconnected-(U101-GPIO45-Pad30)") (pinfunction "GPIO45") (pintype "bidirectional") (tstamp a0c35926-d843-482d-bcd0-9d49dbfef033))
(pad "31" thru_hole oval (at 22.86 33.02) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 56 "unconnected-(U101-GPIO0-Pad31)") (pinfunction "GPIO0") (pintype "bidirectional") (tstamp 9bc67f25-0a4c-43f6-a78d-1c427c520862))
(pad "32" thru_hole oval (at 22.86 30.48) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 57 "unconnected-(U101-GPIO35-Pad32)") (pinfunction "GPIO35") (pintype "bidirectional") (tstamp 7a3335a3-21f5-4018-9705-d017ed87b282))
(pad "33" thru_hole oval (at 22.86 27.94) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 58 "unconnected-(U101-GPIO36-Pad33)") (pinfunction "GPIO36") (pintype "bidirectional") (tstamp e7f86be6-4b53-4dfc-babb-71fd29957820))
(pad "34" thru_hole oval (at 22.86 25.4) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 59 "unconnected-(U101-GPIO37-Pad34)") (pinfunction "GPIO37") (pintype "bidirectional") (tstamp 8fdf7b74-29db-44af-84ce-e23c3065968f))
(pad "35" thru_hole oval (at 22.86 22.86) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 60 "DISP_SS_N") (pinfunction "GPIO38") (pintype "bidirectional") (tstamp 42f83590-67e9-4878-a9f6-6c054140e273))
(pad "36" thru_hole oval (at 22.86 20.32) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 61 "DISP_DC") (pinfunction "GPIO39/MTCK") (pintype "bidirectional") (tstamp 5c615c0e-ffa2-44e4-8da9-8f017a101550))
(pad "37" thru_hole oval (at 22.86 17.78) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 62 "DISP_RST") (pinfunction "GPIO40/MTDO") (pintype "bidirectional") (tstamp bec8ae96-d042-4841-8a07-b5dd60e57ecc))
(pad "38" thru_hole oval (at 22.86 15.24) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 63 "DISP_BUSY_N") (pinfunction "GPIO41/MTDI") (pintype "bidirectional") (tstamp 8af1c0ba-d8d6-4d21-ade3-1663e68a1f7c))
(pad "39" thru_hole oval (at 22.86 12.7) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 64 "unconnected-(U101-GPIO42{slash}MTMS-Pad39)") (pinfunction "GPIO42/MTMS") (pintype "bidirectional") (tstamp 35611290-5667-444b-94da-5d148d7ff67e))
(pad "40" thru_hole oval (at 22.86 10.16) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 65 "unconnected-(U101-GPIO2{slash}ADC1_CH1-Pad40)") (pinfunction "GPIO2/ADC1_CH1") (pintype "bidirectional") (tstamp c8e679fd-ca71-4af1-a790-107370a232fd))
(pad "41" thru_hole oval (at 22.86 7.62) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 66 "unconnected-(U101-GPIO1{slash}ADC1_CH0-Pad41)") (pinfunction "GPIO1/ADC1_CH0") (pintype "bidirectional") (tstamp 28b731ef-6650-4455-9651-68d3afa8c3b6))
(pad "42" thru_hole oval (at 22.86 5.08) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 67 "unconnected-(U101-GPIO44{slash}U0RXD-Pad42)") (pinfunction "GPIO44/U0RXD") (pintype "bidirectional") (tstamp f5c1cd6f-eda8-40ab-86bd-efc5e6175736))
(pad "43" thru_hole oval (at 22.86 2.54) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 68 "unconnected-(U101-GPIO43{slash}U0TXD-Pad43)") (pinfunction "GPIO43/U0TXD") (pintype "bidirectional") (tstamp f739f380-2c97-4e79-a83a-07d15fc6482b))
(pad "44" thru_hole oval (at 22.86 0) (size 1.2 2) (drill 0.8) (layers "*.Cu" "*.Mask")
(net 5 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 96d254b3-f6df-4b1e-ab2e-90a5cd4120ac))
)
(footprint "Module:Arduino_UNO_R3" (layer "B.Cu")
(tstamp 58ebb7f6-50a4-47fe-9e35-0d127ac126d5)
(at 101.12 102.075 -90)
(descr "Arduino UNO R3, http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf")
(tags "Arduino UNO R3")
(property "Sheetfile" "FabReader1.5.kicad_sch")
(property "Sheetname" "")
(property "ki_description" "Arduino UNO Microcontroller Module, release 3")
(property "ki_keywords" "Arduino UNO R3 Microcontroller Module Atmel AVR USB")
(path "/e0d1991e-11e0-4525-84ea-6941cfa604df")
(attr through_hole)
(fp_text reference "A101" (at 1.27 3.81 90) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp ed404032-097f-4817-baf6-072d0c15416d)
)
(fp_text value "Arduino_UNO_R3" (at 0 -22.13 90) (layer "B.Fab")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp baa90914-f4b5-4946-8371-38d1dde2ead6)
)
(fp_text user "${REFERENCE}" (at 0 -20.32 90) (layer "B.Fab")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 64ee84c3-873f-47ff-912f-5550502cfc08)
)
(fp_line (start -34.42 -41.4) (end -28.07 -41.4)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp b26e026c-6dea-4ffb-a526-a4ee2c39632f))
(fp_line (start -34.42 -29.72) (end -34.42 -41.4)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp d26ab123-9008-4e12-a0b9-6e38bddf95fd))
(fp_line (start -29.97 -9.65) (end -28.07 -9.65)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 7a75d219-04b2-4bf2-82a7-0fef7a75d183))
(fp_line (start -29.97 -0.51) (end -29.97 -9.65)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 2f792b82-a665-4631-a86b-8dce7ae8d66e))
(fp_line (start -28.07 -50.93) (end 36.58 -50.93)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp de42df93-a05c-44ae-b6d0-a0d5f228898f))
(fp_line (start -28.07 -41.4) (end -28.07 -50.93)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 73574a20-e08e-4ca5-b392-1463e295fda9))
(fp_line (start -28.07 -29.72) (end -34.42 -29.72)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp d10ff3fa-9954-4885-97eb-cc698dc12b03))
(fp_line (start -28.07 -9.65) (end -28.07 -29.72)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 92d154c8-079a-465d-b942-cee9d27e11ee))
(fp_line (start -28.07 -0.51) (end -29.97 -0.51)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp a8651104-1b8b-4a34-b55a-178562bb5f51))
(fp_line (start -28.07 2.67) (end -28.07 -0.51)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 8d637ccb-6c0a-4408-8f1d-6c900e50f6fb))
(fp_line (start 36.58 -50.93) (end 38.23 -49.28)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp b23f4057-b49b-4694-955a-954e2fd150e0))
(fp_line (start 38.23 -49.28) (end 38.23 -37.85)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp e21b58b0-650e-4ec8-a013-0cf06df7d5a7))
(fp_line (start 38.23 -37.85) (end 40.77 -35.31)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 06f51e56-0f99-412e-84d6-409b956d1d1c))
(fp_line (start 38.23 0) (end 38.23 2.67)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 6307eea6-d96e-436a-bb3c-c98649cce7d7))
(fp_line (start 38.23 2.67) (end -28.07 2.67)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp f8508139-3f50-4eb1-97e4-dc4d13c72123))
(fp_line (start 40.77 -35.31) (end 40.77 -2.54)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 7864072b-ed5b-4038-a2be-c16255cc20e0))
(fp_line (start 40.77 -2.54) (end 38.23 0)
(stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp ad213429-6c02-41fc-8de8-4c535362ad4c))
(fp_line (start -34.54 -41.53) (end -34.54 -29.59)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp e0c9ed37-430d-426d-a3d4-0961f67c679a))
(fp_line (start -34.54 -29.59) (end -28.19 -29.59)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp e200aa54-9997-47b1-9e86-59fa358227f8))
(fp_line (start -30.1 -9.78) (end -30.1 -0.38)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 9864bf76-3124-472b-badc-4c47530a187b))
(fp_line (start -30.1 -0.38) (end -28.19 -0.38)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 72fb73b2-0786-4597-afe6-78aabc7ad03e))
(fp_line (start -28.19 -51.05) (end -28.19 -41.53)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp c69af99e-ebff-4bff-944c-ac7f7f99d58f))
(fp_line (start -28.19 -41.53) (end -34.54 -41.53)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp b8bb6621-3d01-4a1c-a004-f0bd7f6730e9))
(fp_line (start -28.19 -29.59) (end -28.19 -9.78)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp b75e3193-c61f-4ff8-b9a0-c6e038969fa6))
(fp_line (start -28.19 -9.78) (end -30.1 -9.78)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp b417070e-4f40-4310-a7d4-4d38f1ec0046))
(fp_line (start -28.19 -0.38) (end -28.19 2.79)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp f10da927-3a27-4222-8dbb-2fe128ba18e5))
(fp_line (start -28.19 2.79) (end 38.35 2.79)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 180f3ed7-8bdf-4352-88cc-3487debe6d0a))
(fp_line (start 36.58 -51.05) (end -28.19 -51.05)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp b61584d1-c77f-487f-b53b-a0fd8f598cb7))
(fp_line (start 38.35 -49.28) (end 36.58 -51.05)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp cade55e0-6752-4e96-8f21-207e8ffb042d))
(fp_line (start 38.35 -37.85) (end 38.35 -49.28)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 185f9fcc-3057-4686-9d2c-6a2a80073ba8))
(fp_line (start 38.35 0) (end 40.89 -2.54)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 8c1d190e-b323-4723-a249-4e1974c469fb))
(fp_line (start 38.35 2.79) (end 38.35 0)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp a330532b-9fd3-466e-b97f-db60e5bc2f72))
(fp_line (start 40.89 -35.31) (end 38.35 -37.85)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 43a23aff-92e4-456a-85dd-02eb13a24280))
(fp_line (start 40.89 -2.54) (end 40.89 -35.31)
(stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 5aa4f625-9819-4e74-8b9d-b6dabf742ae6))
(fp_line (start -34.29 -41.27) (end -34.29 -29.84)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 167bc0f3-144a-4436-b8db-1a2c7919e490))
(fp_line (start -34.29 -29.84) (end -18.41 -29.84)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp e6381050-f80a-443e-b7dd-54588b16e4bd))
(fp_line (start -29.84 -9.53) (end -29.84 -0.64)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp a10245bf-e8d7-408a-ad56-e77f5a02806b))
(fp_line (start -29.84 -0.64) (end -16.51 -0.64)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 8408749c-b44a-4174-b2ac-a2bb956354c1))
(fp_line (start -27.94 -50.8) (end -27.94 2.54)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 708ef474-4e55-4685-8a23-14a6f3c91f87))
(fp_line (start -27.94 2.54) (end 38.1 2.54)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 41761804-e84e-4374-b6cb-0bfefbe96cab))
(fp_line (start -18.41 -41.27) (end -34.29 -41.27)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 6055765d-dc4d-4b8f-aa14-1cc00f84b5ad))
(fp_line (start -18.41 -29.84) (end -18.41 -41.27)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp ae481494-20cb-4b48-a719-51bdb9ab0a98))
(fp_line (start -16.51 -9.53) (end -29.84 -9.53)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 6b1c889d-e2e1-4459-aff8-a99db5b6333e))
(fp_line (start -16.51 -0.64) (end -16.51 -9.53)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp b03f57f4-9cf1-4e85-80d7-e0ff4d083d23))
(fp_line (start 36.58 -50.8) (end -27.94 -50.8)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp d3a99e71-da3a-4e2a-8e3a-e0f7753c862c))
(fp_line (start 38.1 -49.28) (end 36.58 -50.8)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp e49797b4-fcd7-478c-b5d0-bc59dc7533c4))
(fp_line (start 38.1 -37.85) (end 38.1 -49.28)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp cd573a44-6115-4073-b0cc-fc0d67bc69f9))
(fp_line (start 38.1 0) (end 40.64 -2.54)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp e457cc5f-77f7-43ac-916d-fbaed61e95b1))
(fp_line (start 38.1 2.54) (end 38.1 0)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp ae948fd2-fde1-4ae9-9d26-94b54c873cea))
(fp_line (start 40.64 -35.31) (end 38.1 -37.85)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp a3d33813-fda8-4ed9-bc8f-5ec4ae78faf3))
(fp_line (start 40.64 -2.54) (end 40.64 -35.31)
(stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 49e48392-fb84-4d84-a664-93314d8fd7b9))
(pad "1" thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 1 "unconnected-(A101-NC-Pad1)") (pinfunction "NC") (pintype "no_connect") (tstamp f7515c24-5205-417e-a753-8358959a8f9a))
(pad "2" thru_hole oval (at 2.54 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 2 "unconnected-(A101-IOREF-Pad2)") (pinfunction "IOREF") (pintype "output") (tstamp 02958a5e-2866-4500-9fff-c69a46b00b0e))
(pad "3" thru_hole oval (at 5.08 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 3 "unconnected-(A101-~{RESET}-Pad3)") (pinfunction "~{RESET}") (pintype "input") (tstamp 7ce639d9-ccab-4247-8186-2063f3d134eb))
(pad "4" thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 4 "+3V3") (pinfunction "3V3") (pintype "power_out") (tstamp e8516082-aaa3-4868-ad46-e289f389753b))
(pad "5" thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 4 "+3V3") (pinfunction "+5V") (pintype "power_out") (tstamp 46537b62-8a6e-4f22-9ffa-51016803e8eb))
(pad "6" thru_hole oval (at 12.7 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 5 "GND") (pinfunction "GND") (pintype "power_in") (tstamp 1dd19657-4f80-4a8f-b2fd-f590f5b21508))
(pad "7" thru_hole oval (at 15.24 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 5 "GND") (pinfunction "GND") (pintype "power_in") (tstamp b903a468-6690-4bf7-8f7e-cbc84eada7f9))
(pad "8" thru_hole oval (at 17.78 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 6 "unconnected-(A101-VIN-Pad8)") (pinfunction "VIN") (pintype "power_in") (tstamp 3ca81f87-2b1f-403a-a66d-652496fb42ad))
(pad "9" thru_hole oval (at 22.86 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 7 "NFC_IRQ") (pinfunction "A0") (pintype "bidirectional") (tstamp c20b3c00-c949-4a0c-9ee1-92669b2964a3))
(pad "10" thru_hole oval (at 25.4 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 8 "unconnected-(A101-A1-Pad10)") (pinfunction "A1") (pintype "bidirectional") (tstamp 97dfb801-c455-4933-b5df-de3d472470cd))
(pad "11" thru_hole oval (at 27.94 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 9 "unconnected-(A101-A2-Pad11)") (pinfunction "A2") (pintype "bidirectional") (tstamp 9f778251-a8bd-4ebd-9a27-42abf8ddf83f))
(pad "12" thru_hole oval (at 30.48 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 10 "unconnected-(A101-A3-Pad12)") (pinfunction "A3") (pintype "bidirectional") (tstamp 2c20b29f-50f6-4f92-a764-d5737ce5ac84))
(pad "13" thru_hole oval (at 33.02 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 11 "unconnected-(A101-SDA{slash}A4-Pad13)") (pinfunction "SDA/A4") (pintype "bidirectional") (tstamp ef18ff6e-73d0-4360-bb5a-b0e248708d69))
(pad "14" thru_hole oval (at 35.56 0 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 12 "unconnected-(A101-SCL{slash}A5-Pad14)") (pinfunction "SCL/A5") (pintype "bidirectional") (tstamp 6a9ba62c-38a8-4329-896a-50a2d63d2ace))
(pad "15" thru_hole oval (at 35.56 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 13 "unconnected-(A101-D0{slash}RX-Pad15)") (pinfunction "D0/RX") (pintype "bidirectional") (tstamp af50edd6-4f73-4249-b734-68faca22444b))
(pad "16" thru_hole oval (at 33.02 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 14 "unconnected-(A101-D1{slash}TX-Pad16)") (pinfunction "D1/TX") (pintype "bidirectional") (tstamp fa1c538a-3c05-498c-b1f4-613b326b5cbd))
(pad "17" thru_hole oval (at 30.48 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 15 "unconnected-(A101-D2-Pad17)") (pinfunction "D2") (pintype "bidirectional") (tstamp 549e7a60-492c-4e55-8bce-e588dfff13a7))
(pad "18" thru_hole oval (at 27.94 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 16 "unconnected-(A101-D3-Pad18)") (pinfunction "D3") (pintype "bidirectional") (tstamp f9960bd5-e318-4c3d-9a26-ece8d8c8b7b3))
(pad "19" thru_hole oval (at 25.4 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 17 "unconnected-(A101-D4-Pad19)") (pinfunction "D4") (pintype "bidirectional") (tstamp ef33024a-17d4-4625-b55c-927870a054b9))
(pad "20" thru_hole oval (at 22.86 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 18 "unconnected-(A101-D5-Pad20)") (pinfunction "D5") (pintype "bidirectional") (tstamp 6152aa72-bcf5-47e8-96a3-e9bbcb5d6ca2))
(pad "21" thru_hole oval (at 20.32 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 19 "unconnected-(A101-D6-Pad21)") (pinfunction "D6") (pintype "bidirectional") (tstamp e1e51b6f-9dc8-493b-aa4a-cba2f77dcbe6))
(pad "22" thru_hole oval (at 17.78 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 20 "unconnected-(A101-D7-Pad22)") (pinfunction "D7") (pintype "bidirectional") (tstamp dba8039c-1d79-425c-817e-b7135b245c4d))
(pad "23" thru_hole oval (at 13.72 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 21 "unconnected-(A101-D8-Pad23)") (pinfunction "D8") (pintype "bidirectional") (tstamp 320f1ada-cf1e-40de-b46f-521df4f6fe3f))
(pad "24" thru_hole oval (at 11.18 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 22 "unconnected-(A101-D9-Pad24)") (pinfunction "D9") (pintype "bidirectional") (tstamp e16a80d2-c045-4c3f-a4f4-5c474a2d057c))
(pad "25" thru_hole oval (at 8.64 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 23 "NFC_SS_N") (pinfunction "D10") (pintype "bidirectional") (tstamp 42e0ed44-6d38-4b77-b082-21809496d82a))
(pad "26" thru_hole oval (at 6.1 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 24 "MOSI") (pinfunction "D11") (pintype "bidirectional") (tstamp 29db1bc0-d438-4573-b91e-e9cacba8ff07))
(pad "27" thru_hole oval (at 3.56 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 25 "MISO") (pinfunction "D12") (pintype "bidirectional") (tstamp 37afb7d3-0abe-4bee-8f61-e2f496da6dbd))
(pad "28" thru_hole oval (at 1.02 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 26 "SLCK") (pinfunction "D13") (pintype "bidirectional") (tstamp ae5675b8-97ad-4dda-814b-12ec388ba04f))
(pad "29" thru_hole oval (at -1.52 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 27 "unconnected-(A101-GND-Pad29)") (pinfunction "GND") (pintype "power_in") (tstamp 818e6f9b-c699-4612-a539-df191d2280ca))
(pad "30" thru_hole oval (at -4.06 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 28 "unconnected-(A101-AREF-Pad30)") (pinfunction "AREF") (pintype "input") (tstamp 8f4b0cc9-4a63-4732-9296-e767d0cfd3d6))
(pad "31" thru_hole oval (at -6.6 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 29 "unconnected-(A101-SDA{slash}A4-Pad31)") (pinfunction "SDA/A4") (pintype "bidirectional") (tstamp 427a3679-e179-4350-85f0-5e97788f4d33))
(pad "32" thru_hole oval (at -9.14 -48.26 180) (size 1.6 1.6) (drill 1) (layers "*.Cu" "*.Mask")
(net 30 "unconnected-(A101-SCL{slash}A5-Pad32)") (pinfunction "SCL/A5") (pintype "bidirectional") (tstamp 2eb9e03a-00f9-438a-a479-01cafc21d1f9))
(model "${KICAD6_3DMODEL_DIR}/Module.3dshapes/Arduino_UNO_R3.wrl"
(offset (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(gr_rect (start 97.5 47.5) (end 155 142.5)
(stroke (width 0.1) (type default)) (fill none) (layer "Edge.Cuts") (tstamp 9c2832e1-46bf-4e26-9969-d6f5ebf74e8a))
(segment (start 101.12 112.235) (end 101.12 109.695) (width 0.25) (layer "F.Cu") (net 4) (tstamp ca6a8ee1-e648-4d54-ad98-9ef48f7d1441))
(segment (start 101.12 109.695) (end 101.12 108.5699) (width 0.25) (layer "B.Cu") (net 4) (tstamp 017a10bc-f4be-4f97-959f-74295adf3c50))
(segment (start 106.1777 80.5749) (end 106.67 80.5749) (width 0.25) (layer "B.Cu") (net 4) (tstamp 19f96c7b-41b1-4dc5-8112-055e7b2b4594))
(segment (start 106.67 81.75) (end 106.67 80.5749) (width 0.25) (layer "B.Cu") (net 4) (tstamp 274f4ef7-434e-46c6-90b4-fb570165386b))
(segment (start 99.3579 72.43) (end 99.3579 73.7551) (width 0.25) (layer "B.Cu") (net 4) (tstamp 2c918506-920b-4966-89a9-0b35d06ef97b))
(segment (start 106.67 103.3012) (end 106.67 81.75) (width 0.25) (layer "B.Cu") (net 4) (tstamp 44e3c3dd-03d0-4818-9e87-9f69337bd05d))
(segment (start 101.4013 108.5699) (end 106.67 103.3012) (width 0.25) (layer "B.Cu") (net 4) (tstamp 74e9843c-dce0-4439-b61e-739e08eb6968))
(segment (start 101.12 108.5699) (end 101.4013 108.5699) (width 0.25) (layer "B.Cu") (net 4) (tstamp 8feb133f-88f6-4545-8f04-723c328957db))
(segment (start 99.3579 73.7551) (end 106.1777 80.5749) (width 0.25) (layer "B.Cu") (net 4) (tstamp bcc924bc-561b-463b-a38e-3e2767f45119))
(segment (start 108.293 59.8302) (end 108.293 79.6579) (width 0.25) (layer "F.Cu") (net 5) (tstamp 011a37b5-8aa9-4311-b247-f7349c224a6c))
(segment (start 108.293 79.6579) (end 109.21 80.5749) (width 0.25) (layer "F.Cu") (net 5) (tstamp 2912662c-c99f-4708-882a-0166bf2fe8b4))
(segment (start 101.12 117.315) (end 101.12 115.339) (width 0.25) (layer "F.Cu") (net 5) (tstamp 4a685c5c-6953-477d-879f-9877685ce9ca))
(segment (start 99.3579 50.8951) (end 108.293 59.8302) (width 0.25) (layer "F.Cu") (net 5) (tstamp 4e6a2a00-86d0-4eea-91fa-313c99c1a384))
(segment (start 109.21 81.75) (end 109.21 107.249) (width 0.25) (layer "F.Cu") (net 5) (tstamp 853d193e-3d35-476e-905a-9550c35005d7))
(segment (start 109.21 107.249) (end 101.12 115.339) (width 0.25) (layer "F.Cu") (net 5) (tstamp 8f2dd1b3-f15f-423a-bfe5-7916f19f3671))
(segment (start 109.21 81.75) (end 109.21 80.5749) (width 0.25) (layer "F.Cu") (net 5) (tstamp a8914edf-76dd-4e9a-80a9-b3c4197022c2))
(segment (start 99.3579 49.57) (end 99.3579 50.8951) (width 0.25) (layer "F.Cu") (net 5) (tstamp be14ac45-c23f-43bc-b813-580a25aa06c3))
(segment (start 101.12 115.339) (end 101.12 114.775) (width 0.25) (layer "F.Cu") (net 5) (tstamp cb767cc1-3e8e-41db-8d66-4da16f74ed91))
(segment (start 117.138 72.9268) (end 117.138 73.0925) (width 0.25) (layer "F.Cu") (net 7) (tstamp 0e93b4ce-3a4e-4392-becd-03feb49c9020))
(segment (start 101.12 124.935) (end 101.12 123.8099) (width 0.25) (layer "F.Cu") (net 7) (tstamp 14d6c065-0415-44cc-bb3f-30a30b9c5f55))
(segment (start 117.138 72.6784) (end 117.138 72.9268) (width 0.25) (layer "F.Cu") (net 7) (tstamp 20a2ac93-9f4d-4211-be4f-c58d92cb093f))
(segment (start 113.02 111.9099) (end 101.12 123.8099) (width 0.25) (layer "F.Cu") (net 7) (tstamp 5ab0954e-f631-4f32-bb04-ab1135dc6fcc))
(segment (start 113.02 77.0448) (end 113.02 111.9099) (width 0.25) (layer "F.Cu") (net 7) (tstamp 636d2c56-06e0-4e0c-8baf-f6e5a488f8ad))
(segment (start 117.138 72.43) (end 117.138 72.6784) (width 0.25) (layer "F.Cu") (net 7) (tstamp 7dd65012-7675-4588-ae26-016fe79e3402))
(segment (start 117.138 72.6784) (end 117.1379 72.6783) (width 0.25) (layer "F.Cu") (net 7) (tstamp ccbc45f4-a414-482d-84c6-a08d76131d1d))
(segment (start 117.1379 72.6783) (end 117.1379 72.43) (width 0.25) (layer "F.Cu") (net 7) (tstamp dd4be416-901b-4bd5-b04e-00f559ff216d))
(segment (start 117.138 72.9268) (end 113.02 77.0448) (width 0.25) (layer "F.Cu") (net 7) (tstamp ed0a0912-7665-4a30-b4ed-b56b21d4d52e))
(segment (start 110.48 82.1735) (end 139.0215 110.715) (width 0.25) (layer "B.Cu") (net 23) (tstamp 0e53285a-48ee-482d-96b5-27b99bdef2aa))
(segment (start 106.9779 72.43) (end 106.9779 73.7551) (width 0.25) (layer "B.Cu") (net 23) (tstamp 0f6dc039-4e1f-4917-9cd0-0be4c4f5e338))
(segment (start 106.9779 73.7551) (end 110.48 77.2572) (width 0.25) (layer "B.Cu") (net 23) (tstamp 11846f8e-fb67-4a78-a351-6d99cbd79d17))
(segment (start 110.48 77.2572) (end 110.48 82.1735) (width 0.25) (layer "B.Cu") (net 23) (tstamp 3e7f3a01-4c2a-474b-a2d3-2915fd115aef))
(segment (start 139.0215 110.715) (end 149.38 110.715) (width 0.25) (layer "B.Cu") (net 23) (tstamp 8f45d093-1ea8-4921-9b67-4b89a00a0f96))
(segment (start 112.058 72.9268) (end 111.75 73.2348) (width 0.25) (layer "F.Cu") (net 24) (tstamp 32351642-0e65-40e7-abea-ba505c2531d8))
(segment (start 112.058 72.6784) (end 112.0579 72.6783) (width 0.25) (layer "F.Cu") (net 24) (tstamp 5a675906-a63d-48c9-904f-232850e1f1c0))
(segment (start 112.058 72.43) (end 112.058 72.6784) (width 0.25) (layer "F.Cu") (net 24) (tstamp 7a4d2cd8-3cc2-48d4-9c9c-e1d6364fa4ea))
(segment (start 111.75 73.2348) (end 111.75 81.75) (width 0.25) (layer "F.Cu") (net 24) (tstamp 9c433596-0a0a-437f-a326-4260e4d07805))
(segment (start 112.0579 72.6783) (end 112.0579 72.43) (width 0.25) (layer "F.Cu") (net 24) (tstamp eb285bb3-c05d-4d71-9300-c74162eeb9cc))
(segment (start 112.058 72.9268) (end 112.058 73.0925) (width 0.25) (layer "F.Cu") (net 24) (tstamp edce02e9-c9ab-47c8-9171-8362fd0135f1))
(segment (start 112.058 72.6784) (end 112.058 72.9268) (width 0.25) (layer "F.Cu") (net 24) (tstamp efbb5f75-cc27-4d58-9cfd-4d49aac88341))
(segment (start 138.9829 108.175) (end 112.9251 82.1172) (width 0.25) (layer "B.Cu") (net 24) (tstamp ad7fee84-2aca-44ae-81a6-6d36bd06853d))
(segment (start 112.9251 82.1172) (end 112.9251 81.75) (width 0.25) (layer "B.Cu") (net 24) (tstamp b6dc97a7-24a3-4619-b9b8-98dcbf3a1f25))
(segment (start 149.38 108.175) (end 138.9829 108.175) (width 0.25) (layer "B.Cu") (net 24) (tstamp b9a51de7-05ea-4850-9238-3afb465a4a51))
(segment (start 111.75 81.75) (end 112.9251 81.75) (width 0.25) (layer "B.Cu") (net 24) (tstamp df5bf64e-f0ec-4bc1-a64a-815c4f402444))
(segment (start 147.9652 103.3283) (end 149.1468 104.5099) (width 0.25) (layer "B.Cu") (net 25) (tstamp 280f4207-2e67-475f-89fa-444d6b005518))
(segment (start 147.9652 103.0495) (end 147.9652 103.3283) (width 0.25) (layer "B.Cu") (net 25) (tstamp 2f991188-b66e-4f75-b2ec-7283122c53f4))
(segment (start 149.1468 104.5099) (end 149.38 104.5099) (width 0.25) (layer "B.Cu") (net 25) (tstamp 49a73e9e-b104-457d-9ef5-b9abbfc7c55b))
(segment (start 121.7703 76.8546) (end 147.9652 103.0495) (width 0.25) (layer "B.Cu") (net 25) (tstamp 71a801e6-d398-4d22-9a1d-3c8e19e61451))
(segment (start 114.598 72.7612) (end 114.5979 72.7611) (width 0.25) (layer "B.Cu") (net 25) (tstamp 88543663-2418-4652-a3ae-c62cf843f3d5))
(segment (start 114.598 72.9268) (end 118.5258 76.8546) (width 0.25) (layer "B.Cu") (net 25) (tstamp a71c21d9-bed6-431d-af94-acb44f15b87f))
(segment (start 149.38 105.635) (end 149.38 104.5099) (width 0.25) (layer "B.Cu") (net 25) (tstamp abc3791b-b035-4ca9-83f7-e8975f405ee7))
(segment (start 114.598 72.43) (end 114.598 72.7612) (width 0.25) (layer "B.Cu") (net 25) (tstamp cf07f871-cc07-46cc-a0bb-6cf52b9aa7d3))
(segment (start 118.5258 76.8546) (end 121.7703 76.8546) (width 0.25) (layer "B.Cu") (net 25) (tstamp dc236160-aae5-43c1-9e39-c7ee23c59b3a))
(segment (start 114.598 72.7612) (end 114.598 72.9268) (width 0.25) (layer "B.Cu") (net 25) (tstamp dff7e56d-c900-420e-945d-1c84cc15dc21))
(segment (start 114.5979 72.7611) (end 114.5979 72.43) (width 0.25) (layer "B.Cu") (net 25) (tstamp e39bd297-9c25-466e-a327-b75a406df031))
(segment (start 114.598 72.9268) (end 114.598 73.0925) (width 0.25) (layer "B.Cu") (net 25) (tstamp fc683484-f5d3-4197-9d5c-857dc018aa4f))
(segment (start 109.5179 72.7611) (end 109.5179 72.43) (width 0.25) (layer "F.Cu") (net 33) (tstamp 0aad2763-71f8-41c4-846a-72f99c4b2d53))
(segment (start 109.518 72.43) (end 109.518 72.7612) (width 0.25) (layer "F.Cu") (net 33) (tstamp 1d1300ea-923d-45fc-8e3c-0b1bcc3fdaff))
(segment (start 109.518 72.7612) (end 109.518 73.0925) (width 0.25) (layer "F.Cu") (net 33) (tstamp 599f701b-48e2-46fe-a533-5c21ac928f16))
(segment (start 109.518 72.7612) (end 109.5179 72.7611) (width 0.25) (layer "F.Cu") (net 33) (tstamp 9cd0a9b1-66b8-4449-af29-d2d3ef9d4ca2))
(segment (start 109.5179 72.43) (end 109.5179 73.7551) (width 0.25) (layer "B.Cu") (net 33) (tstamp 09d65eb0-00ca-45ff-b0f2-6826bbf35d3b))
(segment (start 114.29 78.5272) (end 114.29 81.75) (width 0.25) (layer "B.Cu") (net 33) (tstamp eff24abd-691d-460d-a846-71d453a68f49))
(segment (start 109.5179 73.7551) (end 114.29 78.5272) (width 0.25) (layer "B.Cu") (net 33) (tstamp fc9a7b57-e419-4912-87cb-c0b201d1d5f0))
(segment (start 119.678 50.2325) (end 118.734 51.1765) (width 0.25) (layer "F.Cu") (net 61) (tstamp 0f83361d-84a4-485f-ad2b-53374f9de415))
(segment (start 118.734 51.1765) (end 118.734 79.9389) (width 0.25) (layer "F.Cu") (net 61) (tstamp 45168cd7-f582-4188-9919-1ab6fe0c713a))
(segment (start 118.734 79.9389) (end 119.37 80.5749) (width 0.25) (layer "F.Cu") (net 61) (tstamp 559c3311-c8a9-4a93-a706-30e2d8f9535d))
(segment (start 119.37 81.75) (end 119.37 80.5749) (width 0.25) (layer "F.Cu") (net 61) (tstamp 60652391-c8ab-4eab-977b-cfbbb0faae15))
(segment (start 119.6779 49.9011) (end 119.6779 49.57) (width 0.25) (layer "F.Cu") (net 61) (tstamp 69dc0562-05e1-4438-8606-93d6ea7afeb5))
(segment (start 119.678 49.9012) (end 119.6779 49.9011) (width 0.25) (layer "F.Cu") (net 61) (tstamp d0d6a5dc-68de-4f6e-aa16-901e98e739fc))
(segment (start 119.678 49.9012) (end 119.678 50.2325) (width 0.25) (layer "F.Cu") (net 61) (tstamp dfe40f43-9305-4506-a6bd-5c231a6a939a))
(segment (start 119.678 49.57) (end 119.678 49.9012) (width 0.25) (layer "F.Cu") (net 61) (tstamp f2d6ca74-2b1e-45df-9f4d-ffc392801b59))
(segment (start 117.138 49.9012) (end 117.1379 49.9011) (width 0.25) (layer "F.Cu") (net 62) (tstamp 081f30a8-f3cd-49bb-97ab-15c9ea7fe1ec))
(segment (start 117.1379 49.9011) (end 117.1379 49.57) (width 0.25) (layer "F.Cu") (net 62) (tstamp 6024b5a1-c2e3-46d2-beef-58a1ef820795))
(segment (start 117.138 49.57) (end 117.138 49.9012) (width 0.25) (layer "F.Cu") (net 62) (tstamp db80e180-2d0d-4c2f-8d98-7310af8cdbac))
(segment (start 117.138 49.9012) (end 117.138 50.2325) (width 0.25) (layer "F.Cu") (net 62) (tstamp ec51607d-9b89-47fc-bd79-0d576c3a50c1))
(segment (start 113.629 54.404) (end 113.629 73.211) (width 0.25) (layer "B.Cu") (net 62) (tstamp 264cfc34-f657-4ee3-a9da-e59de5e438ed))
(segment (start 117.1379 50.8951) (end 113.629 54.404) (width 0.25) (layer "B.Cu") (net 62) (tstamp 26bc4d37-c145-45a2-b7a3-49e1cd6ad69d))
(segment (start 117.1379 49.57) (end 117.1379 50.8951) (width 0.25) (layer "B.Cu") (net 62) (tstamp 6d50df22-57e0-48ad-8622-f05a4e9d0543))
(segment (start 120.9929 80.5749) (end 121.91 80.5749) (width 0.25) (layer "B.Cu") (net 62) (tstamp 7ef4682b-70ed-4884-9045-bd01faeffef5))
(segment (start 121.91 81.75) (end 121.91 80.5749) (width 0.25) (layer "B.Cu") (net 62) (tstamp aa447414-897e-4428-8f6c-97b3135c9cbc))
(segment (start 113.629 73.211) (end 120.9929 80.5749) (width 0.25) (layer "B.Cu") (net 62) (tstamp df74588a-719c-4e0d-ae9e-9ef06f56650e))
(segment (start 114.5979 49.57) (end 114.5979 48.2449) (width 0.25) (layer "F.Cu") (net 63) (tstamp 1579fc24-37dc-4162-8e93-6a1942ff927a))
(segment (start 120.0712 48.2449) (end 120.6031 48.7768) (width 0.25) (layer "F.Cu") (net 63) (tstamp 1bb95300-40a9-482e-a30b-9b18554c881d))
(segment (start 120.6031 76.728) (end 124.45 80.5749) (width 0.25) (layer "F.Cu") (net 63) (tstamp 30dcf49b-f43a-4420-9a8d-a10da24e1af4))
(segment (start 124.45 81.75) (end 124.45 80.5749) (width 0.25) (layer "F.Cu") (net 63) (tstamp 6f6236cc-42da-4302-ba4f-b586e8bddc4c))
(segment (start 114.5979 48.2449) (end 120.0712 48.2449) (width 0.25) (layer "F.Cu") (net 63) (tstamp a3d15880-fbee-4cb5-b5bb-193a809a74d4))
(segment (start 120.6031 48.7768) (end 120.6031 76.728) (width 0.25) (layer "F.Cu") (net 63) (tstamp cc519b60-ae27-4b32-b4d5-f01ab9c142bc))
(segment (start 114.598 49.9012) (end 114.5979 49.9011) (width 0.25) (layer "B.Cu") (net 63) (tstamp 05955416-3701-47cb-84fc-a78b3d2949d7))
(segment (start 114.5979 49.9011) (end 114.5979 49.57) (width 0.25) (layer "B.Cu") (net 63) (tstamp 574145ec-5168-4ae6-a466-cce54a4ef355))
(segment (start 114.598 49.9012) (end 114.598 50.2325) (width 0.25) (layer "B.Cu") (net 63) (tstamp 8eb60459-8258-47e6-99a0-b8b4cb767188))
(segment (start 114.598 49.57) (end 114.598 49.9012) (width 0.25) (layer "B.Cu") (net 63) (tstamp ef611d4b-def1-4724-98be-3f3b78d0e645))
)

View File

@ -0,0 +1,487 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.15,
"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": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "error",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "FabReader1.5.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"ngspice": {
"fix_include_paths": true,
"fix_passive_vals": false,
"meta": {
"version": 0
},
"model_mode": 0,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"b8993a80-a27f-4add-baf4-93b99ccacbe5",
""
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1 @@
Subproject commit a8a536c45a1680eb1021adc9496e52a1cd2595b4

View File

@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "Espressif")(type "KiCad")(uri "${KIPRJMOD}/Library/espressif/footprints/Espressif.pretty")(options "")(descr ""))
)

@ -0,0 +1 @@
Subproject commit a8a536c45a1680eb1021adc9496e52a1cd2595b4

View File

@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "Espressif")(type "KiCad")(uri "${KIPRJMOD}/Library/espressif/libraries/Espressif.kicad_sym")(options "")(descr ""))
)

View File

@ -3,10 +3,12 @@
"active_layer": 36, "active_layer": 36,
"active_layer_preset": "", "active_layer_preset": "",
"auto_track_width": true, "auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [], "hidden_nets": [],
"high_contrast_mode": 0, "high_contrast_mode": 0,
"net_color_mode": 1, "net_color_mode": 1,
"opacity": { "opacity": {
"images": 0.6,
"pads": 1.0, "pads": 1.0,
"tracks": 1.0, "tracks": 1.0,
"vias": 1.0, "vias": 1.0,

View File

@ -1,5 +1,6 @@
{ {
"board": { "board": {
"3dviewports": [],
"design_settings": { "design_settings": {
"defaults": { "defaults": {
"board_outline_line_width": 0.09999999999999999, "board_outline_line_width": 0.09999999999999999,
@ -206,7 +207,8 @@
"zones_allow_external_fillets": false, "zones_allow_external_fillets": false,
"zones_use_no_outline": true "zones_use_no_outline": true
}, },
"layer_presets": [] "layer_presets": [],
"viewports": []
}, },
"boards": [], "boards": [],
"cvpcb": { "cvpcb": {
@ -390,18 +392,23 @@
"rule_severities": { "rule_severities": {
"bus_definition_conflict": "error", "bus_definition_conflict": "error",
"bus_entry_needed": "error", "bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error", "bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error", "bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error", "different_unit_footprint": "error",
"different_unit_net": "error", "different_unit_net": "error",
"duplicate_reference": "error", "duplicate_reference": "error",
"duplicate_sheet_names": "error", "duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error", "extra_units": "error",
"global_label_dangling": "warning", "global_label_dangling": "warning",
"hier_label_mismatch": "error", "hier_label_mismatch": "error",
"label_dangling": "error", "label_dangling": "error",
"lib_symbol_issues": "warning", "lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning", "multiple_net_names": "warning",
"net_not_bus_member": "warning", "net_not_bus_member": "warning",
"no_connect_connected": "warning", "no_connect_connected": "warning",
@ -411,6 +418,7 @@
"pin_to_pin": "warning", "pin_to_pin": "warning",
"power_pin_not_driven": "error", "power_pin_not_driven": "error",
"similar_labels": "warning", "similar_labels": "warning",
"simulation_model_issue": "error",
"unannotated": "error", "unannotated": "error",
"unit_value_mismatch": "error", "unit_value_mismatch": "error",
"unresolved_variable": "error", "unresolved_variable": "error",
@ -428,7 +436,7 @@
"net_settings": { "net_settings": {
"classes": [ "classes": [
{ {
"bus_width": 12.0, "bus_width": 12,
"clearance": 0.2, "clearance": 0.2,
"diff_pair_gap": 0.25, "diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25, "diff_pair_via_gap": 0.25,
@ -442,10 +450,10 @@
"track_width": 0.25, "track_width": 0.25,
"via_diameter": 0.4, "via_diameter": 0.4,
"via_drill": 0.2, "via_drill": 0.2,
"wire_width": 6.0 "wire_width": 6
}, },
{ {
"bus_width": 12.0, "bus_width": 12,
"clearance": 0.2, "clearance": 0.2,
"diff_pair_gap": 0.25, "diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25, "diff_pair_via_gap": 0.25,
@ -454,19 +462,20 @@
"microvia_diameter": 0.3, "microvia_diameter": 0.3,
"microvia_drill": 0.1, "microvia_drill": 0.1,
"name": "Matching Network", "name": "Matching Network",
"nets": [],
"pcb_color": "rgba(0, 0, 0, 0.000)", "pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)", "schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.6, "track_width": 0.6,
"via_diameter": 0.4, "via_diameter": 0.4,
"via_drill": 0.2, "via_drill": 0.2,
"wire_width": 6.0 "wire_width": 6
} }
], ],
"meta": { "meta": {
"version": 2 "version": 3
}, },
"net_colors": null "net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
}, },
"pcbnew": { "pcbnew": {
"last_paths": { "last_paths": {
@ -482,6 +491,8 @@
"schematic": { "schematic": {
"annotate_start_num": 0, "annotate_start_num": 0,
"drawing": { "drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0, "default_line_thickness": 6.0,
"default_text_size": 50.0, "default_text_size": 50.0,
"field_names": [], "field_names": [],
@ -513,7 +524,11 @@
"page_layout_descr_file": "", "page_layout_descr_file": "",
"plot_directory": "", "plot_directory": "",
"spice_adjust_passive_values": false, "spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"", "spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65, "subpart_first_id": 65,
"subpart_id_separator": 0 "subpart_id_separator": 0
}, },

View File

@ -1,102 +0,0 @@
.config
*.o
*.pyc
# gtags
GTAGS
GRTAGS
GPATH
# emacs
.dir-locals.el
# emacs temp file suffixes
*~
.#*
\#*#
# eclipse setting
.settings
# MacOS directory files
.DS_Store
# cache dir
.cache/
# Components Unit Test Apps files
components/**/build/
components/**/build_*_*/
components/**/sdkconfig
components/**/sdkconfig.old
# Example project files
examples/**/build/
examples/**/build_esp*_*/
examples/**/sdkconfig
examples/**/sdkconfig.old
# Doc build artifacts
docs/_build/
docs/doxygen_sqlite3.db
# Downloaded font files
docs/_static/DejaVuSans.ttf
docs/_static/NotoSansSC-Regular.otf
# Unit test app files
tools/unit-test-app/sdkconfig
tools/unit-test-app/sdkconfig.old
tools/unit-test-app/build
tools/unit-test-app/build_*_*/
tools/unit-test-app/output
tools/unit-test-app/test_configs
# Unit Test CMake compile log folder
log_ut_cmake
# test application build files
tools/test_apps/**/build/
tools/test_apps/**/build_*_*/
tools/test_apps/**/sdkconfig
tools/test_apps/**/sdkconfig.old
# IDF monitor test
tools/test_idf_monitor/outputs
TEST_LOGS
# gcov coverage reports
*.gcda
*.gcno
coverage.info
coverage_report/
test_multi_heap_host
# VS Code Settings
.vscode/
# VIM files
*.swp
*.swo
# Clion IDE CMake build & config
.idea/
cmake-build-*/
# Results for the checking of the Python coding style and static analysis
.mypy_cache
flake8_output.txt
# ESP-IDF default build directory name
build
# lock files for examples and components
dependencies.lock
# managed_components for examples
managed_components
# pytest log
pytest_embedded_log/

View File

@ -1,3 +0,0 @@
idf_component_register(SRCS "fab-reader2.c" "pollingtagdetect.c"
INCLUDE_DIRS "."
REQUIRES "rfal")

View File

@ -1,102 +0,0 @@
#include <sys/cdefs.h>
#include <stdio.h>
#include <esp_err.h>
#include "platform.h"
#include "st25R3911_interrupt.h"
#include "pollingtagdetect.h"
#define SPI_CLK 5
#define SPI_MOSI 6
#define SPI_MISO 7
#define ESP_INTR_FLAG_DEFAULT 0
portMUX_TYPE CommProtectLock = portMUX_INITIALIZER_UNLOCKED;
static void gpio_isr_handler(void *arg) {
st25r3911Isr();
}
esp_err_t init_gpio(void) {
gpio_config_t io_conf = {};
//disable interrupt
io_conf.intr_type = GPIO_INTR_DISABLE;
//set as output mode
io_conf.mode = GPIO_MODE_INPUT_OUTPUT;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf.pin_bit_mask = (1ULL << ST25R391X_SS_PIN);
//disable pull-down mode
io_conf.pull_down_en = 0;
//disable pull-up mode
io_conf.pull_up_en = 0;
//configure GPIO with the given settings
esp_err_t ret = gpio_config(&io_conf);
ESP_ERROR_CHECK(ret);
//interrupt of rising edge
io_conf.intr_type = GPIO_INTR_POSEDGE;
//bit mask of the pins, use GPIO4/5 here
io_conf.pin_bit_mask = (1ULL << ST25R391X_INT_PIN);
//set as input mode
io_conf.mode = GPIO_MODE_INPUT;
//enable pull-up mode
// io_conf.pull_up_en = 1;
ret = gpio_config(&io_conf);
ESP_ERROR_CHECK(ret);
ret = gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
ESP_ERROR_CHECK(ret);
//hook isr handler for specific gpio pin
ret = gpio_isr_handler_add(ST25R391X_INT_PIN, gpio_isr_handler, NULL);
ESP_ERROR_CHECK(ret);
return ret;
}
esp_err_t init_spi(void) {
spi_bus_config_t buscfg = {
.miso_io_num=SPI_MISO,
.mosi_io_num=SPI_MOSI,
.sclk_io_num=SPI_CLK,
.quadwp_io_num=-1,
.quadhd_io_num=-1,
};
esp_err_t ret = spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);
ESP_ERROR_CHECK(ret);
spi_device_interface_config_t devcfg = {
.clock_speed_hz=SPI_MASTER_FREQ_8M, //Clock out at 4 MHz
.mode=1, //SPI mode 1
.spics_io_num=-1, //CS pin
.queue_size=1, //We want to be able to queue 7 transactions at a time
};
spi_device_handle_t spi;
ret = spi_bus_add_device(SPI2_HOST, &devcfg, &spi);
ESP_ERROR_CHECK(ret);
st25r3911_spi_init(spi);
return ret;
}
_Noreturn static void cycle_task(void *arg) {
while (1) {
TagDetectCycle();
// ESP_LOGI("cycle_task", "running tag detect cycle_task");
}
}
void app_main(void) {
ESP_ERROR_CHECK(init_gpio());
ESP_LOGI("main", "init_gpio done");
ESP_ERROR_CHECK(init_spi());
ESP_LOGI("main", "init_spi done");
ESP_ERROR_CHECK(TagDetectInit());
ESP_LOGI("main", "TagDetectInit done");
xTaskCreate(cycle_task, "cycle_task", 4096, NULL, tskIDLE_PRIORITY, NULL);
ESP_LOGI("main", "cycle_task sheduled");
}

View File

@ -1,21 +0,0 @@
//
// Created by Kai Jan Kriegel on 17.10.22.
//
#ifndef FAB_READER2_C_POLLINGTAGDETECT_H
#define FAB_READER2_C_POLLINGTAGDETECT_H
#include "esp_err.h"
#ifdef __cplusplus
extern "C" {
#endif
esp_err_t TagDetectInit(void);
void TagDetectCycle(void);
#ifdef __cplusplus
}
#endif
#endif //FAB_READER2_C_POLLINGTAGDETECT_H

View File

@ -1,34 +0,0 @@
[build]
# Uncomment the relevant target for your chip here (ESP32, ESP32-S2, ESP32-S3 or ESP32-C3)
#target = "xtensa-esp32-espidf"
target = "xtensa-esp32s2-espidf"
#target = "xtensa-esp32s3-espidf"
#target = "riscv32imc-esp-espidf"
[target.xtensa-esp32-espidf]
linker = "ldproxy"
[target.xtensa-esp32s2-espidf]
linker = "ldproxy"
[target.xtensa-esp32s3-espidf]
linker = "ldproxy"
[target.riscv32imc-esp-espidf]
linker = "ldproxy"
# Future - necessary for the experimental "native build" of esp-idf-sys with ESP32C3
# See also https://github.com/ivmarkov/embuild/issues/16
rustflags = ["-C", "default-linker-libraries"]
[unstable]
build-std = ["std", "panic_abort"]
#build-std-features = ["panic_immediate_abort"] # Required for older ESP-IDF versions without a realpath implementation
[env]
# Note: these variables are not used when using pio builder
# Enables the esp-idf-sys "native" build feature (`cargo build --features native`) to build against ESP-IDF stable (v4.4)
ESP_IDF_VERSION = { value = "branch:release/v4.4" }
# Enables the esp-idf-sys "native" build feature (`cargo build --features native`) to build against ESP-IDF master (mainline)
#ESP_IDF_VERSION = { value = "master" }

View File

@ -1,136 +1,102 @@
# Created by https://www.toptal.com/developers/gitignore/api/rust, .config
# Edit at https://www.toptal.com/developers/gitignore?templates=rust, *.o
*.pyc
.embuild # gtags
GTAGS
GRTAGS
GPATH
### Rust ### # emacs
# Generated by Cargo .dir-locals.el
# will have compiled files and executables
debug/
target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # emacs temp file suffixes
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html *~
Cargo.lock .#*
\#*#
# These are backup files generated by rustfmt # eclipse setting
**/*.rs.bk .settings
# MSVC Windows builds of rustc generate these, which store debugging information # MacOS directory files
*.pdb .DS_Store
### CLion ### # cache dir
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider .cache/
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff # Components Unit Test Apps files
.idea/**/workspace.xml components/**/build/
.idea/**/tasks.xml components/**/build_*_*/
.idea/**/usage.statistics.xml components/**/sdkconfig
.idea/**/dictionaries components/**/sdkconfig.old
.idea/**/shelf
# AWS User-specific # Example project files
.idea/**/aws.xml examples/**/build/
examples/**/build_esp*_*/
examples/**/sdkconfig
examples/**/sdkconfig.old
# Generated files # Doc build artifacts
.idea/**/contentModel.xml docs/_build/
docs/doxygen_sqlite3.db
# Sensitive or high-churn files # Downloaded font files
.idea/**/dataSources/ docs/_static/DejaVuSans.ttf
.idea/**/dataSources.ids docs/_static/NotoSansSC-Regular.otf
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle # Unit test app files
.idea/**/gradle.xml tools/unit-test-app/sdkconfig
.idea/**/libraries tools/unit-test-app/sdkconfig.old
tools/unit-test-app/build
tools/unit-test-app/build_*_*/
tools/unit-test-app/output
tools/unit-test-app/test_configs
# Gradle and Maven with auto-import # Unit Test CMake compile log folder
# When using Gradle or Maven with auto-import, you should exclude module files, log_ut_cmake
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake # test application build files
tools/test_apps/**/build/
tools/test_apps/**/build_*_*/
tools/test_apps/**/sdkconfig
tools/test_apps/**/sdkconfig.old
# IDF monitor test
tools/test_idf_monitor/outputs
TEST_LOGS
# gcov coverage reports
*.gcda
*.gcno
coverage.info
coverage_report/
test_multi_heap_host
# VS Code Settings
.vscode/
# VIM files
*.swp
*.swo
# Clion IDE CMake build & config
.idea/
cmake-build-*/ cmake-build-*/
# Mongo Explorer plugin # Results for the checking of the Python coding style and static analysis
.idea/**/mongoSettings.xml .mypy_cache
flake8_output.txt
# File-based project format # ESP-IDF default build directory name
*.iws build
# IntelliJ # lock files for examples and components
out/ dependencies.lock
# mpeltonen/sbt-idea plugin # managed_components for examples
.idea_modules/ managed_components
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### CLion Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
# https://plugins.jetbrains.com/plugin/7973-sonarlint
.idea/**/sonarlint/
# SonarQube Plugin
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
.idea/**/sonarIssues.xml
# Markdown Navigator plugin
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
.idea/**/markdown-navigator.xml
.idea/**/markdown-navigator-enh.xml
.idea/**/markdown-navigator/
# Cache file creation bug
# See https://youtrack.jetbrains.com/issue/JBR-2257
.idea/$CACHE_FILE$
# CodeStream plugin
# https://plugins.jetbrains.com/plugin/12206-codestream
.idea/codestream.xml
# Azure Toolkit for IntelliJ plugin
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
.idea/**/azureSettings.xml
# End of https://www.toptal.com/developers/gitignore/api/clion
# pytest log
pytest_embedded_log/

View File

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/embuild-9babbe67d2de4cbb" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-hal-68ae0d133e5a15be" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-hal-084bb28e9b6c5ea2" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-hal-47239b837d6ee894" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-hal-d12f38a36c6dfa35" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-svc-0047515e1899fdea" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-svc-ac315d2068ecf2bb" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-svc-dac2ab2f7b625b2c" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-sys-d183c7eca7ed1a96" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/esp-idf-sys-e0d1d1de09069f90" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-0c006852892ebb71" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-7fd53852c298ea00" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-36b1c9630302c449" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-80caa978a2ace45f" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-293e42dd82b8f118" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-01000ab60afd70cf" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-e41e0690f31a6581" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/.fingerprint/st25r3911b-f1248137c4480368" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/anyhow-247076dbefdfb5f5/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/bindgen-a4720f05c1bce4c1/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/camino-38596ff78b5f2926/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/clang-sys-1b5b6e7680455c2d/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/crossbeam-utils-42cb18efc987abae/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-sys-e0d1d1de09069f90/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/heapless-db1bcbd514183453/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/indexmap-fbf31b69644e6a3a/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/libc-c1e1babbe4657158/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/log-d1d90fd0e922ca60/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/memchr-0265f24ac6ac8a06/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/memchr-a757d9e29a769773/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/proc-macro2-fb6f0bb184afc9b2/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/quote-8a129efb5a996e0c/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/rustversion-86403bc93d70ebeb/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/semver-1c933769456fe334/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/serde-9aa38470cfeaa2af/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/serde-726883488d19b36f/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/serde_derive-960c6ae76ae42418/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/serde_json-938c959b32527ac2/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/serde_json-57631392421907e3/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/syn-183e5df62932bef4/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/thiserror-d55ed1f3d201e311/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-hal-47239b837d6ee894" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-hal-47239b837d6ee894/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-hal-d12f38a36c6dfa35" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-hal-d12f38a36c6dfa35/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-svc-0047515e1899fdea" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/esp-idf-svc-0047515e1899fdea/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/st25r3911b-0c006852892ebb71" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/build/st25r3911b-0c006852892ebb71/out" />
<excludeFolder url="file://$MODULE_DIR$/st25r3911b/target/debug/examples" />
<excludeFolder url="file://$MODULE_DIR$/.embuild" />
<excludeFolder url="file://$MODULE_DIR$/.embuild/espressif/python_env/idf4.4_py3.7_env/bin" />
<excludeFolder url="file://$MODULE_DIR$/.embuild/espressif/python_env/idf4.4_py3.7_env/include" />
<excludeFolder url="file://$MODULE_DIR$/.embuild/espressif/python_env/idf4.4_py3.7_env/lib" />
<excludeFolder url="file://$MODULE_DIR$/.embuild/espressif/tools/riscv32-esp-elf/esp-2021r2-patch5-8.4.0/riscv32-esp-elf/riscv32-esp-elf/include/c++/8.4.0/debug" />
<excludeFolder url="file://$MODULE_DIR$/.embuild/espressif/tools/xtensa-esp32s2-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32s2-elf/xtensa-esp32s2-elf/include/c++/8.4.0/debug" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -7,5 +7,3 @@ cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake) include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(fab-reader2-c) project(fab-reader2-c)
set(COMPONENTS main)
#list(SET COMPONENTS "mqtt")

View File

@ -1,31 +0,0 @@
[package]
name = "fab-reader2"
version = "0.1.0"
authors = ["Kai Jan Kriegel <kai@kjkriegel.de>"]
edition = "2021"
resolver = "2"
[profile.release]
opt-level = "s"
[profile.dev]
debug = true # Symbols are nice and they don't increase the size on Flash
opt-level = "z"
[features]
pio = ["esp-idf-sys/pio"]
[dependencies]
esp-idf-sys = { version = "0.31.6", features = ["binstart"] }
esp-idf-hal = "0.38.1"
anyhow = "1.0.58"
embedded-hal = { version ="0.2.7", features = ["unproven"] }
embedded-svc = "0.22.1"
pervasive_epd = { path = "pervasive_epd" }
embedded-graphics = "0.7.1"
st25r3911b = { path = "st25r3911b" }
[build-dependencies]
embuild = "0.29"
anyhow = "1"

View File

@ -1,5 +0,0 @@
// Necessary because of this issue: https://github.com/rust-lang/cargo/issues/9641
fn main() -> anyhow::Result<()> {
embuild::build::CfgArgs::output_propagated("ESP_IDF")?;
embuild::build::LinkArgs::output_propagated("ESP_IDF")
}

View File

@ -0,0 +1,2 @@
idf_component_register(SRCS "EPD_2in66.c" "Config/DEV_Config.c"
INCLUDE_DIRS "include" "include/Config")

View File

@ -0,0 +1,70 @@
/*****************************************************************************
* | File : DEV_Config.c
* | Author : Waveshare team
* | Function : Hardware underlying interface
* | Info :
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V2.0
* | Date : 2018-10-30
* | Info :
# ******************************************************************************
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "DEV_Config.h"
#include <esp_err.h>
#include <driver/spi_master.h>
#include <memory.h>
spi_device_handle_t pSpi;
void DEV_SPI_Init(spi_device_handle_t spi) {
pSpi = spi;
}
void DEV_SPI_WriteByte(UBYTE value)
{
spi_transaction_t t;
memset(&t, 0, sizeof(t));
t.length = 8;
t.tx_buffer = &value;
ESP_ERROR_CHECK(spi_device_polling_transmit(pSpi, &t));
}
int DEV_Module_Init(void)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_Digital_Write(EPD_RST_PIN, 1);
return 0;
}
void DEV_Module_Exit(void)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
//close 5V
DEV_Digital_Write(EPD_RST_PIN, 0);
}

View File

@ -0,0 +1,259 @@
/*****************************************************************************
* | File : EPD_2in66.c
* | Author : Waveshare team
* | Function : 2.66inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-07-29
* | Info :
* -----------------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_2in66.h"
#include "Debug.h"
const unsigned char WF_PARTIAL[159] ={
0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,
0x00,0x00,0x00,0x22,0x17,0x41,0xB0,0x32,0x36,
};
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_2IN66_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_2IN66_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_2IN66_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:
******************************************************************************/
void EPD_2IN66_ReadBusy(void)
{
Debug("e-Paper busy\r\n");
DEV_Delay_ms(100);
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
DEV_Delay_ms(100);
}
DEV_Delay_ms(100);
Debug("e-Paper busy release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_2IN66_TurnOnDisplay(void)
{
EPD_2IN66_SendCommand(0x20);
EPD_2IN66_ReadBusy();
}
/******************************************************************************
function : Send LUT
parameter:
******************************************************************************/
static void EPD_2IN66_SetLUA(void)
{
UWORD count;
EPD_2IN66_SendCommand(0x32);
for(count=0;count<153;count++){
EPD_2IN66_SendData(WF_PARTIAL[count]);
}
EPD_2IN66_ReadBusy();
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_2IN66_Init(void)
{
EPD_2IN66_Reset();
EPD_2IN66_ReadBusy();
EPD_2IN66_SendCommand(0x12);//soft reset
EPD_2IN66_ReadBusy();
/* Y increment, X increment */
EPD_2IN66_SendCommand(0x11);
EPD_2IN66_SendData(0x03);
/* Set RamX-address Start/End position */
EPD_2IN66_SendCommand(0x44);
EPD_2IN66_SendData(0x01);
EPD_2IN66_SendData((EPD_2IN66_WIDTH % 8 == 0)? (EPD_2IN66_WIDTH / 8 ): (EPD_2IN66_WIDTH / 8 + 1) );
/* Set RamY-address Start/End position */
EPD_2IN66_SendCommand(0x45);
EPD_2IN66_SendData(0);
EPD_2IN66_SendData(0);
EPD_2IN66_SendData((EPD_2IN66_HEIGHT&0xff));
EPD_2IN66_SendData((EPD_2IN66_HEIGHT&0x100)>>8);
EPD_2IN66_ReadBusy();
}
/******************************************************************************
function : Initialize the e-Paper register(Partial display)
parameter:
******************************************************************************/
void EPD_2IN66_Init_Partial(void)
{
EPD_2IN66_Reset();
EPD_2IN66_ReadBusy();
EPD_2IN66_SendCommand(0x12);//soft reset
EPD_2IN66_ReadBusy();
EPD_2IN66_SetLUA();
EPD_2IN66_SendCommand(0x37);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x40);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
EPD_2IN66_SendData(0x00);
/* Y increment, X increment */
EPD_2IN66_SendCommand(0x11);
EPD_2IN66_SendData(0x03);
/* Set RamX-address Start/End position */
EPD_2IN66_SendCommand(0x44);
EPD_2IN66_SendData(0x01);
EPD_2IN66_SendData((EPD_2IN66_WIDTH % 8 == 0)? (EPD_2IN66_WIDTH / 8 ): (EPD_2IN66_WIDTH / 8 + 1) );
/* Set RamY-address Start/End position */
EPD_2IN66_SendCommand(0x45);
EPD_2IN66_SendData(0);
EPD_2IN66_SendData(0);
EPD_2IN66_SendData((EPD_2IN66_HEIGHT&0xff));
EPD_2IN66_SendData((EPD_2IN66_HEIGHT&0x100)>>8);
EPD_2IN66_SendCommand(0x3C);
EPD_2IN66_SendData(0x80);
EPD_2IN66_SendCommand(0x22);
EPD_2IN66_SendData(0xcf);
EPD_2IN66_SendCommand(0x20);
EPD_2IN66_ReadBusy();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_2IN66_Clear(void)
{
UWORD Width, Height;
Width = (EPD_2IN66_WIDTH % 8 == 0)? (EPD_2IN66_WIDTH / 8 ): (EPD_2IN66_WIDTH / 8 + 1);
Height = EPD_2IN66_HEIGHT;
EPD_2IN66_SendCommand(0x24);
for (UWORD j = 0; j <=Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_2IN66_SendData(0xff);
}
}
EPD_2IN66_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_2IN66_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_2IN66_WIDTH % 8 == 0)? (EPD_2IN66_WIDTH / 8 ): (EPD_2IN66_WIDTH / 8 + 1);
Height = EPD_2IN66_HEIGHT;
UDOUBLE Addr = 0;
// UDOUBLE Offset = ImageName;
EPD_2IN66_SendCommand(0x24);
for (UWORD j = 0; j <Height; j++) {
for (UWORD i = 0; i <Width; i++) {
Addr = i + j * Width;
EPD_2IN66_SendData(Image[Addr]);
}
}
EPD_2IN66_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_2IN66_Sleep(void)
{
EPD_2IN66_SendCommand(0x10);
EPD_2IN66_SendData(0x01);
//EPD_2IN66_ReadBusy();
}

View File

@ -0,0 +1,94 @@
/*****************************************************************************
* | File : DEV_Config.h
* | Author : Waveshare team
* | Function : Hardware underlying interface
* | Info :
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V2.0
* | Date : 2018-10-30
* | Info :
* 1.add:
* UBYTE\UWORD\UDOUBLE
* 2.Change:
* EPD_RST -> EPD_RST_PIN
* EPD_DC -> EPD_DC_PIN
* EPD_CS -> EPD_CS_PIN
* EPD_BUSY -> EPD_BUSY_PIN
* 3.Remote:
* EPD_RST_1\EPD_RST_0
* EPD_DC_1\EPD_DC_0
* EPD_CS_1\EPD_CS_0
* EPD_BUSY_1\EPD_BUSY_0
* 3.add:
* #define DEV_Digital_Write(_pin, _value) bcm2835_gpio_write(_pin, _value)
* #define DEV_Digital_Read(_pin) bcm2835_gpio_lev(_pin)
* #define DEV_SPI_WriteByte(__value) bcm2835_spi_transfer(__value)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef _DEV_CONFIG_H_
#define _DEV_CONFIG_H_
#include "esp_err.h"
#include "driver/gpio.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <stdint.h>
#include <stdio.h>
#include <driver/spi_master.h>
/**
* data
**/
#define UBYTE uint8_t
#define UWORD uint16_t
#define UDOUBLE uint32_t
/**
* e-Paper GPIO
**/
#define EPD_RST_PIN 40
#define EPD_DC_PIN 39
#define EPD_CS_PIN 38
#define EPD_BUSY_PIN 41
/**
* GPIO read and write
**/
#define DEV_Digital_Write(_pin, _value) ESP_ERROR_CHECK(gpio_set_level(_pin, _value))
#define DEV_Digital_Read(_pin) gpio_get_level(_pin)
/**
* delay x ms
**/
#define DEV_Delay_ms(__xms) vTaskDelay(pdMS_TO_TICKS(__xms))
/**
* SPI
**/
void DEV_SPI_Init(spi_device_handle_t spi);
void DEV_SPI_WriteByte(UBYTE value);
int DEV_Module_Init(void);
void DEV_Module_Exit(void);
#endif

View File

@ -0,0 +1,26 @@
/*****************************************************************************
* | File : Debug.h
* | Author : Waveshare team
* | Function : debug with printf
* | Info :
* Image scanning
* Please use progressive scanning to generate images or fonts
*----------------
* | This version: V1.0
* | Date : 2018-01-11
* | Info : Basic version
*
******************************************************************************/
#ifndef __DEBUG_H
#define __DEBUG_H
#include <esp_log.h>
#define DEBUG 1
#if DEBUG
#define Debug(...) ESP_LOGD("EPD", __VA_ARGS__)
#else
#define Debug(__info,...)
#endif
#endif

View File

@ -0,0 +1,46 @@
/*****************************************************************************
* | File : EPD_2in66.h
* | Author : Waveshare team
* | Function : 2.66inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-07-29
* | Info :
* -----------------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef __EPD_2IN66_H_
#define __EPD_2IN66_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_2IN66_WIDTH 152
#define EPD_2IN66_HEIGHT 296
void EPD_2IN66_Init(void);
void EPD_2IN66_Init_Partial(void);
void EPD_2IN66_Clear(void);
void EPD_2IN66_Display(UBYTE *Image);
void EPD_2IN66_Sleep(void);
#endif

View File

@ -0,0 +1,3 @@
idf_component_register(SRCS "GUI/GUI_Paint.c" "Fonts/font8.c" "Fonts/font12.c" "Fonts/font16.c" "Fonts/font20.c" "Fonts/font24.c"
INCLUDE_DIRS "include/GUI" "include/Fonts"
REQUIRES "epd_266")

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,890 @@
/******************************************************************************
* | File : GUI_Paint.c
* | Author : Waveshare electronics
* | Function : Achieve drawing: draw points, lines, boxes, circles and
* their size, solid dotted line, solid rectangle hollow
* rectangle, solid circle hollow circle.
* | Info :
* Achieve display characters: Display a single character, string, number
* Achieve time display: adaptive size display time minutes and seconds
*----------------
* | This version: V3.1
* | Date : 2020-07-08
* | Info :
* -----------------------------------------------------------------------------
* V3.1(2020-07-08):
* 1.Change: Paint_SetScale(UBYTE scale)
* Add scale 7 for 5.65f e-Parper
* 2.Change: Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color)
* Add the branch for scale 7
* 3.Change: Paint_Clear(UWORD Color)
* Add the branch for scale 7
*
* -----------------------------------------------------------------------------
* V3.0(2019-04-18):
* 1.Change:
* Paint_DrawPoint(..., DOT_STYLE DOT_STYLE)
* => Paint_DrawPoint(..., DOT_STYLE Dot_Style)
* Paint_DrawLine(..., LINE_STYLE Line_Style, DOT_PIXEL Dot_Pixel)
* => Paint_DrawLine(..., DOT_PIXEL Line_width, LINE_STYLE Line_Style)
* Paint_DrawRectangle(..., DRAW_FILL Filled, DOT_PIXEL Dot_Pixel)
* => Paint_DrawRectangle(..., DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
* Paint_DrawCircle(..., DRAW_FILL Draw_Fill, DOT_PIXEL Dot_Pixel)
* => Paint_DrawCircle(..., DOT_PIXEL Line_width, DRAW_FILL Draw_Filll)
*
* -----------------------------------------------------------------------------
* V2.0(2018-11-15):
* 1.add: Paint_NewImage()
* Create an image's properties
* 2.add: Paint_SelectImage()
* Select the picture to be drawn
* 3.add: Paint_SetRotate()
* Set the direction of the cache
* 4.add: Paint_RotateImage()
* Can flip the picture, Support 0-360 degrees,
* but only 90.180.270 rotation is better
* 4.add: Paint_SetMirroring()
* Can Mirroring the picture, horizontal, vertical, origin
* 5.add: Paint_DrawString_CN()
* Can display Chinese(GB1312)
*
* -----------------------------------------------------------------------------
* V1.0(2018-07-17):
* Create library
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
******************************************************************************/
#include "GUI_Paint.h"
#include "DEV_Config.h"
#include "Debug.h"
#include <stdint.h>
#include <stdlib.h>
#include <string.h> //memset()
#include <math.h>
PAINT Paint;
/******************************************************************************
function: Create Image
parameter:
image : Pointer to the image cache
width : The width of the picture
Height : The height of the picture
Color : Whether the picture is inverted
******************************************************************************/
void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color)
{
Paint.Image = NULL;
Paint.Image = image;
Paint.WidthMemory = Width;
Paint.HeightMemory = Height;
Paint.Color = Color;
Paint.Scale = 2;
Paint.WidthByte = (Width % 8 == 0)? (Width / 8 ): (Width / 8 + 1);
Paint.HeightByte = Height;
// printf("WidthByte = %d, HeightByte = %d\r\n", Paint.WidthByte, Paint.HeightByte);
// printf(" EPD_WIDTH / 8 = %d\r\n", 122 / 8);
Paint.Rotate = Rotate;
Paint.Mirror = MIRROR_NONE;
if(Rotate == ROTATE_0 || Rotate == ROTATE_180) {
Paint.Width = Width;
Paint.Height = Height;
} else {
Paint.Width = Height;
Paint.Height = Width;
}
}
/******************************************************************************
function: Select Image
parameter:
image : Pointer to the image cache
******************************************************************************/
void Paint_SelectImage(UBYTE *image)
{
Paint.Image = image;
}
/******************************************************************************
function: Select Image Rotate
parameter:
Rotate : 0,90,180,270
******************************************************************************/
void Paint_SetRotate(UWORD Rotate)
{
if(Rotate == ROTATE_0 || Rotate == ROTATE_90 || Rotate == ROTATE_180 || Rotate == ROTATE_270) {
Debug("Set image Rotate %d\r\n", Rotate);
Paint.Rotate = Rotate;
} else {
Debug("rotate = 0, 90, 180, 270\r\n");
}
}
void Paint_SetScale(UBYTE scale)
{
if(scale == 2){
Paint.Scale = scale;
Paint.WidthByte = (Paint.WidthMemory % 8 == 0)? (Paint.WidthMemory / 8 ): (Paint.WidthMemory / 8 + 1);
}else if(scale == 4){
Paint.Scale = scale;
Paint.WidthByte = (Paint.WidthMemory % 4 == 0)? (Paint.WidthMemory / 4 ): (Paint.WidthMemory / 4 + 1);
}else if(scale == 7){//Only applicable with 5in65 e-Paper
Paint.Scale = scale;
Paint.WidthByte = (Paint.WidthMemory % 2 == 0)? (Paint.WidthMemory / 2 ): (Paint.WidthMemory / 2 + 1);;
}else{
Debug("Set Scale Input parameter error\r\n");
Debug("Scale Only support: 2 4 7\r\n");
}
}
/******************************************************************************
function: Select Image mirror
parameter:
mirror :Not mirror,Horizontal mirror,Vertical mirror,Origin mirror
******************************************************************************/
void Paint_SetMirroring(UBYTE mirror)
{
if(mirror == MIRROR_NONE || mirror == MIRROR_HORIZONTAL ||
mirror == MIRROR_VERTICAL || mirror == MIRROR_ORIGIN) {
Debug("mirror image x:%s, y:%s\r\n",(mirror & 0x01)? "mirror":"none", ((mirror >> 1) & 0x01)? "mirror":"none");
Paint.Mirror = mirror;
} else {
Debug("mirror should be MIRROR_NONE, MIRROR_HORIZONTAL, \
MIRROR_VERTICAL or MIRROR_ORIGIN\r\n");
}
}
/******************************************************************************
function: Draw Pixels
parameter:
Xpoint : At point X
Ypoint : At point Y
Color : Painted colors
******************************************************************************/
void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color)
{
if(Xpoint > Paint.Width || Ypoint > Paint.Height){
Debug("Exceeding display boundaries\r\n");
return;
}
UWORD X, Y;
switch(Paint.Rotate) {
case 0:
X = Xpoint;
Y = Ypoint;
break;
case 90:
X = Paint.WidthMemory - Ypoint - 1;
Y = Xpoint;
break;
case 180:
X = Paint.WidthMemory - Xpoint - 1;
Y = Paint.HeightMemory - Ypoint - 1;
break;
case 270:
X = Ypoint;
Y = Paint.HeightMemory - Xpoint - 1;
break;
default:
return;
}
switch(Paint.Mirror) {
case MIRROR_NONE:
break;
case MIRROR_HORIZONTAL:
X = Paint.WidthMemory - X - 1;
break;
case MIRROR_VERTICAL:
Y = Paint.HeightMemory - Y - 1;
break;
case MIRROR_ORIGIN:
X = Paint.WidthMemory - X - 1;
Y = Paint.HeightMemory - Y - 1;
break;
default:
return;
}
if(X > Paint.WidthMemory || Y > Paint.HeightMemory){
Debug("Exceeding display boundaries\r\n");
return;
}
if(Paint.Scale == 2){
UDOUBLE Addr = X / 8 + Y * Paint.WidthByte;
UBYTE Rdata = Paint.Image[Addr];
if(Color == BLACK)
Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8));
else
Paint.Image[Addr] = Rdata | (0x80 >> (X % 8));
}else if(Paint.Scale == 4){
UDOUBLE Addr = X / 4 + Y * Paint.WidthByte;
Color = Color % 4;//Guaranteed color scale is 4 --- 0~3
UBYTE Rdata = Paint.Image[Addr];
Rdata = Rdata & (~(0xC0 >> ((X % 4)*2)));
Paint.Image[Addr] = Rdata | ((Color << 6) >> ((X % 4)*2));
}else if(Paint.Scale == 7){
UDOUBLE Addr = X / 2 + Y * Paint.WidthByte;
UBYTE Rdata = Paint.Image[Addr];
Rdata = Rdata & (~(0xF0 >> ((X % 2)*4)));//Clear first, then set value
Paint.Image[Addr] = Rdata | ((Color << 4) >> ((X % 2)*4));
//printf("Add = %d ,data = %d\r\n",Addr,Rdata);
}
}
/******************************************************************************
function: Clear the color of the picture
parameter:
Color : Painted colors
******************************************************************************/
void Paint_Clear(UWORD Color)
{
if(Paint.Scale == 2) {
for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte
UDOUBLE Addr = X + Y*Paint.WidthByte;
Paint.Image[Addr] = Color;
}
}
}else if(Paint.Scale == 4) {
for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
for (UWORD X = 0; X < Paint.WidthByte; X++ ) {
UDOUBLE Addr = X + Y*Paint.WidthByte;
Paint.Image[Addr] = (Color<<6)|(Color<<4)|(Color<<2)|Color;
}
}
}else if(Paint.Scale == 7) {
for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
for (UWORD X = 0; X < Paint.WidthByte; X++ ) {
UDOUBLE Addr = X + Y*Paint.WidthByte;
Paint.Image[Addr] = (Color<<4)|Color;
}
}
}
}
/******************************************************************************
function: Clear the color of a window
parameter:
Xstart : x starting point
Ystart : Y starting point
Xend : x end point
Yend : y end point
Color : Painted colors
******************************************************************************/
void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color)
{
UWORD X, Y;
for (Y = Ystart; Y < Yend; Y++) {
for (X = Xstart; X < Xend; X++) {//8 pixel = 1 byte
Paint_SetPixel(X, Y, Color);
}
}
}
/******************************************************************************
function: Draw Point(Xpoint, Ypoint) Fill the color
parameter:
Xpoint : The Xpoint coordinate of the point
Ypoint : The Ypoint coordinate of the point
Color : Painted color
Dot_Pixel : point size
Dot_Style : point Style
******************************************************************************/
void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color,
DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style)
{
if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
Debug("Paint_DrawPoint Input exceeds the normal display range\r\n");
printf("Xpoint = %d , Paint.Width = %d \r\n ",Xpoint,Paint.Width);
printf("Ypoint = %d , Paint.Height = %d \r\n ",Ypoint,Paint.Height);
return;
}
int16_t XDir_Num , YDir_Num;
if (Dot_Style == DOT_FILL_AROUND) {
for (XDir_Num = 0; XDir_Num < 2 * Dot_Pixel - 1; XDir_Num++) {
for (YDir_Num = 0; YDir_Num < 2 * Dot_Pixel - 1; YDir_Num++) {
if(Xpoint + XDir_Num - Dot_Pixel < 0 || Ypoint + YDir_Num - Dot_Pixel < 0)
break;
// printf("x = %d, y = %d\r\n", Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel);
Paint_SetPixel(Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel, Color);
}
}
} else {
for (XDir_Num = 0; XDir_Num < Dot_Pixel; XDir_Num++) {
for (YDir_Num = 0; YDir_Num < Dot_Pixel; YDir_Num++) {
Paint_SetPixel(Xpoint + XDir_Num - 1, Ypoint + YDir_Num - 1, Color);
}
}
}
}
/******************************************************************************
function: Draw a line of arbitrary slope
parameter:
Xstart Starting Xpoint point coordinates
Ystart Starting Xpoint point coordinates
Xend End point Xpoint coordinate
Yend End point Ypoint coordinate
Color The color of the line segment
Line_width : Line width
Line_Style: Solid and dotted lines
******************************************************************************/
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend,
UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style)
{
if (Xstart > Paint.Width || Ystart > Paint.Height ||
Xend > Paint.Width || Yend > Paint.Height) {
Debug("Paint_DrawLine Input exceeds the normal display range\r\n");
return;
}
UWORD Xpoint = Xstart;
UWORD Ypoint = Ystart;
int dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend;
int dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend;
// Increment direction, 1 is positive, -1 is counter;
int XAddway = Xstart < Xend ? 1 : -1;
int YAddway = Ystart < Yend ? 1 : -1;
//Cumulative error
int Esp = dx + dy;
char Dotted_Len = 0;
for (;;) {
Dotted_Len++;
//Painted dotted line, 2 point is really virtual
if (Line_Style == LINE_STYLE_DOTTED && Dotted_Len % 3 == 0) {
//Debug("LINE_DOTTED\r\n");
Paint_DrawPoint(Xpoint, Ypoint, IMAGE_BACKGROUND, Line_width, DOT_STYLE_DFT);
Dotted_Len = 0;
} else {
Paint_DrawPoint(Xpoint, Ypoint, Color, Line_width, DOT_STYLE_DFT);
}
if (2 * Esp >= dy) {
if (Xpoint == Xend)
break;
Esp += dy;
Xpoint += XAddway;
}
if (2 * Esp <= dx) {
if (Ypoint == Yend)
break;
Esp += dx;
Ypoint += YAddway;
}
}
}
/******************************************************************************
function: Draw a rectangle
parameter:
Xstart Rectangular Starting Xpoint point coordinates
Ystart Rectangular Starting Xpoint point coordinates
Xend Rectangular End point Xpoint coordinate
Yend Rectangular End point Ypoint coordinate
Color The color of the Rectangular segment
Line_width: Line width
Draw_Fill : Whether to fill the inside of the rectangle
******************************************************************************/
void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend,
UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
{
if (Xstart > Paint.Width || Ystart > Paint.Height ||
Xend > Paint.Width || Yend > Paint.Height) {
Debug("Input exceeds the normal display range\r\n");
return;
}
if (Draw_Fill) {
UWORD Ypoint;
for(Ypoint = Ystart; Ypoint < Yend; Ypoint++) {
Paint_DrawLine(Xstart, Ypoint, Xend, Ypoint, Color , Line_width, LINE_STYLE_SOLID);
}
} else {
Paint_DrawLine(Xstart, Ystart, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID);
Paint_DrawLine(Xstart, Ystart, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID);
Paint_DrawLine(Xend, Yend, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID);
Paint_DrawLine(Xend, Yend, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID);
}
}
/******************************************************************************
function: Use the 8-point method to draw a circle of the
specified size at the specified position->
parameter:
X_Center Center X coordinate
Y_Center Center Y coordinate
Radius circle Radius
Color The color of the circle segment
Line_width: Line width
Draw_Fill : Whether to fill the inside of the Circle
******************************************************************************/
void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius,
UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
{
if (X_Center > Paint.Width || Y_Center >= Paint.Height) {
Debug("Paint_DrawCircle Input exceeds the normal display range\r\n");
return;
}
//Draw a circle from(0, R) as a starting point
int16_t XCurrent, YCurrent;
XCurrent = 0;
YCurrent = Radius;
//Cumulative error,judge the next point of the logo
int16_t Esp = 3 - (Radius << 1 );
int16_t sCountY;
if (Draw_Fill == DRAW_FILL_FULL) {
while (XCurrent <= YCurrent ) { //Realistic circles
for (sCountY = XCurrent; sCountY <= YCurrent; sCountY ++ ) {
Paint_DrawPoint(X_Center + XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//1
Paint_DrawPoint(X_Center - XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//2
Paint_DrawPoint(X_Center - sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//3
Paint_DrawPoint(X_Center - sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//4
Paint_DrawPoint(X_Center - XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//5
Paint_DrawPoint(X_Center + XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//6
Paint_DrawPoint(X_Center + sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//7
Paint_DrawPoint(X_Center + sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
if (Esp < 0 )
Esp += 4 * XCurrent + 6;
else {
Esp += 10 + 4 * (XCurrent - YCurrent );
YCurrent --;
}
XCurrent ++;
}
} else { //Draw a hollow circle
while (XCurrent <= YCurrent ) {
Paint_DrawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT);//1
Paint_DrawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT);//2
Paint_DrawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT);//3
Paint_DrawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT);//4
Paint_DrawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT);//5
Paint_DrawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT);//6
Paint_DrawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT);//7
Paint_DrawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT);//0
if (Esp < 0 )
Esp += 4 * XCurrent + 6;
else {
Esp += 10 + 4 * (XCurrent - YCurrent );
YCurrent --;
}
XCurrent ++;
}
}
}
/******************************************************************************
function: Show English characters
parameter:
Xpoint X coordinate
Ypoint Y coordinate
Acsii_Char To display the English characters
Font A structure pointer that displays a character size
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char,
sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
{
UWORD Page, Column;
if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
Debug("Paint_DrawChar Input exceeds the normal display range\r\n");
return;
}
uint32_t Char_Offset = (Acsii_Char - ' ') * Font->Height * (Font->Width / 8 + (Font->Width % 8 ? 1 : 0));
const unsigned char *ptr = &Font->table[Char_Offset];
for (Page = 0; Page < Font->Height; Page ++ ) {
for (Column = 0; Column < Font->Width; Column ++ ) {
//To determine whether the font background color and screen background color is consistent
if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
if (*ptr & (0x80 >> (Column % 8)))
Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground);
// Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
} else {
if (*ptr & (0x80 >> (Column % 8))) {
Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground);
// Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
} else {
Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Background);
// Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
}
//One pixel is 8 bits
if (Column % 8 == 7)
ptr++;
}// Write a line
if (Font->Width % 8 != 0)
ptr++;
}// Write all
}
/******************************************************************************
function: Display the string
parameter:
Xstart X coordinate
Ystart Y coordinate
pString The first address of the English string to be displayed
Font A structure pointer that displays a character size
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString,
sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
{
UWORD Xpoint = Xstart;
UWORD Ypoint = Ystart;
if (Xstart > Paint.Width || Ystart > Paint.Height) {
Debug("Paint_DrawString_EN Input exceeds the normal display range\r\n");
return;
}
while (* pString != '\0') {
//if X direction filled , reposition to(Xstart,Ypoint),Ypoint is Y direction plus the Height of the character
if ((Xpoint + Font->Width ) > Paint.Width ) {
Xpoint = Xstart;
Ypoint += Font->Height;
}
// If the Y direction is full, reposition to(Xstart, Ystart)
if ((Ypoint + Font->Height ) > Paint.Height ) {
Xpoint = Xstart;
Ypoint = Ystart;
}
Paint_DrawChar(Xpoint, Ypoint, * pString, Font, Color_Background, Color_Foreground);
//The next character of the address
pString ++;
//The next word of the abscissa increases the font of the broadband
Xpoint += Font->Width;
}
}
/******************************************************************************
function: Display the string
parameter:
Xstart X coordinate
Ystart Y coordinate
pString The first address of the Chinese string and English
string to be displayed
Font A structure pointer that displays a character size
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font,
UWORD Color_Foreground, UWORD Color_Background)
{
const char* p_text = pString;
int x = Xstart, y = Ystart;
int i, j,Num;
/* Send the string character by character on EPD */
while (*p_text != 0) {
if(*p_text <= 0x7F) { //ASCII < 126
for(Num = 0; Num < font->size; Num++) {
if(*p_text== font->table[Num].index[0]) {
const char* ptr = &font->table[Num].matrix[0];
for (j = 0; j < font->Height; j++) {
for (i = 0; i < font->Width; i++) {
if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
if (*ptr & (0x80 >> (i % 8))) {
Paint_SetPixel(x + i, y + j, Color_Foreground);
// Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
} else {
if (*ptr & (0x80 >> (i % 8))) {
Paint_SetPixel(x + i, y + j, Color_Foreground);
// Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
} else {
Paint_SetPixel(x + i, y + j, Color_Background);
// Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
}
if (i % 8 == 7) {
ptr++;
}
}
if (font->Width % 8 != 0) {
ptr++;
}
}
break;
}
}
/* Point on the next character */
p_text += 1;
/* Decrement the column position by 16 */
x += font->ASCII_Width;
} else { //Chinese
for(Num = 0; Num < font->size; Num++) {
if((*p_text== font->table[Num].index[0]) && (*(p_text+1) == font->table[Num].index[1])) {
const char* ptr = &font->table[Num].matrix[0];
for (j = 0; j < font->Height; j++) {
for (i = 0; i < font->Width; i++) {
if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
if (*ptr & (0x80 >> (i % 8))) {
Paint_SetPixel(x + i, y + j, Color_Foreground);
// Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
} else {
if (*ptr & (0x80 >> (i % 8))) {
Paint_SetPixel(x + i, y + j, Color_Foreground);
// Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
} else {
Paint_SetPixel(x + i, y + j, Color_Background);
// Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
}
}
if (i % 8 == 7) {
ptr++;
}
}
if (font->Width % 8 != 0) {
ptr++;
}
}
break;
}
}
/* Point on the next character */
p_text += 2;
/* Decrement the column position by 16 */
x += font->Width;
}
}
}
/******************************************************************************
function: Display nummber
parameter:
Xstart X coordinate
Ystart : Y coordinate
Nummber : The number displayed
Font A structure pointer that displays a character size
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
#define ARRAY_LEN 255
void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber,
sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
{
int16_t Num_Bit = 0, Str_Bit = 0;
uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0};
uint8_t *pStr = Str_Array;
if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
Debug("Paint_DisNum Input exceeds the normal display range\r\n");
return;
}
//Converts a number to a string
do {
Num_Array[Num_Bit] = Nummber % 10 + '0';
Num_Bit++;
Nummber /= 10;
} while(Nummber);
//The string is inverted
while (Num_Bit > 0) {
Str_Array[Str_Bit] = Num_Array[Num_Bit - 1];
Str_Bit ++;
Num_Bit --;
}
//show
Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Background, Color_Foreground);
}
/******************************************************************************
function: Display nummber (Able to display decimals)
parameter:
Xstart X coordinate
Ystart : Y coordinate
Nummber : The number displayed
Font A structure pointer that displays a character size
Digit : Fractional width
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
void Paint_DrawNumDecimals(UWORD Xpoint, UWORD Ypoint, double Nummber,
sFONT* Font, UWORD Digit, UWORD Color_Foreground, UWORD Color_Background)
{
int16_t Num_Bit = 0, Str_Bit = 0;
uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0};
uint8_t *pStr = Str_Array;
int temp = Nummber;
float decimals;
uint8_t i;
if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
Debug("Paint_DisNum Input exceeds the normal display range\r\n");
return;
}
if(Digit > 0) {
decimals = Nummber - temp;
for(i=Digit; i > 0; i--) {
decimals*=10;
}
temp = decimals;
//Converts a number to a string
for(i=Digit; i>0; i--) {
Num_Array[Num_Bit] = temp % 10 + '0';
Num_Bit++;
temp /= 10;
}
Num_Array[Num_Bit] = '.';
Num_Bit++;
}
temp = Nummber;
//Converts a number to a string
do {
Num_Array[Num_Bit] = temp % 10 + '0';
Num_Bit++;
temp /= 10;
} while(temp);
//The string is inverted
while (Num_Bit > 0) {
Str_Array[Str_Bit] = Num_Array[Num_Bit - 1];
Str_Bit ++;
Num_Bit --;
}
//show
Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Background, Color_Foreground);
}
/******************************************************************************
function: Display time
parameter:
Xstart X coordinate
Ystart : Y coordinate
pTime : Time-related structures
Font A structure pointer that displays a character size
Color_Foreground : Select the foreground color
Color_Background : Select the background color
******************************************************************************/
void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font,
UWORD Color_Foreground, UWORD Color_Background)
{
uint8_t value[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
UWORD Dx = Font->Width;
//Write data into the cache
Paint_DrawChar(Xstart , Ystart, value[pTime->Hour / 10], Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx , Ystart, value[pTime->Hour % 10], Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx + Dx / 4 + Dx / 2 , Ystart, ':' , Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx * 2 + Dx / 2 , Ystart, value[pTime->Min / 10] , Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx * 3 + Dx / 2 , Ystart, value[pTime->Min % 10] , Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx * 4 + Dx / 2 - Dx / 4, Ystart, ':' , Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx * 5 , Ystart, value[pTime->Sec / 10] , Font, Color_Background, Color_Foreground);
Paint_DrawChar(Xstart + Dx * 6 , Ystart, value[pTime->Sec % 10] , Font, Color_Background, Color_Foreground);
}
/******************************************************************************
function: Display monochrome bitmap
parameter:
image_buffer A picture data converted to a bitmap
info:
Use a computer to convert the image into a corresponding array,
and then embed the array directly into Imagedata.cpp as a .c file.
******************************************************************************/
void Paint_DrawBitMap(const unsigned char* image_buffer)
{
UWORD x, y;
UDOUBLE Addr = 0;
for (y = 0; y < Paint.HeightByte; y++) {
for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte
Addr = x + y * Paint.WidthByte;
Paint.Image[Addr] = (unsigned char)image_buffer[Addr];
}
}
}
/******************************************************************************
function: paste monochrome bitmap to a frame buff
parameter:
image_buffer A picture data converted to a bitmap
xStart: The starting x coordinate
yStart: The starting y coordinate
imageWidth: Original image width
imageHeight: Original image height
flipColor: Whether the color is reversed
info:
Use this function to paste image data into a buffer
******************************************************************************/
void Paint_DrawBitMap_Paste(const unsigned char* image_buffer, UWORD xStart, UWORD yStart, UWORD imageWidth, UWORD imageHeight, UBYTE flipColor)
{
UBYTE color, srcImage;
UWORD x, y;
UWORD width = (imageWidth%8==0 ? imageWidth/8 : imageWidth/8+1);
for (y = 0; y < imageHeight; y++) {
for (x = 0; x < imageWidth; x++) {
srcImage = image_buffer[y*width + x/8];
if(flipColor)
color = (((srcImage<<(x%8) & 0x80) == 0) ? 1 : 0);
else
color = (((srcImage<<(x%8) & 0x80) == 0) ? 0 : 1);
Paint_SetPixel(x+xStart, y+yStart, color);
}
}
}
void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region)
{
UWORD x, y;
UDOUBLE Addr = 0;
for (y = 0; y < Paint.HeightByte; y++) {
for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte
Addr = x + y * Paint.WidthByte ;
Paint.Image[Addr] = \
(unsigned char)image_buffer[Addr+ (Paint.HeightByte)*Paint.WidthByte*(Region - 1)];
}
}
}

View File

@ -0,0 +1,95 @@
/**
******************************************************************************
* @file fonts.h
* @author MCD Application Team
* @version V1.0.0
* @date 18-February-2014
* @brief Header for fonts.c file
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __FONTS_H
#define __FONTS_H
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD>ź<EFBFBD>24 (32x41) */
#define MAX_HEIGHT_FONT 41
#define MAX_WIDTH_FONT 32
#define OFFSET_BITMAP
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
//ASCII
typedef struct _tFont
{
const uint8_t *table;
uint16_t Width;
uint16_t Height;
} sFONT;
//GB2312
typedef struct // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ݽṹ
{
unsigned char index[2]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const char matrix[MAX_HEIGHT_FONT*MAX_WIDTH_FONT/8]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}CH_CN;
typedef struct
{
const CH_CN *table;
uint16_t size;
uint16_t ASCII_Width;
uint16_t Width;
uint16_t Height;
}cFONT;
extern sFONT Font24;
extern sFONT Font20;
extern sFONT Font16;
extern sFONT Font12;
extern sFONT Font8;
#ifdef __cplusplus
}
#endif
#endif /* __FONTS_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,218 @@
/******************************************************************************
* | File : GUI_Paint.h
* | Author : Waveshare electronics
* | Function : Achieve drawing: draw points, lines, boxes, circles and
* their size, solid dotted line, solid rectangle hollow
* rectangle, solid circle hollow circle.
* | Info :
* Achieve display characters: Display a single character, string, number
* Achieve time display: adaptive size display time minutes and seconds
*----------------
* | This version: V3.0
* | Date : 2019-04-18
* | Info :
* -----------------------------------------------------------------------------
* V3.0(2019-04-18):
* 1.Change:
* Paint_DrawPoint(..., DOT_STYLE DOT_STYLE)
* => Paint_DrawPoint(..., DOT_STYLE Dot_Style)
* Paint_DrawLine(..., LINE_STYLE Line_Style, DOT_PIXEL Dot_Pixel)
* => Paint_DrawLine(..., DOT_PIXEL Line_width, LINE_STYLE Line_Style)
* Paint_DrawRectangle(..., DRAW_FILL Filled, DOT_PIXEL Dot_Pixel)
* => Paint_DrawRectangle(..., DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
* Paint_DrawCircle(..., DRAW_FILL Draw_Fill, DOT_PIXEL Dot_Pixel)
* => Paint_DrawCircle(..., DOT_PIXEL Line_width, DRAW_FILL Draw_Filll)
*
* -----------------------------------------------------------------------------
* V2.0(2018-11-15):
* 1.add: Paint_NewImage()
* Create an image's properties
* 2.add: Paint_SelectImage()
* Select the picture to be drawn
* 3.add: Paint_SetRotate()
* Set the direction of the cache
* 4.add: Paint_RotateImage()
* Can flip the picture, Support 0-360 degrees,
* but only 90.180.270 rotation is better
* 4.add: Paint_SetMirroring()
* Can Mirroring the picture, horizontal, vertical, origin
* 5.add: Paint_DrawString_CN()
* Can display Chinese(GB1312)
*
* -----------------------------------------------------------------------------
* V1.0(2018-07-17):
* Create library
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
******************************************************************************/
#ifndef __GUI_PAINT_H
#define __GUI_PAINT_H
#include "DEV_Config.h"
#include "../Fonts/fonts.h"
/**
* Image attributes
**/
typedef struct {
UBYTE *Image;
UWORD Width;
UWORD Height;
UWORD WidthMemory;
UWORD HeightMemory;
UWORD Color;
UWORD Rotate;
UWORD Mirror;
UWORD WidthByte;
UWORD HeightByte;
UWORD Scale;
} PAINT;
extern PAINT Paint;
/**
* Display rotate
**/
#define ROTATE_0 0
#define ROTATE_90 90
#define ROTATE_180 180
#define ROTATE_270 270
/**
* Display Flip
**/
typedef enum {
MIRROR_NONE = 0x00,
MIRROR_HORIZONTAL = 0x01,
MIRROR_VERTICAL = 0x02,
MIRROR_ORIGIN = 0x03,
} MIRROR_IMAGE;
#define MIRROR_IMAGE_DFT MIRROR_NONE
/**
* image color
**/
#define WHITE 0xFF
#define BLACK 0x00
#define RED BLACK
#define IMAGE_BACKGROUND WHITE
#define FONT_FOREGROUND BLACK
#define FONT_BACKGROUND WHITE
#define TRUE 1
#define FALSE 0
//4 Gray level
#define GRAY1 0x03 //Blackest
#define GRAY2 0x02
#define GRAY3 0x01 //gray
#define GRAY4 0x00 //white
/**
* The size of the point
**/
typedef enum {
DOT_PIXEL_1X1 = 1, // 1 x 1
DOT_PIXEL_2X2 , // 2 X 2
DOT_PIXEL_3X3 , // 3 X 3
DOT_PIXEL_4X4 , // 4 X 4
DOT_PIXEL_5X5 , // 5 X 5
DOT_PIXEL_6X6 , // 6 X 6
DOT_PIXEL_7X7 , // 7 X 7
DOT_PIXEL_8X8 , // 8 X 8
} DOT_PIXEL;
#define DOT_PIXEL_DFT DOT_PIXEL_1X1 //Default dot pilex
/**
* Point size fill style
**/
typedef enum {
DOT_FILL_AROUND = 1, // dot pixel 1 x 1
DOT_FILL_RIGHTUP , // dot pixel 2 X 2
} DOT_STYLE;
#define DOT_STYLE_DFT DOT_FILL_AROUND //Default dot pilex
/**
* Line style, solid or dashed
**/
typedef enum {
LINE_STYLE_SOLID = 0,
LINE_STYLE_DOTTED,
} LINE_STYLE;
/**
* Whether the graphic is filled
**/
typedef enum {
DRAW_FILL_EMPTY = 0,
DRAW_FILL_FULL,
} DRAW_FILL;
/**
* Custom structure of a time attribute
**/
typedef struct {
UWORD Year; //0000
UBYTE Month; //1 - 12
UBYTE Day; //1 - 30
UBYTE Hour; //0 - 23
UBYTE Min; //0 - 59
UBYTE Sec; //0 - 59
} PAINT_TIME;
extern PAINT_TIME sPaint_time;
//init and Clear
void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color);
void Paint_SelectImage(UBYTE *image);
void Paint_SetRotate(UWORD Rotate);
void Paint_SetMirroring(UBYTE mirror);
void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color);
void Paint_SetScale(UBYTE scale);
void Paint_Clear(UWORD Color);
void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color);
//Drawing
void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_FillWay);
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style);
void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
//Display string
void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Acsii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, UWORD Color_Foreground, UWORD Color_Background);
void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
void Paint_DrawNumDecimals(UWORD Xpoint, UWORD Ypoint, double Nummber, sFONT* Font, UWORD Digit, UWORD Color_Foreground, UWORD Color_Background); // Able to display decimals
void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
//pic
void Paint_DrawBitMap(const unsigned char* image_buffer);
void Paint_DrawBitMap_Paste(const unsigned char* image_buffer, UWORD Xstart, UWORD Ystart, UWORD imageWidth, UWORD imageHeight, UBYTE flipColor);
//void Paint_DrawBitMap_Half(const unsigned char* image_buffer, UBYTE Region);
//void Paint_DrawBitMap_OneQuarter(const unsigned char* image_buffer, UBYTE Region);
//void Paint_DrawBitMap_OneEighth(const unsigned char* image_buffer, UBYTE Region);
void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region);
#endif

View File

@ -1,2 +1,3 @@
idf_component_register(SRCS "st25r3911.c" "st25r3911_com.c" "st25r3911_interrupt.c" "timer.c" "st25r3911_spi.c" "utils.c" idf_component_register(SRCS "st25r3911.c" "st25r3911_com.c" "st25r3911_interrupt.c" "timer.c" "st25r3911_spi.c" "utils.c"
INCLUDE_DIRS "." REQUIRES driver) INCLUDE_DIRS "."
REQUIRES "driver")

View File

@ -56,7 +56,7 @@
****************************************************************************** ******************************************************************************
*/ */
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
#include <limits.h> #include <limits.h>
#include <driver/gpio.h> #include <driver/gpio.h>

View File

@ -108,9 +108,6 @@
****************************************************************************** ******************************************************************************
*/ */
#ifdef __cplusplus
extern "C" {
#endif
/*! /*!
***************************************************************************** *****************************************************************************
@ -240,10 +237,6 @@ extern void st25r3911IRQCallbackSet(void (*cb)(void));
*/ */
extern void st25r3911IRQCallbackRestore(void); extern void st25r3911IRQCallbackRestore(void);
#ifdef __cplusplus
}
#endif
#endif /* ST25R3911_ISR_H */ #endif /* ST25R3911_ISR_H */
/** /**

View File

@ -8,16 +8,8 @@
#include <esp_err.h> #include <esp_err.h>
#include <driver/spi_master.h> #include <driver/spi_master.h>
#ifdef __cplusplus
extern "C" {
#endif
void st25r3911_spi_init(spi_device_handle_t spi); void st25r3911_spi_init(spi_device_handle_t spi);
esp_err_t st25r3911_spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length); esp_err_t st25r3911_spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length);
#ifdef __cplusplus
}
#endif
#endif //FAB_READER2_C_ST25R3911_SPI_H #endif //FAB_READER2_C_ST25R3911_SPI_H

View File

@ -0,0 +1,4 @@
idf_component_register(SRCS "fab-reader2.c" "nfc/pollingtagdetect.c" "epd/qrurn.c" "epd/FabAccess_Icon_NoHeader.c" "epd/EPD_2in66_test.c" "epd/epd.c" "epd/EPD_2in66_test.c" "ota/ota.c"
INCLUDE_DIRS "." "nfc" "epd" "ota"
REQUIRES "rfal" "epd_266" "epd_gfx"
PRIV_REQUIRES "driver nvs_flash mqtt")

View File

@ -0,0 +1,50 @@
menu "FabReader Configuration"
config WIFI_SSID
string "WiFi SSID"
default "myssid"
help
SSID (network name) for the example to connect to.
config WIFI_PASSWORD
string "WiFi Password"
default "mypassword"
help
WiFi password (WPA or WPA2) for the example to use.
choice WIFI_SCAN_METHOD
prompt "scan method"
default WIFI_FAST_SCAN
help
scan method for the esp32 to use
config WIFI_FAST_SCAN
bool "fast"
config WIFI_ALL_CHANNEL_SCAN
bool "all"
endchoice
config BROKER_URI
string "Broker URL"
default "mqtts://mqtt.eclipseprojects.io:8883"
help
URL of an mqtt broker which this example connects to.
config BROKER_CERTIFICATE_OVERRIDE
string "Broker certificate override"
default ""
help
Please leave empty if broker certificate included from a textfile; otherwise fill in a base64 part of PEM
format certificate
config BROKER_CERTIFICATE_OVERRIDDEN
bool
default y if BROKER_CERTIFICATE_OVERRIDE != ""
config FABREADER2_ID
int "FabReader2 ID"
default 1
help
Numerical ID of the FabReader2 device
endmenu

View File

@ -0,0 +1,160 @@
/*****************************************************************************
* | File : EPD_2IN66_test.c
* | Author : Waveshare team
* | Function : 2.66inch e-paper test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-07-29
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "epd.h"
#include "EPD_2in66.h"
int EPD_test(void)
{
printf("EPD_2IN66_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_2IN66_Init();
// EPD_2IN66_Clear();
// DEV_Delay_ms(500);
//Create a new image cache
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_2IN66_WIDTH % 8 == 0)? (EPD_2IN66_WIDTH / 8 ): (EPD_2IN66_WIDTH / 8 + 1)) * EPD_2IN66_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_2IN66_WIDTH, EPD_2IN66_HEIGHT, 270, WHITE);
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawString_EN(10, 10, "Welcome to FabAccess", &Font16, WHITE, BLACK);
Paint_DrawBitMap_Paste(gImage_FabAccess_Icon_NoHeader, 20, 40, 100, 98, TRUE);
Paint_DrawBitMap_Paste(gImage_qrurn, 130, 40, 100, 100, TRUE);
EPD_2IN66_Display(BlackImage);
#if 0 //show image for array
printf("show image for array\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_2in66);
Paint_DrawBitMap_Paste(gImage_100X50, 10, 10, 100, 50, TRUE);
EPD_2IN66_Display(BlackImage);
DEV_Delay_ms(10000);
#endif
#if 0 // Drawing on the image
//1.Select Image
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
EPD_2IN66_Display(BlackImage);
DEV_Delay_ms(10000);
#endif
#if 0 //partial refresh, show time
printf("EPD_2IN66_DisplayPart\r\n");
EPD_2IN66_Init_Partial();
Paint_SelectImage(BlackImage);
PAINT_TIME sPaint_time; //time struct
sPaint_time.Hour = 12;
sPaint_time.Min = 34;
sPaint_time.Sec = 56;
for (uint8_t i = 100; i > 0; i--) {
sPaint_time.Sec = sPaint_time.Sec + 1;
if (sPaint_time.Sec == 60) {
sPaint_time.Min = sPaint_time.Min + 1;
sPaint_time.Sec = 0;
if (sPaint_time.Min == 60) {
sPaint_time.Hour = sPaint_time.Hour + 1;
sPaint_time.Min = 0;
if (sPaint_time.Hour == 24) {
sPaint_time.Hour = 0;
sPaint_time.Min = 0;
sPaint_time.Sec = 0;
}
}
}
Paint_ClearWindows(180, 100, 296, 152, WHITE);
Paint_DrawTime(180, 110, &sPaint_time, &Font20, WHITE, BLACK);
printf("Part refresh...\r\n");
EPD_2IN66_Display(BlackImage);
DEV_Delay_ms(500);
}
EPD_2IN66_Clear();
#endif
// printf("Clear...\r\n");
// EPD_2IN66_Init();
// EPD_2IN66_Clear();
printf("Goto Sleep...\r\n");
EPD_2IN66_Sleep();
free(BlackImage);
BlackImage = NULL;
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View File

@ -0,0 +1,81 @@
const unsigned char gImage_FabAccess_Icon_NoHeader[1274] = { /* 0X00,0X01,0X64,0X00,0X62,0X00, */
0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00,0X03,0XFF,
0XF8,0X00,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,
0X00,0X00,0X0F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,
0XFF,0XFF,0XC0,0X00,0X00,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF0,
0X00,0X01,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XF8,0X00,0X03,0XFF,
0XFF,0XFF,0XF8,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFC,0X00,0X07,0XFF,0XE0,0XFF,0XFC,
0XFF,0XFF,0XF3,0XFF,0XF0,0X7F,0XFE,0X00,0X0F,0XFF,0X80,0X3F,0XFE,0X7F,0XFF,0XE7,
0XFF,0XC0,0X1F,0XFF,0X00,0X0F,0XFF,0X00,0X1F,0XFE,0X7F,0XFF,0XE7,0XFF,0X80,0X0F,
0XFF,0X00,0X1F,0XFE,0X01,0X8F,0XFF,0X3F,0XFF,0XCF,0XFF,0X18,0X07,0XFF,0X80,0X3F,
0XFE,0X07,0XCF,0XFF,0X00,0X00,0X1F,0XFF,0X3E,0X07,0XFF,0XC0,0X3F,0XFE,0X0F,0XEF,
0XFF,0X80,0X00,0X1F,0XFF,0X7F,0X07,0XFF,0XC0,0X7F,0XFC,0X0F,0X87,0XFF,0X80,0X00,
0X1F,0XFE,0X1F,0X03,0XFF,0XC0,0X7F,0XFC,0X0F,0X07,0XFF,0XC0,0X00,0X3F,0XFE,0X0F,
0X03,0XFF,0XE0,0X7F,0XFC,0X0F,0XEF,0XFF,0XC0,0X00,0X3F,0XFF,0X7F,0X03,0XFF,0XE0,
0X7F,0XFE,0X07,0XC0,0XFF,0XC0,0X00,0X3F,0XF8,0X3E,0X07,0XFF,0XE0,0XFF,0XFE,0X03,
0XC0,0X00,0X60,0X00,0X60,0X00,0X3C,0X07,0XFF,0XF0,0XFF,0XFF,0X00,0X00,0X00,0X0F,
0XFF,0X00,0X00,0X00,0X0F,0XFF,0XF0,0XFF,0XFF,0X80,0X38,0X00,0X07,0XFE,0X00,0X01,
0XC0,0X1F,0XFF,0XF0,0XFF,0XFF,0XC0,0X7F,0XF0,0X07,0XFE,0X00,0XFF,0XE0,0X3F,0XFF,
0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X78,0X00,0X00,0X00,
0X00,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X7F,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X7F,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X78,0X00,0X00,0X00,0X00,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X78,0X00,0X00,
0X00,0X00,0XF0,0X1F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,
0X1F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X0F,0XFF,0XFF,
0XFF,0XFE,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X07,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X78,0X00,0X7F,0XF0,0X00,0XF0,0X03,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X78,0X01,
0XFF,0XFC,0X00,0XF0,0X01,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X78,0X07,0XFF,0XFF,0X00,
0XF0,0X00,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X78,0X1F,0XF0,0X7F,0XC0,0XF0,0X00,0X7F,
0XFF,0XFF,0XC0,0X00,0X00,0X78,0X3F,0X80,0X07,0XE0,0XF0,0X00,0X1F,0XFF,0XFF,0X00,
0X00,0X00,0X78,0X3E,0X1F,0XC3,0XF0,0XF0,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X78,
0X78,0XFF,0XF8,0XF0,0XF0,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X78,0X31,0XFF,0XFC,
0X60,0XF0,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X78,0X03,0XFF,0XFE,0X00,0XF0,0X00,
0X03,0XFF,0XF8,0X00,0X00,0X00,0X78,0X07,0XE0,0X1F,0X00,0XF0,0X00,0X03,0XFF,0XF8,
0X00,0X00,0X00,0X78,0X07,0X87,0X0F,0X00,0XF0,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,
0X78,0X03,0X3F,0XE6,0X00,0XF0,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X78,0X00,0X7F,
0XF0,0X00,0XF0,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X78,0X00,0X7F,0XF0,0X00,0XF0,
0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X78,0X00,0X70,0X70,0X00,0XF0,0X00,0X03,0XC7,
0XF8,0X00,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,0X03,0XC7,0XF8,0X00,0X00,
0X00,0X78,0X00,0X07,0X00,0X00,0XF0,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X78,0X00,
0X07,0X00,0X00,0XF0,0X00,0X03,0XC7,0XE0,0X00,0X00,0X00,0X78,0X00,0X07,0X00,0X00,
0XF0,0X00,0X03,0XC7,0XE0,0X00,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,0X03,
0XC7,0XE0,0X00,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,0X03,0XC7,0XE0,0X00,
0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X78,
0X00,0X00,0X00,0X00,0XF0,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X78,0X00,0X00,0X00,
0X00,0XF0,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,
0X03,0XC7,0XF8,0X00,0X00,0X00,0X78,0X00,0X00,0X00,0X00,0XF0,0X00,0X03,0XC7,0XF8,
0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X03,0XC7,0XE0,0X00,0X00,0X00,0X7F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X00,0X03,0XC7,0XC0,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,
0X00,0X03,0XC7,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0X80,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X03,0XC7,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC7,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF0,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0XC7,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF8,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC7,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,
0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XE0,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XE0,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X03,0XC7,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC7,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XF8,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XD7,0XF8,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF0,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XE0,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};

View File

@ -0,0 +1,43 @@
/*****************************************************************************
* | File : ImageData.h
* | Author : Waveshare team
* | Function :
*----------------
* | This version: V1.0
* | Date : 2018-10-23
* | Info :
*
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef _IMAGEDATA_H_
#define _IMAGEDATA_H_
// FabAccess_Icon.c
extern const unsigned char gImage_FabAccess_Icon_NoHeader[];
extern const unsigned char gImage_qrurn[];
#endif
/* FILE END */

View File

@ -0,0 +1,215 @@
//
// Created by Kai Jan Kriegel on 03.02.23.
//
#include "epd.h"
#include "EPD_2in66.h"
#include "platform.h"
#include <esp_err.h>
#include <string.h>
display_t epd_display;
esp_err_t epd_init(display_t display) {
if (DEV_Module_Init() != 0) {
return ESP_FAIL;
}
EPD_2IN66_Init();
epd_display = display;
UWORD Imagesize =
((EPD_2IN66_WIDTH % 8 == 0) ? (EPD_2IN66_WIDTH / 8) : (EPD_2IN66_WIDTH / 8 + 1)) * EPD_2IN66_HEIGHT;
if ((epd_display.canvas = (UBYTE *) malloc(Imagesize)) == NULL) {
ESP_LOGE("EPD", "Failed to allocate epd canvas memory");
return ESP_FAIL;
}
Paint_NewImage(epd_display.canvas, EPD_2IN66_WIDTH, EPD_2IN66_HEIGHT, 270, WHITE);
// Initialise the display
Paint_SelectImage(epd_display.canvas);
Paint_Clear(WHITE);
char readerid[DISPLAY_BUFFER_SIZE];
snprintf(readerid, DISPLAY_BUFFER_SIZE, "Reader ID: %05d", epd_display.reader_info.reader_id);
char batterlevel[DISPLAY_BUFFER_SIZE];
snprintf(batterlevel, DISPLAY_BUFFER_SIZE, "Battery: %d%%", epd_display.reader_info.battery_level);
//Draw border
Paint_DrawRectangle(1, 1, EPD_2IN66_HEIGHT - 1, EPD_2IN66_WIDTH, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
// Draw reader id
Paint_DrawString_EN(17, 2, readerid, &Font12, WHITE, BLACK);
// draw divider
Paint_DrawLine(EPD_2IN66_HEIGHT / 2, 1, EPD_2IN66_HEIGHT / 2, 15, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
// Draw battery level
Paint_DrawString_EN(175, 2, batterlevel, &Font12, WHITE, BLACK);
// Draw header horizontal divider
Paint_DrawLine(1, 15, EPD_2IN66_HEIGHT, 15, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
// draw vertical button divider
ESP_LOGD("EPD", "Drawing vertical button divider");
Paint_DrawLine(40, 15, 40, EPD_2IN66_WIDTH, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(EPD_2IN66_HEIGHT - 40, 15, EPD_2IN66_HEIGHT - 40, EPD_2IN66_WIDTH, BLACK, DOT_PIXEL_1X1,
LINE_STYLE_SOLID);
// Draw horizontal button divider
ESP_LOGD("EPD", "Drawing horizontal button divider");
Paint_DrawLine(1, ((EPD_2IN66_WIDTH - 15) / 2) + 15, 40, ((EPD_2IN66_WIDTH - 15) / 2) + 15, BLACK, DOT_PIXEL_1X1,
LINE_STYLE_SOLID);
Paint_DrawLine(EPD_2IN66_HEIGHT - 40, ((EPD_2IN66_WIDTH - 15) / 2) + 15, EPD_2IN66_HEIGHT,
((EPD_2IN66_WIDTH - 15) / 2) + 15, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
// Draw buttons
ESP_LOGD("EPD", "Drawing buttons");
Paint_DrawString_EN(12, ((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), epd_display.buttons.btn0, &Font24, WHITE, BLACK);
Paint_DrawString_EN(12, ((EPD_2IN66_WIDTH - 15) / 2) + 40, epd_display.buttons.btn1, &Font24, WHITE, BLACK);
Paint_DrawString_EN(EPD_2IN66_HEIGHT - 12 - Font24.Width, ((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), epd_display.buttons.btn2, &Font24, WHITE, BLACK);
Paint_DrawString_EN(EPD_2IN66_HEIGHT - 12 - Font24.Width, ((EPD_2IN66_WIDTH - 15) / 2) + 40, epd_display.buttons.btn3, &Font24, WHITE, BLACK);
// Draw machine name
ESP_LOGD("EPD", "Drawing machine name");
Paint_DrawString_EN(42, 20, epd_display.machine_name, &Font16, WHITE, BLACK);
// Draw machine state
ESP_LOGD("EPD", "Drawing machine state");
Paint_DrawString_EN(60, ((EPD_2IN66_WIDTH - 15) / 2) + 15 - (Font24.Height / 2), epd_display.state, &Font24, WHITE,
BLACK);
// Draw QR code
ESP_LOGD("EPD", "Drawing QR code");
Paint_DrawBitMap_Paste(gImage_qrurn, EPD_2IN66_HEIGHT - 142,
((EPD_2IN66_WIDTH - 15) / 2) - 35, 100, 100, TRUE);
ESP_LOGI("EPD", "Displaying initial layout");
EPD_2IN66_Display(epd_display.canvas);
ESP_LOGD("EPD", "Sleeping");
EPD_2IN66_Sleep();
DEV_Module_Exit();
return ESP_OK;
}
void epd_clear() {
EPD_2IN66_Init();
EPD_2IN66_Clear();
EPD_2IN66_Sleep();
}
void epd_update_reader_info(reader_info_t reader_info) {
if (memcmp(&epd_display.reader_info, &reader_info, sizeof(reader_info_t)) != 0) {
memcpy(&epd_display.reader_info, &reader_info, sizeof(reader_info_t));
DEV_Module_Init();
EPD_2IN66_Init();
EPD_2IN66_Init_Partial();
Paint_SelectImage(epd_display.canvas);
char readerid[DISPLAY_BUFFER_SIZE];
snprintf(readerid, DISPLAY_BUFFER_SIZE, "%05d", epd_display.reader_info.reader_id);
char batterlevel[DISPLAY_BUFFER_SIZE];
snprintf(batterlevel, DISPLAY_BUFFER_SIZE, "%d%%", epd_display.reader_info.battery_level);
Paint_ClearWindows(94, 2, 129, 14, WHITE);
Paint_DrawString_EN(94, 2, readerid, &Font12, WHITE, BLACK);
// blank out battery level
Paint_ClearWindows(238, 2, 266, 14, WHITE);
// Draw battery level
Paint_DrawString_EN(238, 2, batterlevel, &Font12, WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
EPD_2IN66_Sleep();
DEV_Module_Exit();
}
}
void epd_update_state(char* state) {
if (strcmp(epd_display.state, state) != 0) {
ESP_LOGI("EPD", "Updating state to %s", state);
strncpy(epd_display.state, state, DISPLAY_BUFFER_SIZE);
DEV_Module_Init();
EPD_2IN66_Init();
EPD_2IN66_Init_Partial();
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(60, ((EPD_2IN66_WIDTH - 15) / 2) + 15 - (Font24.Height / 2), EPD_2IN66_HEIGHT - 142,
((EPD_2IN66_WIDTH - 15) / 2) + 15 - (Font24.Height / 2) + Font24.Height, WHITE);
Paint_DrawString_EN(60, ((EPD_2IN66_WIDTH - 15) / 2) + 15 - (Font24.Height / 2), epd_display.state, &Font24,
WHITE,
BLACK);
EPD_2IN66_Display(epd_display.canvas);
EPD_2IN66_Sleep();
DEV_Module_Exit();
}
}
void epd_update_buttons(buttons_t* buttons) {
DEV_Module_Init();
EPD_2IN66_Init();
EPD_2IN66_Init_Partial();
if (strcmp(epd_display.buttons.btn0, buttons->btn0) != 0) {
strncpy(epd_display.buttons.btn0, buttons->btn0, DISPLAY_BUFFER_SIZE);
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(12, ((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), 12 + Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2) + Font24.Height, WHITE);
Paint_DrawString_EN(12, ((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), epd_display.buttons.btn0, &Font24,
WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
}
if (strcmp(epd_display.buttons.btn1, buttons->btn1) != 0) {
strncpy(epd_display.buttons.btn1, buttons->btn1, DISPLAY_BUFFER_SIZE);
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(12, ((EPD_2IN66_WIDTH - 15) / 2) + 40, 12 + Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) + 40 + Font24.Height, WHITE);
Paint_DrawString_EN(12, ((EPD_2IN66_WIDTH - 15) / 2) + 40, epd_display.buttons.btn1, &Font24, WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
}
if (strcmp(epd_display.buttons.btn2, buttons->btn2) != 0) {
strncpy(epd_display.buttons.btn2, buttons->btn2, DISPLAY_BUFFER_SIZE);
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(EPD_2IN66_HEIGHT - 12 - Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), EPD_2IN66_HEIGHT - 12,
((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2) + Font24.Height, WHITE);
Paint_DrawString_EN(EPD_2IN66_HEIGHT - 12 - Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) - 20 - (Font24.Height / 2), epd_display.buttons.btn2, &Font24,
WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
}
if (strcmp(epd_display.buttons.btn3, buttons->btn3) != 0) {
strncpy(epd_display.buttons.btn3, buttons->btn3, DISPLAY_BUFFER_SIZE);
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(EPD_2IN66_HEIGHT - 12 - Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) + 40, EPD_2IN66_HEIGHT - 12,
((EPD_2IN66_WIDTH - 15) / 2) + 40 + Font24.Height, WHITE);
Paint_DrawString_EN(EPD_2IN66_HEIGHT - 12 - Font24.Width,
((EPD_2IN66_WIDTH - 15) / 2) + 40, epd_display.buttons.btn3, &Font24, WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
}
EPD_2IN66_Sleep();
DEV_Module_Exit();
}
void epd_update_machine_name(char* machine_name) {
if (strcmp(epd_display.machine_name, machine_name) != 0) {
strncpy(epd_display.machine_name, machine_name, DISPLAY_BUFFER_SIZE);
DEV_Module_Init();
EPD_2IN66_Init();
EPD_2IN66_Init_Partial();
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(42, 20, 251,
20 + Font16.Height, WHITE);
Paint_DrawString_EN(42, 20, epd_display.machine_name, &Font16, WHITE, BLACK);
EPD_2IN66_Display(epd_display.canvas);
EPD_2IN66_Sleep();
DEV_Module_Exit();
}
}
void epd_update_image(UBYTE* image) {
if (memcmp(epd_display.image, image, DISPLAY_BUFFER_SIZE) != 0) {
memcpy(epd_display.image, image, DISPLAY_BUFFER_SIZE);
DEV_Module_Init();
EPD_2IN66_Init();
EPD_2IN66_Init_Partial();
Paint_SelectImage(epd_display.canvas);
Paint_ClearWindows(EPD_2IN66_HEIGHT - 142,
((EPD_2IN66_WIDTH - 15) / 2) - 35,
EPD_2IN66_HEIGHT - 142 + 100,
((EPD_2IN66_WIDTH - 15) / 2) - 35 + 100, WHITE);
Paint_DrawBitMap_Paste(epd_display.image, EPD_2IN66_HEIGHT - 142,
((EPD_2IN66_WIDTH - 15) / 2) - 35, 100, 100, TRUE);
EPD_2IN66_Display(epd_display.canvas);
EPD_2IN66_Sleep();
DEV_Module_Exit();
}
}

View File

@ -0,0 +1,73 @@
/*****************************************************************************
* | File : EPD_Test.h
* | Author : Waveshare team
* | Function : e-Paper test Demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2019-06-11
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef _EPD_TEST_H_
#define _EPD_TEST_H_
#include "DEV_Config.h"
#include "GUI_Paint.h"
#include "imagedata.h"
#include "Debug.h"
#include <stdlib.h> // malloc() free()
#define DISPLAY_BUFFER_SIZE 30
typedef struct {
int reader_id;
int battery_level;
} reader_info_t;
typedef struct {
char btn0[DISPLAY_BUFFER_SIZE];
char btn1[DISPLAY_BUFFER_SIZE];
char btn2[DISPLAY_BUFFER_SIZE];
char btn3[DISPLAY_BUFFER_SIZE];
} buttons_t;
typedef struct {
UBYTE* canvas;
reader_info_t reader_info;
char state[DISPLAY_BUFFER_SIZE];
buttons_t buttons;
char machine_name[DISPLAY_BUFFER_SIZE];
UBYTE *image;
} display_t;
esp_err_t epd_init(display_t display);
esp_err_t epd_deinit();
void epd_clear();
void epd_update_reader_info(reader_info_t reader_info);
void epd_update_state(char* state);
void epd_update_buttons(buttons_t* buttons);
void epd_update_machine_name(char* machine_name);
void epd_update_image(UBYTE* image);
int EPD_test();
#endif

View File

@ -0,0 +1,83 @@
const unsigned char gImage_qrurn[1300] = { /* 0X00,0X01,0X64,0X00,0X64,0X00, */
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X1F,0XFF,0XFC,0X63,0X9F,0XFC,0X03,0X83,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFC,
0X63,0X9F,0XFC,0X03,0X83,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFC,0X63,0X9F,0XFC,
0X03,0X83,0XFF,0XFF,0X80,0X00,0X00,0X1C,0X00,0X1C,0X1F,0XFF,0X83,0X9C,0X63,0X80,
0X03,0X80,0X00,0X00,0X1C,0X00,0X1C,0X1F,0XFF,0X83,0X9C,0X63,0X80,0X03,0X80,0X00,
0X00,0X1C,0X00,0X1C,0X1F,0XFF,0X83,0X9C,0X63,0X80,0X03,0X80,0X00,0X00,0X1C,0X7F,
0X9C,0X7F,0X80,0X03,0X80,0X63,0X9F,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X7F,0X80,
0X03,0X80,0X63,0X9F,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X7F,0X9C,0X7C,0X00,0X03,
0X9F,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X7F,0X9C,0X7C,0X00,0X03,0X9F,0XE3,0X80,
0X00,0X00,0X1C,0X7F,0X9C,0X7F,0X9C,0X7C,0X00,0X03,0X9F,0XE3,0X80,0X00,0X00,0X1C,
0X7F,0X9C,0X60,0X7C,0X63,0XFF,0XE3,0X9F,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X60,
0X7C,0X63,0XFF,0XE3,0X9F,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X60,0X7C,0X63,0XFF,
0XE3,0X9F,0XE3,0X80,0X00,0X00,0X1C,0X00,0X1C,0X03,0XE3,0X9F,0XE3,0XE3,0X80,0X03,
0X80,0X00,0X00,0X1C,0X00,0X1C,0X03,0XE3,0X9F,0XE3,0XE3,0X80,0X03,0X80,0X00,0X00,
0X1F,0XFF,0XFC,0X63,0X9C,0X63,0X9C,0X63,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFC,
0X63,0X9C,0X63,0X9C,0X63,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFC,0X63,0X9C,0X63,
0X9C,0X63,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X03,0X9C,0X1F,0X9F,0X80,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X9C,0X1F,0X9F,0X80,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0X9C,0X1F,0X9F,0X80,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,
0X1C,0X63,0XFF,0X9F,0XE3,0XFC,0X1F,0XE3,0X80,0X00,0X00,0X1F,0XFC,0X1C,0X63,0XFF,
0X9F,0XE3,0XFC,0X1F,0XE3,0X80,0X00,0X00,0X1C,0X7C,0X60,0X63,0X9F,0XFC,0X1C,0X60,
0X7F,0X9F,0X80,0X00,0X00,0X1C,0X7C,0X60,0X63,0X9F,0XFC,0X1C,0X60,0X7F,0X9F,0X80,
0X00,0X00,0X1C,0X7C,0X60,0X63,0X9F,0XFC,0X1C,0X60,0X7F,0X9F,0X80,0X00,0X00,0X1F,
0X9F,0XFF,0X9F,0XFF,0X80,0X7C,0X1C,0X7C,0X00,0X00,0X00,0X00,0X1F,0X9F,0XFF,0X9F,
0XFF,0X80,0X7C,0X1C,0X7C,0X00,0X00,0X00,0X00,0X1F,0X9F,0XFF,0X9F,0XFF,0X80,0X7C,
0X1C,0X7C,0X00,0X00,0X00,0X00,0X1F,0X83,0XE0,0X7F,0X80,0X03,0XE0,0X7C,0X60,0X7C,
0X00,0X00,0X00,0X1F,0X83,0XE0,0X7F,0X80,0X03,0XE0,0X7C,0X60,0X7C,0X00,0X00,0X00,
0X1C,0X63,0XFF,0XFF,0X9C,0X7F,0X80,0X7C,0X60,0X60,0X00,0X00,0X00,0X1C,0X63,0XFF,
0XFF,0X9C,0X7F,0X80,0X7C,0X60,0X60,0X00,0X00,0X00,0X1C,0X63,0XFF,0XFF,0X9C,0X7F,
0X80,0X7C,0X60,0X60,0X00,0X00,0X00,0X1F,0XFC,0X60,0X1C,0X7C,0X60,0X7F,0X9F,0XE0,
0X7C,0X00,0X00,0X00,0X1F,0XFC,0X60,0X1C,0X7C,0X60,0X7F,0X9F,0XE0,0X7C,0X00,0X00,
0X00,0X1F,0XFC,0X60,0X1C,0X7C,0X60,0X7F,0X9F,0XE0,0X7C,0X00,0X00,0X00,0X1C,0X00,
0X1C,0X00,0X63,0X80,0X7C,0X1F,0X9C,0X7F,0X80,0X00,0X00,0X1C,0X00,0X1C,0X00,0X63,
0X80,0X7C,0X1F,0X9C,0X7F,0X80,0X00,0X00,0X03,0X80,0X63,0X83,0XE0,0X60,0X1F,0XE3,
0XFC,0X63,0X80,0X00,0X00,0X03,0X80,0X63,0X83,0XE0,0X60,0X1F,0XE3,0XFC,0X63,0X80,
0X00,0X00,0X03,0X80,0X63,0X83,0XE0,0X60,0X1F,0XE3,0XFC,0X63,0X80,0X00,0X00,0X1F,
0XFC,0X1C,0X00,0X1C,0X63,0XE0,0X00,0X1C,0X1C,0X00,0X00,0X00,0X1F,0XFC,0X1C,0X00,
0X1C,0X63,0XE0,0X00,0X1C,0X1C,0X00,0X00,0X00,0X1F,0XFC,0X1C,0X00,0X1C,0X63,0XE0,
0X00,0X1C,0X1C,0X00,0X00,0X00,0X03,0XE3,0XE0,0X1F,0X80,0X63,0X9C,0X1C,0X00,0X03,
0X80,0X00,0X00,0X03,0XE3,0XE0,0X1F,0X80,0X63,0X9C,0X1C,0X00,0X03,0X80,0X00,0X00,
0X1C,0X00,0X1C,0X1C,0X03,0XFC,0X60,0X7C,0X00,0X7C,0X00,0X00,0X00,0X1C,0X00,0X1C,
0X1C,0X03,0XFC,0X60,0X7C,0X00,0X7C,0X00,0X00,0X00,0X1C,0X00,0X1C,0X1C,0X03,0XFC,
0X60,0X7C,0X00,0X7C,0X00,0X00,0X00,0X00,0X1C,0X63,0X80,0X63,0XE3,0XE3,0X9F,0X83,
0XE3,0X80,0X00,0X00,0X00,0X1C,0X63,0X80,0X63,0XE3,0XE3,0X9F,0X83,0XE3,0X80,0X00,
0X00,0X00,0X1C,0X63,0X80,0X63,0XE3,0XE3,0X9F,0X83,0XE3,0X80,0X00,0X00,0X03,0XE3,
0X9F,0X9F,0X83,0XE0,0X63,0XFF,0XFF,0XE3,0X80,0X00,0X00,0X03,0XE3,0X9F,0X9F,0X83,
0XE0,0X63,0XFF,0XFF,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X63,0X80,0X1F,0X83,0XE0,
0X1F,0X9C,0X00,0X00,0X00,0X00,0X00,0X00,0X63,0X80,0X1F,0X83,0XE0,0X1F,0X9C,0X00,
0X00,0X00,0X00,0X00,0X00,0X63,0X80,0X1F,0X83,0XE0,0X1F,0X9C,0X00,0X00,0X00,0X1F,
0XFF,0XFC,0X03,0X80,0X60,0X1C,0X63,0X9C,0X1C,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X03,
0X80,0X60,0X1C,0X63,0X9C,0X1C,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X03,0X80,0X60,0X1C,
0X63,0X9C,0X1C,0X00,0X00,0X00,0X1C,0X00,0X1C,0X00,0X7F,0XFC,0X60,0X60,0X1F,0X80,
0X00,0X00,0X00,0X1C,0X00,0X1C,0X00,0X7F,0XFC,0X60,0X60,0X1F,0X80,0X00,0X00,0X00,
0X1C,0X7F,0X9C,0X1C,0X60,0X1C,0X1C,0X7F,0XFF,0X9F,0X80,0X00,0X00,0X1C,0X7F,0X9C,
0X1C,0X60,0X1C,0X1C,0X7F,0XFF,0X9F,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X1C,0X60,0X1C,
0X1C,0X7F,0XFF,0X9F,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X63,0XE3,0X9F,0XE0,0X03,0X83,
0XFC,0X00,0X00,0X00,0X1C,0X7F,0X9C,0X63,0XE3,0X9F,0XE0,0X03,0X83,0XFC,0X00,0X00,
0X00,0X1C,0X7F,0X9C,0X63,0XE3,0X9F,0XE0,0X03,0X83,0XFC,0X00,0X00,0X00,0X1C,0X7F,
0X9C,0X7C,0X1C,0X7F,0XFC,0X00,0X03,0XE3,0X80,0X00,0X00,0X1C,0X7F,0X9C,0X7C,0X1C,
0X7F,0XFC,0X00,0X03,0XE3,0X80,0X00,0X00,0X1C,0X00,0X1C,0X60,0X1F,0X83,0XFC,0X60,
0X00,0X03,0X80,0X00,0X00,0X1C,0X00,0X1C,0X60,0X1F,0X83,0XFC,0X60,0X00,0X03,0X80,
0X00,0X00,0X1C,0X00,0X1C,0X60,0X1F,0X83,0XFC,0X60,0X00,0X03,0X80,0X00,0X00,0X1F,
0XFF,0XFC,0X60,0X60,0X03,0XE0,0X7F,0X80,0X1C,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X60,
0X60,0X03,0XE0,0X7F,0X80,0X1C,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X60,0X60,0X03,0XE0,
0X7F,0X80,0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,};

Some files were not shown because too many files have changed in this diff Show More