Compare commits
290 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e396fad8c | ||
|
|
57a428abd8 | ||
|
|
176b500005 | ||
|
|
8ae5ee254a | ||
|
|
ca2f5070f4 | ||
|
|
5b39934276 | ||
|
|
3198e1e78d | ||
|
|
90dcc889b2 | ||
|
|
b4f256a40e | ||
|
|
416428faa7 | ||
|
|
7630e994bc | ||
|
|
abb51a43ee | ||
|
|
cecaa6a5a8 | ||
|
|
ed1ff5bda6 | ||
|
|
850426b793 | ||
|
|
eecebd2156 | ||
|
|
3605c32695 | ||
|
|
50fbe6a0a4 | ||
|
|
cb8ac4df4f | ||
|
|
346395d039 | ||
|
|
56c44bfdc4 | ||
|
|
626d6b51ad | ||
|
|
6d999331d7 | ||
|
|
aa567970c5 | ||
|
|
1623acab3d | ||
|
|
8d04466c68 | ||
|
|
aff9ad3b4a | ||
|
|
eeb1fef18e | ||
|
|
71e6edcdf7 | ||
|
|
660e1afda0 | ||
|
|
39bc1f78d0 | ||
|
|
c4f4202fa4 | ||
|
|
4fb0615880 | ||
|
|
63b53829b6 | ||
|
|
340482db9e | ||
|
|
b662802112 | ||
|
|
1b21cfe256 | ||
|
|
1bcc6e180d | ||
|
|
5c068fb015 | ||
|
|
0bef0125ea | ||
|
|
b201713604 | ||
|
|
d689dd6951 | ||
|
|
28277c8448 | ||
|
|
2fcb7199c3 | ||
|
|
8c313b230d | ||
|
|
2f3b307d5f | ||
|
|
97e0c9c0c2 | ||
|
|
8d84f6a699 | ||
|
|
560364adaa | ||
|
|
00df4ca7a4 | ||
|
|
964ef5c551 | ||
|
|
ec15a45a93 | ||
|
|
5764574c9c | ||
|
|
228498f4c3 | ||
|
|
fc3e2dd1ae | ||
|
|
ab07080f01 | ||
|
|
8f6713c185 | ||
|
|
fb3903c55e | ||
|
|
d4b5bf8af0 | ||
|
|
db1daf55d8 | ||
|
|
27b113e270 | ||
|
|
728546adb7 | ||
|
|
fc5c156385 | ||
|
|
2bf2ab46ce | ||
|
|
5856e46079 | ||
|
|
93cef1274a | ||
|
|
889f42be3f | ||
|
|
673e8b0d2e | ||
|
|
34e2ef67f0 | ||
|
|
884589e12b | ||
|
|
28f902d702 | ||
|
|
377cc5aa80 | ||
|
|
10fbcef470 | ||
|
|
64e0388d32 | ||
|
|
cc51da5af3 | ||
|
|
77f8f62d18 | ||
|
|
d22bf032b1 | ||
|
|
1d0bb3e8c6 | ||
|
|
97aa6b8629 | ||
|
|
80ee18b612 | ||
|
|
f0c819c1b1 | ||
|
|
589e8ac994 | ||
|
|
9760d57540 | ||
|
|
1d49c7afbe | ||
|
|
cef1649ea7 | ||
|
|
09d0d10e28 | ||
|
|
052d908ab7 | ||
|
|
ad8a9d9587 | ||
|
|
299e31b9ed | ||
|
|
fc4f8fa694 | ||
|
|
e90cfb7117 | ||
|
|
dc2346830b | ||
|
|
55911732f1 | ||
|
|
0c5e09a144 | ||
|
|
bafc22e016 | ||
|
|
155ee2a045 | ||
|
|
49d6d7295a | ||
|
|
da2438712b | ||
|
|
43b32341b0 | ||
|
|
bae25ad288 | ||
|
|
82034cbaee | ||
|
|
9b3c365ae5 | ||
|
|
02c3d7c865 | ||
|
|
e0dfe80044 | ||
|
|
c28c7e869a | ||
|
|
a0e37a35f8 | ||
|
|
efcdff7248 | ||
|
|
0ae888b660 | ||
|
|
5810653958 | ||
|
|
cbdc344464 | ||
|
|
09634a0b22 | ||
|
|
de32a116bc | ||
|
|
815b24ffb2 | ||
|
|
b15107eec5 | ||
|
|
b9e0c4daaf | ||
|
|
b504294613 | ||
|
|
79757b1902 | ||
|
|
e016e45bd4 | ||
|
|
bb632c970b | ||
|
|
a5f51bff72 | ||
|
|
56320599cf | ||
|
|
c38335a1eb | ||
|
|
236c7ad625 | ||
|
|
f9a9d5b41b | ||
|
|
970ca51361 | ||
|
|
1c9c9f6601 | ||
|
|
a535063308 | ||
|
|
b78a9b447a | ||
|
|
ecfe33480b | ||
|
|
39c4011864 | ||
|
|
5f2888d93a | ||
|
|
9cc9e7b503 | ||
|
|
590184c59b | ||
|
|
61b9d1a807 | ||
|
|
c5f888235d | ||
|
|
b7d2eb159a | ||
|
|
5fde4418fb | ||
|
|
ed1b7d6349 | ||
|
|
5d2709db32 | ||
|
|
6133695bfe | ||
|
|
c4e426ab6b | ||
|
|
2579d2bfe7 | ||
|
|
84db90f418 | ||
|
|
5f41926f04 | ||
|
|
284e7a41df | ||
|
|
9e5039c6c4 | ||
|
|
b89958a1c7 | ||
|
|
2e75bbdbe4 | ||
|
|
b67bfeeae0 | ||
|
|
655f744c5d | ||
|
|
33de4075a1 | ||
|
|
29e3da28ea | ||
|
|
4d8b72260d | ||
|
|
660b41df9c | ||
|
|
d1302001ba | ||
|
|
fa305054f4 | ||
|
|
0f67eb67cf | ||
|
|
c3c731d241 | ||
|
|
1ed1ddd881 | ||
|
|
3c995e389b | ||
|
|
2c3b2d2c17 | ||
|
|
4e61b66d77 | ||
|
|
7d088e2399 | ||
|
|
b6adc8fe70 | ||
|
|
5c11078447 | ||
|
|
4744bbe194 | ||
|
|
b9dd8b1172 | ||
|
|
0cd1f0ca39 | ||
|
|
e9505a84da | ||
|
|
2b97e0c022 | ||
|
|
05a0395a1c | ||
|
|
d066084e29 | ||
|
|
52c48cbe3f | ||
|
|
1dd2d29ff4 | ||
|
|
c8c87d46fc | ||
|
|
1fff1c9932 | ||
|
|
a10d4b8c47 | ||
|
|
66a992ef3c | ||
|
|
ca869b7ef3 | ||
|
|
7ab421ed30 | ||
|
|
2cdcf8d729 | ||
|
|
7f0dfc6e3f | ||
|
|
ddcafed9f7 | ||
|
|
62291fa174 | ||
|
|
9ddde9e4bc | ||
|
|
acb72e8491 | ||
|
|
e028ee985c | ||
|
|
124b2e268d | ||
|
|
5f5c74c088 | ||
|
|
b1728f85b3 | ||
|
|
9f4df225c8 | ||
|
|
6c7c336e7d | ||
|
|
bb896adc1a | ||
|
|
7dae232b7f | ||
|
|
89c4c50c19 | ||
|
|
177b0bd044 | ||
|
|
3f13398673 | ||
|
|
62a2804d97 | ||
|
|
d9677acd93 | ||
|
|
29ce750989 | ||
|
|
03d0dad414 | ||
|
|
99e2734093 | ||
|
|
ad66f13f96 | ||
|
|
5563787cac | ||
|
|
4e52b15508 | ||
|
|
51a3d93852 | ||
|
|
20bfb4855b | ||
|
|
f47879b67e | ||
|
|
137a2a647c | ||
|
|
39d0d1037a | ||
|
|
692830d27c | ||
|
|
d47865afa1 | ||
|
|
7b3320baf4 | ||
|
|
ce1baa6aa2 | ||
|
|
53b4c6a2c2 | ||
|
|
bccf82efa1 | ||
|
|
6a1ecfcf34 | ||
|
|
31bd7b61ba | ||
|
|
a97ab9763e | ||
|
|
935b4016a3 | ||
|
|
51aaf7bcde | ||
|
|
1f9f5f475f | ||
|
|
2c4f722f4b | ||
|
|
25232d92e7 | ||
|
|
f27c65bf4a | ||
|
|
2b4d7b0e1c | ||
|
|
ee05029cb0 | ||
|
|
c9872e5283 | ||
|
|
f393629c2a | ||
|
|
e4aac4c67a | ||
|
|
29df86bef3 | ||
|
|
738bda27f6 | ||
|
|
6b8a288437 | ||
|
|
4ecca36cef | ||
|
|
3da5eec875 | ||
|
|
4c5fbefeb7 | ||
|
|
664d41748d | ||
|
|
9af3fc058e | ||
|
|
741d3d59fc | ||
|
|
a356915267 | ||
|
|
f378299370 | ||
|
|
bd39f984b8 | ||
|
|
517b307ae3 | ||
|
|
0223869773 | ||
|
|
cdaaeb81dc | ||
|
|
36a6d173fc | ||
|
|
f5b00f5ad8 | ||
|
|
4eacf15f59 | ||
|
|
133b6fc3f8 | ||
|
|
2d8ff35bfb | ||
|
|
17b76773a3 | ||
|
|
27ebfc20ad | ||
|
|
3146313e44 | ||
|
|
251c1b02f3 | ||
|
|
0756895382 | ||
|
|
a903fc3d75 | ||
|
|
019bfa4415 | ||
|
|
83ebd439fa | ||
|
|
abb60a4ec6 | ||
|
|
d607ce5f6a | ||
|
|
2d62571c66 | ||
|
|
fcbcdf823d | ||
|
|
bdb4d944de | ||
|
|
bb54fc50c2 | ||
|
|
64e01e5248 | ||
|
|
e1f2b2e451 | ||
|
|
cd9c7e5b6b | ||
|
|
6decbb7f77 | ||
|
|
33fc3175a0 | ||
|
|
a7adce9d1a | ||
|
|
c022f0896a | ||
|
|
915f9b88dc | ||
|
|
f284920b93 | ||
|
|
fdeb63fa2e | ||
|
|
85402e806f | ||
|
|
d79fc5896c | ||
|
|
e53ada9605 | ||
|
|
2209e3a270 | ||
|
|
99a785cdc6 | ||
|
|
c1b32017d4 | ||
|
|
c9d35e1038 | ||
|
|
7ecf7c2e52 | ||
|
|
39c3e23e06 | ||
|
|
4f2fd4b549 | ||
|
|
65a52f2f2d | ||
|
|
58990cdb5b | ||
|
|
945064f6ea | ||
|
|
fc5939dcff | ||
|
|
db11e7bae5 | ||
|
|
f23b42be7f |
4
.github/pull_request_template.md
vendored
@@ -1,4 +1,6 @@
|
||||
A clear and concise description of what the bug or new feature is.
|
||||
Fixes #xxxx <!-- E.g. Fixes #1234 to reference the fixed issue. Can be removed if there is no related issue -->
|
||||
|
||||
<!-- A clear and concise description of what the bug or new feature is.-->
|
||||
|
||||
### Notes
|
||||
- Update the [Documentation](https://github.com/lvgl/lvgl/tree/master/docs) if needed.
|
||||
|
||||
9
.github/workflows/arduino.yml
vendored
@@ -4,10 +4,17 @@ on:
|
||||
branches: [ master, release/v8.* ]
|
||||
pull_request:
|
||||
branches: [ master, release/v8.* ]
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: arduino/arduino-lint-action@v2
|
||||
|
||||
72
.github/workflows/build_micropython.yml
vendored
@@ -4,17 +4,26 @@ on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
name: Build ${{ matrix.port }} port
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
continue-on-error: true
|
||||
strategy:
|
||||
matrix:
|
||||
port: ['unix', 'esp32', 'stm32', 'rp2']
|
||||
port: ['unix', 'stm32', 'rp2']
|
||||
steps:
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu `lsb_release -sc` main universe restricted multiverse"
|
||||
@@ -28,7 +37,7 @@ jobs:
|
||||
- name: Initialize lv_bindings submodule
|
||||
run: git submodule update --init --recursive lib/lv_bindings
|
||||
- name: Update ${{ matrix.port }} port submodules
|
||||
if: matrix.port != 'esp32' && matrix.port != 'rp2'
|
||||
if: matrix.port != 'rp2'
|
||||
run: make -C ports/${{ matrix.port }} DEBUG=1 USER_C_MODULES=../../lib/lv_bindings/bindings.cmake submodules
|
||||
- name: Checkout LVGL submodule
|
||||
working-directory: ./lib/lv_bindings/lvgl
|
||||
@@ -40,20 +49,10 @@ jobs:
|
||||
- name: Build mpy-cross
|
||||
run: make -j $(nproc) -C mpy-cross
|
||||
|
||||
# ESP32 port
|
||||
- name: Setup ESP-IDF
|
||||
if: matrix.port == 'esp32'
|
||||
run: |
|
||||
source tools/ci.sh && ci_esp32_idf44_setup
|
||||
- name: Build ESP32 port
|
||||
if: matrix.port == 'esp32'
|
||||
run: |
|
||||
source tools/ci.sh && ci_esp32_build
|
||||
|
||||
# STM32 & RPi Pico port
|
||||
- name: arm-none-eabi-gcc
|
||||
if: matrix.port == 'stm32' || matrix.port == 'rp2'
|
||||
uses: carlosperate/arm-none-eabi-gcc-action@v1.9.1
|
||||
uses: carlosperate/arm-none-eabi-gcc-action@v1.10.0
|
||||
with:
|
||||
release: '9-2019-q4' # The arm-none-eabi-gcc release to use.
|
||||
- name: Build STM32 port
|
||||
@@ -83,3 +82,48 @@ jobs:
|
||||
with:
|
||||
name: test-artifacts
|
||||
path: lib/lv_bindings/lvgl/tests/micropy_test/artifacts
|
||||
|
||||
build-esp32:
|
||||
runs-on: ubuntu-22.04
|
||||
name: Build esp32 port
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu `lsb_release -sc` main universe restricted multiverse"
|
||||
sudo apt-get update -y -qq
|
||||
sudo apt-get install libsdl2-dev parallel libfreetype-dev librlottie-dev libavformat-dev libavcodec-dev libswscale-dev libavutil-dev doxygen
|
||||
python3 -m pip install pycparser
|
||||
- name: Clone lv_micropython
|
||||
run: |
|
||||
git clone https://github.com/lvgl/lv_micropython.git .
|
||||
git checkout master
|
||||
- name: Initialize lv_bindings submodule
|
||||
run: git submodule update --init --recursive lib/lv_bindings
|
||||
- name: Update ${{ matrix.port }} port submodules
|
||||
run: make -C ports/esp32 DEBUG=1 USER_C_MODULES=../../lib/lv_bindings/bindings.cmake submodules
|
||||
- name: Checkout LVGL submodule
|
||||
working-directory: ./lib/lv_bindings/lvgl
|
||||
run: |
|
||||
git fetch --force ${{ github.event.repository.html_url }} "+refs/heads/*:refs/remotes/origin/*"
|
||||
git fetch --force ${{ github.event.repository.html_url }} "+refs/pull/*:refs/remotes/origin/pr/*"
|
||||
git checkout ${{ github.sha }} || git checkout ${{ github.event.pull_request.head.sha }}
|
||||
git submodule update --init --recursive
|
||||
- name: Build mpy-cross
|
||||
run: make -j $(nproc) -C mpy-cross
|
||||
- name: Setup ESP-IDF
|
||||
run: |
|
||||
source tools/ci.sh && ci_esp32_idf44_setup
|
||||
- name: Build ESP32 port
|
||||
run: |
|
||||
source tools/ci.sh && ci_esp32_build
|
||||
- name: Install requirements for the test
|
||||
run: |
|
||||
python3 -m pip install pillow
|
||||
mkdir lib/lv_bindings/lvgl/tests/micropy_test/artifacts
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-artifacts
|
||||
path: lib/lv_bindings/lvgl/tests/micropy_test/artifacts
|
||||
|
||||
98
.github/workflows/ccpp.yml
vendored
@@ -6,64 +6,88 @@ on:
|
||||
pull_request:
|
||||
branches: [ master, release/v8.* ]
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-ubuntu:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# A valid option parameter to the cmake file.
|
||||
# See BUILD_OPTIONS in tests/CMakeLists.txt.
|
||||
build_option: ['OPTIONS_NORMAL_8BIT',
|
||||
'OPTIONS_16BIT',
|
||||
'OPTIONS_24BIT',
|
||||
'OPTIONS_FULL_32BIT',
|
||||
'OPTIONS_VG_LITE',
|
||||
'OPTIONS_SDL']
|
||||
name: Build ${{ matrix.build_option }} - Ubuntu
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install prerequisites
|
||||
run: scripts/install-prerequisites.sh
|
||||
- name: Install pngquant
|
||||
run: scripts/install_pngquant.sh
|
||||
- name: Building ${{ matrix.build_option }}
|
||||
run: python tests/main.py --build-option=${{ matrix.build_option }} build --auto-clean
|
||||
|
||||
build-windows:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# A valid option parameter to the cmake file.
|
||||
# See BUILD_OPTIONS in tests/CMakeLists.txt.
|
||||
build_option: ['OPTIONS_16BIT',
|
||||
'OPTIONS_24BIT',
|
||||
'OPTIONS_FULL_32BIT',
|
||||
'OPTIONS_VG_LITE',
|
||||
'OPTIONS_SDL']
|
||||
name: Build ${{ matrix.build_option }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Install prerequisites
|
||||
run: scripts/install-prerequisites.sh
|
||||
- name: Building ${{ matrix.build_option }}
|
||||
run: python tests/main.py --build-option=${{ matrix.build_option }} build
|
||||
'OPTIONS_VG_LITE']
|
||||
compiler: [gcc, cl]
|
||||
|
||||
build-windows-GCC:
|
||||
name: Build ${{ matrix.build_option }} - ${{matrix.compiler }} - Windows
|
||||
runs-on: windows-2022
|
||||
name: Build Windows GCC
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Install prerequisites
|
||||
run: scripts\install-prerequisites.bat
|
||||
- name: Build
|
||||
run: python tests/main.py build
|
||||
env:
|
||||
CC: gcc
|
||||
|
||||
build-windows-MSVC:
|
||||
runs-on: windows-2022
|
||||
name: Build Windows MSVC
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install prerequisites
|
||||
run: scripts\install-prerequisites.bat
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
|
||||
- if: matrix.compiler == 'gcc'
|
||||
uses: ammaraskar/gcc-problem-matcher@master
|
||||
|
||||
- if: matrix.compiler == 'cl'
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: x64
|
||||
- uses: ruby/setup-ruby@v1
|
||||
|
||||
- if: matrix.compiler == 'cl'
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: 'mswin'
|
||||
|
||||
- name: Build
|
||||
run: python tests/main.py build
|
||||
run: python tests/main.py --build-option=${{ matrix.build_option }} build
|
||||
env:
|
||||
CC: cl
|
||||
CC: ${{ matrix.compiler }}
|
||||
|
||||
build-esp32s3:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: Build ESP IDF ESP32S3
|
||||
container: espressif/idf:v5.3.1
|
||||
steps:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Clone LVGL as a Component
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -76,7 +100,7 @@ jobs:
|
||||
run: . /opt/esp/idf/export.sh && idf.py build
|
||||
|
||||
test-native:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
matrix:
|
||||
# A valid option parameter to the cmake file.
|
||||
@@ -87,8 +111,14 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install prerequisites
|
||||
run: scripts/install-prerequisites.sh
|
||||
- name: Install pngquant
|
||||
run: scripts/install_pngquant.sh
|
||||
- name: Fix kernel mmap rnd bits
|
||||
# Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
|
||||
# high-entropy ASLR in much newer kernels that GitHub runners are
|
||||
@@ -98,7 +128,7 @@ jobs:
|
||||
if: matrix.build_config == '32bit build'
|
||||
run: echo "NON_AMD64_BUILD=1" >> $GITHUB_ENV
|
||||
- name: Run tests
|
||||
run: python tests/main.py --report --update-image test
|
||||
run: python tests/main.py --report --update-image test --auto-clean
|
||||
- name: Archive screenshot errors
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
|
||||
8
.github/workflows/check_bom.yml
vendored
@@ -4,10 +4,16 @@ on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
bom-check:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
10
.github/workflows/check_conf.yml
vendored
@@ -3,10 +3,16 @@ on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
verify-conf-internal:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -16,7 +22,7 @@ jobs:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.7
|
||||
python-version: 3.12
|
||||
- name: Generate lv_conf_internal.h
|
||||
run: python lv_conf_internal_gen.py
|
||||
working-directory: scripts
|
||||
|
||||
8
.github/workflows/check_properties.yml
vendored
@@ -2,11 +2,17 @@ name: Verify the widget property name
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
verify-property-name:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
8
.github/workflows/check_style.yml
vendored
@@ -2,11 +2,17 @@ name: Verify code formatting
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
verify-formatting:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
2
.github/workflows/close_old_issues.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
jobs:
|
||||
stale:
|
||||
if: github.repository == 'lvgl/lvgl'
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
|
||||
23
.github/workflows/compile_docs.yml
vendored
@@ -4,13 +4,20 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- 'release/*'
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
EM_VERSION: 2.0.4
|
||||
EM_CACHE_FOLDER: 'emsdk-cache'
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
if: github.repository == 'lvgl/lvgl'
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
concurrency: docs-build-and-deploy
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -21,7 +28,7 @@ jobs:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
python-version: '3.12'
|
||||
- name: Cache Python packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
@@ -57,32 +64,32 @@ jobs:
|
||||
- name: Build examples (with cache)
|
||||
run: scripts/build_html_examples.sh
|
||||
- name: Build docs
|
||||
run: docs/build.py skip_latex
|
||||
run: docs/build.py html
|
||||
- name: Remove .doctrees
|
||||
run: rm -rf out_html/.doctrees
|
||||
run: rm -rf docs/build/html/.doctrees
|
||||
- name: Retrieve version
|
||||
run: |
|
||||
echo "::set-output name=VERSION_NAME::$(scripts/find_version.sh)"
|
||||
id: version
|
||||
- name: Deploy to subfolder
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.1
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.3
|
||||
with:
|
||||
token: ${{ secrets.LVGL_BOT_TOKEN }}
|
||||
repository-name: lvgl/docs
|
||||
branch: gh-pages # The branch the action should deploy to.
|
||||
folder: out_html # The folder the action should deploy.
|
||||
folder: docs/build/html # The folder the action should deploy.
|
||||
target-folder: ${{ steps.version.outputs.VERSION_NAME }}
|
||||
git-config-name: lvgl-bot
|
||||
git-config-email: lvgl-bot@users.noreply.github.com
|
||||
single-commit: true
|
||||
- name: Deploy to master
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.1
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.3
|
||||
with:
|
||||
token: ${{ secrets.LVGL_BOT_TOKEN }}
|
||||
repository-name: lvgl/docs
|
||||
branch: gh-pages # The branch the action should deploy to.
|
||||
folder: out_html # The folder the action should deploy.
|
||||
folder: docs/build/html # The folder the action should deploy.
|
||||
target-folder: master
|
||||
git-config-name: lvgl-bot
|
||||
git-config-email: lvgl-bot@users.noreply.github.com
|
||||
|
||||
4
.github/workflows/esp_upload_component.yml
vendored
@@ -8,14 +8,14 @@ on:
|
||||
|
||||
jobs:
|
||||
upload_components:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
|
||||
- name: Upload component to component registry
|
||||
uses: espressif/upload-components-ci-action@v1
|
||||
uses: espressif/upload-components-ci-action@v2
|
||||
with:
|
||||
name: "lvgl"
|
||||
version: ${{ github.ref_name }}
|
||||
|
||||
10
.github/workflows/gen_json.yml
vendored
@@ -3,10 +3,16 @@ on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each PR
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test_api_json:
|
||||
if: github.repository == 'lvgl/lvgl'
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: Test API JSON
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
@@ -14,7 +20,7 @@ jobs:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install Doxygen and Latex dependencies
|
||||
run: |
|
||||
|
||||
2
.github/workflows/main.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
|
||||
jobs:
|
||||
auto_close_issues:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
12
.github/workflows/makefile.yml
vendored
@@ -6,14 +6,24 @@ on:
|
||||
pull_request:
|
||||
branches: [ master, release/v8.* ]
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each push
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: Build using Makefile
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install prerequisites
|
||||
run: scripts/install-prerequisites.sh
|
||||
- name: Build
|
||||
|
||||
12
.github/workflows/makefile_uefi.yml
vendored
@@ -6,14 +6,24 @@ on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each push
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
name: Build using Makefile for UEFI
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ammaraskar/gcc-problem-matcher@master
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- name: Install prerequisites
|
||||
run: scripts/install-prerequisites.sh
|
||||
- name: Install clang
|
||||
|
||||
4
.github/workflows/platformio_publish.yaml
vendored
@@ -6,14 +6,14 @@ on:
|
||||
name: PlatformIO Publish
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.9'
|
||||
python-version: '3.12'
|
||||
- name: Install PlatformIO Core
|
||||
run: pip install --upgrade platformio
|
||||
- name: Switch to the development version
|
||||
|
||||
2
.github/workflows/release.yml
vendored
@@ -9,7 +9,7 @@ name: Create Release
|
||||
jobs:
|
||||
build:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
34
.github/workflows/release_branch_updater.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Port repo release update
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- 'release/v*' # on release branches
|
||||
workflow_dispatch: # allow manual triggering
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each push
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-release-branch-updater:
|
||||
if: github.repository == 'lvgl/lvgl'
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- name: Checkout LVGL
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: lvgl
|
||||
fetch-depth: 0 # fetch all
|
||||
|
||||
- name: set git credentials
|
||||
run: |
|
||||
git config --global user.name 'lvgl-bot'
|
||||
git config --global user.email 'lvgl-bot@users.noreply.github.com'
|
||||
|
||||
- name: run the script
|
||||
run: python3 lvgl/scripts/release_branch_updater.py --oldest-major 9
|
||||
10
.github/workflows/verify_kconfig.yml
vendored
@@ -3,10 +3,16 @@ on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
|
||||
# Ensure that only one commit will be running tests at a time on each push
|
||||
concurrency:
|
||||
group: ${{ github.ref }}-${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
verify-kconfig:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -16,7 +22,7 @@ jobs:
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.7
|
||||
python-version: 3.12
|
||||
- name: Check for leading spaces in Kconfig
|
||||
working-directory: .
|
||||
run: |
|
||||
|
||||
11
.gitignore
vendored
@@ -5,19 +5,8 @@
|
||||
**/*.gcda
|
||||
**/*.gcno
|
||||
tags
|
||||
docs/api_doc
|
||||
scripts/cppcheck_res.txt
|
||||
scripts/built_in_font/lv_font_*
|
||||
docs/doxygen_html
|
||||
docs/xml
|
||||
docs/examples.md
|
||||
docs/out_latex
|
||||
docs/_static/built_lv_examples
|
||||
docs/LVGL.pdf
|
||||
docs/env
|
||||
/docs/examples.rst
|
||||
/docs/API/
|
||||
out_html
|
||||
__pycache__
|
||||
/emscripten_builder
|
||||
test_screenshot_error.h
|
||||
|
||||
@@ -26,6 +26,7 @@ repos:
|
||||
)
|
||||
exclude: |
|
||||
(?x)^(
|
||||
demos/high_res/fonts/ |
|
||||
src/libs/ |
|
||||
src/lv_conf_internal.h |
|
||||
tests/test_images
|
||||
|
||||
54
COPYRIGHTS.md
Normal file
@@ -0,0 +1,54 @@
|
||||
LVGL uses the following third-party libraries.
|
||||
For the licenses, see the corresponding `LICENSE.txt` file in each library’s folder.
|
||||
|
||||
**Barcode (Barcode generator)**
|
||||
- Path: src/libs/barcode
|
||||
- Source: https://github.com/fhunleth/code128
|
||||
|
||||
**Expat (XML parser)**
|
||||
- Path: src/libs/expat
|
||||
- Source: https://github.com/libexpat/libexpat
|
||||
|
||||
**FreeType (Font rendering library)**
|
||||
- Path: src/libs/freetype
|
||||
- Source: https://github.com/freetype/freetype
|
||||
- Note: Only the interfaces are used; FreeType itself is not part of LVGL.
|
||||
|
||||
**GifDec (GIF decoder library)**
|
||||
- Path: src/libs/gifdec
|
||||
- Source: https://github.com/lecram/gifdec
|
||||
|
||||
**LodePNG (PNG decoder)**
|
||||
- Path: src/libs/lodepng
|
||||
- Source: https://github.com/lvandeve/lodepng
|
||||
|
||||
**LZ4 (Compression/Decompression)**
|
||||
- Path: src/libs/lz4
|
||||
- Source: https://github.com/lz4/lz4
|
||||
|
||||
**QR Code (QR code generator)**
|
||||
- Path: src/libs/qrcode
|
||||
- Source: https://github.com/nayuki/QR-Code-generator
|
||||
|
||||
**ThorVG (Vector graphics rendering)**
|
||||
- Path: src/libs/thorvg
|
||||
- Source: https://github.com/thorvg/thorvg
|
||||
|
||||
**TinyTTF**
|
||||
- Path: src/libs/tiny_ttf
|
||||
- Source:
|
||||
- https://github.com/nothings/stb (*Only parts are integrated*)
|
||||
- https://github.com/codewitch-honey-crisis/tiny_ttf (*Modified version of the original STB library*)
|
||||
|
||||
**TJPGD (JPEG decoder)**
|
||||
- Path: src/libs/tjpgd
|
||||
- Source: http://elm-chan.org/fsw/tjpgd/00index.html
|
||||
|
||||
**TLSF (Two-Level Segregate Fit memory allocator)**
|
||||
- Path: src/stdlib/builtin
|
||||
- Source: https://github.com/mattconte/tlsf
|
||||
|
||||
**Printf (Printf formatting library)**
|
||||
- Path: src/stdlib/builtin
|
||||
- Source: https://github.com/mpaland/printf
|
||||
|
||||
94
Kconfig
@@ -202,6 +202,15 @@ menu "LVGL configuration"
|
||||
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.
|
||||
|
||||
config LV_DRAW_LAYER_MAX_MEMORY
|
||||
int "The maximum amount of memory that can be used for layers"
|
||||
default 0
|
||||
help
|
||||
Limit the max allocated memory for simple and transformed layers.
|
||||
It should be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE` sized but if transformed layers are also used
|
||||
it should be enough to store the largest widget too (width x height x 4 area).
|
||||
Set it to 0 to have no limit.
|
||||
|
||||
config LV_DRAW_THREAD_STACK_SIZE
|
||||
int "Stack size of draw thread in bytes"
|
||||
default 8192
|
||||
@@ -260,6 +269,12 @@ menu "LVGL configuration"
|
||||
default y
|
||||
depends on LV_USE_DRAW_SW
|
||||
|
||||
config LV_DRAW_SW_I1_LUM_THRESHOLD
|
||||
int "Luminance threshold for a pixel to be active"
|
||||
default 127
|
||||
range 0 254
|
||||
depends on LV_DRAW_SW_SUPPORT_I1
|
||||
|
||||
config LV_DRAW_SW_DRAW_UNIT_CNT
|
||||
int "Number of draw units"
|
||||
default 1
|
||||
@@ -394,6 +409,26 @@ menu "LVGL configuration"
|
||||
config LV_USE_PXP_ASSERT
|
||||
bool "Enable PXP asserts"
|
||||
depends on LV_USE_DRAW_PXP
|
||||
|
||||
config LV_USE_DRAW_G2D
|
||||
bool "Use NXP's G2D on MPU platforms"
|
||||
default n
|
||||
|
||||
config LV_G2D_HASH_TABLE_SIZE
|
||||
bool "Maximum number of buffers that can be stored for G2D draw unit."
|
||||
default 50
|
||||
depends on LV_USE_DRAW_G2D
|
||||
help
|
||||
Includes the frame buffers and assets.
|
||||
|
||||
config LV_USE_G2D_DRAW_THREAD
|
||||
bool "Use additional draw thread for G2D processing"
|
||||
depends on LV_USE_DRAW_G2D && LV_USE_OS > 0
|
||||
default y
|
||||
|
||||
config LV_USE_G2D_ASSERT
|
||||
bool "Enable G2D asserts"
|
||||
depends on LV_USE_DRAW_G2D
|
||||
default n
|
||||
|
||||
config LV_USE_DRAW_DAVE2D
|
||||
@@ -681,6 +716,10 @@ menu "LVGL configuration"
|
||||
bool "Add id field to obj"
|
||||
default n
|
||||
|
||||
config LV_USE_OBJ_NAME
|
||||
bool "Enable support widget names"
|
||||
default n
|
||||
|
||||
config LV_OBJ_ID_AUTO_ASSIGN
|
||||
bool "Automatically assign an ID when obj is created"
|
||||
default y
|
||||
@@ -741,6 +780,11 @@ menu "LVGL configuration"
|
||||
bool "Enable multi-thread render"
|
||||
default n
|
||||
depends on LV_USE_VG_LITE_THORVG
|
||||
|
||||
config LV_USE_GESTURE_RECOGNITION
|
||||
bool "Enable the multi-touch gesture recognition feature"
|
||||
depends on LV_USE_FLOAT
|
||||
default n
|
||||
endmenu
|
||||
endmenu
|
||||
|
||||
@@ -1186,7 +1230,7 @@ menu "LVGL configuration"
|
||||
endmenu
|
||||
|
||||
menu "3rd Party Libraries"
|
||||
config LV_FS_DEFAULT_DRIVE_LETTER
|
||||
config LV_FS_DEFAULT_DRIVER_LETTER
|
||||
int "Default drive letter (e.g. 65 for 'A')"
|
||||
default 0
|
||||
help
|
||||
@@ -1285,6 +1329,13 @@ menu "LVGL configuration"
|
||||
string "Set the working directory"
|
||||
depends on LV_USE_FS_ARDUINO_SD
|
||||
|
||||
config LV_USE_FS_UEFI
|
||||
bool "File system on top of the UEFI EFI_SIMPLE_FILE_SYSTEM_PROTOCOL"
|
||||
config LV_USE_FS_UEFI_LETTER
|
||||
int "Set an upper cased letter on which the drive will accessible (e.g. 65 for 'A')"
|
||||
default 0
|
||||
depends on LV_USE_FS_UEFI
|
||||
|
||||
config LV_USE_LODEPNG
|
||||
bool "PNG decoder library"
|
||||
|
||||
@@ -1390,7 +1441,7 @@ menu "LVGL configuration"
|
||||
default n
|
||||
help
|
||||
You won't be able to open URLs after enabling this feature.
|
||||
Note that FFmpeg image decoder will always use lvgl file system.
|
||||
Note that FFmpeg image decoder will always use lvgl file system.
|
||||
endmenu
|
||||
|
||||
menu "Others"
|
||||
@@ -1522,6 +1573,10 @@ menu "LVGL configuration"
|
||||
bool "Enable cache profiler"
|
||||
default y
|
||||
|
||||
config LV_PROFILER_EVENT
|
||||
bool "Enable event profiler"
|
||||
default y
|
||||
|
||||
endif # LV_USE_PROFILER
|
||||
|
||||
config LV_USE_MONKEY
|
||||
@@ -1591,7 +1646,13 @@ menu "LVGL configuration"
|
||||
int "Font manager name max length"
|
||||
depends on LV_USE_FONT_MANAGER
|
||||
default 32
|
||||
|
||||
config LV_USE_TEST
|
||||
bool "Enable emulated input devices, time emulation, and screenshot compares."
|
||||
config LV_USE_TEST_SCREENSHOT_COMPARE
|
||||
bool "Enable `lv_test_screenshot_compare`. Requires libpng and a few MB of extra RAM."
|
||||
depends on LV_USE_TEST
|
||||
config LV_USE_XML
|
||||
bool "Enable loading XML UIs runtime"
|
||||
config LVGL_VERSION_MAJOR
|
||||
int
|
||||
default 9 # LVGL_VERSION_MAJOR
|
||||
@@ -1800,9 +1861,14 @@ menu "LVGL configuration"
|
||||
depends on LV_USE_NUTTX
|
||||
default n
|
||||
|
||||
config LV_NUTTX_DEFAULT_DRAW_BUF_USE_INDEPENDENT_IMAGE_HEAP
|
||||
bool "Use independent image heap for default draw buffer"
|
||||
depends on LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP
|
||||
default n
|
||||
|
||||
config LV_USE_NUTTX_LIBUV
|
||||
bool "Use uv loop to replace default timer loop and other fb/indev timers"
|
||||
depends on LV_USE_NUTTX
|
||||
depends on LV_USE_NUTTX && LIBUV
|
||||
default n
|
||||
|
||||
config LV_USE_NUTTX_CUSTOM_INIT
|
||||
@@ -1919,6 +1985,20 @@ menu "LVGL configuration"
|
||||
depends on LV_OS_WINDOWS
|
||||
default n
|
||||
|
||||
config LV_USE_UEFI
|
||||
bool "Use LVGL UEFI backend"
|
||||
default n
|
||||
|
||||
config LV_USE_UEFI_INCLUDE
|
||||
string "Header that hides the actual framework (EDK2, gnu-efi, ...)"
|
||||
depends on LV_USE_UEFI
|
||||
default "myefi.h"
|
||||
|
||||
config LV_UEFI_USE_MEMORY_SERVICES
|
||||
bool "Use the memory services from the boot services table"
|
||||
depends on LV_USE_UEFI
|
||||
default n
|
||||
|
||||
config LV_USE_OPENGLES
|
||||
bool "Use GLFW and OpenGL to open window on PC and handle mouse and keyboard"
|
||||
default n
|
||||
@@ -2012,6 +2092,12 @@ menu "LVGL configuration"
|
||||
bool "vector graphic demo"
|
||||
default n
|
||||
depends on LV_USE_VECTOR_GRAPHIC
|
||||
config LV_USE_DEMO_SMARTWATCH
|
||||
bool "Smartwatch demo"
|
||||
config LV_USE_DEMO_EBIKE
|
||||
bool "Ebike demo"
|
||||
config LV_USE_DEMO_HIGH_RES
|
||||
bool "High resolution demo"
|
||||
endmenu
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MIT licence
|
||||
Copyright (c) 2021 LVGL Kft
|
||||
Copyright (c) 2025 LVGL Kft
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 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 furnished to do so, subject to the following conditions:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<a href="https://github.com/sponsors/lvgl" target="_blank"><img align="left" src="https://lvgl.io/github-assets/sponsor.png" height="32px"></a>
|
||||
|
||||
<p align="right">
|
||||
<b>English</b> | <a href="./docs/README_zh.rst">中文</a> | <a href="./docs/README_pt_BR.rst">Português do Brasil</a> | <a href="./docs/README_jp.rst">日本語</a>
|
||||
<b>English</b> | <a href="./docs/README_zh.md">中文</a> | <a href="./docs/README_pt_BR.md">Português do Brasil</a> | <a href="./docs/README_jp.md">日本語</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
@@ -39,7 +39,11 @@
|
||||
/**********************
|
||||
* DEFINES
|
||||
**********************/
|
||||
#define HEADER_HEIGHT 48
|
||||
#if LV_USE_PERF_MONITOR_LOG_MODE == 1
|
||||
#define HEADER_HEIGHT 0
|
||||
#else
|
||||
#define HEADER_HEIGHT 48
|
||||
#endif
|
||||
#define FALL_HEIGHT 80
|
||||
#define PAD_BASIC 8
|
||||
|
||||
@@ -47,16 +51,6 @@
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
typedef struct {
|
||||
const char * name;
|
||||
void (*create_cb)(void);
|
||||
uint32_t scene_time;
|
||||
uint32_t cpu_avg_usage;
|
||||
uint32_t fps_avg;
|
||||
uint32_t render_avg_time;
|
||||
uint32_t flush_avg_time;
|
||||
uint32_t measurement_cnt;
|
||||
} scene_dsc_t;
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
@@ -69,8 +63,11 @@ static void next_scene_timer_cb(lv_timer_t * timer);
|
||||
static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
|
||||
#endif
|
||||
|
||||
static void summary_create(void);
|
||||
|
||||
static void summary_create(lv_demo_benchmark_summary_t * summary);
|
||||
|
||||
|
||||
static void table_draw_task_event_cb(lv_event_t * e);
|
||||
static void rnd_reset(void);
|
||||
static int32_t rnd_next(int32_t min, int32_t max);
|
||||
static lv_color_t rnd_color(void);
|
||||
@@ -452,7 +449,7 @@ static void widgets_demo_cb(void)
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
|
||||
static scene_dsc_t scenes[] = {
|
||||
static lv_demo_benchmark_scene_dsc_t scenes[] = {
|
||||
{.name = "Empty screen", .scene_time = 3000, .create_cb = empty_screen_cb},
|
||||
{.name = "Moving wallpaper", .scene_time = 3000, .create_cb = moving_wallpaper_cb},
|
||||
{.name = "Single rectangle", .scene_time = 3000, .create_cb = single_rectangle_cb},
|
||||
@@ -477,6 +474,7 @@ static scene_dsc_t scenes[] = {
|
||||
|
||||
static uint32_t scene_act;
|
||||
static uint32_t rnd_act;
|
||||
static lv_demo_benchmark_on_end_cb_t on_demo_end_cb;
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
@@ -512,11 +510,106 @@ void lv_demo_benchmark(void)
|
||||
#if LV_USE_PERF_MONITOR
|
||||
lv_display_t * disp = lv_display_get_default();
|
||||
lv_subject_add_observer_obj(&disp->perf_sysmon_backend.subject, sysmon_perf_observer_cb, title, NULL);
|
||||
#if LV_USE_PERF_MONITOR_LOG_MODE
|
||||
lv_obj_add_flag(title, LV_OBJ_FLAG_HIDDEN);
|
||||
#endif
|
||||
#else
|
||||
lv_label_set_text(title, "LV_USE_PERF_MONITOR is not enabled");
|
||||
#endif
|
||||
}
|
||||
|
||||
void lv_demo_benchmark_set_end_cb(lv_demo_benchmark_on_end_cb_t cb)
|
||||
{
|
||||
on_demo_end_cb = cb;
|
||||
}
|
||||
|
||||
void lv_demo_benchmark_summary_display(const lv_demo_benchmark_summary_t * summary)
|
||||
{
|
||||
LV_ASSERT_NULL(summary)
|
||||
lv_obj_clean(lv_screen_active());
|
||||
lv_obj_set_style_pad_hor(lv_screen_active(), 0, 0);
|
||||
lv_obj_t * table = lv_table_create(lv_screen_active());
|
||||
lv_obj_set_width(table, lv_pct(100));
|
||||
lv_obj_set_style_max_height(table, lv_pct(100), 0);
|
||||
lv_obj_add_flag(table, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
|
||||
lv_obj_set_style_text_color(table, lv_palette_darken(LV_PALETTE_BLUE_GREY, 2), LV_PART_ITEMS);
|
||||
lv_obj_set_style_border_color(table, lv_palette_darken(LV_PALETTE_BLUE_GREY, 2), LV_PART_ITEMS);
|
||||
lv_obj_add_event_cb(table, table_draw_task_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
|
||||
|
||||
lv_table_set_cell_value(table, 0, 0, "Name");
|
||||
lv_table_set_cell_value(table, 0, 1, "Avg. CPU");
|
||||
lv_table_set_cell_value(table, 0, 2, "Avg. FPS");
|
||||
lv_table_set_cell_value(table, 0, 3, "Avg. time (render + flush)");
|
||||
/* csv log */
|
||||
LV_LOG("Benchmark Summary (%d.%d.%d %s)\r\n",
|
||||
LVGL_VERSION_MAJOR,
|
||||
LVGL_VERSION_MINOR,
|
||||
LVGL_VERSION_PATCH,
|
||||
LVGL_VERSION_INFO);
|
||||
LV_LOG("Name, Avg. CPU, Avg. FPS, Avg. time, render time, flush time\r\n");
|
||||
|
||||
lv_obj_update_layout(table);
|
||||
const int32_t col_w = lv_obj_get_content_width(table) / 4;
|
||||
|
||||
lv_table_set_column_width(table, 0, col_w);
|
||||
lv_table_set_column_width(table, 1, col_w);
|
||||
lv_table_set_column_width(table, 2, col_w);
|
||||
lv_table_set_column_width(table, 3, col_w);
|
||||
|
||||
for(size_t i = 0; scenes[i].create_cb; i++) {
|
||||
lv_table_set_cell_value(table, i + 2, 0, scenes[i].name);
|
||||
|
||||
if(scenes[i].measurement_cnt == 0) {
|
||||
lv_table_set_cell_value(table, i + 2, 1, "N/A");
|
||||
lv_table_set_cell_value(table, i + 2, 2, "N/A");
|
||||
lv_table_set_cell_value(table, i + 2, 3, "N/A");
|
||||
}
|
||||
else {
|
||||
const int32_t cnt = scenes[i].measurement_cnt;
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 1, "%"LV_PRIu32" %%", scenes[i].cpu_avg_usage / cnt);
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 2, "%"LV_PRIu32" FPS", scenes[i].fps_avg / cnt);
|
||||
|
||||
const uint32_t render_time = scenes[i].render_avg_time / cnt;
|
||||
const uint32_t flush_time = scenes[i].flush_avg_time / cnt;
|
||||
const uint32_t total_time = render_time + flush_time;
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 3, "%"LV_PRIu32" ms (%"LV_PRIu32" + %"LV_PRIu32")",
|
||||
total_time, render_time, flush_time);
|
||||
|
||||
/* csv log */
|
||||
LV_LOG("%s, %"LV_PRIu32"%%, %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32"\r\n",
|
||||
scenes[i].name,
|
||||
scenes[i].cpu_avg_usage / cnt,
|
||||
scenes[i].fps_avg / cnt,
|
||||
render_time + flush_time,
|
||||
render_time,
|
||||
flush_time);
|
||||
}
|
||||
}
|
||||
|
||||
lv_table_set_cell_value(table, 1, 0, "All scenes avg.");
|
||||
if(summary->valid_scene_cnt < 1) {
|
||||
lv_table_set_cell_value(table, 1, 1, "N/A");
|
||||
lv_table_set_cell_value(table, 1, 2, "N/A");
|
||||
lv_table_set_cell_value(table, 1, 3, "N/A");
|
||||
}
|
||||
else {
|
||||
lv_table_set_cell_value_fmt(table, 1, 1, "%"LV_PRIu32" %%", summary->total_avg_cpu / summary->valid_scene_cnt);
|
||||
lv_table_set_cell_value_fmt(table, 1, 2, "%"LV_PRIu32" FPS", summary->total_avg_fps / summary->valid_scene_cnt);
|
||||
|
||||
const uint32_t render_time = summary->total_avg_render_time / summary->valid_scene_cnt;
|
||||
const uint32_t flush_time = summary->total_avg_flush_time / summary->valid_scene_cnt;
|
||||
const uint32_t total_time = render_time + flush_time;
|
||||
lv_table_set_cell_value_fmt(table, 1, 3, "%"LV_PRIu32" ms (%"LV_PRIu32" + %"LV_PRIu32")",
|
||||
total_time, render_time, flush_time);
|
||||
/* csv log */
|
||||
LV_LOG("All scenes avg.,%"LV_PRIu32"%%, %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32"\r\n",
|
||||
summary->total_avg_cpu / summary->valid_scene_cnt,
|
||||
summary->total_avg_fps / summary->valid_scene_cnt,
|
||||
total_time,
|
||||
render_time, flush_time);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
@@ -553,8 +646,21 @@ static void next_scene_timer_cb(lv_timer_t * timer)
|
||||
|
||||
load_scene(scene_act);
|
||||
if(scenes[scene_act].scene_time == 0) {
|
||||
lv_demo_benchmark_summary_t summary;
|
||||
|
||||
lv_timer_delete(timer);
|
||||
summary_create();
|
||||
summary_create(&summary);
|
||||
/*
|
||||
* Don't display the summary if the user sets a callback function
|
||||
* He can always call this function himself inside the callback
|
||||
*/
|
||||
if(on_demo_end_cb) {
|
||||
on_demo_end_cb(&summary);
|
||||
}
|
||||
else {
|
||||
lv_demo_benchmark_summary_display(&summary);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
lv_timer_set_period(timer, scenes[scene_act].scene_time);
|
||||
@@ -565,9 +671,8 @@ static void next_scene_timer_cb(lv_timer_t * timer)
|
||||
static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
||||
{
|
||||
const lv_sysmon_perf_info_t * info = lv_subject_get_pointer(subject);
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
|
||||
char scene_name[64];
|
||||
|
||||
if(scenes[scene_act].name[0] != '\0') {
|
||||
lv_snprintf(scene_name, sizeof(scene_name), "%s: ", scenes[scene_act].name);
|
||||
}
|
||||
@@ -575,6 +680,8 @@ static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * sub
|
||||
scene_name[0] = '\0';
|
||||
}
|
||||
|
||||
#if !LV_USE_PERF_MONITOR_LOG_MODE
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
lv_label_set_text_fmt(label,
|
||||
"%s"
|
||||
"%" LV_PRIu32" FPS, %" LV_PRIu32 "%% CPU\n"
|
||||
@@ -583,6 +690,9 @@ static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * sub
|
||||
info->calculated.fps, info->calculated.cpu,
|
||||
info->calculated.render_avg_time + info->calculated.flush_avg_time,
|
||||
info->calculated.render_avg_time, info->calculated.flush_avg_time);
|
||||
#else
|
||||
LV_UNUSED(observer);
|
||||
#endif
|
||||
|
||||
/*Ignore the first call as it contains data from the previous scene*/
|
||||
if(scenes[scene_act].measurement_cnt != 0) {
|
||||
@@ -628,106 +738,27 @@ static void table_draw_task_event_cb(lv_event_t * e)
|
||||
|
||||
}
|
||||
|
||||
static void summary_create(void)
|
||||
static void summary_create(lv_demo_benchmark_summary_t * summary)
|
||||
{
|
||||
lv_obj_clean(lv_screen_active());
|
||||
lv_obj_set_style_pad_hor(lv_screen_active(), 0, 0);
|
||||
lv_obj_t * table = lv_table_create(lv_screen_active());
|
||||
lv_obj_set_width(table, lv_pct(100));
|
||||
lv_obj_set_style_max_height(table, lv_pct(100), 0);
|
||||
lv_obj_add_flag(table, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
|
||||
lv_obj_set_style_text_color(table, lv_palette_darken(LV_PALETTE_BLUE_GREY, 2), LV_PART_ITEMS);
|
||||
lv_obj_set_style_border_color(table, lv_palette_darken(LV_PALETTE_BLUE_GREY, 2), LV_PART_ITEMS);
|
||||
lv_obj_add_event_cb(table, table_draw_task_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
|
||||
lv_memset(summary, 0, sizeof(*summary));
|
||||
|
||||
lv_table_set_cell_value(table, 0, 0, "Name");
|
||||
lv_table_set_cell_value(table, 0, 1, "Avg. CPU");
|
||||
lv_table_set_cell_value(table, 0, 2, "Avg. FPS");
|
||||
lv_table_set_cell_value(table, 0, 3, "Avg. time (render + flush)");
|
||||
|
||||
/* csv log */
|
||||
LV_LOG("Benchmark Summary (%d.%d.%d %s)\r\n",
|
||||
LVGL_VERSION_MAJOR,
|
||||
LVGL_VERSION_MINOR,
|
||||
LVGL_VERSION_PATCH,
|
||||
LVGL_VERSION_INFO);
|
||||
LV_LOG("Name, Avg. CPU, Avg. FPS, Avg. time, render time, flush time\r\n");
|
||||
|
||||
lv_obj_update_layout(table);
|
||||
int32_t col_w = lv_obj_get_content_width(table) / 4;
|
||||
|
||||
lv_table_set_column_width(table, 0, col_w);
|
||||
lv_table_set_column_width(table, 1, col_w);
|
||||
lv_table_set_column_width(table, 2, col_w);
|
||||
lv_table_set_column_width(table, 3, col_w);
|
||||
|
||||
uint32_t i;
|
||||
int32_t total_avg_fps = 0;
|
||||
int32_t total_avg_cpu = 0;
|
||||
int32_t total_avg_render_time = 0;
|
||||
int32_t total_avg_flush_time = 0;
|
||||
int32_t valid_scene_cnt = 0;
|
||||
for(i = 0; scenes[i].create_cb; i++) {
|
||||
lv_table_set_cell_value(table, i + 2, 0, scenes[i].name);
|
||||
summary->scenes = scenes;
|
||||
|
||||
for(size_t i = 0; scenes[i].create_cb; i++) {
|
||||
/*the first measurement was ignored as it contains data from the previous scene*/
|
||||
if(scenes[i].measurement_cnt <= 1) {
|
||||
lv_table_set_cell_value(table, i + 2, 1, "N/A");
|
||||
lv_table_set_cell_value(table, i + 2, 2, "N/A");
|
||||
lv_table_set_cell_value(table, i + 2, 3, "N/A");
|
||||
if(scenes[i].measurement_cnt > 1) {
|
||||
const int32_t cnt = --scenes[i].measurement_cnt;
|
||||
summary->valid_scene_cnt++;
|
||||
summary->total_avg_cpu += scenes[i].cpu_avg_usage / cnt;
|
||||
summary->total_avg_fps += scenes[i].fps_avg / cnt;
|
||||
summary->total_avg_render_time += scenes[i].render_avg_time / cnt;
|
||||
summary->total_avg_flush_time += scenes[i].flush_avg_time / cnt;
|
||||
}
|
||||
else {
|
||||
int32_t cnt = scenes[i].measurement_cnt - 1;
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 1, "%"LV_PRIu32" %%", scenes[i].cpu_avg_usage / cnt);
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 2, "%"LV_PRIu32" FPS", scenes[i].fps_avg / cnt);
|
||||
|
||||
uint32_t render_time = scenes[i].render_avg_time / cnt;
|
||||
uint32_t flush_time = scenes[i].flush_avg_time / cnt;
|
||||
lv_table_set_cell_value_fmt(table, i + 2, 3, "%"LV_PRIu32" ms (%"LV_PRIu32" + %"LV_PRIu32")",
|
||||
render_time + flush_time, render_time, flush_time);
|
||||
|
||||
/* csv log */
|
||||
LV_LOG("%s, %"LV_PRIu32"%%, %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32"\r\n",
|
||||
scenes[i].name,
|
||||
scenes[i].cpu_avg_usage / cnt,
|
||||
scenes[i].fps_avg / cnt,
|
||||
render_time + flush_time,
|
||||
render_time,
|
||||
flush_time);
|
||||
|
||||
valid_scene_cnt++;
|
||||
total_avg_cpu += scenes[i].cpu_avg_usage / cnt;
|
||||
total_avg_fps += scenes[i].fps_avg / cnt;
|
||||
total_avg_render_time += scenes[i].render_avg_time / cnt;
|
||||
total_avg_flush_time += scenes[i].flush_avg_time / cnt;
|
||||
}
|
||||
}
|
||||
|
||||
/*Add the average*/
|
||||
lv_table_set_cell_value(table, 1, 0, "All scenes avg.");
|
||||
if(valid_scene_cnt < 1) {
|
||||
lv_table_set_cell_value(table, 1, 1, "N/A");
|
||||
lv_table_set_cell_value(table, 1, 2, "N/A");
|
||||
lv_table_set_cell_value(table, 1, 3, "N/A");
|
||||
}
|
||||
else {
|
||||
lv_table_set_cell_value_fmt(table, 1, 1, "%"LV_PRIu32" %%", total_avg_cpu / valid_scene_cnt);
|
||||
lv_table_set_cell_value_fmt(table, 1, 2, "%"LV_PRIu32" FPS", total_avg_fps / valid_scene_cnt);
|
||||
|
||||
uint32_t render_time = total_avg_render_time / valid_scene_cnt;
|
||||
uint32_t flush_time = total_avg_flush_time / valid_scene_cnt;
|
||||
lv_table_set_cell_value_fmt(table, 1, 3, "%"LV_PRIu32" ms (%"LV_PRIu32" + %"LV_PRIu32")",
|
||||
render_time + flush_time, render_time, flush_time);
|
||||
/* csv log */
|
||||
LV_LOG("All scenes avg.,%"LV_PRIu32"%%, %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32", %"LV_PRIu32"\r\n",
|
||||
total_avg_cpu / valid_scene_cnt,
|
||||
total_avg_fps / valid_scene_cnt,
|
||||
render_time + flush_time,
|
||||
render_time,
|
||||
flush_time);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*----------------
|
||||
* SCENE HELPERS
|
||||
*----------------*/
|
||||
@@ -766,7 +797,7 @@ static void arc_anim(lv_obj_t * obj)
|
||||
lv_anim_set_exec_cb(&a, arc_anim_cb);
|
||||
lv_anim_set_values(&a, 0, 100);
|
||||
lv_anim_set_duration(&a, t1);
|
||||
lv_anim_set_playback_duration(&a, t2);
|
||||
lv_anim_set_reverse_duration(&a, t2);
|
||||
lv_anim_set_var(&a, obj);
|
||||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
|
||||
lv_anim_start(&a);
|
||||
@@ -787,7 +818,7 @@ static void scroll_anim(lv_obj_t * obj, int32_t y_max)
|
||||
lv_anim_set_exec_cb(&a, scroll_anim_y_cb);
|
||||
lv_anim_set_values(&a, 0, y_max);
|
||||
lv_anim_set_duration(&a, t);
|
||||
lv_anim_set_playback_duration(&a, t);
|
||||
lv_anim_set_reverse_duration(&a, t);
|
||||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
|
||||
lv_anim_start(&a);
|
||||
|
||||
@@ -808,7 +839,7 @@ static void fall_anim(lv_obj_t * obj, int32_t y_max)
|
||||
lv_anim_set_exec_cb(&a, shake_anim_y_cb);
|
||||
lv_anim_set_values(&a, 0, y_max);
|
||||
lv_anim_set_duration(&a, t1);
|
||||
lv_anim_set_playback_duration(&a, t2);
|
||||
lv_anim_set_reverse_duration(&a, t2);
|
||||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
|
||||
lv_anim_start(&a);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,35 @@ extern "C" {
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
typedef struct {
|
||||
const char * name;
|
||||
void (*create_cb)(void);
|
||||
uint32_t scene_time;
|
||||
uint32_t cpu_avg_usage;
|
||||
uint32_t fps_avg;
|
||||
uint32_t render_avg_time;
|
||||
uint32_t flush_avg_time;
|
||||
uint32_t measurement_cnt;
|
||||
} lv_demo_benchmark_scene_dsc_t;
|
||||
|
||||
typedef struct {
|
||||
/*
|
||||
* List of scenes
|
||||
* The last scne in this array of scenes is terminated
|
||||
* by a sentinel scene that has `create_cb` == NULL
|
||||
* Must not be free'd
|
||||
*/
|
||||
lv_demo_benchmark_scene_dsc_t * scenes;
|
||||
|
||||
int32_t total_avg_fps;
|
||||
int32_t total_avg_cpu;
|
||||
int32_t total_avg_render_time;
|
||||
int32_t total_avg_flush_time;
|
||||
int32_t valid_scene_cnt; /* Number of scenes in `scenes` with a `measurement_cnt` greater than 0 */
|
||||
} lv_demo_benchmark_summary_t;
|
||||
|
||||
typedef void (*lv_demo_benchmark_on_end_cb_t)(const lv_demo_benchmark_summary_t *);
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
@@ -32,7 +61,7 @@ extern "C" {
|
||||
/**
|
||||
* Run all benchmark scenes.
|
||||
*
|
||||
* On the summary end screen the values shall be interpreted according to the followings:
|
||||
* On the summary end screen the values shall be interpreted according to the following:
|
||||
* - CPU usage:
|
||||
* - If `LV_SYSMON_GET_IDLE` is not modified it's measured based on the time spent in
|
||||
* `lv_timer_handler`.
|
||||
@@ -50,6 +79,20 @@ extern "C" {
|
||||
*/
|
||||
void lv_demo_benchmark(void);
|
||||
|
||||
/*
|
||||
* Register a function to call when the benchmark demo is over
|
||||
* @param cb function to call when the demo is over
|
||||
*/
|
||||
void lv_demo_benchmark_set_end_cb(lv_demo_benchmark_on_end_cb_t cb);
|
||||
|
||||
|
||||
/*
|
||||
* Display and log the summary
|
||||
* This function is called automatically if `lv_on_benchmark_end_cb` is not set
|
||||
* @param summary summary of the benchmark results
|
||||
*/
|
||||
void lv_demo_benchmark_summary_display(const lv_demo_benchmark_summary_t * summary);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
@@ -435,16 +435,16 @@ static void chart_mode_observer_cb(lv_observer_t * observer, lv_subject_t * subj
|
||||
|
||||
switch(lv_subject_get_int(&subject_mode)) {
|
||||
case MODE_AVG_SPEED:
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 30);
|
||||
lv_chart_set_ext_y_array(chart, ser, avg_speed_values);
|
||||
lv_chart_set_axis_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 30);
|
||||
lv_chart_set_series_ext_y_array(chart, ser, avg_speed_values);
|
||||
break;
|
||||
case MODE_TOP_SPEED:
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 50);
|
||||
lv_chart_set_ext_y_array(chart, ser, top_speed_values);
|
||||
lv_chart_set_axis_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 50);
|
||||
lv_chart_set_series_ext_y_array(chart, ser, top_speed_values);
|
||||
break;
|
||||
case MODE_DISTANCE:
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 90);
|
||||
lv_chart_set_ext_y_array(chart, ser, distance_values);
|
||||
lv_chart_set_axis_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 90);
|
||||
lv_chart_set_series_ext_y_array(chart, ser, distance_values);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
for (i = 0; i < ARRAY_SIZE(flex_align_map); i++) { \
|
||||
if (flex_align == flex_align_map[i]) { \
|
||||
lv_dropdown_set_selected(ui->ctrl_pad.tab.align.ddlist_align_##item, \
|
||||
i); \
|
||||
i, LV_ANIM_OFF); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
@@ -114,7 +114,7 @@ void flex_loader_obj_update(lv_obj_t * obj, view_t * ui)
|
||||
uint32_t i;
|
||||
for(i = 0; i < ARRAY_SIZE(flex_flow_map); i++) {
|
||||
if(flex_flow == flex_flow_map[i]) {
|
||||
lv_dropdown_set_selected(ui->ctrl_pad.tab.flex.ddlist_flow, i);
|
||||
lv_dropdown_set_selected(ui->ctrl_pad.tab.flex.ddlist_flow, i, LV_ANIM_OFF);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ void view_create(lv_obj_t * par, view_t * ui)
|
||||
ui->root = obj_child_node_create(par, ui);
|
||||
lv_obj_set_size(ui->root, lv_pct(50), lv_pct(80));
|
||||
|
||||
/* mian ctrl_pad */
|
||||
/* main ctrl_pad */
|
||||
lv_obj_t * obj = lv_obj_create(par);
|
||||
lv_obj_set_size(obj, lv_pct(40), lv_pct(80));
|
||||
lv_obj_set_style_pad_all(obj, 0, 0);
|
||||
|
||||
BIN
demos/high_res/assets/img_lv_demo_high_res_about_app_icon_lg.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_about_app_icon_md.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_about_app_icon_sm.png
Normal file
|
After Width: | Height: | Size: 439 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_album_art_lg.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_album_art_md.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_album_art_sm.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_arrow_left_lg.png
Normal file
|
After Width: | Height: | Size: 507 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_arrow_left_md.png
Normal file
|
After Width: | Height: | Size: 407 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_arrow_left_sm.png
Normal file
|
After Width: | Height: | Size: 320 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_backward_icon_lg.png
Normal file
|
After Width: | Height: | Size: 429 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_backward_icon_md.png
Normal file
|
After Width: | Height: | Size: 350 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_backward_icon_sm.png
Normal file
|
After Width: | Height: | Size: 201 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_cold_icon_lg.png
Normal file
|
After Width: | Height: | Size: 482 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_cold_icon_md.png
Normal file
|
After Width: | Height: | Size: 372 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_cold_icon_sm.png
Normal file
|
After Width: | Height: | Size: 267 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_about_lg.png
Normal file
|
After Width: | Height: | Size: 604 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_about_md.png
Normal file
|
After Width: | Height: | Size: 352 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_about_sm.png
Normal file
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 573 KiB |
|
After Width: | Height: | Size: 277 KiB |
|
After Width: | Height: | Size: 116 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_home_lg.png
Normal file
|
After Width: | Height: | Size: 514 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_home_md.png
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_dark_bg_home_sm.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 580 KiB |
|
After Width: | Height: | Size: 265 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 601 KiB |
|
After Width: | Height: | Size: 277 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 595 KiB |
|
After Width: | Height: | Size: 274 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 943 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 956 B |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 25 KiB |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_1_lg.png
Normal file
|
After Width: | Height: | Size: 611 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_1_md.png
Normal file
|
After Width: | Height: | Size: 431 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_1_sm.png
Normal file
|
After Width: | Height: | Size: 364 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_lg.png
Normal file
|
After Width: | Height: | Size: 369 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_md.png
Normal file
|
After Width: | Height: | Size: 224 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_door_sm.png
Normal file
|
After Width: | Height: | Size: 233 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_dry_icon_lg.png
Normal file
|
After Width: | Height: | Size: 536 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_dry_icon_md.png
Normal file
|
After Width: | Height: | Size: 404 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_dry_icon_sm.png
Normal file
|
After Width: | Height: | Size: 288 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_energy_icon_lg.png
Normal file
|
After Width: | Height: | Size: 352 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_energy_icon_md.png
Normal file
|
After Width: | Height: | Size: 253 B |
BIN
demos/high_res/assets/img_lv_demo_high_res_energy_icon_sm.png
Normal file
|
After Width: | Height: | Size: 213 B |
|
After Width: | Height: | Size: 608 B |
|
After Width: | Height: | Size: 478 B |
|
After Width: | Height: | Size: 359 B |
|
After Width: | Height: | Size: 451 KiB |