Merge branch 'arendst:development' into development

This commit is contained in:
mikep1998 2021-10-26 10:12:11 -07:00 committed by GitHub
commit 406a1882c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
72 changed files with 66287 additions and 2201 deletions

View File

@ -1,651 +0,0 @@
name: Tasmota CI
on:
pull_request:
jobs:
tasmota:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-minimal:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-minimal
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-lite:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-lite
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-knx:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-knx
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-sensors:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-sensors
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-display:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-display
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-ir:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-ir
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-zbbridge:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-zbbridge
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-zigbee:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-zigbee
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-AF:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-AF
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-BG:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-BG
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-BR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-BR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-CN:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-CN
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-CZ:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-CZ
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-DE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-DE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-ES:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-ES
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-FR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-FR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-FY:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-FY
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-GR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-GR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-HE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-HE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-HU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-HU
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-IT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-IT
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-KO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-KO
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-NL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-NL
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-PL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-PL
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-PT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-PT
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-RO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-RO
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-RU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-RU
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-SE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-SE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-SK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-SK
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-TR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-TR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-TW:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-TW
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-UK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-UK
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota-VN:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e tasmota-VN
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output

View File

@ -1,705 +0,0 @@
name: Tasmota ESP32 CI
on:
pull_request:
jobs:
tasmota32:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32solo1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32solo1
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-webcam:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-webcam
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-odroidgo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-odroidgo
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-core2:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-core2
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-bluetooth:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-bluetooth
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-display:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-display
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-lvgl:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-lvgl
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-ir:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-ir
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32c3:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32c3
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-AF:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-AF
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-BG:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-BG
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-BR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-BR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-CN:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-CN
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-CZ:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-CZ
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-DE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-DE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-ES:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-ES
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-FR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-FR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-FY:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-FY
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-GR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-GR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-HE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-HE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-HU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-HU
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-IT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-IT
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-KO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-KO
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-NL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-NL
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-PL:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-PL
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-PT:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-PT
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-RO:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-RO
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-RU:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-RU
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-SE:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-SE
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-SK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-SK
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-TR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-TR
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-TW:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-TW
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-UK:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-UK
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
tasmota32-VN:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: |
platformio run -e tasmota32-VN
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output

View File

@ -0,0 +1,79 @@
name: Tasmota CI
on:
workflow_dispatch:
pull_request:
paths:
- '**.c'
- '**.cpp'
- '**.h'
- '**.hpp'
- '**.ino'
- '**.json'
- '**.properties'
- 'pio-tools/*.py'
- '**.ini'
jobs:
base-images:
runs-on: ubuntu-latest
strategy:
matrix:
variant:
- tasmota
- tasmota-display
- tasmota-ir
- tasmota-knx
- tasmota-lite
- tasmota-minimal
- tasmota-sensors
- tasmota-zbbridge
- tasmota-zigbee
- tasmota32
- tasmota32-bluetooth
- tasmota32-core2
- tasmota32-display
- tasmota32-ir
- tasmota32-lvgl
- tasmota32-odroidgo
- tasmota32c3
- tasmota32solo1
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e ${{ matrix.variant }}
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output
language-images:
runs-on: ubuntu-latest
strategy:
matrix:
variant: [ tasmota, tasmota32 ]
language: [ AF, BG, BR, CN, CZ, DE, ES, FR, FY, GR, HE, HU, IT, KO, NL, PL, PT, RO, RU, SE, SK, TR, TW, UK, VN ]
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade --dev
platformio update
- name: Run PlatformIO
run: platformio run -e ${{ matrix.variant }}-${{ matrix.language }}
- uses: actions/upload-artifact@v2
with:
name: firmware
path: ./build_output

View File

@ -10,9 +10,13 @@ All notable changes to this project will be documented in this file.
### Changed
- File editor no-wrap (#13427)
- ESP32 core library from v1.0.7.4 to v1.0.7.5
- ESP32C3 core library from v2.0.0-post to v2.0.1-rc1
### Fixed
- Initial reset RTC memory based variables like EnergyToday and EnergyTotal
- ESP32 Telegram compile error (#13435)
- SML compile error (#13441)
- GUI checkbox MQTT TLS not saved regression from v9.2.0.3 (#13442)
## [Released]

View File

@ -23,7 +23,7 @@ Easy initial installation of Tasmota can be performed using the [Tasmota WebInst
## Development
[![Dev Version](https://img.shields.io/badge/development%20version-v9.5.x.x-blue.svg)](https://github.com/arendst/Tasmota)
[![Dev Version](https://img.shields.io/badge/development%20version-v10.0.x.x-blue.svg)](https://github.com/arendst/Tasmota)
[![Download Dev](https://img.shields.io/badge/download-development-yellow.svg)](http://ota.tasmota.com/tasmota/)
[![Tasmota CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+CI%22)
[![Tasmota ESP32 CI](https://github.com/arendst/Tasmota/workflows/Tasmota%20ESP32%20CI/badge.svg)](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+ESP32+CI%22)

View File

@ -8,6 +8,8 @@
See [migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
**Do not upgrade from minimal to minimal version. It will most likely fail at some point and will require flashing via serial.** If you do have to use minimal versions, always OTA to a full version of the same release before applying next minimal version.
1. Migrate to **Sonoff-Tasmota 3.9.x**
2. Migrate to **Sonoff-Tasmota 4.x**
3. Migrate to **Sonoff-Tasmota 5.14**
@ -107,6 +109,10 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
### Changed
- File editor no-wrap [#13427](https://github.com/arendst/Tasmota/issues/13427)
- ESP32 core library from v1.0.7.4 to v1.0.7.5
- ESP32C3 core library from v2.0.0-post to v2.0.1-rc1
### Fixed
- Initial reset RTC memory based variables like EnergyToday and EnergyTotal
- ESP32 Telegram compile error [#13435](https://github.com/arendst/Tasmota/issues/13435)
- SML compile error [#13441](https://github.com/arendst/Tasmota/issues/13441)
- GUI checkbox MQTT TLS not saved regression from v9.2.0.3 [#13442](https://github.com/arendst/Tasmota/issues/13442)

View File

@ -38,9 +38,9 @@ class WiFiClientSecure_light : public WiFiClient {
void allocateBuffers(void);
#ifdef ESP32 // the method to override in ESP32 has timeout argument
int connect(IPAddress ip, uint16_t port, int32_t timeout) override;
int connect(const char* name, uint16_t port, int32_t timeout) override;
#ifdef ESP32 // the method to override in ESP32 has timeout argument default #define WIFI_CLIENT_DEF_CONN_TIMEOUT_MS (3000)
int connect(IPAddress ip, uint16_t port, int32_t timeout = 3000) override;
int connect(const char* name, uint16_t port, int32_t timeout = 3000) override;
#else
int connect(IPAddress ip, uint16_t port) override;
int connect(const char* name, uint16_t port) override;

View File

@ -10,6 +10,7 @@
#include "lvgl.h"
#include "be_lvgl.h"
#include "lv_theme_openhasp.h"
extern int lv0_member(bvm *vm); // resolve virtual members
@ -19,6 +20,7 @@ extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder lo
extern int lv0_load_montserrat_font(bvm *vm);
extern int lv0_load_seg7_font(bvm *vm);
extern int lv0_load_robotocondensed_latin1_font(bvm *vm);
extern int lv0_load_font(bvm *vm);
extern int lv0_load_freetype_font(bvm *vm);
@ -70,6 +72,7 @@ const lvbe_call_c_t lv_func[] = {
{ "get_ver_res", (void*) &lv_get_ver_res, "i", "" },
{ "group_get_default", (void*) &lv_group_get_default, "lv.lv_group", "" },
{ "img_src_get_type", (void*) &lv_img_src_get_type, "i", "." },
{ "indev_get_act", (void*) &lv_indev_get_act, "lv.lv_indev", "" },
{ "indev_get_obj_act", (void*) &lv_indev_get_obj_act, "lv.lv_obj", "" },
{ "indev_read_timer_cb", (void*) &lv_indev_read_timer_cb, "", "(lv.lv_timer)" },
{ "layer_sys", (void*) &lv_layer_sys, "lv.lv_obj", "" },
@ -81,18 +84,23 @@ const lvbe_call_c_t lv_func[] = {
{ "obj_enable_style_refresh", (void*) &lv_obj_enable_style_refresh, "", "b" },
{ "obj_event_base", (void*) &lv_obj_event_base, "i", "(lv.lv_obj_class)(lv.lv_event)" },
{ "obj_report_style_change", (void*) &lv_obj_report_style_change, "", "(lv.lv_style)" },
{ "obj_style_get_selector_part", (void*) &lv_obj_style_get_selector_part, "i", "(lv.lv_style_selector)" },
{ "obj_style_get_selector_state", (void*) &lv_obj_style_get_selector_state, "i", "(lv.lv_style_selector)" },
{ "obj_style_get_selector_part", (void*) &lv_obj_style_get_selector_part, "i", "i" },
{ "obj_style_get_selector_state", (void*) &lv_obj_style_get_selector_state, "i", "i" },
{ "refr_now", (void*) &lv_refr_now, "", "(lv.lv_disp)" },
{ "scr_act", (void*) &lv_scr_act, "lv.lv_obj", "" },
{ "scr_load", (void*) &lv_scr_load, "", "(lv.lv_obj)" },
{ "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv.lv_obj)iiib" },
{ "theme_apply", (void*) &lv_theme_apply, "", "(lv.lv_obj)" },
{ "theme_default_init", (void*) &lv_theme_default_init, "lv.lv_theme", "(lv.lv_disp)(lv.lv_color)(lv.lv_color)b(lv.lv_font)" },
{ "theme_default_is_inited", (void*) &lv_theme_default_is_inited, "b", "" },
{ "theme_get_color_primary", (void*) &lv_theme_get_color_primary, "lv.lv_color", "(lv.lv_obj)" },
{ "theme_get_color_secondary", (void*) &lv_theme_get_color_secondary, "lv.lv_color", "(lv.lv_obj)" },
{ "theme_get_font_large", (void*) &lv_theme_get_font_large, "lv.lv_font", "(lv.lv_obj)" },
{ "theme_get_font_normal", (void*) &lv_theme_get_font_normal, "lv.lv_font", "(lv.lv_obj)" },
{ "theme_get_font_small", (void*) &lv_theme_get_font_small, "lv.lv_font", "(lv.lv_obj)" },
{ "theme_get_from_obj", (void*) &lv_theme_get_from_obj, "lv.lv_theme", "(lv.lv_obj)" },
{ "theme_openhasp_init", (void*) &lv_theme_openhasp_init, "lv.lv_theme", "(lv.lv_disp)(lv.lv_color)(lv.lv_color)b(lv.lv_font)" },
{ "theme_openhasp_is_inited", (void*) &lv_theme_openhasp_is_inited, "b", "" },
{ "theme_set_apply_cb", (void*) &lv_theme_set_apply_cb, "", "(lv.lv_theme)^lv_theme_apply_cb^" },
{ "theme_set_parent", (void*) &lv_theme_set_parent, "", "(lv.lv_theme)(lv.lv_theme)" },
@ -653,6 +661,9 @@ const be_constint_t lv0_constants[] = {
{ "TEXT_FLAG_FIT", LV_TEXT_FLAG_FIT },
{ "TEXT_FLAG_NONE", LV_TEXT_FLAG_NONE },
{ "TEXT_FLAG_RECOLOR", LV_TEXT_FLAG_RECOLOR },
{ "&font_montserrat", (int32_t) &lv0_load_montserrat_font },
{ "&font_robotocondensed_latin1", (int32_t) &lv0_load_robotocondensed_latin1_font },
{ "&font_seg7", (int32_t) &lv0_load_seg7_font },
{ "&load_font", (int32_t) &lv0_load_font },
{ "&load_freetype_font", (int32_t) &lv0_load_freetype_font },
{ "&montserrat_font", (int32_t) &lv0_load_montserrat_font },
@ -673,7 +684,7 @@ be_local_module(lv,
{ be_nested_key("start", 1697318111, 5, 0), be_const_func(lv0_start) },
}))
);
BE_EXPORT_VARIABLE be_define_const_native_module(lv, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(lv);
#endif // USE_LVGL

View File

@ -28,6 +28,7 @@ extern int lvs_tostring(bvm *vm);
BE_EXPORT_VARIABLE extern const bclass be_class_lv_obj;
extern int lvbe_font_create(bvm *vm);
extern int lvbe_theme_create(bvm *vm);
/* `lv_style` external functions definitions */
@ -125,6 +126,8 @@ extern int lvbe_style_set_arc_img_src(bvm *vm);
/* `lv_color` external functions definitions */
/* `lv_theme` external functions definitions */
/* `lv_img` external functions definitions */
extern int lvbe_img_set_tasmota_logo(bvm *vm);
extern int lvbe_img_create(bvm *vm);
@ -143,6 +146,22 @@ extern int lvbe_img_get_pivot(bvm *vm);
extern int lvbe_img_get_zoom(bvm *vm);
extern int lvbe_img_get_antialias(bvm *vm);
/* `lv_disp` external functions definitions */
extern int lvbe_disp_get_scr_act(bvm *vm);
extern int lvbe_disp_get_scr_prev(bvm *vm);
extern int lvbe_disp_load_scr(bvm *vm);
extern int lvbe_disp_get_layer_top(bvm *vm);
extern int lvbe_disp_get_layer_sys(bvm *vm);
extern int lvbe_disp_set_theme(bvm *vm);
extern int lvbe_disp_get_theme(bvm *vm);
extern int lvbe_disp_set_bg_color(bvm *vm);
extern int lvbe_disp_set_bg_image(bvm *vm);
extern int lvbe_disp_set_bg_opa(bvm *vm);
extern int lvbe_disp_get_inactive_time(bvm *vm);
extern int lvbe_disp_trig_activity(bvm *vm);
extern int lvbe_disp_clean_dcache(bvm *vm);
extern int lvbe_disp_dpx(bvm *vm);
/* `lv_obj` external functions definitions */
extern int lvbe_obj_add_event_cb(bvm *vm);
extern int lvbe_obj_remove_event_cb(bvm *vm);
@ -439,6 +458,7 @@ extern int lvbe_obj_set_parent(bvm *vm);
extern int lvbe_obj_move_foreground(bvm *vm);
extern int lvbe_obj_move_background(bvm *vm);
extern int lvbe_obj_get_screen(bvm *vm);
extern int lvbe_obj_get_disp(bvm *vm);
extern int lvbe_obj_get_parent(bvm *vm);
extern int lvbe_obj_get_child(bvm *vm);
extern int lvbe_obj_get_child_cnt(bvm *vm);
@ -579,6 +599,9 @@ extern int lvbe_spinbox_step_prev(bvm *vm);
extern int lvbe_spinbox_increment(bvm *vm);
extern int lvbe_spinbox_decrement(bvm *vm);
/* `lv_spinner` external functions definitions */
extern int lvbe_spinner_create(bvm *vm);
/* `lv_arc` external functions definitions */
extern int lvbe_arc_create(bvm *vm);
extern int lvbe_arc_set_start_angle(bvm *vm);
@ -786,7 +809,9 @@ extern int lvbe_textarea_cursor_up(bvm *vm);
extern int be_ntv_lv_style_init(bvm *vm);
extern int be_ntv_lv_font_init(bvm *vm);
extern int be_ntv_lv_color_init(bvm *vm);
extern int be_ntv_lv_theme_init(bvm *vm);
extern int be_ntv_lv_img_init(bvm *vm);
extern int be_ntv_lv_disp_init(bvm *vm);
extern int be_ntv_lv_obj_init(bvm *vm);
extern int be_ntv_lv_group_init(bvm *vm);
extern int be_ntv_lv_indev_init(bvm *vm);
@ -797,6 +822,7 @@ extern int be_ntv_lv_led_init(bvm *vm);
extern int be_ntv_lv_meter_init(bvm *vm);
extern int be_ntv_lv_msgbox_init(bvm *vm);
extern int be_ntv_lv_spinbox_init(bvm *vm);
extern int be_ntv_lv_spinner_init(bvm *vm);
extern int be_ntv_lv_arc_init(bvm *vm);
extern int be_ntv_lv_bar_init(bvm *vm);
extern int be_ntv_lv_btn_init(bvm *vm);
@ -882,6 +908,23 @@ be_local_class(lv_indev,
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_disp
********************************************************************/
be_local_class(lv_disp,
1,
NULL,
be_nested_map(4,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lv0_init) },
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lvx_tostring) },
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
{ be_nested_key("member", 719708611, 6, 0), be_const_func(lvx_member) },
})),
(be_nested_const_str("lv_disp", 609712084, 8))
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_font
********************************************************************/
@ -898,6 +941,22 @@ be_local_class(lv_font,
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_theme
********************************************************************/
be_local_class(lv_theme,
1,
NULL,
be_nested_map(3,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lvbe_theme_create) },
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lvx_tostring) },
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
})),
(be_nested_const_str("lv_theme", 1550958453, 7))
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_color
********************************************************************/
@ -933,6 +992,12 @@ void be_load_lv_color_class(bvm *vm) {
be_pop(vm, 1);
}
void be_load_lv_theme_class(bvm *vm) {
be_pushntvclass(vm, &be_class_lv_theme);
be_setglobal(vm, "lv_theme");
be_pop(vm, 1);
}
/********************************************************************
** Solidified class: lv_img
********************************************************************/
@ -955,6 +1020,12 @@ void be_load_lv_img_class(bvm *vm) {
be_pop(vm, 1);
}
void be_load_lv_disp_class(bvm *vm) {
be_pushntvclass(vm, &be_class_lv_disp);
be_setglobal(vm, "lv_disp");
be_pop(vm, 1);
}
void be_load_lv_obj_class(bvm *vm) {
be_pushntvclass(vm, &be_class_lv_obj);
be_setglobal(vm, "lv_obj");
@ -1127,6 +1198,28 @@ void be_load_lv_spinbox_class(bvm *vm) {
be_pop(vm, 1);
}
/********************************************************************
** Solidified class: lv_spinner
********************************************************************/
extern const bclass be_class_lv_obj;
be_local_class(lv_spinner,
0,
&be_class_lv_obj,
be_nested_map(2,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("_class", -1562820946, 6, -1), be_const_comptr(&lv_spinner_class) },
{ be_nested_key("init", 380752755, 4, -1), be_const_func(be_ntv_lv_spinner_init) },
})),
(be_nested_const_str("lv_spinner", 1612829968, 6))
);
/*******************************************************************/
void be_load_lv_spinner_class(bvm *vm) {
be_pushntvclass(vm, &be_class_lv_spinner);
be_setglobal(vm, "lv_spinner");
be_pop(vm, 1);
}
/********************************************************************
** Solidified class: lv_arc
********************************************************************/

View File

@ -54,5 +54,5 @@ be_local_module(python_compat,
{ be_nested_key("init", 380752755, 4, -1), be_const_closure(_anonymous__closure) },
}))
);
BE_EXPORT_VARIABLE be_define_const_native_module(python_compat, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(python_compat);
/********************************************************************/

View File

@ -1,7 +1,67 @@
import string
import json
# lv.start()
# scr = lv.scr_act() # default screean object
# scr.set_style_bg_color(lv.color(0x0000A0), lv.PART_MAIN | lv.STATE_DEFAULT)
lv.start()
hres = lv.get_hor_res() # should be 320
vres = lv.get_ver_res() # should be 240
scr = lv.scr_act() # default screean object
#f20 = lv.montserrat_font(20) # load embedded Montserrat 20
r20 = lv.font_robotocondensed_latin1(20)
r16 = lv.font_robotocondensed_latin1(16)
th2 = lv.theme_openhasp_init(0, lv.color(0xFF00FF), lv.color(0x303030), false, r16)
scr.get_disp().set_theme(th2)
# TODO
scr.set_style_bg_color(lv.color(lv.COLOR_WHITE),0)
# apply theme to layer_top, but keep it transparent
lv.theme_apply(lv.layer_top())
lv.layer_top().set_style_bg_opa(0,0)
# parse hex string
def parse_hex(s)
import string
s = string.toupper(s) # turn to uppercase
var val = 0
for i:0..size(s)-1
var c = s[i]
# var c_int = string.byte(c)
if c == "#" continue end # skip '#' prefix if any
if c == "x" || c == "X" continue end # skip 'x' or 'X'
if c >= "A" && c <= "F"
val = (val << 4) | string.byte(c) - 55
elif c >= "0" && c <= "9"
val = (val << 4) | string.byte(c) - 48
end
end
return val
end
def parse_color(s)
s = str(s)
if s[0] == '#'
return lv.color(parse_hex(s))
else
import string
import introspect
var col_name = "COLOR_" + string.toupper(s)
var col_try = introspect.get(lv, col_name)
if col_try != nil
return lv.color(col_try)
end
end
# fail safe with black color
return lv.color(0x000000)
end
#- ------------------------------------------------------------
Class `lvh_obj` encapsulating `lv_obj``
@ -11,7 +71,17 @@ import json
Adds specific virtual members used by OpenHASP
- ------------------------------------------------------------ -#
class lvh_obj
static _lv_class = lv_obj
# _lv_class refers to the lvgl class encapsulated, and is overriden by subclasses
static _lv_class = lv.obj
static _lv_part2_selector # selector for secondary part (like knob of arc)
# attributes to ignore when set at object level (they are managed by page)
static _attr_ignore = [
"id",
"obj",
"page",
"comment",
]
#- mapping from OpenHASP attribute to LVGL attribute -#
#- if mapping is null, we use set_X and get_X from our own class -#
static _attr_map = {
@ -19,28 +89,79 @@ class lvh_obj
"y": "y",
"w": "width",
"h": "height",
"radius": "radius",
"border_side": "border_side",
"text": nil, # apply to self
# arc
"asjustable": nil,
"mode": nil,
"start_angle": "bg_start_angle",
"start_angle1": "start_angle",
"end_angle": "bg_end_angle",
"end_angle1": "end_angle",
"radius": "style_radius",
"border_side": "style_border_side",
"bg_opa": "style_bg_opa",
"border_width": "style_border_width",
"action": nil, # store the action in self._action
"hidden": nil, # apply to self
"enabled": nil, # apply to self
"enabled": nil, # apply to self
"click": nil, # synonym to enabled
"toggle": nil,
"bg_color": "style_bg_color",
"bg_grad_color": "style_bg_grad_color",
"type": nil,
# below automatically create a sub-label
"text": nil, # apply to self
"value_str": nil, # synonym to 'text'
"align": nil,
"text_font": nil,
"value_font": nil, # synonym to text_font
"text_color": nil,
"value_color": nil, # synonym to text_color
"value_ofs_x": nil,
"value_ofs_y": nil,
#
"min": nil,
"max": nil,
"val": "value",
"rotation": "rotation",
# img
"src": "src",
"image_recolor": "style_img_recolor",
"image_recolor_opa": "style_img_recolor_opa",
# padding of knob
"pad_top2": nil,
"pad_bottom2": nil,
"pad_left2": nil,
"pad_right2": nil,
"pad_all2": nil,
"radius2": nil,
}
var _lv_obj # native lvgl object
var _lv_label # sub-label if exists
var _action # action for OpenHASP
# init
# - create the LVGL encapsulated object
def init(parent)
var obj_class = self._lv_class # need to copy to a var to distinguish from method call
self._lv_obj = obj_class(parent)
var obj_class = self._lv_class # need to assign to a var to distinguish from method call
self._lv_obj = obj_class(parent) # instanciate LVGL object
self.post_init()
end
def obj()
# post-init, to be overriden
def post_init()
end
# get LVGL encapsulated object
def get_obj()
return self._lv_obj
end
def tostring()
return "<instance "+classname(self)+"()>"
def set_action(t)
self._action = str(t)
end
def get_action()
return self._action()
end
#- ------------------------------------------------------------
@ -49,7 +170,7 @@ class lvh_obj
- hidden
- enabled
- ------------------------------------------------------------ -#
#- `hidden` attributes mapped to LV_OBJ_FLAG_HIDDEN -#
#- `hidden` attributes mapped to OBJ_FLAG_HIDDEN -#
def set_hidden(h)
if h
self._lv_obj.add_flag(lv.OBJ_FLAG_HIDDEN)
@ -62,6 +183,7 @@ class lvh_obj
return self._lv_obj.has_flag(lv.OBJ_FLAG_HIDDEN)
end
#- `enabled` attributes mapped to OBJ_FLAG_CLICKABLE -#
def set_enabled(h)
if h
self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE)
@ -73,10 +195,14 @@ class lvh_obj
def get_enabled()
return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE)
end
# click is synonym to enabled
def set_click(t) self.set_enabled(t) end
def get_click() return self.get_enabled() end
#- `toggle` attributes mapped to STATE_CHECKED -#
def set_toggle(t)
if t == "TRUE" t = true end
if t == "FASLE" t = false end
if t == "FALSE" t = false end
if t
self._lv_obj.add_state(lv.STATE_CHECKED)
else
@ -88,30 +214,178 @@ class lvh_obj
return self._lv_obj.has_state(lv.STATE_CHECKED)
end
#- set_text: create a `lv_label` sub object to the current object -#
#- (default case, may be overriden by object that directly take text) -#
def set_text(t)
if self._lv_label == nil
self._lv_label = lv_label(self.obj())
def set_adjustable(t)
if t
self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE)
else
self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE)
end
self._lv_label.set_text(t)
end
def get_adjustable()
return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE)
end
def get_text()
#- set_text: create a `lv_label` sub object to the current object -#
#- (default case, may be overriden by object that directly take text) -#
def check_label()
if self._lv_label == nil
self._lv_label = lv.label(self.get_obj())
self._lv_label.set_align(lv.ALIGN_CENTER);
end
end
def set_text(t)
self.check_label()
self._lv_label.set_text(t)
end
def set_value_str(t) self.set_text(t) end
def get_text()
if self._lv_label == nil return nil end
return self._lv_label.get_text()
end
def get_value_str() return self.get_text() end
def set_align(t)
var align
self.check_label()
if t == 0 || t == "left"
align = lv.TEXT_ALIGN_LEFT
elif t == 1 || t == "center"
align = lv.TEXT_ALIGN_CENTER
elif t == 2 || t == "right"
align = lv.TEXT_ALIGN_RIGHT
end
self._lv_label.set_style_text_align(align, lv.PART_MAIN | lv.STATE_DEFAULT)
end
def get_align()
if self._lv_label == nil return nil end
var align self._lv_label.get_style_text_align(lv.PART_MAIN | lv.STATE_DEFAULT)
if align == lv.TEXT_ALIGN_LEFT
return "left"
elif align == lv.TEXT_ALIGN_CENTER
return "center"
elif align == lv.TEXT_ALIGN_RIGHT
return "right"
else
return nil
end
return self._lv_label.get_text()
end
def set_text_font(t)
self.check_label()
var f = lv.font_robotocondensed_latin1(int(t))
if f != nil
self._lv_label.set_style_text_font(f, lv.PART_MAIN | lv.STATE_DEFAULT)
else
print("HSP: Unsupported font size: robotocondensed-latin1", self._text_font)
end
end
def get_text_font()
return self._text_font
end
def set_value_font(t) self.set_text_font(t) end
def get_value_font() return self.get_text_font() end
def set_text_color(t)
self.check_label()
self._lv_label.set_style_text_color(parse_color(t), lv.PART_MAIN | lv.STATE_DEFAULT)
end
def get_text_color()
return self._text_color
end
def set_value_color(t) self.set_text_color(t) end
def get_value_color() return self.get_value_color() end
def set_value_ofs_x(t)
self.check_label()
self._lv_label.set_x(int(t))
end
def get_value_ofs_x()
return self._lv_label.get_x()
end
def set_value_ofs_y(t)
self.check_label()
self._lv_label.set_y(int(t))
end
def get_value_ofs_y()
return self._lv_label.get_y()
end
# secondary element
def set_pad_top2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_pad_top(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def set_pad_bottom2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_pad_bottom(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def set_pad_left2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_pad_left(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def set_pad_right2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_pad_right(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def set_pad_all2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_pad_all(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_pad_top()
if self._lv_part2_selector != nil
return self._lv_obj.get_style_pad_top(self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_pad_bottomo()
if self._lv_part2_selector != nil
return self._lv_obj.get_style_pad_bottom(self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_pad_left()
if self._lv_part2_selector != nil
return self._lv_obj.get_style_pad_left(self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_pad_right()
if self._lv_part2_selector != nil
return self._lv_obj.get_style_pad_right(self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_pad_all()
end
def set_radius2(t)
if self._lv_part2_selector != nil
self._lv_obj.set_style_radius(int(t), self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
def get_radius2()
if self._lv_part2_selector != nil
return self._lv_obj.get_style_radius(self._lv_part2_selector | lv.STATE_DEFAULT)
end
end
#- ------------------------------------------------------------
Mapping of virtual attributes
- ------------------------------------------------------------ -#
def member(k)
# tostring is a special case, we shouldn't raise an exception for it
if k == 'tostring' return nil end
#
if self._attr_map.has(k)
import introspect
if self._attr_map[k]
var f = introspect.get(self._lv_obj, "get_" + self._attr_map[k])
var kv = self._attr_map[k]
if kv
var f = introspect.get(self._lv_obj, "get_" + kv)
if type(f) == 'function'
return f(self._lv_obj)
end
@ -127,16 +401,31 @@ class lvh_obj
end
def setmember(k, v)
import string
# print(">> setmember", k, v)
# print(">>", classname(self), self._attr_map)
if self._attr_map.has(k)
if self._attr_ignore.find(k) != nil
return
elif self._attr_map.has(k)
import introspect
if self._attr_map[k]
var f = introspect.get(self._lv_obj, "set_" + self._attr_map[k])
# print("f=", f)
var kv = self._attr_map[k]
if kv
var f = introspect.get(self._lv_obj, "set_" + kv)
# if the attribute contains 'color', convert to lv_color
if type(kv) == 'string' && string.find(kv, "color") + 5 == size(kv) # endswith 'color'
v = parse_color(v)
end
# print("f=", f, v, kv, self._lv_obj, self)
if type(f) == 'function'
f(self._lv_obj, v)
if string.find(kv, "style_") == 0
# style function need a selector as second parameter
f(self._lv_obj, v, lv.PART_MAIN | lv.STATE_DEFAULT)
else
f(self._lv_obj, v)
end
return
else
print("HSP: Could not find function set_"+kv)
end
else
# call self method
@ -148,39 +437,98 @@ class lvh_obj
end
end
else
print("HSP: unknown attribute:", k)
end
# silently ignore if the attribute name is not supported
end
end
#- creat sub-classes of lvh_obj and map the LVGL class in static '_lv_class' attribute -#
class lvh_arc : lvh_obj static _lv_class = lv_arc end
class lvh_bar : lvh_obj static _lv_class = lv_bar end
class lvh_btn : lvh_obj static _lv_class = lv_btn end
class lvh_btnmatrix : lvh_obj static _lv_class = lv_btnmatrix end
class lvh_checkbox : lvh_obj static _lv_class = lv_checkbox end
class lvh_dropdown : lvh_obj static _lv_class = lv_dropdown end
class lvh_img : lvh_obj static _lv_class = lv_img end
class lvh_label : lvh_obj static _lv_class = lv_label end
class lvh_line : lvh_obj static _lv_class = lv_line end
class lvh_roller : lvh_obj static _lv_class = lv_roller end
class lvh_slider : lvh_obj static _lv_class = lv_slider end
class lvh_slider : lvh_obj static _lv_class = lv_slider end
class lvh_switch : lvh_obj static _lv_class = lv_switch end
class lvh_textarea : lvh_obj static _lv_class = lv_textarea end
class lvh_label : lvh_obj
static _lv_class = lv.label
# label do not need a sub-label
def post_init()
self._lv_label = self._lv_obj
end
end
#- ------------------------------------------------------------
Class `lvh_page` encapsulating `lv_obj` as screen (created with lv_obj(0))
- ------------------------------------------------------------ -#
class lvh_arc : lvh_obj
static _lv_class = lv.arc
static _lv_part2_selector = lv.PART_KNOB
def set_min(t)
self._lv_obj.set_range(int(t), self.get_max())
end
def set_max(t)
self._lv_obj.set_range(self.get_min(), int(t))
end
def get_min()
return self._lv_obj.get_min_value()
end
def get_max()
return self._lv_obj.get_max_value()
end
def set_type(t)
var mode
if t == 0 mode = lv.ARC_MODE_NORMAL
elif t == 1 mode = lv.ARC_MODE_REVERSE
elif t == 2 mode = lv.ARC_MODE_SYMMETRICAL
end
if mode != nil
self._lv_obj.set_mode(mode)
end
end
def get_type()
return self._lv_obj.get_mode()
end
# mode
def set_mode(t)
var mode
if mode == "expand" self._lv_obj.set_width(lv.SIZE_CONTENT)
elif mode == "break" mode = lv.LABEL_LONG_WRAP
elif mode == "dots" mode = lv.LABEL_LONG_DOT
elif mode == "scroll" mode = lv.LABEL_LONG_SCROLL
elif mode == "loop" mode = lv.LABEL_LONG_SCROLL_CIRCULAR
elif mode == "crop" mode = lv.LABEL_LONG_CLIP
end
if mode != nil
self._lv_obj.lv_label_set_long_mode(mode)
end
end
def get_mode()
end
end
class lvh_switch : lvh_obj
static _lv_class = lv.switch
static _lv_part2_selector = lv.PART_KNOB
end
#- creat sub-classes of lvh_obj and map the LVGL class in static '_lv_class' attribute -#
class lvh_bar : lvh_obj static _lv_class = lv.bar end
class lvh_btn : lvh_obj static _lv_class = lv.btn end
class lvh_btnmatrix : lvh_obj static _lv_class = lv.btnmatrix end
class lvh_checkbox : lvh_obj static _lv_class = lv.checkbox end
class lvh_dropdown : lvh_obj static _lv_class = lv.dropdown end
class lvh_img : lvh_obj static _lv_class = lv.img end
class lvh_line : lvh_obj static _lv_class = lv.line end
class lvh_roller : lvh_obj static _lv_class = lv.roller end
class lvh_slider : lvh_obj static _lv_class = lv.slider end
class lvh_spinner : lvh_obj static _lv_class = lv.spinner end
class lvh_textarea : lvh_obj static _lv_class = lv.textarea end
#- ----------------------------------------------------------------------------
Class `lvh_page` encapsulating `lv_obj` as screen (created with lv.obj(0))
- ----------------------------------------------------------------------------- -#
# ex of transition: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, false)
class lvh_page
var _obj_id # list of objects by id numbers
var _page_id
var _lv_scr # lvgl screen object
var _obj_id # (map) of objects by id numbers
var _page_id # (int) id number of the page
var _lv_scr # (lv_obj) lvgl screen object
#- init(page_number) -#
def init(page_number)
import string
import global
# if no parameter, default to page #1
@ -190,9 +538,11 @@ class lvh_page
self._obj_id = {} # init list of objects
if page_number == 1
self._lv_scr = lv.scr_act() # default screen
elif page_number == 0
self._lv_scr = lv.layer_top() # top layer, visible over all screens
else
self._lv_scr = lv_obj(0) # allocate a new screen
self._lv_scr.set_style_bg_color(lv_color(0x000000), lv.PART_MAIN | lv.STATE_DEFAULT) # set black background
self._lv_scr = lv.obj(0) # allocate a new screen
self._lv_scr.set_style_bg_color(lv.color(0x000000), lv.PART_MAIN | lv.STATE_DEFAULT) # set black background
end
# create a global for this page of form p<page_number>, ex p1
@ -209,6 +559,9 @@ class lvh_page
def set_obj(id, o)
self._obj_id[id] = o
end
def get_obj(id)
return self._obj_id.find(id)
end
#- return id of this page -#
def id()
@ -217,6 +570,8 @@ class lvh_page
#- show this page, with animation -#
def show(anim, duration)
# ignore if there is no screen, like for id 0
if self._lv_scr == nil return nil end
# ignore if the screen is already active
if self._lv_scr._p == lv.scr_act()._p return end # do nothing
@ -278,6 +633,19 @@ def parse_obj(jline, page)
# extract openhasp class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn`
var obj_type = jline["obj"]
# extract parent
var parent
var parent_id = int(jline.find("parentid"))
if parent_id != nil
var parent_obj = lvh_page_cur.get_obj(parent_id)
if parent_obj != nil
parent = parent_obj._lv_obj
end
end
if parent == nil
parent = page.get_scr()
end
# check if a class with the requested name exists
var obj_class = introspect.get(global, "lvh_" + obj_type)
if obj_class == nil
@ -285,14 +653,14 @@ def parse_obj(jline, page)
end
# instanciate the object, passing the lvgl screen as paren object
var obj = obj_class(page.get_scr())
var obj = obj_class(parent)
# add object to page object
lvh_page_cur.set_obj(obj_id, obj)
# set attributes
# try every attribute, if not supported it is silently ignored
for k:jline.keys()
# introspect.set(obj, k, jline[k])
obj.(k) = jline[k]
end
@ -314,8 +682,8 @@ for j:jsonl
var jline = json.load(j)
# parse page first
parse_page(jline)
parse_obj(jline, lvh_page_cur)
if type(jline) == 'instance'
parse_page(jline)
parse_obj(jline, lvh_page_cur)
end
end
print(lvh_pages[1]._obj_id)

View File

@ -0,0 +1,23 @@
{"page":1,"comment":"---------- Page 1 ----------"}
{"page":1,"id":0,"bg_color":"#FFFFFF","bg_grad_color":"#FFFFFF","text_color":"#000000","radius":0,"border_side":0}
{"page":1,"id":1,"obj":"btn","x":0,"y":0,"w":240,"h":30,"text":"LIVING ROOM","value_font":22,"bg_color":"#2C3E50","bg_grad_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0}
{"page":1,"id":2,"obj":"arc","x":20,"y":65,"w":80,"h":100,"max":40,"border_side":0,"type":0,"rotation":0,"start_angle":180,"end_angle":0,"start_angle1":180,"value_font":12,"value_ofs_x":0,"value_ofs_y":-14,"bg_opa":0,"text":"21.2°C","min":-20,"max":50,"val":21}
{"page":1,"id":3,"obj":"arc","x":140,"y":65,"w":80,"h":100,"max":100,"border_side":0,"type":0,"start_angle":180,"end_angle":0,"start_angle1":180,"value_font":12,"value_color":"#000000","value_ofs_x":0,"value_ofs_y":-14,"bg_opa":0,"text":"44%","val":44}
{"page":1,"id":4,"obj":"label","x":0,"y":120,"w":240,"h":20,"text":"CO2 levels: 1483 ppm","radius":0,"border_side":0,"align":1}
{"page":1,"id":5,"obj":"label","x":2,"y":35,"w":140,"text":"Temperature","align":1}
{"page":1,"id":6,"obj":"label","x":140,"y":35,"w":95,"text":"Humidity","align":1}
{"page":1,"id":7,"obj":"btn","x":0,"y":160,"w":240,"h":20,"text":"LIGHTS","bg_color":"#F1C40F","text_color":"#FFFFFF","radius":0,"border_side":0}
{"page":1,"id":8,"obj":"label","x":20,"y":190,"w":140,"h":20,"text":"Ceiling Light"}
{"page":1,"id":9,"obj":"switch","x":160,"y":190,"w":40,"h":20,"toggle":"TRUE"}
{"page":1,"id":10,"obj":"label","x":20,"y":215,"w":140,"h":20,"text":"Wall Light"}
{"page":1,"id":11,"obj":"switch","x":160,"y":215,"w":40,"h":20,"toggle":"TRUE"}
{"page":1,"id":12,"obj":"label","x":20,"y":240,"w":200,"h":20,"text":"Ambient Light"}
{"page":1,"id":13,"obj":"slider","x":30,"y":265,"w":200,"h":10}
{"page":0,"comment":"---------- All pages ----------"}
{"page":0,"id":11,"obj":"btn","action":"prev","x":0,"y":290,"w":79,"h":32,"bg_color":"#34495E","text":"\uE141","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":32}
{"page":0,"id":12,"obj":"btn","action":"back","x":80,"y":290,"w":80,"h":32,"bg_color":"#34495E","text":"\uE2DC","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":24}
{"page":0,"id":13,"obj":"btn","action":"next","x":161,"y":290,"w":79,"h":32,"bg_color":"#34495E","text":"\uE142","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":32}

View File

@ -0,0 +1,35 @@
{"page":1,"id":1,"obj":"btn","x":0,"y":0,"w":240,"h":30,"text":"ENTITIES","value_font":22,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0,"click":0}
{"page":1,"id":2,"obj":"obj","x":5,"y":35,"w":230,"h":250,"click":0}
{"page":1,"id":11,"obj":"label","x":8,"y":33,"w":35,"h":35,"text":"\uE004","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":12,"obj":"label","x":48,"y":43,"w":130,"h":30,"text":"Presence override","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":13,"obj":"switch","x":177,"y":40,"w":50,"h":25,"radius":25,"radius2":15}
{"page":1,"id":21,"obj":"label","x":8,"y":69,"w":35,"h":35,"text":"\uF020","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":22,"obj":"label","x":48,"y":79,"w":130,"h":30,"text":"Front door light","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":23,"obj":"switch","x":177,"y":74,"w":50,"h":25,"radius":25,"radius2":15}
{"page":1,"id":31,"obj":"label","x":8,"y":103,"w":35,"h":35,"text":"\uF054","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":32,"obj":"label","x":48,"y":113,"w":130,"h":30,"text":"Back yard lights","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":33,"obj":"switch","x":177,"y":110,"w":50,"h":25,"radius":25,"radius2":15}
{"page":1,"id":41,"obj":"label","x":8,"y":138,"w":35,"h":35,"text":"\uEA7A","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":42,"obj":"label","x":48,"y":148,"w":130,"h":30,"text":"Trash service","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":43,"obj":"label","x":97,"y":148,"w":130,"h":30,"text":"in 6 days","align":2,"text_color":"black"}
{"page":1,"id":51,"obj":"label","x":8,"y":173,"w":35,"h":35,"text":"\uF39D","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":52,"obj":"label","x":48,"y":183,"w":130,"h":30,"text":"Selective trash","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":53,"obj":"label","x":97,"y":183,"w":130,"h":30,"text":"in 10 days","align":2,"text_color":"black"}
{"page":1,"id":61,"obj":"label","x":8,"y":208,"w":35,"h":35,"text":"\uE32A","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":62,"obj":"label","x":48,"y":218,"w":130,"h":30,"text":"Green energy active","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":63,"obj":"label","x":97,"y":218,"w":130,"h":30,"text":"Yes :)","align":2,"text_color":"black"}
{"page":1,"id":71,"obj":"label","x":8,"y":243,"w":35,"h":35,"text":"\uE957","align":1,"text_font":32,"text_color":"black"}
{"page":1,"id":72,"obj":"label","x":48,"y":253,"w":130,"h":30,"text":"Air quality","align":0,"text_font":16,"text_color":"black"}
{"page":1,"id":73,"obj":"label","x":97,"y":253,"w":130,"h":30,"text":"OK (29.58 µg/m³)","align":2,"text_color":"black"}
{"page":0,"comment":"---------- All pages ----------"}
{"page":0,"id":11,"obj":"btn","action":"prev","x":0,"y":290,"w":79,"h":32,"bg_color":"#34495E","text":"\uE141","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":32}
{"page":0,"id":12,"obj":"btn","action":"back","x":80,"y":290,"w":80,"h":32,"bg_color":"#34495E","text":"\uE2DC","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":24}
{"page":0,"id":13,"obj":"btn","action":"next","x":161,"y":290,"w":79,"h":32,"bg_color":"#34495E","text":"\uE142","text_color":"#CCCCCC","radius":0,"border_side":0,"text_font":32}

View File

@ -19,4 +19,4 @@ static be_define_const_module(
"debug"
);
BE_EXPORT_VARIABLE be_define_const_native_module(debug, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(debug);

View File

@ -18,4 +18,4 @@ static be_define_const_module(
"energy"
);
BE_EXPORT_VARIABLE be_define_const_native_module(energy, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(energy);

View File

@ -16,4 +16,4 @@ static be_define_const_module(
"flash"
);
BE_EXPORT_VARIABLE be_define_const_native_module(flash, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(flash);

View File

@ -15,4 +15,4 @@ static be_define_const_module(
"gc"
);
BE_EXPORT_VARIABLE be_define_const_native_module(gc, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(gc);

View File

@ -16,4 +16,4 @@ static be_define_const_module(
"global"
);
BE_EXPORT_VARIABLE be_define_const_native_module(global, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(global);

View File

@ -283,4 +283,4 @@ static be_define_const_module(
"gpio"
);
BE_EXPORT_VARIABLE be_define_const_native_module(gpio, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(gpio);

View File

@ -18,4 +18,4 @@ static be_define_const_module(
"introspect"
);
BE_EXPORT_VARIABLE be_define_const_native_module(introspect, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(introspect);

View File

@ -15,4 +15,4 @@ static be_define_const_module(
"json"
);
BE_EXPORT_VARIABLE be_define_const_native_module(json, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(json);

View File

@ -18,4 +18,4 @@ static be_define_const_module(
"light"
);
BE_EXPORT_VARIABLE be_define_const_native_module(light, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(light);

View File

@ -40,4 +40,4 @@ static be_define_const_module(
"math"
);
BE_EXPORT_VARIABLE be_define_const_native_module(math, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(math);

View File

@ -14,4 +14,4 @@ static be_define_const_module(
"persist"
);
BE_EXPORT_VARIABLE be_define_const_native_module(persist, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(persist);

View File

@ -14,4 +14,4 @@ static be_define_const_module(
"solidify"
);
BE_EXPORT_VARIABLE be_define_const_native_module(solidify, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(solidify);

View File

@ -14,4 +14,4 @@ static be_define_const_module(
"strict"
);
BE_EXPORT_VARIABLE be_define_const_native_module(strict, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(strict);

View File

@ -22,4 +22,4 @@ static be_define_const_module(
"string"
);
BE_EXPORT_VARIABLE be_define_const_native_module(string, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(string);

View File

@ -15,4 +15,4 @@ static be_define_const_module(
"path"
);
BE_EXPORT_VARIABLE be_define_const_native_module(path, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(path);

View File

@ -28,4 +28,4 @@ static be_define_const_module(
"webserver"
);
BE_EXPORT_VARIABLE be_define_const_native_module(webserver, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(webserver);

View File

@ -138,13 +138,12 @@ const bvector _name = { \
.end = (void*)(_data + (_size) - 1) \
}
#define be_define_const_native_module(_module, _init) \
#define be_define_const_native_module(_module) \
const bntvmodule be_native_module(_module) = { \
.name = #_module, \
.attrs = NULL, \
.size = 0, \
.module = (bmodule*)&(m_lib##_module), \
.init = _init \
.module = (bmodule*)&(m_lib##_module) \
}
/* defines needed for solidified classes */

View File

@ -297,6 +297,62 @@ static void m_solidify_class(bvm *vm, bclass *cl, int builtins)
logfmt("}\n");
}
static void m_solidify_module(bvm *vm, bmodule *ml, int builtins)
{
const char * module_name = ml->info.name;
/* iterate on members to dump closures */
if (ml->table) {
bmapnode *node;
bmapiter iter = be_map_iter();
while ((node = be_map_next(ml->table, &iter)) != NULL) {
if (var_isstr(&node->key) && var_isclosure(&node->value)) {
bclosure *f = var_toobj(&node->value);
m_solidify_closure(vm, f, builtins);
}
}
}
logfmt("\n");
logfmt("/********************************************************************\n");
logfmt("** Solidified module: %s\n", module_name);
logfmt("********************************************************************/\n");
logfmt("be_local_module(%s,\n", module_name);
logfmt(" \"%s\",\n", module_name);
if (ml->table) {
logfmt(" be_nested_map(%i,\n", ml->table->count);
logfmt(" ( (struct bmapnode*) &(const bmapnode[]) {\n");
for (int i = 0; i < ml->table->count; i++) {
bmapnode * node = &ml->table->slots[i];
if (node->key.type != BE_STRING) {
char error[64];
snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type);
be_raise(vm, "internal_error", error);
}
int key_next = node->key.next;
size_t len = strlen(str(node->key.v.s));
if (0xFFFFFF == key_next) {
key_next = -1; /* more readable */
}
logfmt(" { be_nested_key(\"%s\", %i, %zu, %i), ", str(node->key.v.s), be_strhash(node->key.v.s), len >= 255 ? 255 : len, key_next);
m_solidify_bvalue(vm, &node->value, module_name, str(node->key.v.s));
logfmt(" },\n");
}
logfmt(" }))\n");
} else {
logfmt(" NULL,\n");
}
logfmt(");\n");
logfmt("BE_EXPORT_VARIABLE be_define_const_native_module(%s, NULL);\n", module_name);
logfmt("/********************************************************************\n");
}
#define be_builtin_count(vm) \
be_vector_count(&(vm)->gbldesc.builtin.vlist)
@ -308,6 +364,8 @@ static int m_dump(bvm *vm)
m_solidify_closure(vm, var_toobj(v), be_builtin_count(vm));
} else if (var_isclass(v)) {
m_solidify_class(vm, var_toobj(v), be_builtin_count(vm));
} else if (var_ismodule(v)) {
m_solidify_module(vm, var_toobj(v), be_builtin_count(vm));
}
}
be_return_nil(vm);

View File

@ -87,7 +87,7 @@
res = ibinop(op, a, b); \
} else if (var_isnumber(a) && var_isnumber(b)) { \
res = var2real(a) op var2real(b); \
} else if (var_isinstance(a)) { \
} else if (var_isinstance(a) && !var_isnil(b)) { \
res = object_eqop(vm, #op, iseq, a, b); \
} else if (var_type(a) == var_type(b)) { /* same types */ \
if (var_isnil(a)) { /* nil op nil */ \
@ -882,28 +882,34 @@ newframe: /* a new call frame */
binstance *obj = var_toobj(a);
bstring *attr = var_tostr(b);
if (!be_instance_setmember(vm, obj, attr, c)) {
reg = vm->reg;
vm_error(vm, "attribute_error",
"class '%s' cannot assign to attribute '%s'",
str(be_instance_name(obj)), str(attr));
}
reg = vm->reg;
dispatch();
}
if (var_isclass(a) && var_isstr(b)) {
bclass *obj = var_toobj(a);
bstring *attr = var_tostr(b);
if (!be_class_setmember(vm, obj, attr, c)) {
reg = vm->reg;
vm_error(vm, "attribute_error",
"class '%s' cannot assign to static attribute '%s'",
str(be_class_name(obj)), str(attr));
}
reg = vm->reg;
dispatch();
}
if (var_ismodule(a) && var_isstr(b)) {
bmodule *obj = var_toobj(a);
bstring *attr = var_tostr(b);
if (be_module_setmember(vm, obj, attr, c)) {
reg = vm->reg;
dispatch();
} else {
reg = vm->reg;
// fall through exception below
}
}

View File

@ -18,7 +18,7 @@ extern "C" {
#endif
/* do not modify the version number! */
#define BERRY_VERSION "0.1.10"
#define BERRY_VERSION "1.0.0"
#if BE_STACK_TOTAL_MAX < BE_STACK_FREE_MIN * 2
#error "The value of the macro BE_STACK_TOTAL_MAX is too small."
@ -172,7 +172,6 @@ typedef struct bntvmodule {
const bntvmodobj *attrs; /* native module attributes */
size_t size; /* native module attribute count */
const struct bmodule *module; /* const module object */
bntvfunc init; /* initialization function */
} bntvmodule;
/* native module node definition macro */

View File

@ -143,8 +143,7 @@ std::string block_builder::module_tostring(const block &block)
if (scp != "static") { /* extern */
ostr << "\n" << scp
<< " be_define_const_native_module("
<< block.name << ", "
<< init(block) << ");" << std::endl;
<< block.name << ");" << std::endl;
}
return ostr.str();
}
@ -168,12 +167,6 @@ std::string block_builder::name(const block &block)
return it == block.attr.end() ? block.name : it->second;
}
std::string block_builder::init(const block &block)
{
auto it = block.attr.find("init");
return it == block.attr.end() ? "NULL" : it->second;
}
void block_builder::writefile(const std::string &filename, const std::string &text)
{
std::string pathname(filename);

View File

@ -39,7 +39,6 @@ private:
std::string scope(const block &block);
std::string super(const block &block);
std::string name(const block &block);
std::string init(const block &block);
void writefile(const std::string &filename, const std::string &text);
private:

View File

@ -137,7 +137,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
*-----------*/
/*Enable the log module*/
#define LV_USE_LOG 0
#define LV_USE_LOG 0 // change to 0 in normal conditions
#if LV_USE_LOG
/*How important log should be added:

View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
/**
* @file lv_theme_openhasp.h
*
*/
#ifndef LV_THEME_OPENHASP_H
#define LV_THEME_OPENHASP_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "core/lv_obj.h"
/*********************
* DEFINES
*********************/
typedef enum {
LV_THEME_HASP_FLAG_DARK = 0x01,
LV_THEME_HASP_FLAG_LIGHT = 0x02,
LV_THEME_HASP_FLAG_NO_TRANSITION = 0x10,
LV_THEME_HASP_FLAG_NO_FOCUS = 0x20,
} lv_theme_hasp_flag_t;
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Initialize the theme
* @param color_primary the primary color of the theme
* @param color_secondary the secondary color for the theme
* @param font pointer to a font to use.
* @return a pointer to reference this theme later
*/
lv_theme_t * lv_theme_openhasp_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font);
bool lv_theme_openhasp_is_inited(void);
/**********************
* MACROS
**********************/
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /*LV_THEME_DEFAULT_H*/

View File

@ -51,6 +51,17 @@ lib_extra_dirs =
lib/lib_rf
lib/lib_div
[tasmota]
; *** Settings here do NOT affect firmware building ***
; Uncomment if you do NOT want gzipped map file(s)
;disable_map_gz = 1
; Uncomment and specify a folder where to place the map file(s) (default set to folder build_output)
;map_dir = /tmp/map_files/
; Uncomment if you do NOT want additionally gzipped firmware file(s)
;disable_bin_gz = 1
; Uncomment and specify a folder where to place the firmware file(s) (default set to folder build_output)
;bin_dir = /tmp/bin_files/
[scripts_defaults]
extra_scripts = pio-tools/strip-floats.py
pio-tools/name-firmware.py
@ -76,7 +87,6 @@ build_flags = -DCORE_DEBUG_LEVEL=0
-DUSE_CONFIG_OVERRIDE
; *********************************************************************
[esp82xx_defaults]
build_flags = ${esp_defaults.build_flags}
-DNDEBUG
@ -98,6 +108,7 @@ build_flags = ${esp_defaults.build_flags}
; *** Esp8266 Tasmota modified Arduino core based on core 2.7.4. Added Backport for PWM selection
platform = espressif8266 @ 2.6.3
platform_packages = tasmota/framework-arduinoespressif8266 @ ~2.7.4
platformio/tool-esptoolpy @ ~1.30100
build_unflags = ${esp_defaults.build_unflags}
build_flags = ${esp82xx_defaults.build_flags}
; *** Use ONE of the two PWM variants. Tasmota default is Locked PWM

View File

@ -40,9 +40,19 @@ default_envs =
[env]
framework = ${common.framework}
platform = ${common.platform}
platform_packages = ${common.platform_packages}
; Activate Development core by removing ";" the next lines
;platform = https://github.com/platformio/platform-espressif8266.git
;platform_packages = ${common.platform_packages}
; framework-arduinoespressif8266 @ https://github.com/esp8266/Arduino.git
;build_unflags = ${common.build_unflags}
; -Wswitch-unreachable
;build_flags = ${common.build_flags}
; -D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
; -Wno-switch-unreachable
; *** Optional Debug messages
; -DDEBUG_TASMOTA_CORE
; -DDEBUG_TASMOTA_DRIVER
; -DDEBUG_TASMOTA_SENSOR
; Build variant 1MB = 1MB firmware no filesystem (default)
board = ${common.board}
; Build variant 2MB = 1MB firmware, 1MB filesystem (most Shelly devices)
@ -51,18 +61,9 @@ board = ${common.board}
;board = esp8266_4M2M
;board_build.f_cpu = 160000000L
;board_build.f_flash = 40000000L
board_build.filesystem = ${common.board_build.filesystem}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags}
; *** Optional Debug messages
; -DDEBUG_TASMOTA_CORE
; -DDEBUG_TASMOTA_DRIVER
; -DDEBUG_TASMOTA_SENSOR
monitor_speed = ${common.monitor_speed}
;monitor_speed = 115200
; *** Serial port used for erasing/flashing the ESP82xx
;upload_port = ${common.upload_port}
upload_port = COM5
upload_resetmethod = ${common.upload_resetmethod}
;upload_port = COM5
extra_scripts = ${scripts_defaults.extra_scripts}
; pio-tools/obj-dump.py
lib_ldf_mode = ${common.lib_ldf_mode}
@ -88,9 +89,13 @@ lib_extra_dirs = ${library.lib_extra_dirs}
[env:tasmota32_base]
framework = ${common.framework}
platform = ${core32.platform}
platform_packages = ${core32.platform_packages}
; *** Uncomment next lines ";" to enable Beta Tasmota Arduino version ESP32 IDF4.4
;platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
;platform_packages = ${core32.platform_packages}
; framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
build_unflags = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
; Build variant ESP32 4M Flash, Tasmota 1856k Code/OTA, 320k LITTLEFS (default)
board = esp32_4M
; Build variant ESP32 8M Flash, Tasmota 2944k Code/OTA, 2112k LITTLEFS
@ -106,8 +111,6 @@ upload_port = COM4
;upload_speed = 115200
upload_resetmethod = ${common.upload_resetmethod}
extra_scripts = ${common.extra_scripts}
build_unflags = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
lib_ldf_mode = ${common.lib_ldf_mode}
lib_compat_mode = ${common.lib_compat_mode}
lib_ignore =

View File

@ -25,10 +25,10 @@ build_flags = ${esp_defaults.build_flags}
; wrappers for the crash-recorder
-Wl,--wrap=panicHandler -Wl,--wrap=xt_unhandled_exception
[core32]
platform = espressif32 @ 3.3.1
platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-release_v3.3.5.tar.gz
platformio/tool-esptoolpy @ ~1.30100
platformio/tool-mklittlefs @ ~1.203.200522
build_unflags = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
build_flags = ${esp32_defaults.build_flags}

View File

@ -1,31 +1,12 @@
[core]
; Activate (by removing the ";" in the next lines) if you want to override the standard core defined in platformio.ini !!!
;platform = ${core_dev.platform}
;platform_packages = ${core_dev.platform_packages}
;build_unflags = ${core_dev.build_unflags}
;build_flags = ${core_dev.build_flags}
[core_dev]
; *** Esp8266 core for Arduino 3.0.2
platform = https://github.com/platformio/platform-espressif8266.git
platform_packages =
build_unflags = ${env.build_unflags}
-Wswitch-unreachable
build_flags = ${env.build_flags}
; *** 16k extra heap https://github.com/esp8266/Arduino/pull/7060
-D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED
-Wno-switch-unreachable
; Settings in [tasmota] do NOT affect firmware building
[tasmota]
; Uncomment next line if you do NOT want gzipped map file(s)
;disable_map_gz = 1
; Uncomment and specify a folder where to place the map file(s) (default set to folder build_output)
;map_dir = /tmp/map_files/
; Uncomment next line if you do NOT want additionally gzipped firmware file(s)
;disable_bin_gz = 1
; Uncomment and specify a folder where to place the firmware file(s) (default set to folder build_output)
;bin_dir = /tmp/bin_files/
; *** Tasmota development core version ESP32 IDF3.3.5 / Currently none, same as default
[env:tasmota32idf3]
extends = env:tasmota32_base
platform = espressif32 @ 3.3.1
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-release_v3.3.5.tar.gz
build_unflags = ${env:tasmota32_base.build_unflags}
build_flags = ${env:tasmota32_base.build_flags}
;-DESP32_STAGE=true
[env:tasmota-rangeextender]
build_flags = ${env.build_flags}
@ -34,23 +15,38 @@ build_flags = ${env.build_flags}
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
; *** Tasmota development core version ESP32 IDF3.3.5 / Currently none, same as default
[env:tasmota32idf3]
; *** Beta Tasmota version for ESP32 IDF4.4.
[env:tasmota32idf4]
extends = env:tasmota32_base
platform = espressif32 @ 3.3.0
platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.4/tasmota-arduinoespressif32-release_v3.3.5.tar.gz
platformio/tool-mklittlefs @ ~1.203.200522
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
build_unflags = ${env:tasmota32_base.build_unflags}
-Wswitch-unreachable
-Wstringop-overflow
-Wincompatible-pointer-types
build_flags = ${env:tasmota32_base.build_flags}
-Wno-switch-unreachable
-Wno-stringop-overflow
; ***Uncomment next two lines to enable BLE
;-DUSE_BLE_ESP32
;-DUSE_MI_ESP32
;-DESP32_STAGE=true
[env:tasmota32-rangeextender]
extends = env:tasmota32idf4
build_flags = ${env:tasmota32idf4.build_flags}
-D FIRMWARE_TASMOTA32
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
;*** Beta Tasmota version for ESP32-S2
[env:tasmota32s2]
extends = env:tasmota32_base
board = esp32s2
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/464/framework-arduinoespressif32-master-3dde75d58.tar.gz
platformio/tool-mklittlefs @ ~1.203.200522
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
build_unflags = ${env:tasmota32_base.build_unflags}
-Wswitch-unreachable
-Wstringop-overflow
@ -70,39 +66,6 @@ lib_ignore =
ESP32-HomeKit
Micro-RTSP
; *** Beta Tasmota version for ESP32 IDF4.4.
[env:tasmota32idf4]
extends = env:tasmota32_base
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/464/framework-arduinoespressif32-master-3dde75d58.tar.gz
platformio/tool-mklittlefs @ ~1.203.200522
build_unflags = ${env:tasmota32_base.build_unflags}
-Wswitch-unreachable
-Wstringop-overflow
-Wincompatible-pointer-types
build_flags = ${env:tasmota32_base.build_flags}
-Wno-switch-unreachable
-Wno-stringop-overflow
; ***Uncomment next two lines to enable BLE
;-DUSE_BLE_ESP32
;-DUSE_MI_ESP32
;-DESP32_STAGE=true
lib_extra_dirs = lib/libesp32
lib/libesp32_div
lib/libesp32_lvgl
lib/lib_basic
lib/lib_i2c
lib/lib_ssl
lib/lib_display
[env:tasmota32-rangeextender]
extends = env:tasmota32idf4
build_flags = ${env:tasmota32idf4.build_flags}
-D FIRMWARE_TASMOTA32
-D USE_WIFI_RANGE_EXTENDER
-D USE_WIFI_RANGE_EXTENDER_NAPT
; *** Debug version used for PlatformIO Home Project Inspection
[env:tasmota-debug]
build_type = debug
@ -132,9 +95,8 @@ build_flags = ${env:tasmota32_base.build_flags}
[env:tasmota32solo1-ocd]
;build_type = debug
extends = env:tasmota32_base
platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.4/tasmota-arduinoespressif32-solo1-release_v3.3.5.tar.gz
platformio/tool-esptoolpy @ ~1.30100
platformio/tool-mklittlefs @ ~1.203.200522
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-solo1-release_v3.3.5.tar.gz
board = esp32_solo1_4M
debug_tool = esp-prog
upload_protocol = esp-prog

View File

@ -9,8 +9,8 @@ monitor_speed = 115200
upload_port = ${common.upload_port}
upload_resetmethod = ${common.upload_resetmethod}
extra_scripts = ${common.extra_scripts}
build_unflags = ${esp32_defaults.build_unflags}
build_flags = ${esp32_defaults.build_flags}
build_unflags = ${core32.build_unflags}
build_flags = ${core32.build_flags}
lib_ldf_mode = ${common.lib_ldf_mode}
lib_compat_mode = ${common.lib_compat_mode}
lib_extra_dirs = ${common.lib_extra_dirs}
@ -50,9 +50,8 @@ build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
[env:tasmota32solo1]
extends = env:tasmota32_base
platform_packages = framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-solo1-release_v3.3.5.tar.gz
platformio/tool-esptoolpy @ ~1.30100
platformio/tool-mklittlefs @ ~1.203.200522
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/1.0.7.5/tasmota-arduinoespressif32-solo1-release_v3.3.5.tar.gz
build_flags = ${env:tasmota32_base.build_flags} -DFIRMWARE_TASMOTA32
[env:tasmota32-webcam]
@ -98,8 +97,8 @@ lib_extra_dirs = lib/libesp32, lib/lib_basic
extends = env:tasmota32_base
board = esp32c3
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-idf-master
platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/464/framework-arduinoespressif32-master-3dde75d58.tar.gz
platformio/tool-mklittlefs @ ~1.203.200522
platform_packages = ${core32.platform_packages}
framework-arduinoespressif32 @ https://github.com/tasmota/arduino-esp32/releases/download/2.0.1rc1/framework-arduinoespressif32-release_IDF4.4.tar.gz
build_unflags = ${env:tasmota32_base.build_unflags}
-Wswitch-unreachable
-Wstringop-overflow

View File

@ -110,6 +110,10 @@ const lvbe_call_c_t lv_font_func[] = {
const lvbe_call_c_t lv_color_func[] = {
};
/* `lv_theme` methods */
const lvbe_call_c_t lv_theme_func[] = {
};
/* `lv_img` methods */
#ifdef BE_LV_WIDGET_IMG
const lvbe_call_c_t lv_img_func[] = {
@ -131,12 +135,30 @@ const lvbe_call_c_t lv_img_func[] = {
};
#endif // BE_LV_WIDGET_IMG
/* `lv_disp` methods */
const lvbe_call_c_t lv_disp_func[] = {
{ "clean_dcache", (void*) &lv_disp_clean_dcache, "", "(lv.lv_disp)" },
{ "dpx", (void*) &lv_disp_dpx, "i", "(lv.lv_disp)i" },
{ "get_inactive_time", (void*) &lv_disp_get_inactive_time, "i", "(lv.lv_disp)" },
{ "get_layer_sys", (void*) &lv_disp_get_layer_sys, "lv.lv_obj", "(lv.lv_disp)" },
{ "get_layer_top", (void*) &lv_disp_get_layer_top, "lv.lv_obj", "(lv.lv_disp)" },
{ "get_scr_act", (void*) &lv_disp_get_scr_act, "lv.lv_obj", "(lv.lv_disp)" },
{ "get_scr_prev", (void*) &lv_disp_get_scr_prev, "lv.lv_obj", "(lv.lv_disp)" },
{ "get_theme", (void*) &lv_disp_get_theme, "lv.lv_theme", "(lv.lv_disp)" },
{ "load_scr", (void*) &lv_disp_load_scr, "", "(lv.lv_obj)" },
{ "set_bg_color", (void*) &lv_disp_set_bg_color, "", "(lv.lv_disp)(lv.lv_color)" },
{ "set_bg_image", (void*) &lv_disp_set_bg_image, "", "(lv.lv_disp)." },
{ "set_bg_opa", (void*) &lv_disp_set_bg_opa, "", "(lv.lv_disp)i" },
{ "set_theme", (void*) &lv_disp_set_theme, "", "(lv.lv_disp)(lv.lv_theme)" },
{ "trig_activity", (void*) &lv_disp_trig_activity, "", "(lv.lv_disp)" },
};
/* `lv_obj` methods */
const lvbe_call_c_t lv_obj_func[] = {
{ "add_event_cb", (void*) &lv_obj_add_event_cb, "i", "(lv.lv_obj)^lv_event_cb^i." },
{ "add_flag", (void*) &lv_obj_add_flag, "", "(lv.lv_obj)i" },
{ "add_state", (void*) &lv_obj_add_state, "", "(lv.lv_obj)i" },
{ "add_style", (void*) &lv_obj_add_style, "", "(lv.lv_obj)(lv.lv_style)(lv.lv_style_selector)" },
{ "add_style", (void*) &lv_obj_add_style, "", "(lv.lv_obj)(lv.lv_style)i" },
{ "align", (void*) &lv_obj_align, "", "(lv.lv_obj)iii" },
{ "align_to", (void*) &lv_obj_align_to, "", "(lv.lv_obj)(lv.lv_obj)iii" },
{ "allocate_spec_attr", (void*) &lv_obj_allocate_spec_attr, "", "(lv.lv_obj)" },
@ -162,9 +184,10 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "get_content_height", (void*) &lv_obj_get_content_height, "i", "(lv.lv_obj)" },
{ "get_content_width", (void*) &lv_obj_get_content_width, "i", "(lv.lv_obj)" },
{ "get_coords", (void*) &lv_obj_get_coords, "", "(lv.lv_obj)(lv.lv_area)" },
{ "get_disp", (void*) &lv_obj_get_disp, "lv.lv_disp", "(lv.lv_obj)" },
{ "get_group", (void*) &lv_obj_get_group, ".", "(lv.lv_obj)" },
{ "get_height", (void*) &lv_obj_get_height, "i", "(lv.lv_obj)" },
{ "get_local_style_prop", (void*) &lv_obj_get_local_style_prop, "i", "(lv.lv_obj)(lv.lv_style_prop)(lv.lv_style_value)(lv.lv_style_selector)" },
{ "get_local_style_prop", (void*) &lv_obj_get_local_style_prop, "i", "(lv.lv_obj)(lv.lv_style_prop)(lv.lv_style_value)i" },
{ "get_parent", (void*) &lv_obj_get_parent, "lv.lv_obj", "(lv.lv_obj)" },
{ "get_screen", (void*) &lv_obj_get_screen, "lv.lv_obj", "(lv.lv_obj)" },
{ "get_scroll_bottom", (void*) &lv_obj_get_scroll_bottom, "i", "(lv.lv_obj)" },
@ -307,8 +330,8 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "refresh_style", (void*) &lv_obj_refresh_style, "", "(lv.lv_obj)i(lv.lv_style_prop)" },
{ "remove_event_cb", (void*) &lv_obj_remove_event_cb, "b", "(lv.lv_obj)^lv_event_cb^" },
{ "remove_event_dsc", (void*) &lv_obj_remove_event_dsc, "b", "(lv.lv_obj)i" },
{ "remove_local_style_prop", (void*) &lv_obj_remove_local_style_prop, "b", "(lv.lv_obj)(lv.lv_style_prop)(lv.lv_style_selector)" },
{ "remove_style", (void*) &lv_obj_remove_style, "", "(lv.lv_obj)(lv.lv_style)(lv.lv_style_selector)" },
{ "remove_local_style_prop", (void*) &lv_obj_remove_local_style_prop, "b", "(lv.lv_obj)(lv.lv_style_prop)i" },
{ "remove_style", (void*) &lv_obj_remove_style, "", "(lv.lv_obj)(lv.lv_style)i" },
{ "remove_style_all", (void*) &lv_obj_remove_style_all, "", "(lv.lv_obj)" },
{ "scroll_by", (void*) &lv_obj_scroll_by, "", "(lv.lv_obj)ii(lv.lv_anim_enable)" },
{ "scroll_to", (void*) &lv_obj_scroll_to, "", "(lv.lv_obj)ii(lv.lv_anim_enable)" },
@ -323,7 +346,7 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "set_ext_click_area", (void*) &lv_obj_set_ext_click_area, "", "(lv.lv_obj)i" },
{ "set_height", (void*) &lv_obj_set_height, "", "(lv.lv_obj)i" },
{ "set_layout", (void*) &lv_obj_set_layout, "", "(lv.lv_obj)i" },
{ "set_local_style_prop", (void*) &lv_obj_set_local_style_prop, "", "(lv.lv_obj)(lv.lv_style_prop)i(lv.lv_style_selector)" },
{ "set_local_style_prop", (void*) &lv_obj_set_local_style_prop, "", "(lv.lv_obj)(lv.lv_style_prop)ii" },
{ "set_parent", (void*) &lv_obj_set_parent, "", "(lv.lv_obj)(lv.lv_obj)" },
{ "set_pos", (void*) &lv_obj_set_pos, "", "(lv.lv_obj)ii" },
{ "set_scroll_dir", (void*) &lv_obj_set_scroll_dir, "", "(lv.lv_obj)i" },
@ -331,100 +354,100 @@ const lvbe_call_c_t lv_obj_func[] = {
{ "set_scroll_snap_y", (void*) &lv_obj_set_scroll_snap_y, "", "(lv.lv_obj)i" },
{ "set_scrollbar_mode", (void*) &lv_obj_set_scrollbar_mode, "", "(lv.lv_obj)i" },
{ "set_size", (void*) &lv_obj_set_size, "", "(lv.lv_obj)ii" },
{ "set_style_align", (void*) &lv_obj_set_style_align, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_anim_speed", (void*) &lv_obj_set_style_anim_speed, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_anim_time", (void*) &lv_obj_set_style_anim_time, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_arc_color", (void*) &lv_obj_set_style_arc_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_arc_color_filtered", (void*) &lv_obj_set_style_arc_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_arc_img_src", (void*) &lv_obj_set_style_arc_img_src, "", "(lv.lv_obj).(lv.lv_style_selector)" },
{ "set_style_arc_opa", (void*) &lv_obj_set_style_arc_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_arc_rounded", (void*) &lv_obj_set_style_arc_rounded, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_arc_width", (void*) &lv_obj_set_style_arc_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_base_dir", (void*) &lv_obj_set_style_base_dir, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_color", (void*) &lv_obj_set_style_bg_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_color_filtered", (void*) &lv_obj_set_style_bg_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_grad_color", (void*) &lv_obj_set_style_bg_grad_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_grad_color_filtered", (void*) &lv_obj_set_style_bg_grad_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_grad_dir", (void*) &lv_obj_set_style_bg_grad_dir, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_grad_stop", (void*) &lv_obj_set_style_bg_grad_stop, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_img_opa", (void*) &lv_obj_set_style_bg_img_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_img_recolor", (void*) &lv_obj_set_style_bg_img_recolor, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_img_recolor_filtered", (void*) &lv_obj_set_style_bg_img_recolor_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_bg_img_recolor_opa", (void*) &lv_obj_set_style_bg_img_recolor_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_img_src", (void*) &lv_obj_set_style_bg_img_src, "", "(lv.lv_obj).(lv.lv_style_selector)" },
{ "set_style_bg_img_tiled", (void*) &lv_obj_set_style_bg_img_tiled, "", "(lv.lv_obj)b(lv.lv_style_selector)" },
{ "set_style_bg_main_stop", (void*) &lv_obj_set_style_bg_main_stop, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_bg_opa", (void*) &lv_obj_set_style_bg_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_blend_mode", (void*) &lv_obj_set_style_blend_mode, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_border_color", (void*) &lv_obj_set_style_border_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_border_color_filtered", (void*) &lv_obj_set_style_border_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_border_opa", (void*) &lv_obj_set_style_border_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_border_post", (void*) &lv_obj_set_style_border_post, "", "(lv.lv_obj)b(lv.lv_style_selector)" },
{ "set_style_border_side", (void*) &lv_obj_set_style_border_side, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_border_width", (void*) &lv_obj_set_style_border_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_clip_corner", (void*) &lv_obj_set_style_clip_corner, "", "(lv.lv_obj)b(lv.lv_style_selector)" },
{ "set_style_color_filter_dsc", (void*) &lv_obj_set_style_color_filter_dsc, "", "(lv.lv_obj)(lv.lv_color_filter_dsc)(lv.lv_style_selector)" },
{ "set_style_color_filter_opa", (void*) &lv_obj_set_style_color_filter_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_height", (void*) &lv_obj_set_style_height, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_img_opa", (void*) &lv_obj_set_style_img_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_img_recolor", (void*) &lv_obj_set_style_img_recolor, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_img_recolor_filtered", (void*) &lv_obj_set_style_img_recolor_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_img_recolor_opa", (void*) &lv_obj_set_style_img_recolor_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_layout", (void*) &lv_obj_set_style_layout, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_line_color", (void*) &lv_obj_set_style_line_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_line_color_filtered", (void*) &lv_obj_set_style_line_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_line_dash_gap", (void*) &lv_obj_set_style_line_dash_gap, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_line_dash_width", (void*) &lv_obj_set_style_line_dash_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_line_opa", (void*) &lv_obj_set_style_line_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_line_rounded", (void*) &lv_obj_set_style_line_rounded, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_line_width", (void*) &lv_obj_set_style_line_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_max_height", (void*) &lv_obj_set_style_max_height, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_max_width", (void*) &lv_obj_set_style_max_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_min_height", (void*) &lv_obj_set_style_min_height, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_min_width", (void*) &lv_obj_set_style_min_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_opa", (void*) &lv_obj_set_style_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_outline_color", (void*) &lv_obj_set_style_outline_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_outline_color_filtered", (void*) &lv_obj_set_style_outline_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_outline_opa", (void*) &lv_obj_set_style_outline_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_outline_pad", (void*) &lv_obj_set_style_outline_pad, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_outline_width", (void*) &lv_obj_set_style_outline_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_all", (void*) &lv_obj_set_style_pad_all, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_bottom", (void*) &lv_obj_set_style_pad_bottom, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_column", (void*) &lv_obj_set_style_pad_column, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_gap", (void*) &lv_obj_set_style_pad_gap, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_hor", (void*) &lv_obj_set_style_pad_hor, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_left", (void*) &lv_obj_set_style_pad_left, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_right", (void*) &lv_obj_set_style_pad_right, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_row", (void*) &lv_obj_set_style_pad_row, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_top", (void*) &lv_obj_set_style_pad_top, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_pad_ver", (void*) &lv_obj_set_style_pad_ver, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_radius", (void*) &lv_obj_set_style_radius, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_shadow_color", (void*) &lv_obj_set_style_shadow_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_shadow_color_filtered", (void*) &lv_obj_set_style_shadow_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_shadow_ofs_x", (void*) &lv_obj_set_style_shadow_ofs_x, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_shadow_ofs_y", (void*) &lv_obj_set_style_shadow_ofs_y, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_shadow_opa", (void*) &lv_obj_set_style_shadow_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_shadow_spread", (void*) &lv_obj_set_style_shadow_spread, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_shadow_width", (void*) &lv_obj_set_style_shadow_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_size", (void*) &lv_obj_set_style_size, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_text_align", (void*) &lv_obj_set_style_text_align, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_text_color", (void*) &lv_obj_set_style_text_color, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_text_color_filtered", (void*) &lv_obj_set_style_text_color_filtered, "", "(lv.lv_obj)(lv.lv_color)(lv.lv_style_selector)" },
{ "set_style_text_decor", (void*) &lv_obj_set_style_text_decor, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_text_font", (void*) &lv_obj_set_style_text_font, "", "(lv.lv_obj)(lv.lv_font)(lv.lv_style_selector)" },
{ "set_style_text_letter_space", (void*) &lv_obj_set_style_text_letter_space, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_text_line_space", (void*) &lv_obj_set_style_text_line_space, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_text_opa", (void*) &lv_obj_set_style_text_opa, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_transform_angle", (void*) &lv_obj_set_style_transform_angle, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_transform_height", (void*) &lv_obj_set_style_transform_height, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_transform_width", (void*) &lv_obj_set_style_transform_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_transform_zoom", (void*) &lv_obj_set_style_transform_zoom, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_transition", (void*) &lv_obj_set_style_transition, "", "(lv.lv_obj)(lv.lv_style_transition_dsc)(lv.lv_style_selector)" },
{ "set_style_translate_x", (void*) &lv_obj_set_style_translate_x, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_translate_y", (void*) &lv_obj_set_style_translate_y, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_width", (void*) &lv_obj_set_style_width, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_x", (void*) &lv_obj_set_style_x, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_y", (void*) &lv_obj_set_style_y, "", "(lv.lv_obj)i(lv.lv_style_selector)" },
{ "set_style_align", (void*) &lv_obj_set_style_align, "", "(lv.lv_obj)ii" },
{ "set_style_anim_speed", (void*) &lv_obj_set_style_anim_speed, "", "(lv.lv_obj)ii" },
{ "set_style_anim_time", (void*) &lv_obj_set_style_anim_time, "", "(lv.lv_obj)ii" },
{ "set_style_arc_color", (void*) &lv_obj_set_style_arc_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_arc_color_filtered", (void*) &lv_obj_set_style_arc_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_arc_img_src", (void*) &lv_obj_set_style_arc_img_src, "", "(lv.lv_obj).i" },
{ "set_style_arc_opa", (void*) &lv_obj_set_style_arc_opa, "", "(lv.lv_obj)ii" },
{ "set_style_arc_rounded", (void*) &lv_obj_set_style_arc_rounded, "", "(lv.lv_obj)ii" },
{ "set_style_arc_width", (void*) &lv_obj_set_style_arc_width, "", "(lv.lv_obj)ii" },
{ "set_style_base_dir", (void*) &lv_obj_set_style_base_dir, "", "(lv.lv_obj)ii" },
{ "set_style_bg_color", (void*) &lv_obj_set_style_bg_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_color_filtered", (void*) &lv_obj_set_style_bg_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_grad_color", (void*) &lv_obj_set_style_bg_grad_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_grad_color_filtered", (void*) &lv_obj_set_style_bg_grad_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_grad_dir", (void*) &lv_obj_set_style_bg_grad_dir, "", "(lv.lv_obj)ii" },
{ "set_style_bg_grad_stop", (void*) &lv_obj_set_style_bg_grad_stop, "", "(lv.lv_obj)ii" },
{ "set_style_bg_img_opa", (void*) &lv_obj_set_style_bg_img_opa, "", "(lv.lv_obj)ii" },
{ "set_style_bg_img_recolor", (void*) &lv_obj_set_style_bg_img_recolor, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_img_recolor_filtered", (void*) &lv_obj_set_style_bg_img_recolor_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_bg_img_recolor_opa", (void*) &lv_obj_set_style_bg_img_recolor_opa, "", "(lv.lv_obj)ii" },
{ "set_style_bg_img_src", (void*) &lv_obj_set_style_bg_img_src, "", "(lv.lv_obj).i" },
{ "set_style_bg_img_tiled", (void*) &lv_obj_set_style_bg_img_tiled, "", "(lv.lv_obj)bi" },
{ "set_style_bg_main_stop", (void*) &lv_obj_set_style_bg_main_stop, "", "(lv.lv_obj)ii" },
{ "set_style_bg_opa", (void*) &lv_obj_set_style_bg_opa, "", "(lv.lv_obj)ii" },
{ "set_style_blend_mode", (void*) &lv_obj_set_style_blend_mode, "", "(lv.lv_obj)ii" },
{ "set_style_border_color", (void*) &lv_obj_set_style_border_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_border_color_filtered", (void*) &lv_obj_set_style_border_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_border_opa", (void*) &lv_obj_set_style_border_opa, "", "(lv.lv_obj)ii" },
{ "set_style_border_post", (void*) &lv_obj_set_style_border_post, "", "(lv.lv_obj)bi" },
{ "set_style_border_side", (void*) &lv_obj_set_style_border_side, "", "(lv.lv_obj)ii" },
{ "set_style_border_width", (void*) &lv_obj_set_style_border_width, "", "(lv.lv_obj)ii" },
{ "set_style_clip_corner", (void*) &lv_obj_set_style_clip_corner, "", "(lv.lv_obj)bi" },
{ "set_style_color_filter_dsc", (void*) &lv_obj_set_style_color_filter_dsc, "", "(lv.lv_obj)(lv.lv_color_filter_dsc)i" },
{ "set_style_color_filter_opa", (void*) &lv_obj_set_style_color_filter_opa, "", "(lv.lv_obj)ii" },
{ "set_style_height", (void*) &lv_obj_set_style_height, "", "(lv.lv_obj)ii" },
{ "set_style_img_opa", (void*) &lv_obj_set_style_img_opa, "", "(lv.lv_obj)ii" },
{ "set_style_img_recolor", (void*) &lv_obj_set_style_img_recolor, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_img_recolor_filtered", (void*) &lv_obj_set_style_img_recolor_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_img_recolor_opa", (void*) &lv_obj_set_style_img_recolor_opa, "", "(lv.lv_obj)ii" },
{ "set_style_layout", (void*) &lv_obj_set_style_layout, "", "(lv.lv_obj)ii" },
{ "set_style_line_color", (void*) &lv_obj_set_style_line_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_line_color_filtered", (void*) &lv_obj_set_style_line_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_line_dash_gap", (void*) &lv_obj_set_style_line_dash_gap, "", "(lv.lv_obj)ii" },
{ "set_style_line_dash_width", (void*) &lv_obj_set_style_line_dash_width, "", "(lv.lv_obj)ii" },
{ "set_style_line_opa", (void*) &lv_obj_set_style_line_opa, "", "(lv.lv_obj)ii" },
{ "set_style_line_rounded", (void*) &lv_obj_set_style_line_rounded, "", "(lv.lv_obj)ii" },
{ "set_style_line_width", (void*) &lv_obj_set_style_line_width, "", "(lv.lv_obj)ii" },
{ "set_style_max_height", (void*) &lv_obj_set_style_max_height, "", "(lv.lv_obj)ii" },
{ "set_style_max_width", (void*) &lv_obj_set_style_max_width, "", "(lv.lv_obj)ii" },
{ "set_style_min_height", (void*) &lv_obj_set_style_min_height, "", "(lv.lv_obj)ii" },
{ "set_style_min_width", (void*) &lv_obj_set_style_min_width, "", "(lv.lv_obj)ii" },
{ "set_style_opa", (void*) &lv_obj_set_style_opa, "", "(lv.lv_obj)ii" },
{ "set_style_outline_color", (void*) &lv_obj_set_style_outline_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_outline_color_filtered", (void*) &lv_obj_set_style_outline_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_outline_opa", (void*) &lv_obj_set_style_outline_opa, "", "(lv.lv_obj)ii" },
{ "set_style_outline_pad", (void*) &lv_obj_set_style_outline_pad, "", "(lv.lv_obj)ii" },
{ "set_style_outline_width", (void*) &lv_obj_set_style_outline_width, "", "(lv.lv_obj)ii" },
{ "set_style_pad_all", (void*) &lv_obj_set_style_pad_all, "", "(lv.lv_obj)ii" },
{ "set_style_pad_bottom", (void*) &lv_obj_set_style_pad_bottom, "", "(lv.lv_obj)ii" },
{ "set_style_pad_column", (void*) &lv_obj_set_style_pad_column, "", "(lv.lv_obj)ii" },
{ "set_style_pad_gap", (void*) &lv_obj_set_style_pad_gap, "", "(lv.lv_obj)ii" },
{ "set_style_pad_hor", (void*) &lv_obj_set_style_pad_hor, "", "(lv.lv_obj)ii" },
{ "set_style_pad_left", (void*) &lv_obj_set_style_pad_left, "", "(lv.lv_obj)ii" },
{ "set_style_pad_right", (void*) &lv_obj_set_style_pad_right, "", "(lv.lv_obj)ii" },
{ "set_style_pad_row", (void*) &lv_obj_set_style_pad_row, "", "(lv.lv_obj)ii" },
{ "set_style_pad_top", (void*) &lv_obj_set_style_pad_top, "", "(lv.lv_obj)ii" },
{ "set_style_pad_ver", (void*) &lv_obj_set_style_pad_ver, "", "(lv.lv_obj)ii" },
{ "set_style_radius", (void*) &lv_obj_set_style_radius, "", "(lv.lv_obj)ii" },
{ "set_style_shadow_color", (void*) &lv_obj_set_style_shadow_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_shadow_color_filtered", (void*) &lv_obj_set_style_shadow_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_shadow_ofs_x", (void*) &lv_obj_set_style_shadow_ofs_x, "", "(lv.lv_obj)ii" },
{ "set_style_shadow_ofs_y", (void*) &lv_obj_set_style_shadow_ofs_y, "", "(lv.lv_obj)ii" },
{ "set_style_shadow_opa", (void*) &lv_obj_set_style_shadow_opa, "", "(lv.lv_obj)ii" },
{ "set_style_shadow_spread", (void*) &lv_obj_set_style_shadow_spread, "", "(lv.lv_obj)ii" },
{ "set_style_shadow_width", (void*) &lv_obj_set_style_shadow_width, "", "(lv.lv_obj)ii" },
{ "set_style_size", (void*) &lv_obj_set_style_size, "", "(lv.lv_obj)ii" },
{ "set_style_text_align", (void*) &lv_obj_set_style_text_align, "", "(lv.lv_obj)ii" },
{ "set_style_text_color", (void*) &lv_obj_set_style_text_color, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_text_color_filtered", (void*) &lv_obj_set_style_text_color_filtered, "", "(lv.lv_obj)(lv.lv_color)i" },
{ "set_style_text_decor", (void*) &lv_obj_set_style_text_decor, "", "(lv.lv_obj)ii" },
{ "set_style_text_font", (void*) &lv_obj_set_style_text_font, "", "(lv.lv_obj)(lv.lv_font)i" },
{ "set_style_text_letter_space", (void*) &lv_obj_set_style_text_letter_space, "", "(lv.lv_obj)ii" },
{ "set_style_text_line_space", (void*) &lv_obj_set_style_text_line_space, "", "(lv.lv_obj)ii" },
{ "set_style_text_opa", (void*) &lv_obj_set_style_text_opa, "", "(lv.lv_obj)ii" },
{ "set_style_transform_angle", (void*) &lv_obj_set_style_transform_angle, "", "(lv.lv_obj)ii" },
{ "set_style_transform_height", (void*) &lv_obj_set_style_transform_height, "", "(lv.lv_obj)ii" },
{ "set_style_transform_width", (void*) &lv_obj_set_style_transform_width, "", "(lv.lv_obj)ii" },
{ "set_style_transform_zoom", (void*) &lv_obj_set_style_transform_zoom, "", "(lv.lv_obj)ii" },
{ "set_style_transition", (void*) &lv_obj_set_style_transition, "", "(lv.lv_obj)(lv.lv_style_transition_dsc)i" },
{ "set_style_translate_x", (void*) &lv_obj_set_style_translate_x, "", "(lv.lv_obj)ii" },
{ "set_style_translate_y", (void*) &lv_obj_set_style_translate_y, "", "(lv.lv_obj)ii" },
{ "set_style_width", (void*) &lv_obj_set_style_width, "", "(lv.lv_obj)ii" },
{ "set_style_x", (void*) &lv_obj_set_style_x, "", "(lv.lv_obj)ii" },
{ "set_style_y", (void*) &lv_obj_set_style_y, "", "(lv.lv_obj)ii" },
{ "set_user_data", (void*) &lv_obj_set_user_data, "", "(lv.lv_obj)." },
{ "set_width", (void*) &lv_obj_set_width, "", "(lv.lv_obj)i" },
{ "set_x", (void*) &lv_obj_set_x, "", "(lv.lv_obj)i" },
@ -592,6 +615,12 @@ const lvbe_call_c_t lv_spinbox_func[] = {
};
#endif // BE_LV_WIDGET_SPINBOX
/* `lv_spinner` methods */
#ifdef BE_LV_WIDGET_SPINNER
const lvbe_call_c_t lv_spinner_func[] = {
};
#endif // BE_LV_WIDGET_SPINNER
/* `lv_arc` methods */
#ifdef BE_LV_WIDGET_ARC
const lvbe_call_c_t lv_arc_func[] = {
@ -847,6 +876,7 @@ extern const bclass be_class_lv_chart;
extern const bclass be_class_lv_checkbox;
extern const bclass be_class_lv_color;
extern const bclass be_class_lv_colorwheel;
extern const bclass be_class_lv_disp;
extern const bclass be_class_lv_dropdown;
extern const bclass be_class_lv_font;
extern const bclass be_class_lv_group;
@ -862,10 +892,12 @@ extern const bclass be_class_lv_obj;
extern const bclass be_class_lv_roller;
extern const bclass be_class_lv_slider;
extern const bclass be_class_lv_spinbox;
extern const bclass be_class_lv_spinner;
extern const bclass be_class_lv_style;
extern const bclass be_class_lv_switch;
extern const bclass be_class_lv_table;
extern const bclass be_class_lv_textarea;
extern const bclass be_class_lv_theme;
// map of clases
@ -895,6 +927,7 @@ const lvbe_call_c_classes_t lv_classes[] = {
#ifdef BE_LV_WIDGET_COLORWHEEL
{ "lv_colorwheel", &be_class_lv_colorwheel, lv_colorwheel_func, sizeof(lv_colorwheel_func) / sizeof(lv_colorwheel_func[0]) },
#endif // BE_LV_WIDGET_COLORWHEEL
{ "lv_disp", &be_class_lv_disp, lv_disp_func, sizeof(lv_disp_func) / sizeof(lv_disp_func[0]) },
#ifdef BE_LV_WIDGET_DROPDOWN
{ "lv_dropdown", &be_class_lv_dropdown, lv_dropdown_func, sizeof(lv_dropdown_func) / sizeof(lv_dropdown_func[0]) },
#endif // BE_LV_WIDGET_DROPDOWN
@ -932,6 +965,9 @@ const lvbe_call_c_classes_t lv_classes[] = {
#ifdef BE_LV_WIDGET_SPINBOX
{ "lv_spinbox", &be_class_lv_spinbox, lv_spinbox_func, sizeof(lv_spinbox_func) / sizeof(lv_spinbox_func[0]) },
#endif // BE_LV_WIDGET_SPINBOX
#ifdef BE_LV_WIDGET_SPINNER
{ "lv_spinner", &be_class_lv_spinner, lv_spinner_func, sizeof(lv_spinner_func) / sizeof(lv_spinner_func[0]) },
#endif // BE_LV_WIDGET_SPINNER
{ "lv_style", &be_class_lv_style, lv_style_func, sizeof(lv_style_func) / sizeof(lv_style_func[0]) },
#ifdef BE_LV_WIDGET_SWITCH
{ "lv_switch", &be_class_lv_switch, lv_switch_func, sizeof(lv_switch_func) / sizeof(lv_switch_func[0]) },
@ -942,16 +978,19 @@ const lvbe_call_c_classes_t lv_classes[] = {
#ifdef BE_LV_WIDGET_TEXTAREA
{ "lv_textarea", &be_class_lv_textarea, lv_textarea_func, sizeof(lv_textarea_func) / sizeof(lv_textarea_func[0]) },
#endif // BE_LV_WIDGET_TEXTAREA
{ "lv_theme", &be_class_lv_theme, lv_theme_func, sizeof(lv_theme_func) / sizeof(lv_theme_func[0]) },
};
const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]);
/* `lv_style` methods */
/* `lv_font` methods */
/* `lv_color` methods */
/* `lv_theme` methods */
/* `lv_img` methods */
#ifdef BE_LV_WIDGET_IMG
int be_ntv_lv_img_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_create, "+lv.lv_img", "(lv.lv_obj)"); }
#endif // BE_LV_WIDGET_IMG
/* `lv_disp` methods */
/* `lv_obj` methods */
int be_ntv_lv_obj_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_create, "+lv.lv_obj", "(lv.lv_obj)"); }
/* `lv_group` methods */
@ -985,6 +1024,10 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]);
#ifdef BE_LV_WIDGET_SPINBOX
int be_ntv_lv_spinbox_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_create, "+lv.lv_spinbox", "(lv.lv_obj)"); }
#endif // BE_LV_WIDGET_SPINBOX
/* `lv_spinner` methods */
#ifdef BE_LV_WIDGET_SPINNER
int be_ntv_lv_spinner_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+lv.lv_spinner", "(lv.lv_obj)ii"); }
#endif // BE_LV_WIDGET_SPINNER
/* `lv_arc` methods */
#ifdef BE_LV_WIDGET_ARC
int be_ntv_lv_arc_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_create, "+lv.lv_arc", "(lv.lv_obj)"); }
@ -1043,7 +1086,8 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]);
#endif // BE_LV_WIDGET_TEXTAREA
// create font either empty or from parameter on stack
int lvbe_font_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_group", ""); }
int lvbe_font_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_font", ""); }
int lvbe_theme_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_theme", ""); }
#ifdef __cplusplus

View File

@ -138,7 +138,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
*-----------*/
/*Enable the log module*/
#define LV_USE_LOG 1
#define LV_USE_LOG 0
#if LV_USE_LOG
/*How important log should be added:
@ -148,7 +148,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
*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_ERROR
# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
/*1: Print the log with 'printf';
*0: User need to register a callback with `lv_log_register_print_cb()`*/
@ -310,6 +310,33 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
LV_FONT_DECLARE(seg7_28) \
LV_FONT_DECLARE(seg7_36) \
LV_FONT_DECLARE(seg7_48) \
LV_FONT_DECLARE(robotocondensed_regular_12_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_14_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_16_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_20_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_22_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_24_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_28_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_32_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_36_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_38_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_40_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_44_latin1) \
LV_FONT_DECLARE(robotocondensed_regular_48_latin1) \
#define ROBOTOCONDENSED_REGULAR_12_LATIN1 1
#define ROBOTOCONDENSED_REGULAR_14_LATIN1 1
#define ROBOTOCONDENSED_REGULAR_16_LATIN1 1
#define ROBOTOCONDENSED_REGULAR_20_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_22_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_24_LATIN1 1
#define ROBOTOCONDENSED_REGULAR_28_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_32_LATIN1 1
#define ROBOTOCONDENSED_REGULAR_36_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_38_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_40_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_44_LATIN1 0
#define ROBOTOCONDENSED_REGULAR_48_LATIN1 0
/*Always set a default font*/
#define LV_FONT_DEFAULT &lv_font_montserrat_14

View File

@ -1,524 +0,0 @@
/**
* @file lv_conf.h
* Configuration file for v8.0.2
*/
/*
* COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER
*/
#if 0 /*Set it to "1" to enable content*/
#ifndef LV_CONF_H
#define LV_CONF_H
/*clang-format off*/
#include <stdint.h>
/*====================
COLOR SETTINGS
*====================*/
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 16
/*Swap the 2 bytes of RGB565 color. Useful if the display has a 8 bit interface (e.g. SPI)*/
#define LV_COLOR_16_SWAP 1
/*Enable more complex drawing routines to manage screens transparency.
*Can be used if the UI is above another layer, e.g. an OSD menu or video player.
*Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to non LV_OPA_COVER value*/
#define LV_COLOR_SCREEN_TRANSP 0
/*Images pixels with this color will not be drawn if they are chroma keyed)*/
#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/
/*=========================
MEMORY SETTINGS
*=========================*/
/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/
#define LV_MEM_CUSTOM 1
#if LV_MEM_CUSTOM == 0
/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
# define LV_MEM_SIZE (32U * 1024U) /*[bytes]*/
/*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*/
#else /*LV_MEM_CUSTOM*/
# define LV_MEM_CUSTOM_INCLUDE <tasmota_lv_stdlib.h> /*Header for the dynamic memory function*/
# define LV_MEM_CUSTOM_ALLOC lvbe_malloc
# define LV_MEM_CUSTOM_FREE lvbe_free
# define LV_MEM_CUSTOM_REALLOC lvbe_realloc
#endif /*LV_MEM_CUSTOM*/
/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/
#define LV_MEMCPY_MEMSET_STD 0
/*====================
HAL SETTINGS
*====================*/
/*Default display refresh period. LVG will redraw changed ares with this period time*/
#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/
/*Input device read period in milliseconds*/
#define LV_INDEV_DEF_READ_PERIOD 30 /*[ms]*/
/*Use a custom tick source that tells the elapsed time in milliseconds.
*It removes the need to manually update the tick with `lv_tick_inc()`)*/
#define LV_TICK_CUSTOM 0
#if LV_TICK_CUSTOM
#define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/
#endif /*LV_TICK_CUSTOM*/
/*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]*/
/*=======================
* FEATURE CONFIGURATION
*=======================*/
/*-------------
* Drawing
*-----------*/
/*Enable complex draw engine.
*Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/
#define LV_DRAW_COMPLEX 1
#if LV_DRAW_COMPLEX != 0
/*Allow buffering some shadow calculation.
*LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius`
*Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/
#define LV_SHADOW_CACHE_SIZE 0
#endif /*LV_DRAW_COMPLEX*/
/*Default image cache size. Image caching keeps the images opened.
*If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added)
*With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images.
*However the opened images might consume additional RAM.
*0: to disable caching*/
#define LV_IMG_CACHE_DEF_SIZE 1
#define LV_IMG_CACHE_DEF_SIZE_PSRAM 20 // special Tasmota setting when PSRAM is used
/*Maximum buffer size to allocate for rotation. Only used if software rotation is enabled in the display driver.*/
#define LV_DISP_ROT_MAX_BUF (10*1024)
/*-------------
* GPU
*-----------*/
/*Use STM32's DMA2D (aka Chrom Art) GPU*/
#define LV_USE_GPU_STM32_DMA2D 0
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor
e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
#define LV_GPU_DMA2D_CMSIS_INCLUDE
#endif
/*Use NXP's PXP GPU iMX RTxxx platforms*/
#define LV_USE_GPU_NXP_PXP 0
#if LV_USE_GPU_NXP_PXP
/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c)
* and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS
* has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected.
*0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init()
*/
#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0
#endif
/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/
#define LV_USE_GPU_NXP_VG_LITE 0
/*-------------
* 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_ERROR
/*1: Print the log with 'printf';
*0: User need to register a callback with `lv_log_register_print_cb()`*/
# define LV_LOG_PRINTF 0
/*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
#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 <stdint.h>
#define LV_ASSERT_HANDLER while(1); /*Halt by default*/
/*-------------
* Others
*-----------*/
/*1: Show CPU usage and FPS count in the right bottom corner*/
#define LV_USE_PERF_MONITOR 0
/*1: Show the used memory and the memory fragmentation in the left bottom corner
* Requires LV_MEM_CUSTOM = 0*/
#define LV_USE_MEM_MONITOR 0
/*1: Draw random colored rectangles over the redrawn areas*/
#define LV_USE_REFR_DEBUG 0
/*Change the built in (v)snprintf functions*/
#define LV_SPRINTF_CUSTOM 0
#if LV_SPRINTF_CUSTOM
# define LV_SPRINTF_INCLUDE <stdio.h>
# define lv_snprintf snprintf
# define lv_vsnprintf vsnprintf
#else /*LV_SPRINTF_CUSTOM*/
# define LV_SPRINTF_USE_FLOAT 0
#endif /*LV_SPRINTF_CUSTOM*/
#define LV_USE_USER_DATA 1
/*Garbage Collector settings
*Used if lvgl is binded to higher level language and the memory is managed by that language*/
#define LV_ENABLE_GC 0
#if LV_ENABLE_GC != 0
# define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/
#endif /*LV_ENABLE_GC*/
/*=====================
* 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_disp_flush_ready` function*/
#define LV_ATTRIBUTE_FLUSH_READY
/*Required alignment size for buffers*/
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE
/*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
/*Complier 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
/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/
#define LV_ATTRIBUTE_DMA
/*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> 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*/
/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/
#define LV_USE_LARGE_COORD 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 0
#define LV_FONT_MONTSERRAT_10 1
#define LV_FONT_MONTSERRAT_12 0
#define LV_FONT_MONTSERRAT_14 1
#define LV_FONT_MONTSERRAT_16 0
#define LV_FONT_MONTSERRAT_18 0
#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_12_SUBPX 0
#define LV_FONT_MONTSERRAT_28_COMPRESSED 1 /*bpp = 3*/
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Perisan letters and all their forms*/
#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/
/*Pixel perfect monospace fonts*/
#define LV_FONT_UNSCII_8 1
#define LV_FONT_UNSCII_16 1
/*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)*/
// Tasmota specific
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(seg7_8) \
LV_FONT_DECLARE(seg7_10) \
LV_FONT_DECLARE(seg7_12) \
LV_FONT_DECLARE(seg7_14) \
LV_FONT_DECLARE(seg7_16) \
LV_FONT_DECLARE(seg7_18) \
LV_FONT_DECLARE(seg7_20) \
LV_FONT_DECLARE(seg7_24) \
LV_FONT_DECLARE(seg7_28) \
LV_FONT_DECLARE(seg7_36) \
LV_FONT_DECLARE(seg7_48) \
/*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 1
/*Enable subpixel rendering*/
#define LV_USE_FONT_SUBPX 1
#if LV_USE_FONT_SUBPX
/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/
#define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/
#endif
/*=================
* 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
/*The control character to use for signalling text recoloring.*/
#define LV_TXT_COLOR_CMD "#"
/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts.
*The direction will be processed according to the Unicode Bidirectioanl 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 an other form based on their position in the text*/
#define LV_USE_ARABIC_PERSIAN_CHARS 0
/*==================
* WIDGET USAGE
*================*/
/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/
#define LV_USE_ARC 1
#define LV_USE_ANIMIMG 1
#define LV_USE_BAR 1
#define LV_USE_BTN 1
#define LV_USE_BTNMATRIX 1
#define LV_USE_CANVAS 1
#define LV_USE_CHECKBOX 1
#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/
#define LV_USE_IMG 1 /*Requires: lv_label*/
#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*/
#endif
#define LV_USE_LINE 1
#define LV_USE_ROLLER 1 /*Requires: lv_label*/
#if LV_USE_ROLLER
# define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/
#endif
#define LV_USE_SLIDER 1 /*Requires: lv_bar*/
#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
/*==================
* EXTRA COMPONENTS
*==================*/
/*-----------
* Widgets
*----------*/
#define LV_USE_CALENDAR 0
#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
#endif /*LV_USE_CALENDAR*/
#define LV_USE_CHART 1
#define LV_USE_COLORWHEEL 1
#define LV_USE_IMGBTN 1
#define LV_USE_KEYBOARD 0
#define LV_USE_LED 1
#define LV_USE_LIST 1
#define LV_USE_METER 1
#define LV_USE_MSGBOX 1
#define LV_USE_SPINBOX 1
#define LV_USE_SPINNER 1
#define LV_USE_TABVIEW 1
#define LV_USE_TILEVIEW 1
#define LV_USE_WIN 0
#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
/*-----------
* 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_TRANSITON_TIME 80
#endif /*LV_USE_THEME_DEFAULT*/
/*An very simple them that is a good starting point for a custom theme*/
#define LV_USE_THEME_BASIC 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
/*==================
* EXAMPLES
*==================*/
/*Enable the examples to be built with the library*/
#define LV_BUILD_EXAMPLES 0
/*--END OF LV_CONF_H--*/
#endif /*LV_CONF_H*/
#endif /*End of "Content enable"*/

View File

@ -1005,6 +1005,7 @@
// -- LVGL Graphics Library ---------------------------------
//#define USE_LVGL // LVGL Engine, requires Berry (+382KB)
#define USE_LVGL_PSRAM // Allocate LVGL memory in PSRAM if PSRAM is connected - this might be slightly slower but leaves main memory intact
#define USE_LVGL_OPENHASP // Enable OpenHASP template compatiblity (adds LVGL template and some fonts)
#define USE_LVGL_MAX_SLEEP 10 // max sleep in ms when LVGL is enabled, more than 10ms will make display less responsive
#define USE_LVGL_PNG_DECODER // include a PNG image decoder from file system (+16KB)
//#define USE_LVGL_FREETYPE // Use the FreeType renderer to display fonts using native TTF files in file system (+77KB flash)
@ -1039,6 +1040,7 @@
#define BE_LV_WIDGET_METER
#define BE_LV_WIDGET_MSGBOX
#define BE_LV_WIDGET_SPINBOX
#define BE_LV_WIDGET_SPINNER
#endif // ESP32

View File

@ -1883,7 +1883,7 @@ void HandleMqttConfiguration(void)
SettingsText(SET_MQTT_HOST),
Settings->mqtt_port,
#ifdef USE_MQTT_TLS
Mqtt.mqtt_tls ? PSTR(" checked") : "", // SetOption102 - Enable MQTT TLS
Mqtt.mqtt_tls ? PSTR(" checked") : "", // SetOption103 - Enable MQTT TLS
#endif // USE_MQTT_TLS
Format(str, PSTR(MQTT_CLIENT_ID), sizeof(str)), PSTR(MQTT_CLIENT_ID), SettingsText(SET_MQTT_CLIENT));
WSContentSend_P(HTTP_FORM_MQTT2,
@ -1905,8 +1905,8 @@ void MqttSaveSettings(void) {
cmnd += AddWebCommand(PSTR(D_CMND_TOPIC), PSTR("mt"), PSTR("1"));
cmnd += AddWebCommand(PSTR(D_CMND_FULLTOPIC), PSTR("mf"), PSTR("1"));
#ifdef USE_MQTT_TLS
cmnd += F(";" D_CMND_SO "102 ");
cmnd += Webserver->hasArg(F("b3")); // SetOption102 - Enable MQTT TLS
cmnd += F(";" D_CMND_SO "103 ");
cmnd += Webserver->hasArg(F("b3")); // SetOption103 - Enable MQTT TLS
#endif
ExecuteWebCommand((char*)cmnd.c_str());
}

View File

@ -163,7 +163,6 @@ void Script_ticker4_end(void) {
#if defined(USE_SML_M) && defined (USE_SML_SCRIPT_CMD)
extern uint8_t sml_json_enable;
extern uint8_t dvalid[SML_MAX_VARS];
#endif
#if defined(EEP_SCRIPT_SIZE) && !defined(ESP32)
@ -3171,15 +3170,7 @@ chknext:
}
if (!strncmp(vname, "smlv[", 5)) {
lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv);
if (!fvar) {
for (uint8_t cnt = 0; cnt < SML_MAX_VARS; cnt++) {
dvalid[cnt] = 0;
}
fvar = 0;
} else {
if (fvar < 1) fvar = 1;
fvar = dvalid[(uint32_t)fvar - 1];
}
fvar = sml_getv(fvar);
lp++;
len = 0;
goto exit;
@ -5457,7 +5448,7 @@ void ScriptSaveSettings(void) {
//
uint32_t script_compress(char *dest, uint32_t size) {
//AddLog(LOG_LEVEL_INFO,PSTR("in string: %s len = %d"),glob_script_mem.script_ram,strlen(glob_script_mem.script_ram));
uint32_t len_compressed = SCRIPT_COMPRESS(glob_script_mem.script_ram, strlen(glob_script_mem.script_ram), dest, size);
int32_t len_compressed = SCRIPT_COMPRESS(glob_script_mem.script_ram, strlen(glob_script_mem.script_ram), dest, size);
if (len_compressed > 0) {
dest[len_compressed] = 0;
AddLog(LOG_LEVEL_INFO,PSTR("script compressed to %d bytes = %d %%"),len_compressed,len_compressed * 100 / strlen(glob_script_mem.script_ram));
@ -8047,6 +8038,8 @@ int32_t lvgl_test(char **lpp, int32_t p) {
lv_obj_t *obj;
lv_obj_t *label;
float xp, yp, xs, ys, min, max;
lv_meter_scale_t * scale;
lv_meter_indicator_t * indic;
char str[SCRIPT_MAXSSIZE];
int32_t res = 0;
@ -8119,6 +8112,10 @@ int32_t lvgl_test(char **lpp, int32_t p) {
obj = lv_meter_create(lv_scr_act());
lv_obj_set_pos(obj, xp, yp);
lv_obj_set_size(obj, xs, ys);
scale = lv_meter_add_scale(obj);
/*Add a needle line indicator*/
indic = lv_meter_add_needle_line(obj, scale, 4, lv_palette_main(LV_PALETTE_GREY), -10);
// lv_gauge_set_range(obj, min, max); // TODO LVGL8
lvgl_StoreObj(obj);
break;
@ -8234,6 +8231,7 @@ void lvgl_setup(void) {
lv_style_set_pad_right(&tab_background_style, 2);
lv_style_set_pad_bottom(&tab_background_style, 0);
// lv_obj_add_style(tabview, LV_TABVIEW_PART_TAB_BG, &tab_background_style); // LVGL8 TODO
//lv_tabview_add_tab(tabview, LV_TABVIEW_PART_TAB_BG, &tab_background_style); // LVGL8 TODO
// Style for tabs. Active tab is white with opaque background, inactive
// tabs are transparent so the background shows through (only the white

View File

@ -645,6 +645,70 @@ extern "C" {
be_raise(vm, kTypeError, nullptr);
}
int lv0_load_robotocondensed_latin1_font(bvm *vm) {
#ifdef USE_LVGL_OPENHASP
int argc = be_top(vm);
if (argc == 1 && be_isint(vm, 1)) {
const lv_font_t * font = nullptr;
int32_t font_size = be_toindex(vm, 1);
switch (font_size) {
#if ROBOTOCONDENSED_REGULAR_12_LATIN1
case 12: font = &robotocondensed_regular_12_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_14_LATIN1
case 14: font = &robotocondensed_regular_14_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_16_LATIN1
case 16: font = &robotocondensed_regular_16_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_20_LATIN1
case 20: font = &robotocondensed_regular_20_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_22_LATIN1
case 22: font = &robotocondensed_regular_22_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_24_LATIN1
case 24: font = &robotocondensed_regular_24_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_28_LATIN1
case 28: font = &robotocondensed_regular_28_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_32_LATIN1
case 32: font = &robotocondensed_regular_32_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_36_LATIN1
case 36: font = &robotocondensed_regular_36_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_38_LATIN1
case 38: font = &robotocondensed_regular_38_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_40_LATIN1
case 40: font = &robotocondensed_regular_40_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_44_LATIN1
case 44: font = &robotocondensed_regular_44_latin1; break;
#endif
#if ROBOTOCONDENSED_REGULAR_48_LATIN1
case 48: font = &robotocondensed_regular_48_latin1; break;
#endif
default: break;
}
if (font != nullptr) {
be_find_class(vm, "lv.lv_font");
be_pushcomptr(vm, (void*)font);
be_call(vm, 1);
be_pop(vm, 1);
be_return(vm);
} else {
be_return_nil(vm);
}
}
#endif // USE_LVGL_OPENHASP
be_raise(vm, kTypeError, nullptr);
}
#include "lvgl_berry/tasmota_logo_64_truecolor_alpha.h"
void lv_img_set_tasmota_logo(lv_obj_t * img) {

View File

@ -411,7 +411,7 @@ void start_lvgl(const char * uconfig) {
#ifdef USE_UFILESYS
// Add file system mapping
lv_fs_drv_t drv; // can be on heap, LVGL creates a copy
static lv_fs_drv_t drv; // LVGL8, needs to be static and not on stack
lv_fs_drv_init(&drv); /*Basic initialization*/
drv.letter = 'A'; /*An uppercase letter to identify the drive */

View File

@ -2620,6 +2620,18 @@ init10:
#ifdef USE_SML_SCRIPT_CMD
uint32_t sml_getv(uint32_t sel) {
if (!sel) {
for (uint8_t cnt = 0; cnt < SML_MAX_VARS; cnt++) {
dvalid[cnt] = 0;
}
sel = 0;
} else {
if (sel < 1) sel = 1;
sel = dvalid[sel - 1];
}
return sel;
}
uint32_t SML_SetBaud(uint32_t meter, uint32_t br) {
if (meter<1 || meter>meters_used) return 0;
meter--;

View File

@ -97,6 +97,7 @@ return_types = {
"lv_img_src_t": "i",
"lv_colorwheel_mode_t": "i",
"lv_scr_load_anim_t": "i",
"lv_style_selector_t": "i",
"_lv_event_dsc_t *": "i",
@ -117,6 +118,9 @@ return_types = {
"lv_style_t *": "lv_style",
"lv_group_t *": "lv_group",
"lv_font_t *": "lv_font",
"lv_theme_t *": "lv_theme",
"lv_disp_t *": "lv_disp",
"lv_indev_t *": "lv_indev",
#"lv_disp_t*": "lv_disp",
#"lv_style_list_t*": "",
@ -137,10 +141,11 @@ lv_cb_types = ['lv_group_focus_cb', 'lv_event_cb',
]
# list of callback types that will need each a separate C callback
# For LVGL8, need to add synthetic lv_style, lv_font, lv_color
# For LVGL8, need to add synthetic lv_style, lv_font, lv_color, lv_theme
lv['style'] = []
lv['font'] = []
lv['color'] = []
lv['theme'] = []
# standard widgets
lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'canvas', 'checkbox',
@ -148,8 +153,8 @@ lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'canvas', 'checkbox',
'switch', 'table', 'textarea' ]
# extra widgets
lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox' ]
lv_prefix = ['obj', 'group', 'style', 'indev', ] + lv_widgets
lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox', 'spinner' ]
lv_prefix = ['obj', 'group', 'style', 'indev', 'disp'] + lv_widgets
def try_int(s):
try:
@ -383,7 +388,8 @@ for subtype, flv in lv.items():
print("""
// create font either empty or from parameter on stack
int lvbe_font_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_group", ""); }
int lvbe_font_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_font", ""); }
int lvbe_theme_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_theme", ""); }
""")
print()
@ -425,6 +431,7 @@ extern int lvs_tostring(bvm *vm);
BE_EXPORT_VARIABLE extern const bclass be_class_lv_obj;
extern int lvbe_font_create(bvm *vm);
extern int lvbe_theme_create(bvm *vm);
""")
@ -521,6 +528,23 @@ be_local_class(lv_indev,
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_disp
********************************************************************/
be_local_class(lv_disp,
1,
NULL,
be_nested_map(4,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lv0_init) },
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lvx_tostring) },
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
{ be_nested_key("member", 719708611, 6, 0), be_const_func(lvx_member) },
})),
(be_nested_const_str("lv_disp", 609712084, 8))
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_font
********************************************************************/
@ -537,6 +561,22 @@ be_local_class(lv_font,
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_theme
********************************************************************/
be_local_class(lv_theme,
1,
NULL,
be_nested_map(3,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lvbe_theme_create) },
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lvx_tostring) },
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
})),
(be_nested_const_str("lv_theme", 1550958453, 7))
);
/*******************************************************************/
/********************************************************************
** Solidified class: lv_color
********************************************************************/
@ -603,6 +643,7 @@ print("""/********************************************************************
#include "lvgl.h"
#include "be_lvgl.h"
#include "lv_theme_openhasp.h"
extern int lv0_member(bvm *vm); // resolve virtual members
@ -612,6 +653,7 @@ extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder lo
extern int lv0_load_montserrat_font(bvm *vm);
extern int lv0_load_seg7_font(bvm *vm);
extern int lv0_load_robotocondensed_latin1_font(bvm *vm);
extern int lv0_load_font(bvm *vm);
extern int lv0_load_freetype_font(bvm *vm);
@ -721,7 +763,7 @@ be_local_module(lv,
{ be_nested_key("start", 1697318111, 5, 0), be_const_func(lv0_start) },
}))
);
BE_EXPORT_VARIABLE be_define_const_native_module(lv, NULL);
BE_EXPORT_VARIABLE be_define_const_native_module(lv);
#endif // USE_LVGL
""")

View File

@ -6,6 +6,9 @@ register_button_encoder=&lv0_register_button_encoder
montserrat_font=&lv0_load_montserrat_font
seg7_font=&lv0_load_seg7_font
font_montserrat=&lv0_load_montserrat_font
font_seg7=&lv0_load_seg7_font
font_robotocondensed_latin1=&lv0_load_robotocondensed_latin1_font
load_font=&lv0_load_font
load_freetype_font=&lv0_load_freetype_font

View File

@ -29,12 +29,26 @@ lv_coord_t lv_get_ver_res(void);
// ../../lib/libesp32_lvgl/LVGL8/src/core/lv_disp.h
lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp)
lv_obj_t * lv_disp_get_scr_prev(lv_disp_t * disp)
void lv_disp_load_scr(lv_obj_t * scr)
lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp)
lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp)
void lv_disp_set_theme(lv_disp_t * disp, lv_theme_t * th)
lv_theme_t * lv_disp_get_theme(lv_disp_t * disp)
void lv_disp_set_bg_color(lv_disp_t * disp, lv_color_t color)
void lv_disp_set_bg_image(lv_disp_t * disp, const void * img_src)
void lv_disp_set_bg_opa(lv_disp_t * disp, lv_opa_t opa)
void lv_scr_load_anim(lv_obj_t * scr, lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool auto_del)
uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp)
void lv_disp_trig_activity(lv_disp_t * disp)
void lv_disp_clean_dcache(lv_disp_t * disp)
static inline lv_obj_t * lv_scr_act(void)
static inline lv_obj_t * lv_layer_top(void)
static inline lv_obj_t * lv_layer_sys(void)
static inline void lv_scr_load(lv_obj_t * scr)
static inline lv_coord_t lv_dpx(lv_coord_t n)
static inline lv_coord_t lv_disp_dpx(const lv_disp_t * disp, lv_coord_t n)
// ../../lib/libesp32_lvgl/LVGL8/src/core/lv_event.h
lv_res_t lv_event_send(struct _lv_obj_t * obj, lv_event_code_t event_code, void * param)
@ -483,6 +497,10 @@ void lv_draw_polygon(const lv_point_t points[], uint16_t point_cnt, const lv_are
// ../../lib/libesp32_lvgl/LVGL8/src/draw/lv_img_decoder.h
// ../../lib/libesp32_lvgl/LVGL8/src/extra/themes/default/lv_theme_default.h
lv_theme_t * lv_theme_default_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
bool lv_theme_default_is_inited(void)
// ../../lib/libesp32_lvgl/LVGL8/src/extra/widgets/chart/lv_chart.h
lv_obj_t * lv_chart_create(lv_obj_t * parent)
void lv_chart_set_type(lv_obj_t * obj, lv_chart_type_t type)
@ -583,6 +601,9 @@ void lv_spinbox_step_prev(lv_obj_t * obj)
void lv_spinbox_increment(lv_obj_t * obj)
void lv_spinbox_decrement(lv_obj_t * obj)
// ../../lib/libesp32_lvgl/LVGL8/src/extra/widgets/spinner/lv_spinner.h
lv_obj_t * lv_spinner_create(lv_obj_t * parent, uint32_t time, uint32_t arc_length)
// ../../lib/libesp32_lvgl/LVGL8/src/misc/lv_style_gen.h
void lv_style_set_width(lv_style_t * style, lv_coord_t value)
void lv_style_set_min_width(lv_style_t * style, lv_coord_t value)
@ -899,3 +920,7 @@ void lv_textarea_cursor_left(lv_obj_t * obj)
void lv_textarea_cursor_down(lv_obj_t * obj)
void lv_textarea_cursor_up(lv_obj_t * obj)
// ../../lib/libesp32_lvgl/LVGL_assets/src/lv_theme_openhasp.h
lv_theme_t * lv_theme_openhasp_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
bool lv_theme_openhasp_is_inited(void)

View File

@ -59,6 +59,8 @@ lv_fun_globs = [
"extra/widgets/meter/*.h",
"extra/widgets/msgbox/*.h",
"extra/widgets/spinbox/*.h",
"extra/widgets/spinner/*.h",
"extra/themes/default/*.h",
"core/*.h",
"draw/*.h",
"misc/lv_style_gen.h",
@ -66,6 +68,7 @@ lv_fun_globs = [
#"**/*.h",
]
headers_names = list_files(lv_src_prefix, lv_fun_globs)
headers_names += list_files("../../lib/libesp32_lvgl/LVGL_assets/src/", ["lv_theme_openhasp.h"])
# headers_names += ["lv_pre_style.h"] # for LVGL v7, add pre-generated style functions from C preprocessor
# unit test
@ -143,7 +146,7 @@ for header_name in headers_names:
"^lv_templ_",
"^lv_imgbtn_get_src_", # LV_IMGBTN_TILED == 0
"^lv_imgbtn_set_src_tiled",# !LV_IMGBTN_TILED
"^lv_disp_",
#"^lv_disp_",
"^lv_refr_get_fps_", # no LV_USE_PERF_MONITOR
"^lv_img_cache_",
"^lv_img_decoder_",
@ -179,6 +182,9 @@ register_button_encoder=&lv0_register_button_encoder
montserrat_font=&lv0_load_montserrat_font
seg7_font=&lv0_load_seg7_font
font_montserrat=&lv0_load_montserrat_font
font_seg7=&lv0_load_seg7_font
font_robotocondensed_latin1=&lv0_load_robotocondensed_latin1_font
load_font=&lv0_load_font
load_freetype_font=&lv0_load_freetype_font