From 7ab3cd6cc3794b5e40de63eb2153d07462c9aea2 Mon Sep 17 00:00:00 2001 From: Fritz Heiden Date: Sat, 24 May 2025 14:19:05 +0200 Subject: [PATCH] feat: use lvgl UI library --- diagrams/schematic.pdf | 2132 ++++++++++++++++++++++++++++++++++++++++ include/lv_conf.h | 1127 +++++++++++++++++++++ platformio.ini | 7 +- src/main.cpp | 107 +- 4 files changed, 3341 insertions(+), 32 deletions(-) create mode 100644 diagrams/schematic.pdf create mode 100644 include/lv_conf.h diff --git a/diagrams/schematic.pdf b/diagrams/schematic.pdf new file mode 100644 index 0000000..430ce4b --- /dev/null +++ b/diagrams/schematic.pdf @@ -0,0 +1,2132 @@ +%PDF-1.4 +%߬ +3 0 obj +<> +endobj +4 0 obj +<< +/Length 20240 +>> +stream +0.20 w +0 G +2 J +0 j +100 M +1.00 g +[] 0 d +0.00 501.20 800.00 -501.20 re +f +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +216.000 481.200 m +216.000 491.200 l +216.000 21.200 m +216.000 11.200 l +412.000 481.200 m +412.000 491.200 l +412.000 21.200 m +412.000 11.200 l +608.000 481.200 m +608.000 491.200 l +608.000 21.200 m +608.000 11.200 l +20.000 285.200 m +10.000 285.200 l +780.000 285.200 m +790.000 285.200 l +20.000 89.200 m +10.000 89.200 l +780.000 89.200 m +790.000 89.200 l +S +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 383.20 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +781.50 383.20 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 187.20 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +781.50 187.20 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 482.70 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 12.70 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 482.70 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 12.70 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 482.70 Td +(3) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 12.70 Td +(3) Tj +ET +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +20.00 481.20 760.00 -460.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +10.00 491.20 780.00 -480.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +336.00 101.20 444.00 -80.00 re +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +336.100 61.950 m +779.630 61.950 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +440.630 41.950 m +779.630 41.950 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +700.610 101.130 m +700.630 61.950 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +700.630 61.950 m +700.630 41.950 l +S +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +341.00 88.20 Td +(TITLE:) Tj +ET +10.00 w +BT +/F1 13 Tf +13.00 TL +0.000 0.000 1.000 rg +398.62 75.61 Td +(Drum Module) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +705.62 74.95 Td +(REV:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +743.62 74.95 Td +(1.0) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +445.62 26.20 Td +(Date:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +492.62 25.72 Td +(2025-05-24) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +704.62 46.20 Td +(Sheet:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +749.62 45.72 Td +(1/1) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +584.62 25.95 Td +(Drawn By:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +649.63 25.95 Td +(fritzendgltig) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +445.62 47.95 Td +(Company:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +512.25 47.84 Td +(Your Company) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +440.630 61.950 m +440.630 21.950 l +S +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +407.96 389.20 Td +(ESP32-DEVKIT-ESPWROOM-32) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +407.96 398.20 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +0.00 g +[] 0 d +349.060 386.200 m +469.060 386.200 l +S +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +0.00 g +[] 0 d +469.060 386.200 m +469.060 186.200 l +S +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +0.00 g +[] 0 d +469.060 186.200 m +349.060 186.200 l +S +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +0.00 g +[] 0 d +349.060 186.200 m +349.060 386.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 343.25 Td +(3V3) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +325.22 348.17 Td +(3V3) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 346.200 m +349.685 346.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 333.25 Td +(GND) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +323.18 338.17 Td +(GND) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 336.200 m +349.685 336.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 323.25 Td +(D15) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 328.17 Td +(D15) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 326.200 m +349.685 326.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 313.25 Td +(D2) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +328.51 318.17 Td +(D2) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 316.200 m +349.685 316.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 303.25 Td +(D4) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +328.51 308.17 Td +(D4) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 306.200 m +349.685 306.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 293.25 Td +(RX2) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.85 298.17 Td +(RX2) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 296.200 m +349.685 296.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 283.25 Td +(TX2) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +325.32 288.17 Td +(TX2) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 286.200 m +349.685 286.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 273.25 Td +(D5) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +328.51 278.17 Td +(D5) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 276.200 m +349.685 276.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 263.25 Td +(D18) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 268.17 Td +(D18) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 266.200 m +349.685 266.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 253.25 Td +(D19) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 258.17 Td +(D19) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 256.200 m +349.685 256.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 243.25 Td +(D21) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 248.17 Td +(D21) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 246.200 m +349.685 246.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 233.25 Td +(RX0) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.85 238.17 Td +(RX0) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 236.200 m +349.685 236.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 223.25 Td +(TX0) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +325.32 228.17 Td +(TX0) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 226.200 m +349.685 226.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 213.25 Td +(D22) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 218.17 Td +(D22) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 216.200 m +349.685 216.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +358.58 203.25 Td +(D23) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +324.70 208.17 Td +(D23) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +330.000 206.200 m +349.685 206.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +448.43 343.25 Td +(VIN) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 348.17 Td +(VIN) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 346.200 m +470.315 346.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +441.97 333.25 Td +(GND2) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 338.17 Td +(GND2) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 336.200 m +470.315 336.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 323.25 Td +(D13) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 328.17 Td +(D13) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 326.200 m +470.315 326.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 313.25 Td +(D12) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 318.17 Td +(D12) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 316.200 m +470.315 316.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 303.25 Td +(D14) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 308.17 Td +(D14) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 306.200 m +470.315 306.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 293.25 Td +(D27) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 298.17 Td +(D27) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 296.200 m +470.315 296.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 283.25 Td +(D26) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 288.17 Td +(D26) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 286.200 m +470.315 286.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 273.25 Td +(D25) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 278.17 Td +(D25) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 276.200 m +470.315 276.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 263.25 Td +(D33) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 268.17 Td +(D33) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 266.200 m +470.315 266.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 253.25 Td +(D32) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 258.17 Td +(D32) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 256.200 m +470.315 256.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 243.25 Td +(D35) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 248.17 Td +(D35) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 246.200 m +470.315 246.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +447.30 233.25 Td +(D34) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 238.17 Td +(D34) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 236.200 m +470.315 236.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +450.95 223.25 Td +(VN) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 228.17 Td +(VN) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 226.200 m +470.315 226.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +451.82 213.25 Td +(VP) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 218.17 Td +(VP) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 216.200 m +470.315 216.200 l +S +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +451.26 203.25 Td +(EN) Tj +ET +BT +/F1 6 Tf +6.00 TL +0.647 0.294 0.294 rg +481.19 208.17 Td +(EN) Tj +ET +1 J +1 j +1.00 w +0.65 0.29 0.29 RG +[] 0 d +490.000 206.200 m +470.315 206.200 l +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +386.39 187.82 Td +(ESP32) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +72.40 359.20 Td +(2.4IN ILI9341 SPI LCD GIP) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +170.46 368.05 Td +(U1) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +179.62 343.20 Td +(T_IRQ) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 347.20 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 346.200 m +210.000 346.200 l +S +2 J +0 j +100 M +1.00 w +0.00 G +[] 0 d +120.00 356.20 90.00 -150.00 re +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +182.73 333.20 Td +(T_DO) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 337.20 Td +(2) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 336.200 m +210.000 336.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +179.30 323.20 Td +(T_DIN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 327.20 Td +(3) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 326.200 m +210.000 326.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +184.31 313.20 Td +(T_CS) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 317.20 Td +(4) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 316.200 m +210.000 316.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +179.23 303.20 Td +(T_CLK) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 307.20 Td +(5) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 306.200 m +210.000 306.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +183.41 293.20 Td +(MISO) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 297.20 Td +(6) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 296.200 m +210.000 296.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +190.38 283.20 Td +(LED) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 287.20 Td +(7) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 286.200 m +210.000 286.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +189.34 273.20 Td +(SCK) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 277.20 Td +(8) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 276.200 m +210.000 276.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +183.41 263.20 Td +(MOSI) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 267.20 Td +(9) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 266.200 m +210.000 266.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +194.79 253.20 Td +(DC) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 257.20 Td +(10) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 256.200 m +210.000 256.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +178.68 243.20 Td +(RESET) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 247.20 Td +(11) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 246.200 m +210.000 246.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +195.57 233.20 Td +(CS) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 237.20 Td +(12) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 236.200 m +210.000 236.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +187.36 223.20 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 227.20 Td +(13) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 226.200 m +210.000 226.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +189.29 213.20 Td +(VCC) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +215.00 217.20 Td +(14) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +230.000 216.200 m +210.000 216.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 216.200 m +270.000 216.200 l +270.000 346.200 l +330.000 346.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 286.200 m +270.000 286.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 296.200 m +280.000 296.200 l +280.000 256.200 l +330.000 256.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 276.200 m +290.000 276.200 l +290.000 266.200 l +330.000 266.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 266.200 m +260.000 266.200 l +260.000 206.200 l +330.000 206.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 256.200 m +250.000 256.200 l +250.000 316.200 l +330.000 316.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 246.200 m +240.000 246.200 l +240.000 306.200 l +330.000 306.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 236.200 m +300.000 236.200 l +300.000 276.200 l +330.000 276.200 l +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 227.00 160.20 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +240.000 176.200 m +240.000 186.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +231.000 176.200 m +249.000 176.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +234.000 174.200 m +246.000 174.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +237.000 172.200 m +243.000 172.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +239.000 170.200 m +241.000 170.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +230.000 226.200 m +240.000 226.200 l +240.000 186.200 l +S +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +619.04 309.20 Td +(EC110201M2D-HA1-438) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +619.04 318.20 Td +(U2) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +655.000 266.200 m +651.000 266.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +655.000 296.200 m +651.000 296.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +625.000 290.200 m +623.000 288.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +624.000 283.200 m +624.000 269.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +623.000 288.200 m +625.000 286.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +623.000 269.200 m +623.000 283.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +623.000 264.200 m +625.000 266.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +623.000 264.200 m +625.000 262.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +0.00 g +[] 0 d +622.000 269.200 m +622.000 283.200 l +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +[] 0 d +630.500 276.200 m +630.50 280.34 627.14 283.70 623.00 283.70 c +618.86 283.70 615.50 280.34 615.50 276.20 c +615.50 272.06 618.86 268.70 623.00 268.70 c +627.01 268.70 630.31 271.86 630.49 275.87 c +S +1 J +1 j +1.00 w +0.52 0.00 0.00 RG +[] 0 d +623.000 264.200 m +629.63 264.20 635.00 269.57 635.00 276.20 c +635.00 282.83 629.63 288.20 623.00 288.20 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 266.200 m +608.000 261.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 256.200 m +605.000 261.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 291.200 m +605.000 296.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 286.200 m +608.000 291.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 276.200 m +605.000 266.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +635.000 236.200 m +635.000 246.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +615.000 236.200 m +615.000 246.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +651.000 294.200 m +651.000 296.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +651.000 266.200 m +651.000 268.200 l +S +1.00 w +0.55 0.14 0.14 RG +[] 0 d +653.00 292.20 m 653.00 293.30 652.10 294.20 651.00 294.20 c +649.90 294.20 649.00 293.30 649.00 292.20 c +649.00 291.10 649.90 290.20 651.00 290.20 c +652.10 290.20 653.00 291.10 653.00 292.20 c +S +1.00 w +0.55 0.14 0.14 RG +[] 0 d +653.00 270.20 m 653.00 271.30 652.10 272.20 651.00 272.20 c +649.90 272.20 649.00 271.30 649.00 270.20 c +649.00 269.10 649.90 268.20 651.00 268.20 c +652.10 268.20 653.00 269.10 653.00 270.20 c +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +656.00 266.20 Td +(D) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +665.000 266.200 m +655.000 266.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +656.00 296.20 Td +(E) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +665.000 296.200 m +655.000 296.200 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +644.000 277.200 m +640.000 277.200 l +640.000 285.200 l +644.000 285.200 l +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +[] 0 d +644.00 294.20 1.00 -26.00 re +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +587.85 297.20 Td +(A) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +585.000 296.200 m +605.000 296.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +587.72 277.20 Td +(C) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +585.000 276.200 m +605.000 276.200 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +587.84 257.20 Td +(B) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +585.000 256.200 m +605.000 256.200 l +S +1.00 w +0.55 0.14 0.14 RG +[] 0 d +606.00 276.20 m 606.00 276.75 605.55 277.20 605.00 277.20 c +604.45 277.20 604.00 276.75 604.00 276.20 c +604.00 275.65 604.45 275.20 605.00 275.20 c +605.55 275.20 606.00 275.65 606.00 276.20 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +605.000 276.200 m +605.000 286.200 l +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +[] 0 d +595.00 306.20 60.00 -60.00 re +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +585.000 296.200 m +540.000 296.200 l +540.000 316.200 l +490.000 316.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +585.000 256.200 m +550.000 256.200 l +550.000 326.200 l +490.000 326.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +665.000 266.200 m +665.000 226.200 l +530.000 226.200 l +530.000 306.200 l +490.000 306.200 l +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 562.00 160.20 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +575.000 176.200 m +575.000 186.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +566.000 176.200 m +584.000 176.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +569.000 174.200 m +581.000 174.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +572.000 172.200 m +578.000 172.200 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +574.000 170.200 m +576.000 170.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +585.000 276.200 m +575.000 276.200 l +575.000 186.200 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +665.000 296.200 m +675.000 296.200 l +675.000 216.200 l +575.000 216.200 l +S +0.80 0.00 0.00 rg +272.50 286.20 m 272.50 287.58 271.38 288.70 270.00 288.70 c +268.62 288.70 267.50 287.58 267.50 286.20 c +267.50 284.82 268.62 283.70 270.00 283.70 c +271.38 283.70 272.50 284.82 272.50 286.20 c +f +0.80 0.00 0.00 rg +577.50 216.20 m 577.50 217.58 576.38 218.70 575.00 218.70 c +573.62 218.70 572.50 217.58 572.50 216.20 c +572.50 214.82 573.62 213.70 575.00 213.70 c +576.38 213.70 577.50 214.82 577.50 216.20 c +f +q +102.00 0 0 20.00 337.00 31.70 cm +/I0 Do +Q +endstream +endobj +1 0 obj +<> +endobj +5 0 obj +<< +/Descent -209 +/CapHeight 727 +/StemV 0 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-559 -303 1446 1050] +/FontName /Verdana +/ItalicAngle 0 +/Ascent 1005 +>> +endobj +6 0 obj +<> +endobj +7 0 obj +<< +/Descent -325 +/CapHeight 500 +/StemV 80 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-665 -325 2000 1006] +/FontName /Arial +/ItalicAngle 0 +/Ascent 1006 +>> +endobj +8 0 obj +<> +endobj +9 0 obj +<< +/Type /Font +/BaseFont /Times-Roman +/Subtype /Type1 +/Encoding /WinAnsiEncoding +/FirstChar 32 +/LastChar 255 +>> +endobj +10 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 520 +/Height 105 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/DecodeParms <> +/SMask 11 0 R +/Length 6178 +/Filter /FlateDecode +>> +stream +xoGrkN@\["lxE>RZclOP H) +` d`+SO!5N/Q$TfQ{o]=C 9SU]]? +REQ9PEQ*EQobqQ5D%-̿TF?2?(Wd7>࢖aLMTC(p1W}ngJb7pEQQbnJR,WEOF͛(<7DmqU!\)ųߐSEgmwywAQ?*3l6~#R|ZW\R0Tq{4z O7QE `lA` jj=Lu(gxlN-eA'z((ʐ=wri(e0k|EQ0W}$ܩ5 MnPe @rhYM Iq5Bf^T7(2D ڔa @CE}Y!G RByؔM~yVE">t~Fei[՛1ISizP("t/S_vtJOz.?Vjr(!p[(Iǯ䇪E)DU&H~xķMn) 1O pԸW xm3mLBOa:Caʒʜ_n1hs2욃4(;v>rؠɟeE>+t4tL;C +=G\ZU}].)n?ʧ39|NGEEm\1L>*'jfb-ڿESV?-z~y ӚD.~膝=()VH6~v 3&AJ^1uވɅNg(]e\U,W˝Oyy37IM䋛(Jޕ<7\qbKsz|V=Nn񌠟dh\1zek􇋪c3C4mbbL*"9bb LH1$={iuzٌ}/_f6(t<&5n +Jz?e_OC)kgL~5~t^*uJ`5#2c0pꂞB/3f!kxj_ZtYK<-'$J]&by11u̺#C(ro0Tz(&.t|:n_& Қl^̈\x/Gܛ.֊?~|fڹ/mm$V\K\-˨ +a!]óc +F8a#9gXC5Mqf$ MTV P~#ڨsTzJxߩH94KVk9Ux QB7[Wh;iAӒ7_+шk鏳7M ЫI?8 O4]TRtАki>NdMIS6@os9iAsR:{%.#`Ξ~U 9A ddP VukG;03 m9~/T2%yfc(9,]vCrWnRaF VWxpMUg 办ɹFnh^z7BN>9ϴch @39fk 2gs,*þG<#e/O[<='K0/!$>nOa^Z2$0Tu=<[d#qz^ !B*habd]qoC^sIg9jw~v'AK x$R UEA" +<[[g5prJ'j+{A$CHSH7,Q"iĚAV=qķ ۋHC\oD^уWn{̛ C$UH8NuE&6M S5g']yV4kx)o_ߒݓL1r+?pysciv? `Vg(Ȯyz(<<6&@R#7֦$k' \-Sb6Ԟw3kq<*pO=)5)wl@\?S?}sSk/TGOoaP>泏dY[6fu}$n96-}mK}y9nM`dmSb3BAQ+~i*Lobw[t1NPT KLmY_ߜn8VxȥIQI Rޤۏx"+9CSe``P)P݊)]B.0m?^$p*zs~"xVl"ԣ)O׀FHzԅ?]+)KZ0MΜ1`6 + =Ĉw"փ&c.\J(Eg3_`hV @cerֽ?RUJdZG|\Oi#inȷ\*A*;^  nC ru oT'Z3 vSg.O3VolJ# @R$P:HsLrZ~q宂: GA}T 4<iT4 ;PֻH#Lnb(^sNۛ)3*'ف$wQ -^ŕ?R1*h|I +~0װ/ +NRT6ꘟ6Ks\Y?S[-Ygk`tL\~mdF>wj)?xP% +y+ڄ{7 t:ݤ'RIyAo3$o;ڏڇS[w?#bVkf'/|>(/5)Mħvwtw (]s#(8*ǐA^ Otzn@ #cd!O+ݠ/sC7%E"AEHqWSz.T.mE(m-,x!5#@#p+9fX#';Q&ޞÔ9xNցLJ=Dpn/?qA^N3np&ARKe3N[KeU ο{{e7_t(ΚᅬxdS C, S5mo0MHU3( uwT 2 -XnH2y/bJ_ɕ+oJm'Rƞ[SU#n#r~PH̛Vю>w`2)C@ULFvW5Zmq6k.ns0͗xsu{|EaAe+q0ERH\F^4+xkAoRr`(R`O 3ϦՖyUm_sЁٞfNj&#[\. +I'?6OG"c@c 9|V[0"~ .YH] z-[z#׊qm9YY +R1p,̼[/ ~SnQxrPNG3htQWhcj5hҷX$pNtCϝHQQn;4 zU2X RÖL'9')xXľIsn/rqo2tsV#'VfqEd͞Z>;؈qҋB)eʸg{E={xz? iF`R=zFIJ|3=Ѩ;rEUdԔ%Zp*̙Bftmmۅ~hA6QAֆ45C˒_O7~'ĩRW 9PN ^H@^AH1WA"&=U X+`H1F*@_lG=l>_g-Z3H"\Xg'f Hث:nu%TÜe>spmߜL?w_ O)=iox琧avs55r`D+2͸ R*gho5/SOeҼWxh?#ٌXu^8`m=l>f:1+)jpʳQv7i^cc<+}n#w(;M/FPIȰVa5b2m3F+)"WbPWI6B^ڞ[ǟq`=WNL)}ˌ}؄9rLY&n,- ɍQ}rNڻ7ߘD<`DTx +3M:2V[ ?zW 1]7+qg:d n[ۿkk ~q5;jR|Jރhlo1A [xoT:-݈S z`9-5t1T_l~zMJR!$SFNY҉\Ü,?ֹJgܘlbwT.ȥ)&ݣlI -@ 4w!VJB^2 yTXov3#~.a FŦSHVm _iƕ*'iZ1aKQ6mpZfϼ>&vlƒ]X1g01FufMJ'm4]/p*4B )Dpm,gSPF8&~mǰ^L7ɁgK75hƨpn! IXՈFodGR"0|$٤UR^IJ^*͟&ybQ8OB4cE>DJPx@!(o'9WUMӻVQ7aJQr.&ҷǀf3@ŕ +z$e&SVms(т28><[񺠯U1(ڊi9PQbz\ї%$XPLQ1gʱVPbӣ& (.VX +U*Lr`51EITDJȚXo(٧>ToV]dLMߕ +TӋA +QvJ2}|C4,MS냗5Y LQ2㊞陳 +]jC&;-()զ(9BTtAI6EQEQkbPEQ]<- +endstream +endobj +11 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 520 +/Height 105 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/DecodeParms <> +/Length 6588 +/Filter /FlateDecode +>> +stream +x] M?c=ȳaH MD$zG3eHS1 +UQd]W0E1 +=EsZ{Ͼwj~}>wk}:A- 3T ^EkZI+d0d"ԯWB늄MGm lR +]T]۴y]bD-вKJOf8d"<׳ٛ>RCڈ.zKgXAYU#kΌ=тMFE<)v] "pȒ"4#2^CVaH,) #0y"vb "p[*oϧ"0NA8)BvQ F:?3_I߽7gڠm%7\_W233S!:TrjE9R+hݏ!hBJ ݞnJa{Qe_y1QuHI:qG:}R4gj @trg7GoӐZlnF ]6y×g.zZ%R:@;*?40b>󈲵h=);>\^.XзdJRzE+oD=Y܂֔TK[@JG%)лɣ*ڨTښ!?N*E'-=ο*6mM)y +)BqҚ][*W| "2Z +V5V(TG* Z7ufǶc\ _ӣGxTTU^2vSYyyxPHYx_ ?TZ7F$ f oΎ[P&]PXu"]D`Nwn'?p|,;Y+ Ah91`8SBl\J܎(~[Oa56b2KOfU(} ߆:<_Lp8#_ӟ[Dczi阢" 2*,4sE`eXG2%͓ѫ~x|W"teO*'#EamV +.Wϐ1EhVz J53iѣnY']#ͦy7߰_"m=?XH n~fj#^~Yh;I_"ľVipÆ4 +a"JhՃG~-q"U`6ow}c3#(;^;qdlPAï˪ȵ(sűN@L@9 tdVk12 x.0~ǎjT'2\ׅP}+A5Ois[|HVE\w5ls^x| 6p?6 +&t0óc){)ӕzpl}8"c΀1pu?~2||{dHh&=A T +FGKmIoZ2BӧC.⴨Q(}<μDɇ_p(a"}.Z^}%S( [\R/3([~;MQ>X@]8֢\CYaw;}p4fhd!ԌFһs[:xU+~թ? gqġjK2p7mVQ^ /^O腢~';uڽɵ4 >^P^% +`hJpO6WI>[; 2p@Z~>XyaRhbi 2&qw홣LCIrgg*O?.aT" |4>N}ⶖ1wmiW0crAeI~aߊg+zJIڢ;FM;LO1 hi=;RkddOdd['W-769W3VBM6tCrRY)S@0-p!Fl 0%.rhv1$}]K0'm䛗xEX +lIBVH]t^U:W˄9z>ՉQT̷ʋ Kم)px(3, kTHd7o};ɯoDnԇ.p}xƌ*<\K?V]4F( l)2^@PsSnMɻ%LdwȲBa!f9PA5\b,G^0m0JeO'{& T6o,Cvq6u-Lޞ%\DMTvGDvkyl{'/DOfnjm%A*7ie.Ͷԗ]z[VVd) d&LQWAδdD.pI"@P2EWyCkd $$ke*cA$UfbFRc'HqԔi84 FgE9|<,o^쿒<\Nq5Q0׷DHdPUonj} + Xx토صN@TgpT$W '?y)$) +*`u24%.b4;|xD) , K=zDlobx+w}Z!тh_iN{.[;? v*aVM)z}CLbW 䤕Yb `{B+WzeAhlz駤q6"pUO:">|mdl Q6:$Soéb|(* ZHb($Sz9|’]<$gbO|RyHCa0ΙJ=-pȝM?1=eXѩ#E=9N6J΀(L;Hp@ D'IM<҈︠_ \U\$i!Ƒ0 mZq̿uJm=`SMcxȝTlg CpS:Q9y 3ygK~^9#8؜_0y^:3QNn6m $@ 'U +CP #'op+YL%"d\`L_ѹYOܳ?eȮh,󁗥3)z +Tpi/Q9HGs/ .i 03 =8 $vyFâg@g~>GZufJt<Hj 3)g"q/&r9kN=rT R72XL)&?V9R4z*yKo܀LlY;ɗBCIi7,2#׮-8Q{^H/f!:ď! +Ǥ;i%X6#_qv;{I ^֦m$1utE>ꑧ@ArZGb ,lm3y]mp)I1S-& eGDEqLòR=]1JzG~TKpXr.UV FzY jY#]s#\ +JE8%eUĺ4yTpx%ˋqQsf+X 4!f8K©LLjsHe WbEIDNKU{T|X2.&4\!qaj)2[] < \ 9Q#Qv@$X#z<.060,(gB|LaC{T@vƕ޴ E +U٢U YY|9KK]@toYɱJmͫ7^״˦(K(܎C}! xz #i[,P5`F 3r| 4I18EV t6m9˺@vP;NEƟ]S˫E͚ +c~L+׉kc)WgӣiU~f'VI]C˄Qm +8LU•G1Kb(P`[8AөSliPͭf P-Jj#v'{m,<;:=k/9NLH +@XKzʷJ_,Scݻ[KIn4[&v0^|dzle^Jk,eԒVZ$'C]d @ajv.NH4|]_,R(rֺ55gY $/"L+/_I@Aq,Zo.`:6ގv@S4'p?JJZ_x03D+@;"(7`}d;|Sct4=F_Cpv9 +>*Q1&Zlha|r |Uè֥ $Ltd|4J +alm|ƛ)n l"7D'gt̟es!UEiREP3m܈"ۮJ!7AE7 +endstream +endobj +2 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << +/F1 6 0 R +/F2 8 0 R +/F3 9 0 R +>> +/XObject << +/I0 10 0 R +>> +>> +endobj +12 0 obj +<< +/Producer (jsPDF 0.0.0) +/CreationDate (D:20250524141637+02'00') +>> +endobj +13 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/OpenAction [3 0 R /FitH null] +/PageLayout /OneColumn +>> +endobj +xref +0 14 +0000000000 65535 f +0000020417 00000 n +0000036309 00000 n +0000000015 00000 n +0000000124 00000 n +0000020474 00000 n +0000020644 00000 n +0000021698 00000 n +0000021867 00000 n +0000022911 00000 n +0000023038 00000 n +0000029475 00000 n +0000036444 00000 n +0000036530 00000 n +trailer +<< +/Size 14 +/Root 13 0 R +/Info 12 0 R +/ID [ <7420C0BFDFDF1AD414E5BCEB8BD173BA> <7420C0BFDFDF1AD414E5BCEB8BD173BA> ] +>> +startxref +36634 +%%EOF \ No newline at end of file diff --git a/include/lv_conf.h b/include/lv_conf.h new file mode 100644 index 0000000..f604fbb --- /dev/null +++ b/include/lv_conf.h @@ -0,0 +1,1127 @@ +/** + * @file lv_conf.h + * Configuration file for v9.2.2 + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to the `lvgl` folder + * 2. or any other places and + * - define `LV_CONF_INCLUDE_SIMPLE` + * - add the path as include path + */ + +/* clang-format off */ +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H + +/*If you need to include anything here, do it inside the `__ASSEMBLY__` guard */ +#if 0 && defined(__ASSEMBLY__) +#include "my_include.h" +#endif + +/*==================== + COLOR SETTINGS + *====================*/ + +/*Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888)*/ +#define LV_COLOR_DEPTH 16 + +/*========================= + STDLIB WRAPPER SETTINGS + *=========================*/ + +/* Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_MALLOC LV_STDLIB_BUILTIN +#define LV_USE_STDLIB_STRING LV_STDLIB_BUILTIN +#define LV_USE_STDLIB_SPRINTF LV_STDLIB_BUILTIN + +#define LV_STDINT_INCLUDE +#define LV_STDDEF_INCLUDE +#define LV_STDBOOL_INCLUDE +#define LV_INTTYPES_INCLUDE +#define LV_LIMITS_INCLUDE +#define LV_STDARG_INCLUDE + +#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN + /*Size of the memory available for `lv_malloc()` in bytes (>= 2kB)*/ + #define LV_MEM_SIZE (64 * 1024U) /*[bytes]*/ + + /*Size of the memory expand for `lv_malloc()` in bytes*/ + #define LV_MEM_POOL_EXPAND_SIZE 0 + + /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ + #define LV_MEM_ADR 0 /*0: unused*/ + /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif +#endif /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/ + +/*==================== + HAL SETTINGS + *====================*/ + +/*Default display refresh, input device read and animation step period.*/ +#define LV_DEF_REFR_PERIOD 33 /*[ms]*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + *(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*================= + * OPERATING SYSTEM + *=================*/ +/*Select an operating system to use. Possible options: + * - LV_OS_NONE + * - LV_OS_PTHREAD + * - LV_OS_FREERTOS + * - LV_OS_CMSIS_RTOS2 + * - LV_OS_RTTHREAD + * - LV_OS_WINDOWS + * - LV_OS_MQX + * - LV_OS_CUSTOM */ +#define LV_USE_OS LV_OS_NONE + +#if LV_USE_OS == LV_OS_CUSTOM + #define LV_OS_CUSTOM_INCLUDE +#endif +#if LV_USE_OS == LV_OS_FREERTOS + /* + * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM + * than unblocking a task using an intermediary object such as a binary semaphore. + * RTOS task notifications can only be used when there is only one task that can be the recipient of the event. + */ + #define LV_USE_FREERTOS_TASK_NOTIFY 1 +#endif + +/*======================== + * RENDERING CONFIGURATION + *========================*/ + +/*Align the stride of all layers and images to this bytes*/ +#define LV_DRAW_BUF_STRIDE_ALIGN 1 + +/*Align the start address of draw_buf addresses to this bytes*/ +#define LV_DRAW_BUF_ALIGN 4 + +/*Using matrix for transformations. + *Requirements: + `LV_USE_MATRIX = 1`. + The rendering engine needs to support 3x3 matrix transformations.*/ +#define LV_DRAW_TRANSFORM_USE_MATRIX 0 + +/* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode + * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. + * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers + * and can't be drawn in chunks. */ + +/*The target buffer size for simple layer chunks.*/ +#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /*[bytes]*/ + +/* The stack size of the drawing thread. + * NOTE: If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more. + */ +#define LV_DRAW_THREAD_STACK_SIZE (8 * 1024) /*[bytes]*/ + +#define LV_USE_DRAW_SW 1 +#if LV_USE_DRAW_SW == 1 + + /* + * Selectively disable color format support in order to reduce code size. + * NOTE: some features use certain color formats internally, e.g. + * - gradients use RGB888 + * - bitmaps with transparency may use ARGB8888 + */ + + #define LV_DRAW_SW_SUPPORT_RGB565 1 + #define LV_DRAW_SW_SUPPORT_RGB565A8 1 + #define LV_DRAW_SW_SUPPORT_RGB888 1 + #define LV_DRAW_SW_SUPPORT_XRGB8888 1 + #define LV_DRAW_SW_SUPPORT_ARGB8888 1 + #define LV_DRAW_SW_SUPPORT_L8 1 + #define LV_DRAW_SW_SUPPORT_AL88 1 + #define LV_DRAW_SW_SUPPORT_A8 1 + #define LV_DRAW_SW_SUPPORT_I1 1 + + /* Set the number of draw unit. + * > 1 requires an operating system enabled in `LV_USE_OS` + * > 1 means multiple threads will render the screen in parallel */ + #define LV_DRAW_SW_DRAW_UNIT_CNT 1 + + /* Use Arm-2D to accelerate the sw render */ + #define LV_USE_DRAW_ARM2D_SYNC 0 + + /* Enable native helium assembly to be compiled */ + #define LV_USE_NATIVE_HELIUM_ASM 0 + + /* 0: use a simple renderer capable of drawing only simple rectangles with gradient, images, texts, and straight lines only + * 1: use a complex renderer capable of drawing rounded corners, shadow, skew lines, and arcs too */ + #define LV_DRAW_SW_COMPLEX 1 + + #if LV_DRAW_SW_COMPLEX == 1 + /*Allow buffering some shadow calculation. + *LV_DRAW_SW_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` + *Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost*/ + #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 + + /* Set number of maximally cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing + * radius * 4 bytes are used per circle (the most often used radiuses are saved) + * 0: to disable caching */ + #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 + #endif + + #define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE + + #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM + #define LV_DRAW_SW_ASM_CUSTOM_INCLUDE "" + #endif + + /* Enable drawing complex gradients in software: linear at an angle, radial or conical */ + #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0 +#endif + +/* Use NXP's VG-Lite GPU on iMX RTxxx platforms. */ +#define LV_USE_DRAW_VGLITE 0 + +#if LV_USE_DRAW_VGLITE + /* Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */ + #define LV_USE_VGLITE_BLIT_SPLIT 0 + + #if LV_USE_OS + /* Use additional draw thread for VG-Lite processing.*/ + #define LV_USE_VGLITE_DRAW_THREAD 1 + + #if LV_USE_VGLITE_DRAW_THREAD + /* Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */ + #define LV_USE_VGLITE_DRAW_ASYNC 1 + #endif + #endif + + /* Enable VGLite asserts. */ + #define LV_USE_VGLITE_ASSERT 0 +#endif + +/* Use NXP's PXP on iMX RTxxx platforms. */ +#define LV_USE_PXP 0 + +#if LV_USE_PXP + /* Use PXP for drawing.*/ + #define LV_USE_DRAW_PXP 1 + + /* Use PXP to rotate display.*/ + #define LV_USE_ROTATE_PXP 0 + + #if LV_USE_DRAW_PXP && LV_USE_OS + /* Use additional draw thread for PXP processing.*/ + #define LV_USE_PXP_DRAW_THREAD 1 + #endif + + /* Enable PXP asserts. */ + #define LV_USE_PXP_ASSERT 0 +#endif + +/* Use Renesas Dave2D on RA platforms. */ +#define LV_USE_DRAW_DAVE2D 0 + +/* Draw using cached SDL textures*/ +#define LV_USE_DRAW_SDL 0 + +/* Use VG-Lite GPU. */ +#define LV_USE_DRAW_VG_LITE 0 + +#if LV_USE_DRAW_VG_LITE + /* Enable VG-Lite custom external 'gpu_init()' function */ + #define LV_VG_LITE_USE_GPU_INIT 0 + + /* Enable VG-Lite assert. */ + #define LV_VG_LITE_USE_ASSERT 0 + + /* VG-Lite flush commit trigger threshold. GPU will try to batch these many draw tasks. */ + #define LV_VG_LITE_FLUSH_MAX_COUNT 8 + + /* Enable border to simulate shadow + * NOTE: which usually improves performance, + * but does not guarantee the same rendering quality as the software. */ + #define LV_VG_LITE_USE_BOX_SHADOW 0 + + /* VG-Lite gradient maximum cache number. + * NOTE: The memory usage of a single gradient image is 4K bytes. + */ + #define LV_VG_LITE_GRAD_CACHE_CNT 32 + + /* VG-Lite stroke maximum cache number. + */ + #define LV_VG_LITE_STROKE_CACHE_CNT 32 + +#endif + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Logging + *-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 1 +#if LV_USE_LOG + + /*How important log should be added: + *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + *LV_LOG_LEVEL_INFO Log important events + *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + *LV_LOG_LEVEL_USER Only logs added by the user + *LV_LOG_LEVEL_NONE Do not log anything*/ + #define LV_LOG_LEVEL LV_LOG_LEVEL_INFO + + /*1: Print the log with 'printf'; + *0: User need to register a callback with `lv_log_register_print_cb()`*/ + #define LV_LOG_PRINTF 0 + + /*Set callback to print the logs. + *E.g `my_print`. The prototype should be `void my_print(lv_log_level_t level, const char * buf)` + *Can be overwritten by `lv_log_register_print_cb`*/ + //#define LV_LOG_PRINT_CB + + /*1: Enable print timestamp; + *0: Disable print timestamp*/ + #define LV_LOG_USE_TIMESTAMP 1 + + /*1: Print file and line number of the log; + *0: Do not print file and line number of the log*/ + #define LV_LOG_USE_FILE_LINE 1 + + + /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ + #define LV_LOG_TRACE_MEM 1 + #define LV_LOG_TRACE_TIMER 1 + #define LV_LOG_TRACE_INDEV 1 + #define LV_LOG_TRACE_DISP_REFR 1 + #define LV_LOG_TRACE_EVENT 1 + #define LV_LOG_TRACE_OBJ_CREATE 1 + #define LV_LOG_TRACE_LAYOUT 1 + #define LV_LOG_TRACE_ANIM 1 + #define LV_LOG_TRACE_CACHE 1 + +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. + *If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- + * Debug + *-----------*/ + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*1: Draw a red overlay for ARGB layers and a green overlay for RGB layers*/ +#define LV_USE_LAYER_DEBUG 0 + +/*1: Draw overlays with different colors for each draw_unit's tasks. + *Also add the index number of the draw unit on white background. + *For layers add the index number of the draw unit on black background.*/ +#define LV_USE_PARALLEL_DRAW_DEBUG 0 + +/*------------- + * Others + *-----------*/ + +#define LV_ENABLE_GLOBAL_CUSTOM 0 +#if LV_ENABLE_GLOBAL_CUSTOM + /*Header to include for the custom 'lv_global' function"*/ + #define LV_GLOBAL_CUSTOM_INCLUDE +#endif + +/*Default cache size in bytes. + *Used by image decoders such as `lv_lodepng` to keep the decoded image in the memory. + *If size is not set to 0, the decoder will fail to decode when the cache is full. + *If size is 0, the cache function is not enabled and the decoded mem will be released immediately after use.*/ +#define LV_CACHE_DEF_SIZE 0 + +/*Default number of image header cache entries. The cache is used to store the headers of images + *The main logic is like `LV_CACHE_DEF_SIZE` but for image headers.*/ +#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0 + +/*Number of stops allowed per gradient. Increase this to allow more stops. + *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/* Add 2 x 32 bit variables to each lv_obj_t to speed up getting style properties */ +#define LV_OBJ_STYLE_CACHE 0 + +/* Add `id` field to `lv_obj_t` */ +#define LV_USE_OBJ_ID 0 + +/* Automatically assign an ID when obj is created */ +#define LV_OBJ_ID_AUTO_ASSIGN LV_USE_OBJ_ID + +/*Use the builtin obj ID handler functions: +* - lv_obj_assign_id: Called when a widget is created. Use a separate counter for each widget class as an ID. +* - lv_obj_id_compare: Compare the ID to decide if it matches with a requested value. +* - lv_obj_stringify_id: Return e.g. "button3" +* - lv_obj_free_id: Does nothing, as there is no memory allocation for the ID. +* When disabled these functions needs to be implemented by the user.*/ +#define LV_USE_OBJ_ID_BUILTIN 1 + +/*Use obj property set/get API*/ +#define LV_USE_OBJ_PROPERTY 0 + +/*Enable property name support*/ +#define LV_USE_OBJ_PROPERTY_NAME 1 + +/* VG-Lite Simulator */ +/*Requires: LV_USE_THORVG_INTERNAL or LV_USE_THORVG_EXTERNAL */ +#define LV_USE_VG_LITE_THORVG 0 + +#if LV_USE_VG_LITE_THORVG + + /*Enable LVGL's blend mode support*/ + #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0 + + /*Enable YUV color format support*/ + #define LV_VG_LITE_THORVG_YUV_SUPPORT 0 + + /*Enable Linear gradient extension support*/ + #define LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT 0 + + /*Enable 16 pixels alignment*/ + #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1 + + /*Buffer address alignment*/ + #define LV_VG_LITE_THORVG_BUF_ADDR_ALIGN 64 + + /*Enable multi-thread render*/ + #define LV_VG_LITE_THORVG_THREAD_RENDER 0 + +#endif + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_display_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that + *should also appear on LVGL binding API such as MicroPython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Prefix all global extern data with this*/ +#define LV_ATTRIBUTE_EXTERN_DATA + +/* Use `float` as `lv_value_precise_t` */ +#define LV_USE_FLOAT 0 + +/*Enable matrix support + *Requires `LV_USE_FLOAT = 1`*/ +#define LV_USE_MATRIX 0 + +/*Include `lvgl_private.h` in `lvgl.h` to access internal data and functions by default*/ +#define LV_USE_PRIVATE_API 0 + +/*================== + * FONT USAGE + *===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 + *https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 1 +#define LV_FONT_MONTSERRAT_10 1 +#define LV_FONT_MONTSERRAT_12 1 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 1 +#define LV_FONT_MONTSERRAT_18 1 +#define LV_FONT_MONTSERRAT_20 1 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_14_CJK 0 /*1000 most common CJK radicals*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. + *You can use these fonts as default font too and they will be available globally. + *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/*Enable handling large font and/or fonts with a lot of characters. + *The limit depends on the font size, font face and bpp. + *Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_)]}" + +/*If a word is at least this long, will break wherever "prettiest" + *To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. + *The direction will be processed according to the Unicode Bidirectional Algorithm: + *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect texts base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing + *In these languages characters should be replaced with another form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== + * WIDGETS + *================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BUTTON 1 + +#define LV_USE_BUTTONMATRIX 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 + #define LV_USE_CALENDAR_CHINESE 0 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHART 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ + +#define LV_USE_IMAGE 1 /*Requires: lv_label*/ + +#define LV_USE_IMAGEBUTTON 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ + #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ + #define LV_LABEL_WAIT_CHAR_COUNT 3 /*The count of wait chart*/ +#endif + +#define LV_USE_LED 1 + +#define LV_USE_LINE 1 + +#define LV_USE_LIST 1 + +#define LV_USE_LOTTIE 0 /*Requires: lv_canvas, thorvg */ + +#define LV_USE_MENU 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_ROLLER 1 /*Requires: lv_label*/ + +#define LV_USE_SCALE 1 + +#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /*A line text can contain maximum num of span descriptor */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*================== + * THEMES + *==================*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + + /*0: Light mode; 1: Dark mode*/ + #define LV_THEME_DEFAULT_DARK 0 + + /*1: Enable grow on press*/ + #define LV_THEME_DEFAULT_GROW 1 + + /*Default transition time in [ms]*/ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_SIMPLE 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 1 + +/*================== + * LAYOUTS + *==================*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 1 + +/*==================== + * 3RD PARTS LIBRARIES + *====================*/ + +/*File system interfaces for common APIs */ + +/*Setting a default driver letter allows skipping the driver prefix in filepaths*/ +#define LV_FS_DEFAULT_DRIVE_LETTER '\0' + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for memory-mapped file access. */ +#define LV_USE_FS_MEMFS 0 +#if LV_USE_FS_MEMFS + #define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#endif + +/*API for LittleFs. */ +#define LV_USE_FS_LITTLEFS 0 +#if LV_USE_FS_LITTLEFS + #define LV_FS_LITTLEFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#endif + +/*API for Arduino LittleFs. */ +#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0 +#if LV_USE_FS_ARDUINO_ESP_LITTLEFS + #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#endif + +/*API for Arduino Sd. */ +#define LV_USE_FS_ARDUINO_SD 0 +#if LV_USE_FS_ARDUINO_SD + #define LV_FS_ARDUINO_SD_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#endif + +/*LODEPNG decoder library*/ +#define LV_USE_LODEPNG 0 + +/*PNG decoder(libpng) library*/ +#define LV_USE_LIBPNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_TJPGD 0 + +/* libjpeg-turbo decoder library. + * Supports complete JPEG specifications and high-performance JPEG decoding. */ +#define LV_USE_LIBJPEG_TURBO 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 +#if LV_USE_GIF + /*GIF decoder accelerate*/ + #define LV_GIF_CACHE_DECODE_DATA 0 +#endif + + +/*Decode bin images to RAM*/ +#define LV_BIN_DECODER_RAM_LOAD 0 + +/*RLE decompress library*/ +#define LV_USE_RLE 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*Barcode code library*/ +#define LV_USE_BARCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /*Let FreeType to use LVGL memory and file porting*/ + #define LV_FREETYPE_USE_LVGL_PORT 0 + + /*Cache count of the glyphs in FreeType. It means the number of glyphs that can be cached. + *The higher the value, the more memory will be used.*/ + #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256 +#endif + +/* Built-in TTF decoder */ +#define LV_USE_TINY_TTF 0 +#if LV_USE_TINY_TTF + /* Enable loading TTF data from files */ + #define LV_TINY_TTF_FILE_SUPPORT 0 + #define LV_TINY_TTF_CACHE_GLYPH_CNT 256 +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*Enable Vector Graphic APIs + *Requires `LV_USE_MATRIX = 1`*/ +#define LV_USE_VECTOR_GRAPHIC 0 + +/* Enable ThorVG (vector graphics library) from the src/libs folder */ +#define LV_USE_THORVG_INTERNAL 0 + +/* Enable ThorVG by assuming that its installed and linked to the project */ +#define LV_USE_THORVG_EXTERNAL 0 + +/*Use lvgl built-in LZ4 lib*/ +#define LV_USE_LZ4_INTERNAL 0 + +/*Use external LZ4 library*/ +#define LV_USE_LZ4_EXTERNAL 0 + +/*FFmpeg library for image decoding and playing videos + *Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /*Dump input information to stderr*/ + #define LV_FFMPEG_DUMP_FORMAT 0 +#endif + +/*================== + * OTHERS + *==================*/ + +/*1: Enable API to take snapshot for object*/ +#define LV_USE_SNAPSHOT 0 + +/*1: Enable system monitor component*/ +#define LV_USE_SYSMON 0 +#if LV_USE_SYSMON + /*Get the idle percentage. E.g. uint32_t my_get_idle(void);*/ + #define LV_SYSMON_GET_IDLE lv_timer_get_idle + + /*1: Show CPU usage and FPS count + * Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_PERF_MONITOR 0 + #if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT + + /*0: Displays performance data on the screen, 1: Prints performance data using log.*/ + #define LV_USE_PERF_MONITOR_LOG_MODE 0 + #endif + + /*1: Show the used memory and the memory fragmentation + * Requires `LV_USE_STDLIB_MALLOC = LV_STDLIB_BUILTIN` + * Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_MEM_MONITOR 0 + #if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT + #endif + +#endif /*LV_USE_SYSMON*/ + +/*1: Enable the runtime performance profiler*/ +#define LV_USE_PROFILER 0 +#if LV_USE_PROFILER + /*1: Enable the built-in profiler*/ + #define LV_USE_PROFILER_BUILTIN 1 + #if LV_USE_PROFILER_BUILTIN + /*Default profiler trace buffer size*/ + #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /*[bytes]*/ + #endif + + /*Header to include for the profiler*/ + #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h" + + /*Profiler start point function*/ + #define LV_PROFILER_BEGIN LV_PROFILER_BUILTIN_BEGIN + + /*Profiler end point function*/ + #define LV_PROFILER_END LV_PROFILER_BUILTIN_END + + /*Profiler start point function with custom tag*/ + #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG + + /*Profiler end point function with custom tag*/ + #define LV_PROFILER_END_TAG LV_PROFILER_BUILTIN_END_TAG +#endif + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/*1: Enable an observer pattern implementation*/ +#define LV_USE_OBSERVER 1 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /*1: Use default thesaurus*/ + /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesaurus*/ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /*Set the maximum number of candidate panels that can be displayed*/ + /*This needs to be adjusted according to the size of the screen*/ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /*Use 9 key input(k9)*/ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif /*LV_IME_PINYIN_USE_K9_MODE*/ +#endif + +/*1: Enable file explorer*/ +/*Requires: lv_table*/ +#define LV_USE_FILE_EXPLORER 0 +#if LV_USE_FILE_EXPLORER + /*Maximum length of path*/ + #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) + /*Quick access bar, 1:use, 0:not use*/ + /*Requires: lv_list*/ + #define LV_FILE_EXPLORER_QUICK_ACCESS 1 +#endif + +/*================== + * DEVICES + *==================*/ + +/*Use SDL to open window on PC and handle mouse and keyboard*/ +#define LV_USE_SDL 0 +#if LV_USE_SDL + #define LV_SDL_INCLUDE_PATH + #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /*LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance*/ + #define LV_SDL_BUF_COUNT 1 /*1 or 2*/ + #define LV_SDL_ACCELERATED 1 /*1: Use hardware acceleration*/ + #define LV_SDL_FULLSCREEN 0 /*1: Make the window full screen by default*/ + #define LV_SDL_DIRECT_EXIT 1 /*1: Exit the application when all SDL windows are closed*/ + #define LV_SDL_MOUSEWHEEL_MODE LV_SDL_MOUSEWHEEL_MODE_ENCODER /*LV_SDL_MOUSEWHEEL_MODE_ENCODER/CROWN*/ +#endif + +/*Use X11 to open window on Linux desktop and handle mouse and keyboard*/ +#define LV_USE_X11 0 +#if LV_USE_X11 + #define LV_X11_DIRECT_EXIT 1 /*Exit the application when all X11 windows have been closed*/ + #define LV_X11_DOUBLE_BUFFER 1 /*Use double buffers for rendering*/ + /*select only 1 of the following render modes (LV_X11_RENDER_MODE_PARTIAL preferred!)*/ + #define LV_X11_RENDER_MODE_PARTIAL 1 /*Partial render mode (preferred)*/ + #define LV_X11_RENDER_MODE_DIRECT 0 /*direct render mode*/ + #define LV_X11_RENDER_MODE_FULL 0 /*Full render mode*/ +#endif + +/*Use Wayland to open a window and handle input on Linux or BSD desktops */ +#define LV_USE_WAYLAND 0 +#if LV_USE_WAYLAND + #define LV_WAYLAND_WINDOW_DECORATIONS 0 /*Draw client side window decorations only necessary on Mutter/GNOME*/ + #define LV_WAYLAND_WL_SHELL 0 /*Use the legacy wl_shell protocol instead of the default XDG shell*/ +#endif + +/*Driver for /dev/fb*/ +#define LV_USE_LINUX_FBDEV 0 +#if LV_USE_LINUX_FBDEV + #define LV_LINUX_FBDEV_BSD 0 + #define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL + #define LV_LINUX_FBDEV_BUFFER_COUNT 0 + #define LV_LINUX_FBDEV_BUFFER_SIZE 60 +#endif + +/*Use Nuttx to open window and handle touchscreen*/ +#define LV_USE_NUTTX 0 + +#if LV_USE_NUTTX + #define LV_USE_NUTTX_LIBUV 0 + + /*Use Nuttx custom init API to open window and handle touchscreen*/ + #define LV_USE_NUTTX_CUSTOM_INIT 0 + + /*Driver for /dev/lcd*/ + #define LV_USE_NUTTX_LCD 0 + #if LV_USE_NUTTX_LCD + #define LV_NUTTX_LCD_BUFFER_COUNT 0 + #define LV_NUTTX_LCD_BUFFER_SIZE 60 + #endif + + /*Driver for /dev/input*/ + #define LV_USE_NUTTX_TOUCHSCREEN 0 + +#endif + +/*Driver for /dev/dri/card*/ +#define LV_USE_LINUX_DRM 0 + +/*Interface for TFT_eSPI*/ +#define LV_USE_TFT_ESPI 1 + +/*Driver for evdev input devices*/ +#define LV_USE_EVDEV 0 + +/*Driver for libinput input devices*/ +#define LV_USE_LIBINPUT 0 + +#if LV_USE_LIBINPUT + #define LV_LIBINPUT_BSD 0 + + /*Full keyboard support*/ + #define LV_LIBINPUT_XKB 0 + #if LV_LIBINPUT_XKB + /*"setxkbmap -query" can help find the right values for your keyboard*/ + #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL } + #endif +#endif + +/*Drivers for LCD devices connected via SPI/parallel port*/ +#define LV_USE_ST7735 0 +#define LV_USE_ST7789 0 +#define LV_USE_ST7796 0 +#define LV_USE_ILI9341 0 + +#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341) + +/*Driver for Renesas GLCD*/ +#define LV_USE_RENESAS_GLCDC 0 + +/* LVGL Windows backend */ +#define LV_USE_WINDOWS 0 + +/* Use OpenGL to open window on PC and handle mouse and keyboard */ +#define LV_USE_OPENGLES 0 +#if LV_USE_OPENGLES + #define LV_USE_OPENGLES_DEBUG 1 /* Enable or disable debug for opengles */ +#endif + +/* QNX Screen display and input drivers */ +#define LV_USE_QNX 0 +#if LV_USE_QNX + #define LV_QNX_BUF_COUNT 1 /*1 or 2*/ +#endif + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 1 + +/*=================== + * DEMO USAGE + ====================*/ + +/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ +#define LV_USE_DEMO_WIDGETS 0 + +/*Demonstrate the usage of encoder and keyboard*/ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/*Benchmark your system*/ +#define LV_USE_DEMO_BENCHMARK 0 + +/*Render test for each primitives. Requires at least 480x272 display*/ +#define LV_USE_DEMO_RENDER 0 + +/*Stress test for LVGL*/ +#define LV_USE_DEMO_STRESS 0 + +/*Music player demo*/ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/*Flex layout demo*/ +#define LV_USE_DEMO_FLEX_LAYOUT 0 + +/*Smart-phone like multi-language demo*/ +#define LV_USE_DEMO_MULTILANG 0 + +/*Widget transformation demo*/ +#define LV_USE_DEMO_TRANSFORM 0 + +/*Demonstrate scroll settings*/ +#define LV_USE_DEMO_SCROLL 0 + +/*Vector graphic demo*/ +#define LV_USE_DEMO_VECTOR_GRAPHIC 0 + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/platformio.ini b/platformio.ini index 37b8853..b47e359 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,8 +16,11 @@ monitor_speed = 115200 lib_deps = ruiseixasm/Versatile_RotaryEncoder@^1.3.1 bodmer/TFT_eSPI@^2.5.43 + lvgl/lvgl@^9.2.2 build_flags = -Os - -D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG - -D USER_SETUP_LOADED=1 + -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG + -DUSER_SETUP_LOADED=1 + -DLV_CONF_INCLUDE_SIMPLE -include $PROJECT_INCLUDE_DIR/TFT_eSPI_Setup_ILI9341_ESP32.h + -include $PROJECT_INCLUDE_DIR/lv_conf.h diff --git a/src/main.cpp b/src/main.cpp index 426eacb..fa9930c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -7,6 +8,9 @@ #define SCREEN_HEIGHT 240 #define FONT_SIZE 2 +#define DRAW_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT / 10 * (LV_COLOR_DEPTH / 8)) +uint32_t draw_buf[DRAW_BUF_SIZE / 4]; + const int ONBOARD_LED_PIN = 2; const int ANALOG_INPUT_PIN = 34; const int ANALOG_OUTPUT_PIN = 25; @@ -17,16 +21,24 @@ const int ENCODER_B_PIN = 13; void handleToneGeneration(void *pvParameters); void handleInputControls(void *pvParameters); +void handle_lvgl_logs(lv_log_level_t level, const char *buf); +void handle_pad_inputs(void *pvParameters); +void handle_update_display(void *pvParameters); +void handle_update_values(lv_timer_t *timer); bool toneOn = false; int frequency = 220; // A4 +String label_text; + Versatile_RotaryEncoder *encoder; void handlePress(); void handleRelease(); void handleRotate(int8_t rotation); -TFT_eSPI tft = TFT_eSPI(); +uint32_t get_time(); +lv_obj_t *label; +lv_timer_t *update_values_timer; void setup() { @@ -46,35 +58,59 @@ void setup() xTaskCreate(handleToneGeneration, "handleToneGeneration", 2048, NULL, 1, NULL); xTaskCreate(handleInputControls, "handleInputContols", 2048, NULL, 1, NULL); + xTaskCreate(handle_pad_inputs, "handle_pad_inputs", 2048, NULL, 1, NULL); - tft.init(); - tft.setRotation(1); - delay(100); - tft.fillScreen(TFT_BLACK); - tft.setTextColor(TFT_WHITE, TFT_BLACK); + lv_init(); + lv_log_register_print_cb(handle_lvgl_logs); + lv_tick_set_cb(get_time); + update_values_timer = lv_timer_create(handle_update_values, 5, NULL); + lv_timer_ready(update_values_timer); - int centerX = SCREEN_WIDTH / 2; - int centerY = SCREEN_HEIGHT / 2; - tft.drawCentreString("Setup complete.", centerX, centerY, FONT_SIZE); + lv_display_t *display; + display = lv_tft_espi_create(SCREEN_HEIGHT, SCREEN_WIDTH, draw_buf, sizeof(draw_buf)); + lv_display_set_rotation(display, LV_DISPLAY_ROTATION_90); + + label = lv_label_create(lv_screen_active()); + lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); Serial.println("setup complete"); + label_text = "Boot complete."; +} + +void handle_lvgl_logs(lv_log_level_t level, const char *buf) +{ + Serial.printf("LVGL: %s\r\n", buf); +} + +uint32_t get_time() +{ + return esp_timer_get_time() / 1000; } void loop() { - int max = 0; - for (int i = 0; i < 100; i++) + lv_timer_handler(); + delay(5); +} + +void handle_pad_inputs(void *pvParameters) +{ + while (true) { - int value = analogRead(ANALOG_INPUT_PIN); - if (!toneOn && value > 0) + int max = 0; + for (int i = 0; i < 100; i++) { - toneOn = true; + int value = analogRead(ANALOG_INPUT_PIN); + if (!toneOn && value > 0) + { + toneOn = true; + } + if (value > max) + { + max = value; + } + delay(1); } - if (value > max) - { - max = value; - } - delay(1); } } @@ -85,7 +121,7 @@ void handleToneGeneration(void *pvParameters) { if (toneOn) { - tone(ANALOG_OUTPUT_PIN, frequency, toneDuration); + // tone(ANALOG_OUTPUT_PIN, frequency, toneDuration); delay(toneDuration); toneOn = false; } @@ -106,12 +142,7 @@ void handlePress() { Serial.println("Encoder pressed"); digitalWrite(ONBOARD_LED_PIN, HIGH); - - int centerX = SCREEN_WIDTH / 2; - int centerY = SCREEN_HEIGHT / 2; - - tft.fillScreen(TFT_BLACK); - tft.drawCentreString("Button pressed.", centerX, centerY, FONT_SIZE); + label_text = "Button pressed."; } void handleRelease() @@ -135,9 +166,25 @@ void handleRotate(int8_t rotation) Serial.print("Frequency: "); Serial.println(frequency); - int centerX = SCREEN_WIDTH / 2; - int centerY = SCREEN_HEIGHT / 2; + label_text = "Frequency: " + String(frequency) + "Hz"; +} - tft.fillScreen(TFT_BLACK); - tft.drawCentreString("Frequency: " + String(frequency) + "Hz", centerX, centerY, FONT_SIZE); +void handle_update_display(void *pvParameters) +{ + while (true) + { + if (lv_label_get_text(label) != label_text.c_str()) + { + lv_label_set_text(label, label_text.c_str()); + } + delay(100); + } +} + +void handle_update_values(lv_timer_t *timer) +{ + if (label != NULL && lv_label_get_text(label) != label_text.c_str()) + { + lv_label_set_text(label, label_text.c_str()); + } } \ No newline at end of file